From 119014f86d2eeceb64e9aea2b40f47e8fb7bc5d7 Mon Sep 17 00:00:00 2001 From: martmull Date: Fri, 3 Apr 2026 14:44:03 +0200 Subject: [PATCH] Improve apps (#19256) - simplify the base application template - remove --exhaustive option and replace by a --example option like in next.js https://nextjs.org/docs/app/api-reference/cli - Fix some bugs and logs - add a post-card app in twenty-apps/examples/ --- ...aml => ci-create-app-e2e-hello-world.yaml} | 26 +- .../workflows/ci-create-app-e2e-minimal.yaml | 186 + .../workflows/ci-create-app-e2e-postcard.yaml | 204 + packages/create-twenty-app/README.md | 27 +- packages/create-twenty-app/src/cli.ts | 27 +- .../template}/.github/workflows/ci.yml | 0 .../{base-application => template}/.nvmrc | 0 .../.oxlintrc.json | 0 .../.yarnrc.yml | 0 .../src/constants/template/AGENT.md | 14 + .../src/constants/template/CLAUDE.md | 14 + .../{base-application => template}/LLMS.md | 4 +- .../{base-application => template}/README.md | 2 +- .../src/constants/template/gitignore} | 0 .../src/constants/template/package.json | 35 + .../__tests__/app-install.integration-test.ts | 70 + .../template/src/__tests__/setup-test.ts | 45 + .../template/src/application-config.ts | 15 + .../src/constants/universal-identifiers.ts | 4 + .../constants/template/src/default-role.ts | 16 + .../tsconfig.json | 5 + .../src/constants/template/tsconfig.spec.json | 9 + .../src/constants/template/vitest.config.ts | 21 + .../src/constants/template/yarn.lock | 2 + .../src/create-app.command.ts | 123 +- .../src/types/scaffolding-options.ts | 13 - .../src/utils/__tests__/app-template.spec.ts | 978 +--- .../src/utils/__tests__/test-template.spec.ts | 177 - .../src/utils/app-template.ts | 804 +-- .../src/utils/download-example.ts | 179 + .../src/utils/test-template.ts | 279 - packages/create-twenty-app/tsconfig.json | 6 +- packages/create-twenty-app/tsconfig.lib.json | 5 +- packages/create-twenty-app/vite.config.ts | 4 +- .../community/apollo-enrich/LLMS.md | 2 +- .../hello-world/.github/workflows/ci.yml | 42 + .../examples/hello-world/.gitignore | 38 + .../{ => examples}/hello-world/.nvmrc | 0 .../hello-world}/.oxlintrc.json | 0 .../{ => examples}/hello-world/.yarnrc.yml | 0 .../{ => examples}/hello-world/LLMS.md | 4 +- .../{ => examples}/hello-world/README.md | 0 .../{ => examples}/hello-world/package.json | 6 +- .../__tests__/app-install.integration-test.ts | 0 .../hello-world/src/__tests__/setup-test.ts | 0 .../hello-world/src/agents/example-agent.ts | 0 .../hello-world/src/application-config.ts | 0 .../hello-world/src/fields/example-field.ts | 0 .../src/front-components/hello-world.tsx | 0 .../create-hello-world-company.ts | 0 .../src/logic-functions/hello-world.ts | 0 .../src/logic-functions/post-install.ts | 0 .../src/logic-functions/pre-install.ts | 0 .../example-navigation-menu-item.ts | 0 .../hello-world/src/objects/example-object.ts | 0 .../example-record-page-layout.ts | 0 .../hello-world/src/roles/default-role.ts | 0 .../hello-world/src/skills/example-skill.ts | 0 .../hello-world/src/views/example-view.ts | 0 .../{ => examples}/hello-world/tsconfig.json | 0 .../hello-world/tsconfig.spec.json | 0 .../hello-world/vitest.config.ts | 0 .../{ => examples}/hello-world/yarn.lock | 0 .../postcard/.github/workflows/ci.yml | 42 + .../twenty-apps/examples/postcard/.gitignore | 38 + packages/twenty-apps/examples/postcard/.nvmrc | 1 + .../postcard}/.oxlintrc.json | 0 .../twenty-apps/examples/postcard/.yarnrc.yml | 1 + .../twenty-apps/examples/postcard/AGENT.md | 14 + .../twenty-apps/examples/postcard/CLAUDE.md | 14 + .../twenty-apps/examples/postcard/LLMS.md | 14 + .../twenty-apps/examples/postcard/README.md | 42 + .../examples/postcard/package.json | 35 + .../postcard}/public/favicon.png | Bin .../__tests__/app-install.integration-test.ts | 70 + .../postcard/src/__tests__/setup-test.ts | 45 + .../src/agents/postcard-drafter.agent.ts | 13 + .../postcard/src/application.config.ts | 33 + .../src/components/card.front-component.tsx | 189 + .../generate-post-card-component-effect.tsx | 125 + .../send-post-cards-component-effect.tsx | 102 + .../person-can-receive-postcards.field.ts | 18 + .../src/fields/post-cards-on-person.field.ts | 27 + .../fields/recipient-on-post-card.field.ts | 28 + .../post-cards.navigation-menu-item.ts | 0 .../postcard/src/objects/post-card.object.ts | 94 + .../post-card-record-page.page-layout.ts | 47 + .../src/roles/default-function.role.ts | 0 .../src/skills/postcard-writing.skill.ts | 15 + .../postcard/src/views/all-post-cards.view.ts | 56 + .../examples/postcard/tsconfig.json | 42 + .../examples/postcard/tsconfig.spec.json | 9 + .../examples/postcard/vitest.config.ts | 21 + .../twenty-apps/examples/postcard/yarn.lock | 4589 +++++++++++++++++ .../{postcard-app => rich-app}/.gitignore | 0 .../fixtures/rich-app/.oxlintrc.json | 19 + .../application.config.ts | 0 .../{postcard-app => rich-app}/package.json | 2 +- .../fixtures/rich-app/public/favicon.png | Bin 0 -> 570 bytes .../src/components/card.front-component.tsx | 0 .../components/greeting.front-component.tsx | 0 .../src/components/test.front-component.tsx | 0 .../company-can-receive-postcards.field.ts | 0 .../src/fields/post-card-category.field.ts | 0 .../src/fields/post-card-number.field.ts | 0 .../post-card-on-post-card-recipient.field.ts | 0 ...post-card-recipients-on-post-card.field.ts | 0 ...post-card-recipients-on-recipient.field.ts | 0 .../recipient-on-post-card-recipient.field.ts | 0 .../src/logic-functions/greeting.function.ts | 0 .../lookup-recipient.function.ts | 0 .../on-post-card-created.function.ts | 0 .../test-function-2.function.ts | 0 .../logic-functions/test-function.function.ts | 0 ...st-card-recipients.navigation-menu-item.ts | 0 .../post-cards.navigation-menu-item.ts | 10 + .../recipients.navigation-menu-item.ts | 0 .../src/objects/post-card-recipient.object.ts | 0 .../src/objects/post-card.object.ts | 0 .../src/objects/recipient.object.ts | 0 .../src/roles/default-function.role.ts | 40 + .../src/root.front-component.tsx | 0 .../src/root.function.ts | 0 .../src/root.object.ts | 0 .../src/root.role.ts | 0 .../src/utils/card-display.component.tsx | 0 .../src/utils/greeting.util.ts | 0 .../src/utils/test-function-2.util.ts | 0 .../views/all-post-card-recipients.view.ts | 0 .../src/views/all-post-cards.view.ts | 0 .../src/views/all-recipients.view.ts | 0 .../{postcard-app => rich-app}/tsconfig.json | 0 .../{postcard-app => rich-app}/yarn.lock | 0 .../internal/call-recording/LLMS.md | 4 +- .../my-twenty-app/.github/workflows/ci.yml | 42 + packages/twenty-apps/my-twenty-app/.gitignore | 38 + packages/twenty-apps/my-twenty-app/.nvmrc | 1 + .../twenty-apps/my-twenty-app/.oxlintrc.json | 19 + .../twenty-apps/my-twenty-app/.yarnrc.yml | 1 + packages/twenty-apps/my-twenty-app/AGENT.md | 14 + packages/twenty-apps/my-twenty-app/CLAUDE.md | 14 + packages/twenty-apps/my-twenty-app/LLMS.md | 14 + packages/twenty-apps/my-twenty-app/README.md | 11 + .../twenty-apps/my-twenty-app/package.json | 35 + .../__tests__/app-install.integration-test.ts | 70 + .../my-twenty-app/src/__tests__/setup-test.ts | 45 + .../my-twenty-app/src/application-config.ts | 15 + .../src/constants/universal-identifiers.ts | 4 + .../my-twenty-app/src/default-role.ts | 16 + .../twenty-apps/my-twenty-app/tsconfig.json | 42 + .../my-twenty-app/tsconfig.spec.json | 9 + .../my-twenty-app/vitest.config.ts | 21 + packages/twenty-apps/my-twenty-app/yarn.lock | 4589 +++++++++++++++++ .../src/core/generated/index.ts | 11 +- .../src/metadata/generated/schema.graphql | 2 + .../src/metadata/generated/schema.ts | 4 + .../src/metadata/generated/types.ts | 6 + .../developers/extend/apps/building.mdx | 227 +- .../extend/apps/getting-started.mdx | 268 +- .../developers/extend/capabilities/apps.mdx | 81 - .../docs/developers/extends/apps/dev.jpg | Bin 322381 -> 246652 bytes .../src/generated-metadata/graphql.ts | 14 +- .../graphql/fragments/applicationFragment.ts | 1 + .../SettingsApplicationDetails.tsx | 3 + .../tabs/SettingsApplicationsDeveloperTab.tsx | 2 +- .../src/cli/__tests__/apps/fixture-paths.ts | 2 +- ...tions-install-delete-reinstall.e2e-spec.ts | 8 +- .../__e2e__/health.e2e-spec.ts | 0 .../app-dev/app-dev.integration.spec.ts | 10 +- .../app-dev/expected-manifest.ts | 0 .../app-dev/tests/console-output.tests.ts | 0 .../app-dev/tests/entities.tests.ts | 0 .../app-dev/tests/manifest.tests.ts | 0 .../src/cli/commands/app-command.ts | 3 +- .../twenty-sdk/src/cli/operations/index.ts | 3 + .../__tests__/manifest-validate.spec.ts | 2 +- .../application-registration.entity.ts | 5 + .../application-registration-summary.dto.ts | 5 + 178 files changed, 12334 insertions(+), 2508 deletions(-) rename .github/workflows/{ci-create-app-e2e.yaml => ci-create-app-e2e-hello-world.yaml} (90%) create mode 100644 .github/workflows/ci-create-app-e2e-minimal.yaml create mode 100644 .github/workflows/ci-create-app-e2e-postcard.yaml rename packages/{twenty-apps/hello-world => create-twenty-app/src/constants/template}/.github/workflows/ci.yml (100%) rename packages/create-twenty-app/src/constants/{base-application => template}/.nvmrc (100%) rename packages/create-twenty-app/src/constants/{base-application => template}/.oxlintrc.json (100%) rename packages/create-twenty-app/src/constants/{base-application => template}/.yarnrc.yml (100%) create mode 100644 packages/create-twenty-app/src/constants/template/AGENT.md create mode 100644 packages/create-twenty-app/src/constants/template/CLAUDE.md rename packages/create-twenty-app/src/constants/{base-application => template}/LLMS.md (82%) rename packages/create-twenty-app/src/constants/{base-application => template}/README.md (93%) rename packages/{twenty-apps/hello-world/.gitignore => create-twenty-app/src/constants/template/gitignore} (100%) create mode 100644 packages/create-twenty-app/src/constants/template/package.json create mode 100644 packages/create-twenty-app/src/constants/template/src/__tests__/app-install.integration-test.ts create mode 100644 packages/create-twenty-app/src/constants/template/src/__tests__/setup-test.ts create mode 100644 packages/create-twenty-app/src/constants/template/src/application-config.ts create mode 100644 packages/create-twenty-app/src/constants/template/src/constants/universal-identifiers.ts create mode 100644 packages/create-twenty-app/src/constants/template/src/default-role.ts rename packages/create-twenty-app/src/constants/{base-application => template}/tsconfig.json (92%) create mode 100644 packages/create-twenty-app/src/constants/template/tsconfig.spec.json create mode 100644 packages/create-twenty-app/src/constants/template/vitest.config.ts create mode 100644 packages/create-twenty-app/src/constants/template/yarn.lock delete mode 100644 packages/create-twenty-app/src/types/scaffolding-options.ts delete mode 100644 packages/create-twenty-app/src/utils/__tests__/test-template.spec.ts create mode 100644 packages/create-twenty-app/src/utils/download-example.ts delete mode 100644 packages/create-twenty-app/src/utils/test-template.ts create mode 100644 packages/twenty-apps/examples/hello-world/.github/workflows/ci.yml create mode 100644 packages/twenty-apps/examples/hello-world/.gitignore rename packages/twenty-apps/{ => examples}/hello-world/.nvmrc (100%) rename packages/twenty-apps/{fixtures/postcard-app => examples/hello-world}/.oxlintrc.json (100%) rename packages/twenty-apps/{ => examples}/hello-world/.yarnrc.yml (100%) rename packages/twenty-apps/{ => examples}/hello-world/LLMS.md (82%) rename packages/twenty-apps/{ => examples}/hello-world/README.md (100%) rename packages/twenty-apps/{ => examples}/hello-world/package.json (91%) rename packages/twenty-apps/{ => examples}/hello-world/src/__tests__/app-install.integration-test.ts (100%) rename packages/twenty-apps/{ => examples}/hello-world/src/__tests__/setup-test.ts (100%) rename packages/twenty-apps/{ => examples}/hello-world/src/agents/example-agent.ts (100%) rename packages/twenty-apps/{ => examples}/hello-world/src/application-config.ts (100%) rename packages/twenty-apps/{ => examples}/hello-world/src/fields/example-field.ts (100%) rename packages/twenty-apps/{ => examples}/hello-world/src/front-components/hello-world.tsx (100%) rename packages/twenty-apps/{ => examples}/hello-world/src/logic-functions/create-hello-world-company.ts (100%) rename packages/twenty-apps/{ => examples}/hello-world/src/logic-functions/hello-world.ts (100%) rename packages/twenty-apps/{ => examples}/hello-world/src/logic-functions/post-install.ts (100%) rename packages/twenty-apps/{ => examples}/hello-world/src/logic-functions/pre-install.ts (100%) rename packages/twenty-apps/{ => examples}/hello-world/src/navigation-menu-items/example-navigation-menu-item.ts (100%) rename packages/twenty-apps/{ => examples}/hello-world/src/objects/example-object.ts (100%) rename packages/twenty-apps/{ => examples}/hello-world/src/page-layouts/example-record-page-layout.ts (100%) rename packages/twenty-apps/{ => examples}/hello-world/src/roles/default-role.ts (100%) rename packages/twenty-apps/{ => examples}/hello-world/src/skills/example-skill.ts (100%) rename packages/twenty-apps/{ => examples}/hello-world/src/views/example-view.ts (100%) rename packages/twenty-apps/{ => examples}/hello-world/tsconfig.json (100%) rename packages/twenty-apps/{ => examples}/hello-world/tsconfig.spec.json (100%) rename packages/twenty-apps/{ => examples}/hello-world/vitest.config.ts (100%) rename packages/twenty-apps/{ => examples}/hello-world/yarn.lock (100%) create mode 100644 packages/twenty-apps/examples/postcard/.github/workflows/ci.yml create mode 100644 packages/twenty-apps/examples/postcard/.gitignore create mode 100644 packages/twenty-apps/examples/postcard/.nvmrc rename packages/twenty-apps/{hello-world => examples/postcard}/.oxlintrc.json (100%) create mode 100644 packages/twenty-apps/examples/postcard/.yarnrc.yml create mode 100644 packages/twenty-apps/examples/postcard/AGENT.md create mode 100644 packages/twenty-apps/examples/postcard/CLAUDE.md create mode 100644 packages/twenty-apps/examples/postcard/LLMS.md create mode 100644 packages/twenty-apps/examples/postcard/README.md create mode 100644 packages/twenty-apps/examples/postcard/package.json rename packages/twenty-apps/{fixtures/postcard-app => examples/postcard}/public/favicon.png (100%) create mode 100644 packages/twenty-apps/examples/postcard/src/__tests__/app-install.integration-test.ts create mode 100644 packages/twenty-apps/examples/postcard/src/__tests__/setup-test.ts create mode 100644 packages/twenty-apps/examples/postcard/src/agents/postcard-drafter.agent.ts create mode 100644 packages/twenty-apps/examples/postcard/src/application.config.ts create mode 100644 packages/twenty-apps/examples/postcard/src/components/card.front-component.tsx create mode 100644 packages/twenty-apps/examples/postcard/src/components/generate-post-card-component-effect.tsx create mode 100644 packages/twenty-apps/examples/postcard/src/components/send-post-cards-component-effect.tsx create mode 100644 packages/twenty-apps/examples/postcard/src/fields/person-can-receive-postcards.field.ts create mode 100644 packages/twenty-apps/examples/postcard/src/fields/post-cards-on-person.field.ts create mode 100644 packages/twenty-apps/examples/postcard/src/fields/recipient-on-post-card.field.ts rename packages/twenty-apps/{fixtures/postcard-app => examples/postcard}/src/navigation-menu-items/post-cards.navigation-menu-item.ts (100%) create mode 100644 packages/twenty-apps/examples/postcard/src/objects/post-card.object.ts create mode 100644 packages/twenty-apps/examples/postcard/src/page-layouts/post-card-record-page.page-layout.ts rename packages/twenty-apps/{fixtures/postcard-app => examples/postcard}/src/roles/default-function.role.ts (100%) create mode 100644 packages/twenty-apps/examples/postcard/src/skills/postcard-writing.skill.ts create mode 100644 packages/twenty-apps/examples/postcard/src/views/all-post-cards.view.ts create mode 100644 packages/twenty-apps/examples/postcard/tsconfig.json create mode 100644 packages/twenty-apps/examples/postcard/tsconfig.spec.json create mode 100644 packages/twenty-apps/examples/postcard/vitest.config.ts create mode 100644 packages/twenty-apps/examples/postcard/yarn.lock rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/.gitignore (100%) create mode 100644 packages/twenty-apps/fixtures/rich-app/.oxlintrc.json rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/application.config.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/package.json (95%) create mode 100644 packages/twenty-apps/fixtures/rich-app/public/favicon.png rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/components/card.front-component.tsx (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/components/greeting.front-component.tsx (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/components/test.front-component.tsx (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/fields/company-can-receive-postcards.field.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/fields/post-card-category.field.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/fields/post-card-number.field.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/fields/post-card-on-post-card-recipient.field.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/fields/post-card-recipients-on-post-card.field.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/fields/post-card-recipients-on-recipient.field.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/fields/recipient-on-post-card-recipient.field.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/logic-functions/greeting.function.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/logic-functions/lookup-recipient.function.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/logic-functions/on-post-card-created.function.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/logic-functions/test-function-2.function.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/logic-functions/test-function.function.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/navigation-menu-items/post-card-recipients.navigation-menu-item.ts (100%) create mode 100644 packages/twenty-apps/fixtures/rich-app/src/navigation-menu-items/post-cards.navigation-menu-item.ts rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/navigation-menu-items/recipients.navigation-menu-item.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/objects/post-card-recipient.object.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/objects/post-card.object.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/objects/recipient.object.ts (100%) create mode 100644 packages/twenty-apps/fixtures/rich-app/src/roles/default-function.role.ts rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/root.front-component.tsx (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/root.function.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/root.object.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/root.role.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/utils/card-display.component.tsx (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/utils/greeting.util.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/utils/test-function-2.util.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/views/all-post-card-recipients.view.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/views/all-post-cards.view.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/src/views/all-recipients.view.ts (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/tsconfig.json (100%) rename packages/twenty-apps/fixtures/{postcard-app => rich-app}/yarn.lock (100%) create mode 100644 packages/twenty-apps/my-twenty-app/.github/workflows/ci.yml create mode 100644 packages/twenty-apps/my-twenty-app/.gitignore create mode 100644 packages/twenty-apps/my-twenty-app/.nvmrc create mode 100644 packages/twenty-apps/my-twenty-app/.oxlintrc.json create mode 100644 packages/twenty-apps/my-twenty-app/.yarnrc.yml create mode 100644 packages/twenty-apps/my-twenty-app/AGENT.md create mode 100644 packages/twenty-apps/my-twenty-app/CLAUDE.md create mode 100644 packages/twenty-apps/my-twenty-app/LLMS.md create mode 100644 packages/twenty-apps/my-twenty-app/README.md create mode 100644 packages/twenty-apps/my-twenty-app/package.json create mode 100644 packages/twenty-apps/my-twenty-app/src/__tests__/app-install.integration-test.ts create mode 100644 packages/twenty-apps/my-twenty-app/src/__tests__/setup-test.ts create mode 100644 packages/twenty-apps/my-twenty-app/src/application-config.ts create mode 100644 packages/twenty-apps/my-twenty-app/src/constants/universal-identifiers.ts create mode 100644 packages/twenty-apps/my-twenty-app/src/default-role.ts create mode 100644 packages/twenty-apps/my-twenty-app/tsconfig.json create mode 100644 packages/twenty-apps/my-twenty-app/tsconfig.spec.json create mode 100644 packages/twenty-apps/my-twenty-app/vitest.config.ts create mode 100644 packages/twenty-apps/my-twenty-app/yarn.lock delete mode 100644 packages/twenty-docs/developers/extend/capabilities/apps.mdx rename packages/twenty-sdk/src/cli/__tests__/apps/{postcard-app => rich-app}/__e2e__/applications-install-delete-reinstall.e2e-spec.ts (85%) rename packages/twenty-sdk/src/cli/__tests__/apps/{postcard-app => rich-app}/__e2e__/health.e2e-spec.ts (100%) rename packages/twenty-sdk/src/cli/__tests__/apps/{postcard-app => rich-app}/__integration__/app-dev/app-dev.integration.spec.ts (67%) rename packages/twenty-sdk/src/cli/__tests__/apps/{postcard-app => rich-app}/__integration__/app-dev/expected-manifest.ts (100%) rename packages/twenty-sdk/src/cli/__tests__/apps/{postcard-app => rich-app}/__integration__/app-dev/tests/console-output.tests.ts (100%) rename packages/twenty-sdk/src/cli/__tests__/apps/{postcard-app => rich-app}/__integration__/app-dev/tests/entities.tests.ts (100%) rename packages/twenty-sdk/src/cli/__tests__/apps/{postcard-app => rich-app}/__integration__/app-dev/tests/manifest.tests.ts (100%) diff --git a/.github/workflows/ci-create-app-e2e.yaml b/.github/workflows/ci-create-app-e2e-hello-world.yaml similarity index 90% rename from .github/workflows/ci-create-app-e2e.yaml rename to .github/workflows/ci-create-app-e2e-hello-world.yaml index 6a74cdbb68..baacff8902 100644 --- a/.github/workflows/ci-create-app-e2e.yaml +++ b/.github/workflows/ci-create-app-e2e-hello-world.yaml @@ -1,11 +1,13 @@ -name: CI Create App E2E +name: CI Hello world App E2E on: - push: - branches: - - main - - pull_request: + # Temporarily disabled — will be re-enabled when example apps are published. + # push: + # branches: + # - main + # + # pull_request: + workflow_dispatch: permissions: contents: read @@ -29,7 +31,7 @@ jobs: !packages/twenty-client-sdk/package.json !packages/twenty-shared/package.json !packages/twenty-server/package.json - create-app-e2e: + create-app-e2e-hello-world: needs: changed-files-check if: needs.changed-files-check.outputs.any_changed == 'true' timeout-minutes: 30 @@ -107,7 +109,7 @@ jobs: create-twenty-app --version mkdir -p /tmp/e2e-test-workspace cd /tmp/e2e-test-workspace - create-twenty-app test-app --exhaustive --display-name "Test App" --description "E2E test app" --skip-local-instance + create-twenty-app test-app --example hello-world --display-name "Test hello-world app" --description "E2E test hello-world app" --skip-local-instance - name: Install scaffolded app dependencies run: | @@ -115,6 +117,8 @@ jobs: echo 'npmRegistryServer: "http://localhost:4873"' >> .yarnrc.yml echo 'unsafeHttpWhitelist: ["localhost"]' >> .yarnrc.yml YARN_ENABLE_IMMUTABLE_INSTALLS=false yarn install --no-immutable + echo "--- Installing last SDK versions ---" + YARN_ENABLE_IMMUTABLE_INSTALLS=false yarn add twenty-sdk twenty-client-sdk - name: Verify installed app versions run: | @@ -122,7 +126,7 @@ jobs: echo "--- Checking package.json references correct SDK version ---" node -e " const pkg = require('./package.json'); - const sdkVersion = pkg.devDependencies['twenty-sdk']; + const sdkVersion = pkg.dependencies['twenty-sdk']; if (!sdkVersion.startsWith('0.0.0-ci.')) { console.error('Expected twenty-sdk version to start with 0.0.0-ci., got:', sdkVersion); process.exit(1); @@ -191,11 +195,11 @@ jobs: cd /tmp/e2e-test-workspace/test-app yarn test - ci-create-app-e2e-status-check: + ci-create-app-e2e-hello-world-status-check: if: always() && !cancelled() timeout-minutes: 5 runs-on: ubuntu-latest - needs: [changed-files-check, create-app-e2e] + needs: [changed-files-check, create-app-e2e-hello-world] steps: - name: Fail job if any needs failed if: contains(needs.*.result, 'failure') diff --git a/.github/workflows/ci-create-app-e2e-minimal.yaml b/.github/workflows/ci-create-app-e2e-minimal.yaml new file mode 100644 index 0000000000..cf03b338f2 --- /dev/null +++ b/.github/workflows/ci-create-app-e2e-minimal.yaml @@ -0,0 +1,186 @@ +name: CI Create App E2E minimal + +on: + push: + branches: + - main + + pull_request: + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +jobs: + changed-files-check: + uses: ./.github/workflows/changed-files.yaml + with: + files: | + packages/create-twenty-app/** + packages/twenty-sdk/** + packages/twenty-client-sdk/** + packages/twenty-shared/** + packages/twenty-server/** + !packages/create-twenty-app/package.json + !packages/twenty-sdk/package.json + !packages/twenty-client-sdk/package.json + !packages/twenty-shared/package.json + !packages/twenty-server/package.json + create-app-e2e-minimal: + needs: changed-files-check + if: needs.changed-files-check.outputs.any_changed == 'true' + timeout-minutes: 30 + runs-on: ubuntu-latest-4-cores + services: + postgres: + image: postgres:18 + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + redis: + image: redis + ports: + - 6379:6379 + env: + PUBLISHABLE_PACKAGES: twenty-client-sdk twenty-sdk create-twenty-app + steps: + - name: Fetch custom Github Actions and base branch history + uses: actions/checkout@v4 + with: + fetch-depth: 10 + + - name: Install dependencies + uses: ./.github/actions/yarn-install + + - name: Set CI version and prepare packages for publish + run: | + CI_VERSION="0.0.0-ci.$(date +%s)" + echo "CI_VERSION=$CI_VERSION" >> $GITHUB_ENV + npx nx run-many -t set-local-version -p $PUBLISHABLE_PACKAGES --releaseVersion=$CI_VERSION + + - name: Build packages + run: | + for pkg in $PUBLISHABLE_PACKAGES; do + npx nx build $pkg + done + + - name: Install and start Verdaccio + run: | + npx verdaccio --config .github/verdaccio-config.yaml & + + for i in $(seq 1 30); do + if curl -s http://localhost:4873 > /dev/null 2>&1; then + echo "Verdaccio is ready" + break + fi + echo "Waiting for Verdaccio... ($i/30)" + sleep 1 + done + + - name: Publish packages to local registry + run: | + yarn config set npmRegistryServer http://localhost:4873 + yarn config set unsafeHttpWhitelist --json '["localhost"]' + yarn config set npmAuthToken ci-auth-token + + for pkg in $PUBLISHABLE_PACKAGES; do + cd packages/$pkg + yarn npm publish --tag ci + cd ../.. + done + + - name: Scaffold app using published create-twenty-app + run: | + npm install -g create-twenty-app@$CI_VERSION --registry http://localhost:4873 + create-twenty-app --version + mkdir -p /tmp/e2e-test-workspace + cd /tmp/e2e-test-workspace + create-twenty-app test-app --display-name "Test scaffolded app" --description "E2E test scaffolded app" --skip-local-instance + + - name: Install scaffolded app dependencies + run: | + cd /tmp/e2e-test-workspace/test-app + echo 'npmRegistryServer: "http://localhost:4873"' >> .yarnrc.yml + echo 'unsafeHttpWhitelist: ["localhost"]' >> .yarnrc.yml + YARN_ENABLE_IMMUTABLE_INSTALLS=false yarn install --no-immutable + + - name: Verify installed app versions + run: | + cd /tmp/e2e-test-workspace/test-app + echo "--- Checking package.json references correct SDK version ---" + node -e " + const pkg = require('./package.json'); + const sdkVersion = pkg.dependencies['twenty-sdk']; + if (!sdkVersion.startsWith('0.0.0-ci.')) { + console.error('Expected twenty-sdk version to start with 0.0.0-ci., got:', sdkVersion); + process.exit(1); + } + console.log('SDK version in scaffolded app:', sdkVersion); + " + + - name: Verify SDK CLI is available + run: | + cd /tmp/e2e-test-workspace/test-app + npx --no-install twenty --version + + - name: Setup server environment + run: npx nx reset:env:e2e-testing-server twenty-server + + - name: Build server + run: npx nx build twenty-server + + - name: Create and setup database + run: | + PGPASSWORD=postgres psql -h localhost -p 5432 -U postgres -d postgres -c 'CREATE DATABASE "default";' + PGPASSWORD=postgres psql -h localhost -p 5432 -U postgres -d postgres -c 'CREATE DATABASE "test";' + npx nx run twenty-server:database:reset + + - name: Start server + run: | + npx nx start twenty-server & + echo "Waiting for server to be ready..." + timeout 60 bash -c 'until curl -s http://localhost:3000/health; do sleep 2; done' + + - name: Authenticate with twenty-server + env: + SEED_API_KEY: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ1c2VySWQiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ3b3Jrc3BhY2VJZCI6IjIwMjAyMDIwLTFjMjUtNGQwMi1iZjI1LTZhZWNjZjdlYTQxOSIsIndvcmtzcGFjZU1lbWJlcklkIjoiMjAyMDIwMjAtNDYzZi00MzViLTgyOGMtMTA3ZTAwN2EyNzExIiwidXNlcldvcmtzcGFjZUlkIjoiMjAyMDIwMjAtMWU3Yy00M2Q5LWE1ZGItNjg1YjUwNjlkODE2IiwidHlwZSI6IkFDQ0VTUyIsImF1dGhQcm92aWRlciI6InBhc3N3b3JkIiwiaWF0IjoxNzUxMjgxNzA0LCJleHAiOjIwNjY4NTc3MDR9.HMGqCsVlOAPVUBhKSGlD1X86VoHKt4LIUtET3CGIdik' + run: | + cd /tmp/e2e-test-workspace/test-app + npx --no-install twenty remote add --api-key $SEED_API_KEY --api-url http://localhost:3000 + + - name: Deploy scaffolded app + run: | + cd /tmp/e2e-test-workspace/test-app + npx --no-install twenty deploy + + - name: Install scaffolded app + run: | + cd /tmp/e2e-test-workspace/test-app + npx --no-install twenty install + + - name: Run scaffolded app integration test + env: + TWENTY_API_URL: http://localhost:3000 + run: | + cd /tmp/e2e-test-workspace/test-app + yarn test + + ci-create-app-e2e-minimal-status-check: + if: always() && !cancelled() + timeout-minutes: 5 + runs-on: ubuntu-latest + needs: [changed-files-check, create-app-e2e-minimal] + steps: + - name: Fail job if any needs failed + if: contains(needs.*.result, 'failure') + run: exit 1 diff --git a/.github/workflows/ci-create-app-e2e-postcard.yaml b/.github/workflows/ci-create-app-e2e-postcard.yaml new file mode 100644 index 0000000000..707faa1313 --- /dev/null +++ b/.github/workflows/ci-create-app-e2e-postcard.yaml @@ -0,0 +1,204 @@ +name: CI Postcard App E2E + +on: + # Temporarily disabled — will be re-enabled when example apps are published. + # push: + # branches: + # - main + # + # pull_request: + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +jobs: + changed-files-check: + uses: ./.github/workflows/changed-files.yaml + with: + files: | + packages/create-twenty-app/** + packages/twenty-sdk/** + packages/twenty-client-sdk/** + packages/twenty-shared/** + packages/twenty-server/** + !packages/create-twenty-app/package.json + !packages/twenty-sdk/package.json + !packages/twenty-client-sdk/package.json + !packages/twenty-shared/package.json + !packages/twenty-server/package.json + create-app-e2e-postcard: + needs: changed-files-check + if: needs.changed-files-check.outputs.any_changed == 'true' + timeout-minutes: 30 + runs-on: ubuntu-latest-4-cores + services: + postgres: + image: postgres:18 + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + redis: + image: redis + ports: + - 6379:6379 + env: + PUBLISHABLE_PACKAGES: twenty-client-sdk twenty-sdk create-twenty-app + steps: + - name: Fetch custom Github Actions and base branch history + uses: actions/checkout@v4 + with: + fetch-depth: 10 + + - name: Install dependencies + uses: ./.github/actions/yarn-install + + - name: Set CI version and prepare packages for publish + run: | + CI_VERSION="0.0.0-ci.$(date +%s)" + echo "CI_VERSION=$CI_VERSION" >> $GITHUB_ENV + npx nx run-many -t set-local-version -p $PUBLISHABLE_PACKAGES --releaseVersion=$CI_VERSION + + - name: Build packages + run: | + for pkg in $PUBLISHABLE_PACKAGES; do + npx nx build $pkg + done + + - name: Install and start Verdaccio + run: | + npx verdaccio --config .github/verdaccio-config.yaml & + + for i in $(seq 1 30); do + if curl -s http://localhost:4873 > /dev/null 2>&1; then + echo "Verdaccio is ready" + break + fi + echo "Waiting for Verdaccio... ($i/30)" + sleep 1 + done + + - name: Publish packages to local registry + run: | + yarn config set npmRegistryServer http://localhost:4873 + yarn config set unsafeHttpWhitelist --json '["localhost"]' + yarn config set npmAuthToken ci-auth-token + + for pkg in $PUBLISHABLE_PACKAGES; do + cd packages/$pkg + yarn npm publish --tag ci + cd ../.. + done + + - name: Scaffold app using published create-twenty-app + run: | + npm install -g create-twenty-app@$CI_VERSION --registry http://localhost:4873 + create-twenty-app --version + mkdir -p /tmp/e2e-test-workspace + cd /tmp/e2e-test-workspace + create-twenty-app test-app --example postcard --display-name "Test postcard app" --description "E2E test postcard app" --skip-local-instance + + - name: Install scaffolded app dependencies + run: | + cd /tmp/e2e-test-workspace/test-app + echo 'npmRegistryServer: "http://localhost:4873"' >> .yarnrc.yml + echo 'unsafeHttpWhitelist: ["localhost"]' >> .yarnrc.yml + YARN_ENABLE_IMMUTABLE_INSTALLS=false yarn install --no-immutable + echo "--- Installing last SDK versions ---" + YARN_ENABLE_IMMUTABLE_INSTALLS=false yarn add twenty-sdk twenty-client-sdk + + - name: Verify installed app versions + run: | + cd /tmp/e2e-test-workspace/test-app + echo "--- Checking package.json references correct SDK version ---" + node -e " + const pkg = require('./package.json'); + const sdkVersion = pkg.dependencies['twenty-sdk']; + if (!sdkVersion.startsWith('0.0.0-ci.')) { + console.error('Expected twenty-sdk version to start with 0.0.0-ci., got:', sdkVersion); + process.exit(1); + } + console.log('SDK version in scaffolded app:', sdkVersion); + " + + - name: Verify SDK CLI is available + run: | + cd /tmp/e2e-test-workspace/test-app + npx --no-install twenty --version + + - name: Setup server environment + run: npx nx reset:env:e2e-testing-server twenty-server + + - name: Build server + run: npx nx build twenty-server + + - name: Create and setup database + run: | + PGPASSWORD=postgres psql -h localhost -p 5432 -U postgres -d postgres -c 'CREATE DATABASE "default";' + PGPASSWORD=postgres psql -h localhost -p 5432 -U postgres -d postgres -c 'CREATE DATABASE "test";' + npx nx run twenty-server:database:reset + + - name: Start server + run: | + npx nx start twenty-server & + echo "Waiting for server to be ready..." + timeout 60 bash -c 'until curl -s http://localhost:3000/health; do sleep 2; done' + + - name: Authenticate with twenty-server + env: + SEED_API_KEY: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ1c2VySWQiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ3b3Jrc3BhY2VJZCI6IjIwMjAyMDIwLTFjMjUtNGQwMi1iZjI1LTZhZWNjZjdlYTQxOSIsIndvcmtzcGFjZU1lbWJlcklkIjoiMjAyMDIwMjAtNDYzZi00MzViLTgyOGMtMTA3ZTAwN2EyNzExIiwidXNlcldvcmtzcGFjZUlkIjoiMjAyMDIwMjAtMWU3Yy00M2Q5LWE1ZGItNjg1YjUwNjlkODE2IiwidHlwZSI6IkFDQ0VTUyIsImF1dGhQcm92aWRlciI6InBhc3N3b3JkIiwiaWF0IjoxNzUxMjgxNzA0LCJleHAiOjIwNjY4NTc3MDR9.HMGqCsVlOAPVUBhKSGlD1X86VoHKt4LIUtET3CGIdik' + run: | + cd /tmp/e2e-test-workspace/test-app + npx --no-install twenty remote add --api-key $SEED_API_KEY --api-url http://localhost:3000 + + - name: Deploy scaffolded app + run: | + cd /tmp/e2e-test-workspace/test-app + npx --no-install twenty deploy + + - name: Install scaffolded app + run: | + cd /tmp/e2e-test-workspace/test-app + npx --no-install twenty install + + - name: Execute postcard logic function + run: | + cd /tmp/e2e-test-workspace/test-app + EXEC_OUTPUT=$(npx --no-install twenty exec --functionName postcard-logic-function) + echo "$EXEC_OUTPUT" + echo "$EXEC_OUTPUT" | grep -q "Hello, World!" + + - name: Execute create-postcard-company logic function + run: | + cd /tmp/e2e-test-workspace/test-app + EXEC_OUTPUT=$(npx --no-install twenty exec --functionName create-postcard-company) + echo "$EXEC_OUTPUT" + echo "$EXEC_OUTPUT" | grep -q 'Created company.*Hello World.*with id' + + - name: Run scaffolded app integration test + env: + TWENTY_API_URL: http://localhost:3000 + run: | + cd /tmp/e2e-test-workspace/test-app + yarn test + + ci-create-app-e2e-postcard-status-check: + if: always() && !cancelled() + timeout-minutes: 5 + runs-on: ubuntu-latest + needs: [changed-files-check, create-app-e2e-postcard] + steps: + - name: Fail job if any needs failed + if: contains(needs.*.result, 'failure') + run: exit 1 diff --git a/packages/create-twenty-app/README.md b/packages/create-twenty-app/README.md index 47142a8b73..ba6ec5e545 100644 --- a/packages/create-twenty-app/README.md +++ b/packages/create-twenty-app/README.md @@ -24,24 +24,27 @@ yarn twenty dev The scaffolder will: -1. Create a new project with TypeScript, linting, and a preconfigured `twenty` CLI +1. Create a new project with TypeScript, linting, tests, and a preconfigured `twenty` CLI 2. Optionally start a local Twenty server (Docker) 3. Open the browser for OAuth authentication -4. Scaffold example entities and an integration test -## Scaffolding modes +## Options -| Flag | Behavior | -| -------------- | -------------------------------------------------------------------------------------------------------------- | -| `--minimal` | **(default)** Creates only core files (`application-config.ts`, `default-role.ts`, pre/post-install functions) | -| `--exhaustive` | Creates all example entities | +| Flag | Description | +| ------------------------------ | --------------------------------------- | +| `--example ` | Initialize from an example | +| `--name ` | Set the app name (skips the prompt) | +| `--display-name ` | Set the display name (skips the prompt) | +| `--description ` | Set the description (skips the prompt) | +| `--skip-local-instance` | Skip the local server setup prompt | -Other flags: +By default (no flags), a minimal app is generated with core files and an integration test. Use `--example` to start from a richer example: -- `--name ` — set the app name (skips the prompt) -- `--display-name ` — set the display name (skips the prompt) -- `--description ` — set the description (skips the prompt) -- `--skip-local-instance` — skip the local server setup prompt +```bash +npx create-twenty-app@latest my-twenty-app --example hello-world +``` + +Examples are sourced from [twentyhq/twenty/packages/twenty-apps/examples](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/examples). ## Documentation diff --git a/packages/create-twenty-app/src/cli.ts b/packages/create-twenty-app/src/cli.ts index 8913c6a1de..5c802a4d96 100644 --- a/packages/create-twenty-app/src/cli.ts +++ b/packages/create-twenty-app/src/cli.ts @@ -2,7 +2,6 @@ import chalk from 'chalk'; import { Command, CommanderError } from 'commander'; import { CreateAppCommand } from '@/create-app.command'; -import { type ScaffoldingMode } from '@/types/scaffolding-options'; import packageJson from '../package.json'; const program = new Command(packageJson.name) @@ -13,11 +12,7 @@ const program = new Command(packageJson.name) 'Output the current version of create-twenty-app.', ) .argument('[directory]') - .option('-e, --exhaustive', 'Create all example entities') - .option( - '-m, --minimal', - 'Create only core entities (application-config and default-role) (default)', - ) + .option('--example ', 'Initialize from an example') .option('-n, --name ', 'Application name (skips prompt)') .option( '-d, --display-name ', @@ -36,25 +31,13 @@ const program = new Command(packageJson.name) async ( directory?: string, options?: { - exhaustive?: boolean; - minimal?: boolean; + example?: string; name?: string; displayName?: string; description?: string; skipLocalInstance?: boolean; }, ) => { - const modeFlags = [options?.exhaustive, options?.minimal].filter(Boolean); - - if (modeFlags.length > 1) { - console.error( - chalk.red( - 'Error: --exhaustive and --minimal are mutually exclusive.', - ), - ); - process.exit(1); - } - if (directory && !/^[a-z0-9-]+$/.test(directory)) { console.error( chalk.red( @@ -69,13 +52,9 @@ const program = new Command(packageJson.name) process.exit(1); } - const mode: ScaffoldingMode = options?.exhaustive - ? 'exhaustive' - : 'minimal'; - await new CreateAppCommand().execute({ directory, - mode, + example: options?.example, name: options?.name, displayName: options?.displayName, description: options?.description, diff --git a/packages/twenty-apps/hello-world/.github/workflows/ci.yml b/packages/create-twenty-app/src/constants/template/.github/workflows/ci.yml similarity index 100% rename from packages/twenty-apps/hello-world/.github/workflows/ci.yml rename to packages/create-twenty-app/src/constants/template/.github/workflows/ci.yml diff --git a/packages/create-twenty-app/src/constants/base-application/.nvmrc b/packages/create-twenty-app/src/constants/template/.nvmrc similarity index 100% rename from packages/create-twenty-app/src/constants/base-application/.nvmrc rename to packages/create-twenty-app/src/constants/template/.nvmrc diff --git a/packages/create-twenty-app/src/constants/base-application/.oxlintrc.json b/packages/create-twenty-app/src/constants/template/.oxlintrc.json similarity index 100% rename from packages/create-twenty-app/src/constants/base-application/.oxlintrc.json rename to packages/create-twenty-app/src/constants/template/.oxlintrc.json diff --git a/packages/create-twenty-app/src/constants/base-application/.yarnrc.yml b/packages/create-twenty-app/src/constants/template/.yarnrc.yml similarity index 100% rename from packages/create-twenty-app/src/constants/base-application/.yarnrc.yml rename to packages/create-twenty-app/src/constants/template/.yarnrc.yml diff --git a/packages/create-twenty-app/src/constants/template/AGENT.md b/packages/create-twenty-app/src/constants/template/AGENT.md new file mode 100644 index 0000000000..b10256427b --- /dev/null +++ b/packages/create-twenty-app/src/constants/template/AGENT.md @@ -0,0 +1,14 @@ +## Base documentation + +- Documentation: https://docs.twenty.com/developers/extend/apps/getting-started +- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/examples/postcard + +## UUID requirement + +- All generated UUIDs must be valid UUID v4. + +## Common Pitfalls + +- Creating an object without an index view associated. Unless this is a technical object, user will need to visualize it. +- Creating a view without a navigationMenuItem associated. This will make the view available on the left sidebar. +- Creating a front-end component that has a scroll instead of being responsive to its fixed widget height and width, unless it is specifically meant to be used in a canvas tab. diff --git a/packages/create-twenty-app/src/constants/template/CLAUDE.md b/packages/create-twenty-app/src/constants/template/CLAUDE.md new file mode 100644 index 0000000000..b10256427b --- /dev/null +++ b/packages/create-twenty-app/src/constants/template/CLAUDE.md @@ -0,0 +1,14 @@ +## Base documentation + +- Documentation: https://docs.twenty.com/developers/extend/apps/getting-started +- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/examples/postcard + +## UUID requirement + +- All generated UUIDs must be valid UUID v4. + +## Common Pitfalls + +- Creating an object without an index view associated. Unless this is a technical object, user will need to visualize it. +- Creating a view without a navigationMenuItem associated. This will make the view available on the left sidebar. +- Creating a front-end component that has a scroll instead of being responsive to its fixed widget height and width, unless it is specifically meant to be used in a canvas tab. diff --git a/packages/create-twenty-app/src/constants/base-application/LLMS.md b/packages/create-twenty-app/src/constants/template/LLMS.md similarity index 82% rename from packages/create-twenty-app/src/constants/base-application/LLMS.md rename to packages/create-twenty-app/src/constants/template/LLMS.md index 4227b88d35..b10256427b 100644 --- a/packages/create-twenty-app/src/constants/base-application/LLMS.md +++ b/packages/create-twenty-app/src/constants/template/LLMS.md @@ -1,7 +1,7 @@ ## Base documentation -- Documentation: https://docs.twenty.com/developers/extend/capabilities/apps -- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/fixtures/postcard-app +- Documentation: https://docs.twenty.com/developers/extend/apps/getting-started +- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/examples/postcard ## UUID requirement diff --git a/packages/create-twenty-app/src/constants/base-application/README.md b/packages/create-twenty-app/src/constants/template/README.md similarity index 93% rename from packages/create-twenty-app/src/constants/base-application/README.md rename to packages/create-twenty-app/src/constants/template/README.md index bc272962d4..16b8e5ac96 100644 --- a/packages/create-twenty-app/src/constants/base-application/README.md +++ b/packages/create-twenty-app/src/constants/template/README.md @@ -6,6 +6,6 @@ Run `yarn twenty help` to list all available commands. ## Learn More -- [Twenty Apps documentation](https://docs.twenty.com/developers/extend/capabilities/apps) +- [Twenty Apps documentation](https://docs.twenty.com/developers/extend/apps/getting-started) - [twenty-sdk CLI reference](https://www.npmjs.com/package/twenty-sdk) - [Discord](https://discord.gg/cx5n4Jzs57) diff --git a/packages/twenty-apps/hello-world/.gitignore b/packages/create-twenty-app/src/constants/template/gitignore similarity index 100% rename from packages/twenty-apps/hello-world/.gitignore rename to packages/create-twenty-app/src/constants/template/gitignore diff --git a/packages/create-twenty-app/src/constants/template/package.json b/packages/create-twenty-app/src/constants/template/package.json new file mode 100644 index 0000000000..c4eed98c83 --- /dev/null +++ b/packages/create-twenty-app/src/constants/template/package.json @@ -0,0 +1,35 @@ +{ + "name": "TO-BE-GENERATED", + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": "^24.5.0", + "npm": "please-use-yarn", + "yarn": ">=4.0.2" + }, + "keywords": [ + "twenty-app" + ], + "packageManager": "yarn@4.9.2", + "scripts": { + "twenty": "twenty", + "lint": "oxlint -c .oxlintrc.json .", + "lint:fix": "oxlint --fix -c .oxlintrc.json .", + "test": "vitest run", + "test:watch": "vitest" + }, + "dependencies": { + "twenty-client-sdk": "TO-BE-GENERATED", + "twenty-sdk": "TO-BE-GENERATED" + }, + "devDependencies": { + "@types/node": "^24.7.2", + "@types/react": "^19.0.0", + "oxlint": "^0.16.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "typescript": "^5.9.3", + "vite-tsconfig-paths": "^4.2.1", + "vitest": "^3.1.1" + } +} diff --git a/packages/create-twenty-app/src/constants/template/src/__tests__/app-install.integration-test.ts b/packages/create-twenty-app/src/constants/template/src/__tests__/app-install.integration-test.ts new file mode 100644 index 0000000000..a51ac84432 --- /dev/null +++ b/packages/create-twenty-app/src/constants/template/src/__tests__/app-install.integration-test.ts @@ -0,0 +1,70 @@ +import { APPLICATION_UNIVERSAL_IDENTIFIER } from 'src/constants/universal-identifiers'; +import { appBuild, appDeploy, appInstall, appUninstall } from 'twenty-sdk/cli'; +import { MetadataApiClient } from 'twenty-client-sdk/metadata'; +import { afterAll, beforeAll, describe, expect, it } from 'vitest'; + +const APP_PATH = process.cwd(); + +describe('App installation', () => { + beforeAll(async () => { + const buildResult = await appBuild({ + appPath: APP_PATH, + tarball: true, + onProgress: (message: string) => console.log(`[build] ${message}`), + }); + + if (!buildResult.success) { + throw new Error( + `Build failed: ${buildResult.error?.message ?? 'Unknown error'}`, + ); + } + + const deployResult = await appDeploy({ + tarballPath: buildResult.data.tarballPath!, + onProgress: (message: string) => console.log(`[deploy] ${message}`), + }); + + if (!deployResult.success) { + throw new Error( + `Deploy failed: ${deployResult.error?.message ?? 'Unknown error'}`, + ); + } + + const installResult = await appInstall({ appPath: APP_PATH }); + + if (!installResult.success) { + throw new Error( + `Install failed: ${installResult.error?.message ?? 'Unknown error'}`, + ); + } + }); + + afterAll(async () => { + const uninstallResult = await appUninstall({ appPath: APP_PATH }); + + if (!uninstallResult.success) { + console.warn( + `App uninstall failed: ${uninstallResult.error?.message ?? 'Unknown error'}`, + ); + } + }); + + it('should find the installed app in the applications list', async () => { + const metadataClient = new MetadataApiClient(); + + const result = await metadataClient.query({ + findManyApplications: { + id: true, + name: true, + universalIdentifier: true, + }, + }); + + const installedApp = result.findManyApplications.find( + (application: { universalIdentifier: string }) => + application.universalIdentifier === APPLICATION_UNIVERSAL_IDENTIFIER, + ); + + expect(installedApp).toBeDefined(); + }); +}); diff --git a/packages/create-twenty-app/src/constants/template/src/__tests__/setup-test.ts b/packages/create-twenty-app/src/constants/template/src/__tests__/setup-test.ts new file mode 100644 index 0000000000..16e00da406 --- /dev/null +++ b/packages/create-twenty-app/src/constants/template/src/__tests__/setup-test.ts @@ -0,0 +1,45 @@ +import * as fs from 'fs'; +import * as os from 'os'; +import * as path from 'path'; +import { beforeAll } from 'vitest'; + +const TWENTY_API_URL = process.env.TWENTY_API_URL ?? 'http://localhost:2020'; +const TEST_CONFIG_DIR = path.join(os.tmpdir(), '.twenty-sdk-test'); + +const assertServerIsReachable = async () => { + let response: Response; + + try { + response = await fetch(`${TWENTY_API_URL}/healthz`); + } catch { + throw new Error( + `Twenty server is not reachable at ${TWENTY_API_URL}. ` + + 'Make sure the server is running before executing integration tests.', + ); + } + + if (!response.ok) { + throw new Error(`Server at ${TWENTY_API_URL} returned ${response.status}`); + } +}; + +beforeAll(async () => { + await assertServerIsReachable(); + + fs.mkdirSync(TEST_CONFIG_DIR, { recursive: true }); + + const configFile = { + remotes: { + local: { + apiUrl: process.env.TWENTY_API_URL, + apiKey: process.env.TWENTY_API_KEY, + }, + }, + defaultRemote: 'local', + }; + + fs.writeFileSync( + path.join(TEST_CONFIG_DIR, 'config.json'), + JSON.stringify(configFile, null, 2), + ); +}); diff --git a/packages/create-twenty-app/src/constants/template/src/application-config.ts b/packages/create-twenty-app/src/constants/template/src/application-config.ts new file mode 100644 index 0000000000..e42254f4e1 --- /dev/null +++ b/packages/create-twenty-app/src/constants/template/src/application-config.ts @@ -0,0 +1,15 @@ +import { defineApplication } from 'twenty-sdk'; + +import { + APP_DESCRIPTION, + APP_DISPLAY_NAME, + APPLICATION_UNIVERSAL_IDENTIFIER, + DEFAULT_ROLE_UNIVERSAL_IDENTIFIER, +} from 'src/constants/universal-identifiers'; + +export default defineApplication({ + universalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER, + displayName: APP_DISPLAY_NAME, + description: APP_DESCRIPTION, + defaultRoleUniversalIdentifier: DEFAULT_ROLE_UNIVERSAL_IDENTIFIER, +}); diff --git a/packages/create-twenty-app/src/constants/template/src/constants/universal-identifiers.ts b/packages/create-twenty-app/src/constants/template/src/constants/universal-identifiers.ts new file mode 100644 index 0000000000..66d60ff8e7 --- /dev/null +++ b/packages/create-twenty-app/src/constants/template/src/constants/universal-identifiers.ts @@ -0,0 +1,4 @@ +export const APP_DISPLAY_NAME = 'DISPLAY-NAME-TO-BE-GENERATED'; +export const APP_DESCRIPTION = 'DESCRIPTION-TO-BE-GENERATED'; +export const APPLICATION_UNIVERSAL_IDENTIFIER = 'UUID-TO-BE-GENERATED'; +export const DEFAULT_ROLE_UNIVERSAL_IDENTIFIER = 'UUID-TO-BE-GENERATED'; diff --git a/packages/create-twenty-app/src/constants/template/src/default-role.ts b/packages/create-twenty-app/src/constants/template/src/default-role.ts new file mode 100644 index 0000000000..0e9129a1cb --- /dev/null +++ b/packages/create-twenty-app/src/constants/template/src/default-role.ts @@ -0,0 +1,16 @@ +import { defineRole } from 'twenty-sdk'; + +import { + APP_DISPLAY_NAME, + DEFAULT_ROLE_UNIVERSAL_IDENTIFIER, +} from 'src/constants/universal-identifiers'; + +export default defineRole({ + universalIdentifier: DEFAULT_ROLE_UNIVERSAL_IDENTIFIER, + label: `${APP_DISPLAY_NAME} default function role`, + description: `${APP_DISPLAY_NAME} default function role`, + canReadAllObjectRecords: true, + canUpdateAllObjectRecords: true, + canSoftDeleteAllObjectRecords: true, + canDestroyAllObjectRecords: false, +}); diff --git a/packages/create-twenty-app/src/constants/base-application/tsconfig.json b/packages/create-twenty-app/src/constants/template/tsconfig.json similarity index 92% rename from packages/create-twenty-app/src/constants/base-application/tsconfig.json rename to packages/create-twenty-app/src/constants/template/tsconfig.json index de96286732..d574c8c810 100644 --- a/packages/create-twenty-app/src/constants/base-application/tsconfig.json +++ b/packages/create-twenty-app/src/constants/template/tsconfig.json @@ -33,5 +33,10 @@ "**/*.test.ts", "**/*.spec.ts", "**/*.integration-test.ts" + ], + "references": [ + { + "path": "./tsconfig.spec.json" + } ] } diff --git a/packages/create-twenty-app/src/constants/template/tsconfig.spec.json b/packages/create-twenty-app/src/constants/template/tsconfig.spec.json new file mode 100644 index 0000000000..ea69a6c010 --- /dev/null +++ b/packages/create-twenty-app/src/constants/template/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "composite": true, + "types": ["vitest/globals", "node"] + }, + "include": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/create-twenty-app/src/constants/template/vitest.config.ts b/packages/create-twenty-app/src/constants/template/vitest.config.ts new file mode 100644 index 0000000000..2fed127a84 --- /dev/null +++ b/packages/create-twenty-app/src/constants/template/vitest.config.ts @@ -0,0 +1,21 @@ +import tsconfigPaths from 'vite-tsconfig-paths'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + plugins: [ + tsconfigPaths({ + projects: ['tsconfig.spec.json'], + ignoreConfigErrors: true, + }), + ], + test: { + testTimeout: 120_000, + hookTimeout: 120_000, + include: ['src/**/*.integration-test.ts'], + setupFiles: ['src/__tests__/setup-test.ts'], + env: { + TWENTY_API_KEY: + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ1c2VySWQiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ3b3Jrc3BhY2VJZCI6IjIwMjAyMDIwLTFjMjUtNGQwMi1iZjI1LTZhZWNjZjdlYTQxOSIsIndvcmtzcGFjZU1lbWJlcklkIjoiMjAyMDIwMjAtNDYzZi00MzViLTgyOGMtMTA3ZTAwN2EyNzExIiwidXNlcldvcmtzcGFjZUlkIjoiMjAyMDIwMjAtMWU3Yy00M2Q5LWE1ZGItNjg1YjUwNjlkODE2IiwidHlwZSI6IkFDQ0VTUyIsImF1dGhQcm92aWRlciI6InBhc3N3b3JkIiwiaWF0IjoxNzUxMjgxNzA0LCJleHAiOjIwNjY4NTc3MDR9.HMGqCsVlOAPVUBhKSGlD1X86VoHKt4LIUtET3CGIdik', + }, + }, +}); diff --git a/packages/create-twenty-app/src/constants/template/yarn.lock b/packages/create-twenty-app/src/constants/template/yarn.lock new file mode 100644 index 0000000000..4a5801883d --- /dev/null +++ b/packages/create-twenty-app/src/constants/template/yarn.lock @@ -0,0 +1,2 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 diff --git a/packages/create-twenty-app/src/create-app.command.ts b/packages/create-twenty-app/src/create-app.command.ts index 0c5d1be3ed..41ca6c7ac0 100644 --- a/packages/create-twenty-app/src/create-app.command.ts +++ b/packages/create-twenty-app/src/create-app.command.ts @@ -1,4 +1,5 @@ import { copyBaseApplicationProject } from '@/utils/app-template'; +import { downloadExample } from '@/utils/download-example'; import { convertToLabel } from '@/utils/convert-to-label'; import { install } from '@/utils/install'; import { tryGitInit } from '@/utils/try-git-init'; @@ -10,22 +11,18 @@ import * as path from 'path'; import { basename } from 'path'; import { authLoginOAuth, + ConfigService, detectLocalServer, serverStart, type ServerStartResult, } from 'twenty-sdk/cli'; import { isDefined } from 'twenty-shared/utils'; -import { - type ExampleOptions, - type ScaffoldingMode, -} from '@/types/scaffolding-options'; - const CURRENT_EXECUTION_DIRECTORY = process.env.INIT_CWD || process.cwd(); type CreateAppOptions = { directory?: string; - mode?: ScaffoldingMode; + example?: string; name?: string; displayName?: string; description?: string; @@ -38,23 +35,34 @@ export class CreateAppCommand { await this.getAppInfos(options); try { - const exampleOptions = this.resolveExampleOptions( - options.mode ?? 'minimal', - ); - await this.validateDirectory(appDirectory); this.logCreationInfo({ appDirectory, appName }); await fs.ensureDir(appDirectory); - await copyBaseApplicationProject({ - appName, - appDisplayName, - appDescription, - appDirectory, - exampleOptions, - }); + if (options.example) { + const exampleSucceeded = await this.tryDownloadExample( + options.example, + appDirectory, + ); + + if (!exampleSucceeded) { + await copyBaseApplicationProject({ + appName, + appDisplayName, + appDescription, + appDirectory, + }); + } + } else { + await copyBaseApplicationProject({ + appName, + appDisplayName, + appDescription, + appDirectory, + }); + } await install(appDirectory); @@ -100,13 +108,14 @@ export class CreateAppCommand { const hasName = isDefined(options.name) || isDefined(directory); const hasDisplayName = isDefined(options.displayName); const hasDescription = isDefined(options.description); + const hasExample = isDefined(options.example); const { name, displayName, description } = await inquirer.prompt([ { type: 'input', name: 'name', message: 'Application name:', - when: () => !hasName, + when: () => !hasName && !hasExample, default: 'my-twenty-app', validate: (input) => { if (input.length === 0) return 'Application name is required'; @@ -117,7 +126,7 @@ export class CreateAppCommand { type: 'input', name: 'displayName', message: 'Application display name:', - when: () => !hasDisplayName, + when: () => !hasDisplayName && !hasExample, default: (answers: { name?: string }) => { return convertToLabel( answers?.name ?? options.name ?? directory ?? '', @@ -128,7 +137,7 @@ export class CreateAppCommand { type: 'input', name: 'description', message: 'Application description (optional):', - when: () => !hasDescription, + when: () => !hasDescription && !hasExample, default: '', }, ]); @@ -137,6 +146,7 @@ export class CreateAppCommand { options.name ?? name ?? directory ?? + options.example ?? 'my-twenty-app' ).trim(); @@ -152,34 +162,6 @@ export class CreateAppCommand { return { appName, appDisplayName, appDirectory, appDescription }; } - private resolveExampleOptions(mode: ScaffoldingMode): ExampleOptions { - if (mode === 'minimal') { - return { - includeExampleObject: false, - includeExampleField: false, - includeExampleLogicFunction: false, - includeExampleFrontComponent: false, - includeExampleView: false, - includeExampleNavigationMenuItem: false, - includeExampleSkill: false, - includeExampleAgent: false, - includeExampleIntegrationTest: true, - }; - } - - return { - includeExampleObject: true, - includeExampleField: true, - includeExampleLogicFunction: true, - includeExampleFrontComponent: true, - includeExampleView: true, - includeExampleNavigationMenuItem: true, - includeExampleSkill: true, - includeExampleIntegrationTest: true, - includeExampleAgent: true, - }; - } - private async validateDirectory(appDirectory: string): Promise { if (!(await fs.pathExists(appDirectory))) { return; @@ -193,6 +175,41 @@ export class CreateAppCommand { } } + private async tryDownloadExample( + example: string, + appDirectory: string, + ): Promise { + try { + await downloadExample(example, appDirectory); + + return true; + } catch (error) { + console.error( + chalk.red( + `\n${error instanceof Error ? error.message : 'Failed to download example.'}`, + ), + ); + + const { useTemplate } = await inquirer.prompt([ + { + type: 'confirm', + name: 'useTemplate', + message: 'Would you like to create a default template app instead?', + default: true, + }, + ]); + + if (!useTemplate) { + process.exit(1); + } + + // Clean up any partial files from the failed download + await fs.emptyDir(appDirectory); + + return false; + } + } + private logCreationInfo({ appDirectory, appName, @@ -239,7 +256,7 @@ export class CreateAppCommand { if (!shouldAuthenticate) { console.log( chalk.gray( - 'Authentication skipped. Run `yarn twenty remote add` manually.', + 'Authentication skipped. Run `yarn twenty remote add --local` manually.', ), ); @@ -252,10 +269,14 @@ export class CreateAppCommand { remote: 'local', }); - if (!result.success) { + if (result.success) { + const configService = new ConfigService(); + + await configService.setDefaultRemote('local'); + } else { console.log( chalk.yellow( - 'Authentication failed. Run `yarn twenty remote add` manually.', + 'Authentication failed. Run `yarn twenty remote add --local` manually.', ), ); } diff --git a/packages/create-twenty-app/src/types/scaffolding-options.ts b/packages/create-twenty-app/src/types/scaffolding-options.ts deleted file mode 100644 index 02a239d0fc..0000000000 --- a/packages/create-twenty-app/src/types/scaffolding-options.ts +++ /dev/null @@ -1,13 +0,0 @@ -export type ScaffoldingMode = 'exhaustive' | 'minimal'; - -export type ExampleOptions = { - includeExampleObject: boolean; - includeExampleField: boolean; - includeExampleLogicFunction: boolean; - includeExampleFrontComponent: boolean; - includeExampleView: boolean; - includeExampleNavigationMenuItem: boolean; - includeExampleSkill: boolean; - includeExampleAgent: boolean; - includeExampleIntegrationTest: boolean; -}; diff --git a/packages/create-twenty-app/src/utils/__tests__/app-template.spec.ts b/packages/create-twenty-app/src/utils/__tests__/app-template.spec.ts index a8feb44ae8..ba8649bdac 100644 --- a/packages/create-twenty-app/src/utils/__tests__/app-template.spec.ts +++ b/packages/create-twenty-app/src/utils/__tests__/app-template.spec.ts @@ -1,10 +1,8 @@ -import { type ExampleOptions } from '@/types/scaffolding-options'; import { copyBaseApplicationProject } from '@/utils/app-template'; import * as fs from 'fs-extra'; import { tmpdir } from 'os'; import createTwentyAppPackageJson from 'package.json'; import { join } from 'path'; -import { GENERATED_DIR } from 'twenty-shared/application'; jest.mock('fs-extra', () => { const actual = jest.requireActual('fs-extra'); @@ -14,40 +12,29 @@ jest.mock('fs-extra', () => { }; }); -const APPLICATION_FILE_NAME = 'application-config.ts'; -const DEFAULT_ROLE_FILE_NAME = 'default-role.ts'; +const UNIVERSAL_IDENTIFIERS_PATH = join( + 'src', + 'constants', + 'universal-identifiers.ts', +); -const ALL_EXAMPLES: ExampleOptions = { - includeExampleObject: true, - includeExampleField: true, - includeExampleLogicFunction: true, - includeExampleFrontComponent: true, - includeExampleView: true, - includeExampleNavigationMenuItem: true, - includeExampleSkill: true, - includeExampleAgent: true, - includeExampleIntegrationTest: true, -}; +// Template content matching template/src/constants/universal-identifiers.ts +const TEMPLATE_UNIVERSAL_IDENTIFIERS = `export const APP_DISPLAY_NAME = 'DISPLAY-NAME-TO-BE-GENERATED'; +export const APP_DESCRIPTION = 'DESCRIPTION-TO-BE-GENERATED'; +export const APPLICATION_UNIVERSAL_IDENTIFIER = 'UUID-TO-BE-GENERATED'; +export const DEFAULT_ROLE_UNIVERSAL_IDENTIFIER = 'UUID-TO-BE-GENERATED'; +`; -const SEED_TSCONFIG = { - compilerOptions: { paths: { 'src/*': ['./src/*'] } }, - exclude: ['node_modules', 'dist', '**/*.integration-test.ts'], -}; - -const seedTsconfig = async (directory: string) => { - await fs.writeJson(join(directory, 'tsconfig.json'), SEED_TSCONFIG); -}; - -const NO_EXAMPLES: ExampleOptions = { - includeExampleObject: false, - includeExampleField: false, - includeExampleSkill: false, - includeExampleAgent: false, - includeExampleLogicFunction: false, - includeExampleFrontComponent: false, - includeExampleView: false, - includeExampleNavigationMenuItem: false, - includeExampleIntegrationTest: false, +// Template package.json matching template/package.json +const TEMPLATE_PACKAGE_JSON = { + name: 'template-app', + version: '0.1.0', + license: 'MIT', + scripts: { twenty: 'twenty' }, + dependencies: { + 'twenty-sdk': '0.0.0', + 'twenty-client-sdk': '0.0.0', + }, }; describe('copyBaseApplicationProject', () => { @@ -59,7 +46,19 @@ describe('copyBaseApplicationProject', () => { `test-twenty-app-${Date.now()}-${Math.random().toString(36).slice(2)}`, ); await fs.ensureDir(testAppDirectory); - await seedTsconfig(testAppDirectory); + + // Seed the files that generateUniversalIdentifiers and updatePackageJson + // expect to find (since fs.copy is mocked and won't actually create them) + await fs.ensureDir(join(testAppDirectory, 'src', 'constants')); + await fs.writeFile( + join(testAppDirectory, UNIVERSAL_IDENTIFIERS_PATH), + TEMPLATE_UNIVERSAL_IDENTIFIERS, + ); + await fs.writeJson( + join(testAppDirectory, 'package.json'), + TEMPLATE_PACKAGE_JSON, + ); + jest.clearAllMocks(); }); @@ -69,867 +68,154 @@ describe('copyBaseApplicationProject', () => { } }); - it('should create the correct folder structure with src/', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: ALL_EXAMPLES, - }); - - const srcAppPath = join(testAppDirectory, 'src'); - expect(await fs.pathExists(srcAppPath)).toBe(true); - - const appConfigPath = join(srcAppPath, APPLICATION_FILE_NAME); - expect(await fs.pathExists(appConfigPath)).toBe(true); - - const roleConfigPath = join(srcAppPath, 'roles', DEFAULT_ROLE_FILE_NAME); - expect(await fs.pathExists(roleConfigPath)).toBe(true); - }); - - it('should create package.json with correct content', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: ALL_EXAMPLES, - }); - - const packageJsonPath = join(testAppDirectory, 'package.json'); - expect(await fs.pathExists(packageJsonPath)).toBe(true); - - const packageJson = await fs.readJson(packageJsonPath); - expect(packageJson.name).toBe('my-test-app'); - expect(packageJson.version).toBe('0.1.0'); - expect(packageJson.devDependencies['twenty-sdk']).toBe( - createTwentyAppPackageJson.version, - ); - expect(packageJson.devDependencies['twenty-client-sdk']).toBe( - createTwentyAppPackageJson.version, - ); - expect(packageJson.scripts['twenty']).toBe('twenty'); - }); - - it('should create .gitignore file', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: ALL_EXAMPLES, - }); - - const gitignorePath = join(testAppDirectory, '.gitignore'); - expect(await fs.pathExists(gitignorePath)).toBe(true); - - const gitignoreContent = await fs.readFile(gitignorePath, 'utf8'); - expect(gitignoreContent).toContain('/node_modules'); - expect(gitignoreContent).toContain(GENERATED_DIR); - }); - - it('should create yarn.lock file', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: ALL_EXAMPLES, - }); - - const yarnLockPath = join(testAppDirectory, 'yarn.lock'); - expect(await fs.pathExists(yarnLockPath)).toBe(true); - - const yarnLockContent = await fs.readFile(yarnLockPath, 'utf8'); - expect(yarnLockContent).toContain('yarn lockfile v1'); - }); - - it('should create application-config.ts with defineApplication and correct values', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: ALL_EXAMPLES, - }); - - const appConfigPath = join(testAppDirectory, 'src', APPLICATION_FILE_NAME); - const appConfigContent = await fs.readFile(appConfigPath, 'utf8'); - - expect(appConfigContent).toContain( - "import { defineApplication } from 'twenty-sdk'", - ); - expect(appConfigContent).toContain('export default defineApplication({'); - - expect(appConfigContent).toContain( - "import { DEFAULT_ROLE_UNIVERSAL_IDENTIFIER } from 'src/roles/default-role'", - ); - - expect(appConfigContent).toContain( - 'export const APPLICATION_UNIVERSAL_IDENTIFIER', - ); - expect(appConfigContent).toContain( - 'universalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER', - ); - - expect(appConfigContent).toContain("displayName: 'My Test App'"); - expect(appConfigContent).toContain("description: 'A test application'"); - - expect(appConfigContent).toMatch( - /APPLICATION_UNIVERSAL_IDENTIFIER =\s*'[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'/, - ); - - expect(appConfigContent).toContain( - 'defaultRoleUniversalIdentifier: DEFAULT_ROLE_UNIVERSAL_IDENTIFIER', - ); - }); - - it('should create default-role.ts with defineRole and correct values', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: ALL_EXAMPLES, - }); - - const roleConfigPath = join( - testAppDirectory, - 'src', - 'roles', - DEFAULT_ROLE_FILE_NAME, - ); - const roleConfigContent = await fs.readFile(roleConfigPath, 'utf8'); - - expect(roleConfigContent).toContain( - "import { defineRole } from 'twenty-sdk'", - ); - expect(roleConfigContent).toContain('export default defineRole({'); - - expect(roleConfigContent).toContain( - 'export const DEFAULT_ROLE_UNIVERSAL_IDENTIFIER', - ); - - expect(roleConfigContent).toContain( - "label: 'My Test App default function role'", - ); - - expect(roleConfigContent).toContain('canReadAllObjectRecords: true'); - expect(roleConfigContent).toContain('canUpdateAllObjectRecords: true'); - expect(roleConfigContent).toContain('canSoftDeleteAllObjectRecords: true'); - expect(roleConfigContent).toContain('canDestroyAllObjectRecords: false'); - - expect(roleConfigContent).toMatch( - /universalIdentifier: DEFAULT_ROLE_UNIVERSAL_IDENTIFIER/, - ); - }); - it('should call fs.copy to copy base application template', async () => { await copyBaseApplicationProject({ appName: 'my-test-app', appDisplayName: 'My Test App', appDescription: 'A test application', appDirectory: testAppDirectory, - exampleOptions: ALL_EXAMPLES, }); expect(fs.copy).toHaveBeenCalledTimes(1); expect(fs.copy).toHaveBeenCalledWith( - expect.stringContaining('base-application'), + expect.stringContaining('template'), testAppDirectory, ); }); + it('should replace placeholders in universal-identifiers.ts with real values', async () => { + await copyBaseApplicationProject({ + appName: 'my-test-app', + appDisplayName: 'My Test App', + appDescription: 'A test application', + appDirectory: testAppDirectory, + }); + + const content = await fs.readFile( + join(testAppDirectory, UNIVERSAL_IDENTIFIERS_PATH), + 'utf8', + ); + + expect(content).toContain("APP_DISPLAY_NAME = 'My Test App'"); + expect(content).toContain("APP_DESCRIPTION = 'A test application'"); + expect(content).not.toContain('DISPLAY-NAME-TO-BE-GENERATED'); + expect(content).not.toContain('DESCRIPTION-TO-BE-GENERATED'); + expect(content).not.toContain('UUID-TO-BE-GENERATED'); + + // Both UUIDs should be valid v4 format + const uuidMatches = content.match( + /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/g, + ); + expect(uuidMatches).toHaveLength(2); + }); + + it('should generate different UUIDs for each identifier', async () => { + await copyBaseApplicationProject({ + appName: 'my-test-app', + appDisplayName: 'My Test App', + appDescription: 'A test application', + appDirectory: testAppDirectory, + }); + + const content = await fs.readFile( + join(testAppDirectory, UNIVERSAL_IDENTIFIERS_PATH), + 'utf8', + ); + + const uuidMatches = content.match( + /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/g, + ); + expect(uuidMatches).toHaveLength(2); + expect(uuidMatches![0]).not.toBe(uuidMatches![1]); + }); + + it('should update package.json with app name and SDK versions', async () => { + await copyBaseApplicationProject({ + appName: 'my-test-app', + appDisplayName: 'My Test App', + appDescription: 'A test application', + appDirectory: testAppDirectory, + }); + + const packageJson = await fs.readJson( + join(testAppDirectory, 'package.json'), + ); + expect(packageJson.name).toBe('my-test-app'); + expect(packageJson.dependencies['twenty-sdk']).toBe( + createTwentyAppPackageJson.version, + ); + expect(packageJson.dependencies['twenty-client-sdk']).toBe( + createTwentyAppPackageJson.version, + ); + }); + it('should handle empty description', async () => { await copyBaseApplicationProject({ appName: 'my-test-app', appDisplayName: 'My Test App', appDescription: '', appDirectory: testAppDirectory, - exampleOptions: ALL_EXAMPLES, }); - const appConfigPath = join(testAppDirectory, 'src', APPLICATION_FILE_NAME); - const appConfigContent = await fs.readFile(appConfigPath, 'utf8'); + const content = await fs.readFile( + join(testAppDirectory, UNIVERSAL_IDENTIFIERS_PATH), + 'utf8', + ); - expect(appConfigContent).toContain("description: ''"); + expect(content).toContain("APP_DESCRIPTION = ''"); }); - it('should generate unique UUIDs for each application', async () => { + it('should generate unique UUIDs across different scaffolds', async () => { const firstAppDir = join(testAppDirectory, 'app1'); - await fs.ensureDir(firstAppDir); - await seedTsconfig(firstAppDir); + await fs.ensureDir(join(firstAppDir, 'src', 'constants')); + await fs.writeFile( + join(firstAppDir, UNIVERSAL_IDENTIFIERS_PATH), + TEMPLATE_UNIVERSAL_IDENTIFIERS, + ); + await fs.writeJson( + join(firstAppDir, 'package.json'), + TEMPLATE_PACKAGE_JSON, + ); await copyBaseApplicationProject({ appName: 'app-one', appDisplayName: 'App One', appDescription: 'First app', appDirectory: firstAppDir, - exampleOptions: ALL_EXAMPLES, }); const secondAppDir = join(testAppDirectory, 'app2'); - await fs.ensureDir(secondAppDir); - await seedTsconfig(secondAppDir); + await fs.ensureDir(join(secondAppDir, 'src', 'constants')); + await fs.writeFile( + join(secondAppDir, UNIVERSAL_IDENTIFIERS_PATH), + TEMPLATE_UNIVERSAL_IDENTIFIERS, + ); + await fs.writeJson( + join(secondAppDir, 'package.json'), + TEMPLATE_PACKAGE_JSON, + ); await copyBaseApplicationProject({ appName: 'app-two', appDisplayName: 'App Two', appDescription: 'Second app', appDirectory: secondAppDir, - exampleOptions: ALL_EXAMPLES, }); - const firstAppConfig = await fs.readFile( - join(firstAppDir, 'src', APPLICATION_FILE_NAME), + const firstConstants = await fs.readFile( + join(firstAppDir, UNIVERSAL_IDENTIFIERS_PATH), 'utf8', ); - const secondAppConfig = await fs.readFile( - join(secondAppDir, 'src', APPLICATION_FILE_NAME), + const secondConstants = await fs.readFile( + join(secondAppDir, UNIVERSAL_IDENTIFIERS_PATH), 'utf8', ); const uuidRegex = - /APPLICATION_UNIVERSAL_IDENTIFIER =\s*'([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})'/; - const firstUuid = firstAppConfig.match(uuidRegex)?.[1]; - const secondUuid = secondAppConfig.match(uuidRegex)?.[1]; + /APPLICATION_UNIVERSAL_IDENTIFIER = '([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})'/; + const firstUuid = firstConstants.match(uuidRegex)?.[1]; + const secondUuid = secondConstants.match(uuidRegex)?.[1]; expect(firstUuid).toBeDefined(); expect(secondUuid).toBeDefined(); expect(firstUuid).not.toBe(secondUuid); }); - - it('should generate unique role UUIDs for each application', async () => { - const firstAppDir = join(testAppDirectory, 'app1'); - await fs.ensureDir(firstAppDir); - await seedTsconfig(firstAppDir); - await copyBaseApplicationProject({ - appName: 'app-one', - appDisplayName: 'App One', - appDescription: 'First app', - appDirectory: firstAppDir, - exampleOptions: ALL_EXAMPLES, - }); - - const secondAppDir = join(testAppDirectory, 'app2'); - await fs.ensureDir(secondAppDir); - await seedTsconfig(secondAppDir); - await copyBaseApplicationProject({ - appName: 'app-two', - appDisplayName: 'App Two', - appDescription: 'Second app', - appDirectory: secondAppDir, - exampleOptions: ALL_EXAMPLES, - }); - - const firstRoleConfig = await fs.readFile( - join(firstAppDir, 'src', 'roles', DEFAULT_ROLE_FILE_NAME), - 'utf8', - ); - - const secondRoleConfig = await fs.readFile( - join(secondAppDir, 'src', 'roles', DEFAULT_ROLE_FILE_NAME), - 'utf8', - ); - - const uuidRegex = - /DEFAULT_ROLE_UNIVERSAL_IDENTIFIER =\s*'([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})'/; - const firstUuid = firstRoleConfig.match(uuidRegex)?.[1]; - const secondUuid = secondRoleConfig.match(uuidRegex)?.[1]; - - expect(firstUuid).toBeDefined(); - expect(secondUuid).toBeDefined(); - expect(firstUuid).not.toBe(secondUuid); - }); - - describe('scaffolding modes', () => { - describe('exhaustive mode (all examples)', () => { - it('should create all example files when all options are enabled', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: ALL_EXAMPLES, - }); - - const srcPath = join(testAppDirectory, 'src'); - - expect( - await fs.pathExists(join(srcPath, 'objects', 'example-object.ts')), - ).toBe(true); - expect( - await fs.pathExists(join(srcPath, 'fields', 'example-field.ts')), - ).toBe(true); - expect( - await fs.pathExists( - join(srcPath, 'logic-functions', 'hello-world.ts'), - ), - ).toBe(true); - expect( - await fs.pathExists( - join(srcPath, 'logic-functions', 'create-hello-world-company.ts'), - ), - ).toBe(true); - expect( - await fs.pathExists( - join(srcPath, 'front-components', 'hello-world.tsx'), - ), - ).toBe(true); - expect( - await fs.pathExists( - join(srcPath, 'page-layouts', 'example-record-page-layout.ts'), - ), - ).toBe(true); - expect( - await fs.pathExists(join(srcPath, 'views', 'example-view.ts')), - ).toBe(true); - expect( - await fs.pathExists( - join( - srcPath, - 'navigation-menu-items', - 'example-navigation-menu-item.ts', - ), - ), - ).toBe(true); - - expect( - await fs.pathExists( - join(srcPath, '__tests__', 'app-install.integration-test.ts'), - ), - ).toBe(true); - - expect( - await fs.pathExists( - join(testAppDirectory, '.github', 'workflows', 'ci.yml'), - ), - ).toBe(true); - - // Install functions should always exist - expect( - await fs.pathExists( - join(srcPath, 'logic-functions', 'pre-install.ts'), - ), - ).toBe(true); - expect( - await fs.pathExists( - join(srcPath, 'logic-functions', 'post-install.ts'), - ), - ).toBe(true); - }); - }); - - describe('minimal mode (no examples)', () => { - it('should create only core files when no examples are enabled', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: NO_EXAMPLES, - }); - - const srcPath = join(testAppDirectory, 'src'); - - expect(await fs.pathExists(join(srcPath, APPLICATION_FILE_NAME))).toBe( - true, - ); - expect( - await fs.pathExists(join(srcPath, 'roles', DEFAULT_ROLE_FILE_NAME)), - ).toBe(true); - - // Install functions should always exist (not gated by exampleOptions) - expect( - await fs.pathExists( - join(srcPath, 'logic-functions', 'pre-install.ts'), - ), - ).toBe(true); - expect( - await fs.pathExists( - join(srcPath, 'logic-functions', 'post-install.ts'), - ), - ).toBe(true); - - expect( - await fs.pathExists(join(srcPath, 'objects', 'example-object.ts')), - ).toBe(false); - expect( - await fs.pathExists(join(srcPath, 'fields', 'example-field.ts')), - ).toBe(false); - expect( - await fs.pathExists( - join(srcPath, 'logic-functions', 'hello-world.ts'), - ), - ).toBe(false); - expect( - await fs.pathExists( - join(srcPath, 'logic-functions', 'create-hello-world-company.ts'), - ), - ).toBe(false); - expect( - await fs.pathExists( - join(srcPath, 'front-components', 'hello-world.tsx'), - ), - ).toBe(false); - expect( - await fs.pathExists( - join(srcPath, 'page-layouts', 'example-record-page-layout.ts'), - ), - ).toBe(false); - expect( - await fs.pathExists(join(srcPath, 'views', 'example-view.ts')), - ).toBe(false); - expect( - await fs.pathExists( - join( - srcPath, - 'navigation-menu-items', - 'example-navigation-menu-item.ts', - ), - ), - ).toBe(false); - expect( - await fs.pathExists( - join(srcPath, '__tests__', 'app-install.integration-test.ts'), - ), - ).toBe(false); - - expect( - await fs.pathExists( - join(testAppDirectory, '.github', 'workflows', 'ci.yml'), - ), - ).toBe(false); - }); - }); - - describe('selective examples', () => { - it('should create front component and page layout when only front component option is enabled', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: { - includeExampleObject: false, - includeExampleField: false, - includeExampleSkill: false, - includeExampleAgent: false, - includeExampleLogicFunction: false, - includeExampleFrontComponent: true, - includeExampleView: false, - includeExampleNavigationMenuItem: false, - includeExampleIntegrationTest: false, - }, - }); - - const srcPath = join(testAppDirectory, 'src'); - - expect( - await fs.pathExists( - join(srcPath, 'front-components', 'hello-world.tsx'), - ), - ).toBe(true); - expect( - await fs.pathExists( - join(srcPath, 'page-layouts', 'example-record-page-layout.ts'), - ), - ).toBe(true); - expect( - await fs.pathExists(join(srcPath, 'objects', 'example-object.ts')), - ).toBe(false); - expect( - await fs.pathExists(join(srcPath, 'fields', 'example-field.ts')), - ).toBe(false); - expect( - await fs.pathExists( - join(srcPath, 'logic-functions', 'hello-world.ts'), - ), - ).toBe(false); - }); - - it('should create only logic function when only that option is enabled', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: { - includeExampleObject: false, - includeExampleSkill: false, - includeExampleAgent: false, - includeExampleField: false, - includeExampleLogicFunction: true, - includeExampleFrontComponent: false, - includeExampleView: false, - includeExampleNavigationMenuItem: false, - includeExampleIntegrationTest: false, - }, - }); - - const srcPath = join(testAppDirectory, 'src'); - - expect( - await fs.pathExists( - join(srcPath, 'logic-functions', 'hello-world.ts'), - ), - ).toBe(true); - expect( - await fs.pathExists( - join(srcPath, 'logic-functions', 'create-hello-world-company.ts'), - ), - ).toBe(true); - expect( - await fs.pathExists(join(srcPath, 'objects', 'example-object.ts')), - ).toBe(false); - }); - }); - }); - - describe('example object', () => { - it('should create example-object.ts with defineObject and correct structure', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: ALL_EXAMPLES, - }); - - const objectPath = join( - testAppDirectory, - 'src', - 'objects', - 'example-object.ts', - ); - - expect(await fs.pathExists(objectPath)).toBe(true); - - const content = await fs.readFile(objectPath, 'utf8'); - - expect(content).toContain( - "import { defineObject, FieldType } from 'twenty-sdk'", - ); - expect(content).toContain('export default defineObject({'); - expect(content).toContain( - 'export const EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER', - ); - expect(content).toContain('export const NAME_FIELD_UNIVERSAL_IDENTIFIER'); - expect(content).toContain("nameSingular: 'exampleItem'"); - expect(content).toContain("namePlural: 'exampleItems'"); - expect(content).toContain('FieldType.TEXT'); - expect(content).toContain( - 'labelIdentifierFieldMetadataUniversalIdentifier: NAME_FIELD_UNIVERSAL_IDENTIFIER', - ); - }); - - it('should generate unique UUIDs for example objects across apps', async () => { - const firstAppDir = join(testAppDirectory, 'app1'); - await fs.ensureDir(firstAppDir); - await seedTsconfig(firstAppDir); - await copyBaseApplicationProject({ - appName: 'app-one', - appDisplayName: 'App One', - appDescription: 'First app', - appDirectory: firstAppDir, - exampleOptions: ALL_EXAMPLES, - }); - - const secondAppDir = join(testAppDirectory, 'app2'); - await fs.ensureDir(secondAppDir); - await seedTsconfig(secondAppDir); - await copyBaseApplicationProject({ - appName: 'app-two', - appDisplayName: 'App Two', - appDescription: 'Second app', - appDirectory: secondAppDir, - exampleOptions: ALL_EXAMPLES, - }); - - const firstContent = await fs.readFile( - join(firstAppDir, 'src', 'objects', 'example-object.ts'), - 'utf8', - ); - const secondContent = await fs.readFile( - join(secondAppDir, 'src', 'objects', 'example-object.ts'), - 'utf8', - ); - - const uuidRegex = - /EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER =\s*'([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})'/; - const firstUuid = firstContent.match(uuidRegex)?.[1]; - const secondUuid = secondContent.match(uuidRegex)?.[1]; - - expect(firstUuid).toBeDefined(); - expect(secondUuid).toBeDefined(); - expect(firstUuid).not.toBe(secondUuid); - }); - }); - - describe('example field', () => { - it('should create example-field.ts with defineField referencing the object', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: ALL_EXAMPLES, - }); - - const fieldPath = join( - testAppDirectory, - 'src', - 'fields', - 'example-field.ts', - ); - - expect(await fs.pathExists(fieldPath)).toBe(true); - - const content = await fs.readFile(fieldPath, 'utf8'); - - expect(content).toContain( - "import { defineField, FieldType } from 'twenty-sdk'", - ); - expect(content).toContain( - "import { EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER } from 'src/objects/example-object'", - ); - expect(content).toContain('export default defineField({'); - expect(content).toContain( - 'objectUniversalIdentifier: EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER', - ); - expect(content).toContain('FieldType.NUMBER'); - expect(content).toContain("name: 'priority'"); - }); - }); - - describe('example view', () => { - it('should create example-view.ts with defineView referencing the object', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: ALL_EXAMPLES, - }); - - const viewPath = join( - testAppDirectory, - 'src', - 'views', - 'example-view.ts', - ); - - expect(await fs.pathExists(viewPath)).toBe(true); - - const content = await fs.readFile(viewPath, 'utf8'); - - expect(content).toContain( - "import { defineView, ViewKey } from 'twenty-sdk'", - ); - expect(content).toContain( - "import { EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER, NAME_FIELD_UNIVERSAL_IDENTIFIER } from 'src/objects/example-object'", - ); - expect(content).toContain('export default defineView({'); - expect(content).toContain( - 'objectUniversalIdentifier: EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER', - ); - expect(content).toContain("name: 'All example items'"); - expect(content).toContain('fields: ['); - expect(content).toContain( - 'fieldMetadataUniversalIdentifier: NAME_FIELD_UNIVERSAL_IDENTIFIER', - ); - expect(content).toContain('isVisible: true'); - expect(content).toContain('key: ViewKey.INDEX'); - expect(content).toContain('size: 200'); - }); - }); - - describe('example navigation menu item', () => { - it('should create example-navigation-menu-item.ts with defineNavigationMenuItem', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: ALL_EXAMPLES, - }); - - const navPath = join( - testAppDirectory, - 'src', - 'navigation-menu-items', - 'example-navigation-menu-item.ts', - ); - - expect(await fs.pathExists(navPath)).toBe(true); - - const content = await fs.readFile(navPath, 'utf8'); - - expect(content).toContain( - "import { defineNavigationMenuItem } from 'twenty-sdk'", - ); - expect(content).toContain('export default defineNavigationMenuItem({'); - expect(content).toContain("name: 'example-navigation-menu-item'"); - expect(content).toContain("icon: 'IconList'"); - expect(content).toContain("color: 'blue'"); - expect(content).toContain('position: 0'); - }); - }); - - describe('pre-install logic function', () => { - it('should create pre-install.ts with definePreInstallLogicFunction and typed payload', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: NO_EXAMPLES, - }); - - const preInstallPath = join( - testAppDirectory, - 'src', - 'logic-functions', - 'pre-install.ts', - ); - - expect(await fs.pathExists(preInstallPath)).toBe(true); - - const content = await fs.readFile(preInstallPath, 'utf8'); - - expect(content).toContain( - "import { definePreInstallLogicFunction, type InstallLogicFunctionPayload } from 'twenty-sdk'", - ); - expect(content).toContain( - 'export default definePreInstallLogicFunction({', - ); - expect(content).toContain("name: 'pre-install'"); - expect(content).toContain('timeoutSeconds: 300'); - expect(content).toContain( - 'const handler = async (payload: InstallLogicFunctionPayload): Promise', - ); - expect(content).toContain('payload.previousVersion'); - - // Verify it has a universalIdentifier (UUID format) - expect(content).toMatch( - /universalIdentifier: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'/, - ); - }); - - it('should always create pre-install.ts regardless of example options', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: NO_EXAMPLES, - }); - - const preInstallPath = join( - testAppDirectory, - 'src', - 'logic-functions', - 'pre-install.ts', - ); - - expect(await fs.pathExists(preInstallPath)).toBe(true); - }); - }); - - describe('integration test', () => { - it('should include vitest and test scripts in package.json when enabled', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: ALL_EXAMPLES, - }); - - const packageJson = await fs.readJson( - join(testAppDirectory, 'package.json'), - ); - - expect(packageJson.scripts.test).toBe('vitest run'); - expect(packageJson.scripts['test:watch']).toBe('vitest'); - expect(packageJson.devDependencies.vitest).toBeDefined(); - }); - - it('should not include vitest or test scripts when disabled', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: NO_EXAMPLES, - }); - - const packageJson = await fs.readJson( - join(testAppDirectory, 'package.json'), - ); - - expect(packageJson.scripts.test).toBeUndefined(); - expect(packageJson.scripts['test:watch']).toBeUndefined(); - expect(packageJson.devDependencies.vitest).toBeUndefined(); - }); - }); - - describe('post-install logic function', () => { - it('should create post-install.ts with definePostInstallLogicFunction and typed payload', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: NO_EXAMPLES, - }); - - const postInstallPath = join( - testAppDirectory, - 'src', - 'logic-functions', - 'post-install.ts', - ); - - expect(await fs.pathExists(postInstallPath)).toBe(true); - - const content = await fs.readFile(postInstallPath, 'utf8'); - - expect(content).toContain( - "import { definePostInstallLogicFunction, type InstallLogicFunctionPayload } from 'twenty-sdk'", - ); - expect(content).toContain( - 'export default definePostInstallLogicFunction({', - ); - expect(content).toContain("name: 'post-install'"); - expect(content).toContain('timeoutSeconds: 300'); - expect(content).toContain( - 'const handler = async (payload: InstallLogicFunctionPayload): Promise', - ); - expect(content).toContain('payload.previousVersion'); - - // Verify it has a universalIdentifier (UUID format) - expect(content).toMatch( - /universalIdentifier: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'/, - ); - }); - - it('should always create post-install.ts regardless of example options', async () => { - await copyBaseApplicationProject({ - appName: 'my-test-app', - appDisplayName: 'My Test App', - appDescription: 'A test application', - appDirectory: testAppDirectory, - exampleOptions: NO_EXAMPLES, - }); - - const postInstallPath = join( - testAppDirectory, - 'src', - 'logic-functions', - 'post-install.ts', - ); - - expect(await fs.pathExists(postInstallPath)).toBe(true); - }); - }); }); diff --git a/packages/create-twenty-app/src/utils/__tests__/test-template.spec.ts b/packages/create-twenty-app/src/utils/__tests__/test-template.spec.ts deleted file mode 100644 index 64920f9f95..0000000000 --- a/packages/create-twenty-app/src/utils/__tests__/test-template.spec.ts +++ /dev/null @@ -1,177 +0,0 @@ -import { scaffoldIntegrationTest } from '@/utils/test-template'; -import * as fs from 'fs-extra'; -import { tmpdir } from 'os'; -import { join } from 'path'; - -describe('scaffoldIntegrationTest', () => { - let testAppDirectory: string; - let sourceFolderPath: string; - - beforeEach(async () => { - testAppDirectory = join( - tmpdir(), - `test-twenty-app-${Date.now()}-${Math.random().toString(36).slice(2)}`, - ); - sourceFolderPath = join(testAppDirectory, 'src'); - await fs.ensureDir(sourceFolderPath); - - await fs.writeJson(join(testAppDirectory, 'tsconfig.json'), { - compilerOptions: { - paths: { 'src/*': ['./src/*'] }, - }, - exclude: ['node_modules', 'dist', '**/*.integration-test.ts'], - }); - }); - - afterEach(async () => { - if (testAppDirectory && (await fs.pathExists(testAppDirectory))) { - await fs.remove(testAppDirectory); - } - }); - - describe('integration test file', () => { - it('should create app-install.integration-test.ts with correct structure', async () => { - await scaffoldIntegrationTest({ - appDirectory: testAppDirectory, - sourceFolderPath, - }); - - const testPath = join( - sourceFolderPath, - '__tests__', - 'app-install.integration-test.ts', - ); - - expect(await fs.pathExists(testPath)).toBe(true); - - const content = await fs.readFile(testPath, 'utf8'); - - expect(content).toContain( - "import { appBuild, appDeploy, appInstall, appUninstall } from 'twenty-sdk/cli'", - ); - expect(content).toContain( - "import { MetadataApiClient } from 'twenty-client-sdk/metadata'", - ); - expect(content).toContain( - "import { APPLICATION_UNIVERSAL_IDENTIFIER } from 'src/application-config'", - ); - expect(content).toContain('appBuild'); - expect(content).toContain('appDeploy'); - expect(content).toContain('appInstall'); - expect(content).toContain('appUninstall'); - expect(content).toContain('new MetadataApiClient()'); - expect(content).toContain('findManyApplications'); - expect(content).toContain('APPLICATION_UNIVERSAL_IDENTIFIER'); - }); - }); - - describe('setup-test file', () => { - it('should create setup-test.ts with SDK config bootstrap', async () => { - await scaffoldIntegrationTest({ - appDirectory: testAppDirectory, - sourceFolderPath, - }); - - const setupTestPath = join( - sourceFolderPath, - '__tests__', - 'setup-test.ts', - ); - - expect(await fs.pathExists(setupTestPath)).toBe(true); - - const content = await fs.readFile(setupTestPath, 'utf8'); - - expect(content).toContain('.twenty-sdk-test'); - expect(content).toContain('config.json'); - expect(content).toContain('process.env.TWENTY_API_URL'); - expect(content).toContain('process.env.TWENTY_API_KEY'); - expect(content).toContain('assertServerIsReachable'); - }); - }); - - describe('vitest config', () => { - it('should create vitest.config.ts with env vars and setup file', async () => { - await scaffoldIntegrationTest({ - appDirectory: testAppDirectory, - sourceFolderPath, - }); - - const vitestConfigPath = join(testAppDirectory, 'vitest.config.ts'); - - expect(await fs.pathExists(vitestConfigPath)).toBe(true); - - const content = await fs.readFile(vitestConfigPath, 'utf8'); - - expect(content).toContain('TWENTY_API_KEY'); - expect(content).not.toContain('TWENTY_TEST_API_KEY'); - expect(content).toContain('setup-test.ts'); - expect(content).toContain('tsconfig.spec.json'); - expect(content).toContain('integration-test.ts'); - }); - }); - - describe('github workflow', () => { - it('should create .github/workflows/ci.yml with correct structure', async () => { - await scaffoldIntegrationTest({ - appDirectory: testAppDirectory, - sourceFolderPath, - }); - - const workflowPath = join( - testAppDirectory, - '.github', - 'workflows', - 'ci.yml', - ); - - expect(await fs.pathExists(workflowPath)).toBe(true); - - const content = await fs.readFile(workflowPath, 'utf8'); - - expect(content).toContain('name: CI'); - expect(content).toContain('TWENTY_VERSION: latest'); - expect(content).toContain('twenty-version: ${{ env.TWENTY_VERSION }}'); - expect(content).toContain('actions/checkout@v4'); - expect(content).toContain('spawn-twenty-docker-image@main'); - expect(content).toContain('actions/setup-node@v4'); - expect(content).toContain('yarn install --immutable'); - expect(content).toContain('yarn test'); - expect(content).toContain('TWENTY_API_URL'); - expect(content).toContain('TWENTY_API_KEY'); - }); - }); - - describe('tsconfig.spec.json', () => { - it('should create tsconfig.spec.json extending the base tsconfig', async () => { - await scaffoldIntegrationTest({ - appDirectory: testAppDirectory, - sourceFolderPath, - }); - - const tsconfigSpecPath = join(testAppDirectory, 'tsconfig.spec.json'); - - expect(await fs.pathExists(tsconfigSpecPath)).toBe(true); - - const tsconfigSpec = await fs.readJson(tsconfigSpecPath); - - expect(tsconfigSpec.extends).toBe('./tsconfig.json'); - expect(tsconfigSpec.compilerOptions.composite).toBe(true); - expect(tsconfigSpec.include).toContain('src/**/*.ts'); - expect(tsconfigSpec.exclude).not.toContain('**/*.integration-test.ts'); - }); - - it('should add a reference to tsconfig.spec.json in tsconfig.json', async () => { - await scaffoldIntegrationTest({ - appDirectory: testAppDirectory, - sourceFolderPath, - }); - - const tsconfig = await fs.readJson( - join(testAppDirectory, 'tsconfig.json'), - ); - - expect(tsconfig.references).toEqual([{ path: './tsconfig.spec.json' }]); - }); - }); -}); diff --git a/packages/create-twenty-app/src/utils/app-template.ts b/packages/create-twenty-app/src/utils/app-template.ts index 1adbad4151..c635b0a7e0 100644 --- a/packages/create-twenty-app/src/utils/app-template.ts +++ b/packages/create-twenty-app/src/utils/app-template.ts @@ -1,11 +1,9 @@ import * as fs from 'fs-extra'; import { join } from 'path'; -import { ASSETS_DIR } from 'twenty-shared/application'; import { v4 } from 'uuid'; -import { type ExampleOptions } from '@/types/scaffolding-options'; -import { scaffoldIntegrationTest } from '@/utils/test-template'; import createTwentyAppPackageJson from 'package.json'; +import chalk from 'chalk'; const SRC_FOLDER = 'src'; @@ -14,795 +12,77 @@ export const copyBaseApplicationProject = async ({ appDisplayName, appDescription, appDirectory, - exampleOptions, }: { appName: string; appDisplayName: string; appDescription: string; appDirectory: string; - exampleOptions: ExampleOptions; }) => { - await fs.copy(join(__dirname, './constants/base-application'), appDirectory); + console.log(chalk.gray('Generating application project...')); + await fs.copy(join(__dirname, './constants/template'), appDirectory); - await createPackageJson({ - appName, + await renameGitignore({ appDirectory }); + + await generateUniversalIdentifiers({ + appDisplayName, + appDescription, appDirectory, - includeExampleIntegrationTest: exampleOptions.includeExampleIntegrationTest, }); - await createYarnLock(appDirectory); - - await createGitignore(appDirectory); - - await createNvmrc(appDirectory); - - await createPublicAssetDirectory(appDirectory); - - const sourceFolderPath = join(appDirectory, SRC_FOLDER); - - await fs.ensureDir(sourceFolderPath); - - await createDefaultRoleConfig({ - displayName: appDisplayName, - appDirectory: sourceFolderPath, - fileFolder: 'roles', - fileName: 'default-role.ts', - }); - - if (exampleOptions.includeExampleObject) { - await createExampleObject({ - appDirectory: sourceFolderPath, - fileFolder: 'objects', - fileName: 'example-object.ts', - }); - } - - if (exampleOptions.includeExampleField) { - await createExampleField({ - appDirectory: sourceFolderPath, - fileFolder: 'fields', - fileName: 'example-field.ts', - }); - } - - if (exampleOptions.includeExampleLogicFunction) { - await createDefaultFunction({ - appDirectory: sourceFolderPath, - fileFolder: 'logic-functions', - fileName: 'hello-world.ts', - }); - - await createCreateCompanyFunction({ - appDirectory: sourceFolderPath, - fileFolder: 'logic-functions', - fileName: 'create-hello-world-company.ts', - }); - } - - if (exampleOptions.includeExampleFrontComponent) { - await createDefaultFrontComponent({ - appDirectory: sourceFolderPath, - fileFolder: 'front-components', - fileName: 'hello-world.tsx', - }); - - await createExamplePageLayout({ - appDirectory: sourceFolderPath, - fileFolder: 'page-layouts', - fileName: 'example-record-page-layout.ts', - }); - } - - if (exampleOptions.includeExampleView) { - await createExampleView({ - appDirectory: sourceFolderPath, - fileFolder: 'views', - fileName: 'example-view.ts', - }); - } - - if (exampleOptions.includeExampleNavigationMenuItem) { - await createExampleNavigationMenuItem({ - appDirectory: sourceFolderPath, - fileFolder: 'navigation-menu-items', - fileName: 'example-navigation-menu-item.ts', - }); - } - - if (exampleOptions.includeExampleSkill) { - await createExampleSkill({ - appDirectory: sourceFolderPath, - fileFolder: 'skills', - fileName: 'example-skill.ts', - }); - } - - if (exampleOptions.includeExampleAgent) { - await createExampleAgent({ - appDirectory: sourceFolderPath, - fileFolder: 'agents', - fileName: 'example-agent.ts', - }); - } - - if (exampleOptions.includeExampleIntegrationTest) { - await scaffoldIntegrationTest({ - appDirectory, - sourceFolderPath, - }); - } - - await createDefaultPreInstallFunction({ - appDirectory: sourceFolderPath, - fileFolder: 'logic-functions', - fileName: 'pre-install.ts', - }); - - await createDefaultPostInstallFunction({ - appDirectory: sourceFolderPath, - fileFolder: 'logic-functions', - fileName: 'post-install.ts', - }); - - await createApplicationConfig({ - displayName: appDisplayName, - description: appDescription, - appDirectory: sourceFolderPath, - fileName: 'application-config.ts', - }); + await updatePackageJson({ appName, appDirectory }); }; -const createPublicAssetDirectory = async (appDirectory: string) => { - await fs.ensureDir(join(appDirectory, ASSETS_DIR)); +const renameGitignore = async ({ appDirectory }: { appDirectory: string }) => { + const gitignorePath = join(appDirectory, 'gitignore'); + + if (await fs.pathExists(gitignorePath)) { + await fs.rename(gitignorePath, join(appDirectory, '.gitignore')); + } }; -const createGitignore = async (appDirectory: string) => { - const gitignoreContent = `# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.* -.yarn - -# codegen -generated - -# testing -/coverage - -# dev -/dist/ - -.twenty - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.pnpm-debug.log* - -# env files (can opt-in for committing if needed) -.env* - -# typescript -*.tsbuildinfo -*.d.ts -`; - - await fs.writeFile(join(appDirectory, '.gitignore'), gitignoreContent); -}; - -const createNvmrc = async (appDirectory: string) => { - await fs.writeFile(join(appDirectory, '.nvmrc'), '24.5.0\n'); -}; - -const createDefaultRoleConfig = async ({ - displayName, +const generateUniversalIdentifiers = async ({ + appDisplayName, + appDescription, appDirectory, - fileFolder, - fileName, }: { - displayName: string; + appDisplayName: string; + appDescription: string; appDirectory: string; - fileFolder?: string; - fileName: string; }) => { - const universalIdentifier = v4(); + const universalIdentifiersPath = join( + appDirectory, + SRC_FOLDER, + 'constants', + 'universal-identifiers.ts', + ); - const content = `import { defineRole } from 'twenty-sdk'; + const universalIdentifiersFileContent = await fs.readFile( + universalIdentifiersPath, + 'utf-8', + ); -export const DEFAULT_ROLE_UNIVERSAL_IDENTIFIER = - '${universalIdentifier}'; - -export default defineRole({ - universalIdentifier: DEFAULT_ROLE_UNIVERSAL_IDENTIFIER, - label: '${displayName} default function role', - description: '${displayName} default function role', - canReadAllObjectRecords: true, - canUpdateAllObjectRecords: true, - canSoftDeleteAllObjectRecords: true, - canDestroyAllObjectRecords: false, -}); -`; - - await fs.ensureDir(join(appDirectory, fileFolder ?? '')); - await fs.writeFile(join(appDirectory, fileFolder ?? '', fileName), content); -}; - -const createDefaultFrontComponent = async ({ - appDirectory, - fileFolder, - fileName, -}: { - appDirectory: string; - fileFolder?: string; - fileName: string; -}) => { - const universalIdentifier = v4(); - - const content = `import { useEffect, useState } from 'react'; -import { CoreApiClient, CoreSchema } from 'twenty-client-sdk/core'; -import { defineFrontComponent } from 'twenty-sdk'; - -export const HELLO_WORLD_FRONT_COMPONENT_UNIVERSAL_IDENTIFIER = - '${universalIdentifier}'; - -export const HelloWorld = () => { - const client = new CoreApiClient(); - const [data, setData] = useState< - Pick | undefined - >(undefined); - - useEffect(() => { - const fetchData = async () => { - const response = await client.query({ - company: { - name: true, - id: true, - __args: { - filter: { - position: { - eq: 1, - }, - }, - }, - }, - }); - - setData(response.company); - }; - - fetchData(); - }, []); - - return ( -
-

Hello, World!

-

This is your first front component.

- {data ? ( -
-

Company name: {data.name}

-

Company id: {data.id}

-
- ) : ( -

Company not found

- )} -
+ await fs.writeFile( + universalIdentifiersPath, + universalIdentifiersFileContent + .replace('DISPLAY-NAME-TO-BE-GENERATED', appDisplayName) + .replace('DESCRIPTION-TO-BE-GENERATED', appDescription) + .replace(/UUID-TO-BE-GENERATED/g, () => v4()), ); }; -export default defineFrontComponent({ - universalIdentifier: HELLO_WORLD_FRONT_COMPONENT_UNIVERSAL_IDENTIFIER, - name: 'hello-world-front-component', - description: 'A sample front component', - component: HelloWorld, -}); -`; - - await fs.ensureDir(join(appDirectory, fileFolder ?? '')); - await fs.writeFile(join(appDirectory, fileFolder ?? '', fileName), content); -}; - -const createExamplePageLayout = async ({ - appDirectory, - fileFolder, - fileName, -}: { - appDirectory: string; - fileFolder?: string; - fileName: string; -}) => { - const pageLayoutUniversalIdentifier = v4(); - const tabUniversalIdentifier = v4(); - const widgetUniversalIdentifier = v4(); - - const content = `import { EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER } from 'src/objects/example-object'; -import { HELLO_WORLD_FRONT_COMPONENT_UNIVERSAL_IDENTIFIER } from 'src/front-components/hello-world'; -import { definePageLayout, PageLayoutTabLayoutMode } from 'twenty-sdk'; - -export default definePageLayout({ - universalIdentifier: '${pageLayoutUniversalIdentifier}', - name: 'Example Record Page', - type: 'RECORD_PAGE', - objectUniversalIdentifier: EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER, - tabs: [ - { - universalIdentifier: '${tabUniversalIdentifier}', - title: 'Hello World', - position: 50, - icon: 'IconWorld', - layoutMode: PageLayoutTabLayoutMode.CANVAS, - widgets: [ - { - universalIdentifier: '${widgetUniversalIdentifier}', - title: 'Hello World', - type: 'FRONT_COMPONENT', - configuration: { - configurationType: 'FRONT_COMPONENT', - frontComponentUniversalIdentifier: - HELLO_WORLD_FRONT_COMPONENT_UNIVERSAL_IDENTIFIER, - }, - }, - ], - }, - ], -}); -`; - - await fs.ensureDir(join(appDirectory, fileFolder ?? '')); - await fs.writeFile(join(appDirectory, fileFolder ?? '', fileName), content); -}; - -const createDefaultFunction = async ({ - appDirectory, - fileFolder, - fileName, -}: { - appDirectory: string; - fileFolder?: string; - fileName: string; -}) => { - const universalIdentifier = v4(); - - const content = `import { defineLogicFunction } from 'twenty-sdk'; - -const handler = async (): Promise<{ message: string }> => { - return { message: 'Hello, World!' }; -}; - -export default defineLogicFunction({ - universalIdentifier: '${universalIdentifier}', - name: 'hello-world-logic-function', - description: 'A simple logic function', - timeoutSeconds: 5, - handler, - httpRouteTriggerSettings: { - path: '/hello-world-logic-function', - httpMethod: 'GET', - isAuthRequired: false, - }, -}); -`; - - await fs.ensureDir(join(appDirectory, fileFolder ?? '')); - await fs.writeFile(join(appDirectory, fileFolder ?? '', fileName), content); -}; - -const createCreateCompanyFunction = async ({ - appDirectory, - fileFolder, - fileName, -}: { - appDirectory: string; - fileFolder?: string; - fileName: string; -}) => { - const universalIdentifier = v4(); - - const content = `import { CoreApiClient } from 'twenty-client-sdk/core'; -import { defineLogicFunction } from 'twenty-sdk'; - -const handler = async (): Promise<{ message: string }> => { - const client = new CoreApiClient(); - - const { createCompany } = await client.mutation({ - createCompany: { - __args: { - data: { - name: 'Hello World', - }, - }, - id: true, - name: true, - }, - }); - - if (!createCompany?.id || !createCompany?.name) { - throw new Error('Failed to create company: missing id or name in response'); - } - - return { - message: \`Created company "\${createCompany.name}" with id \${createCompany.id}\`, - }; -}; - -export default defineLogicFunction({ - universalIdentifier: '${universalIdentifier}', - name: 'create-hello-world-company', - description: 'Creates a company called Hello World', - timeoutSeconds: 5, - handler, - httpRouteTriggerSettings: { - path: '/create-hello-world-company', - httpMethod: 'POST', - isAuthRequired: true, - }, -}); -`; - - await fs.ensureDir(join(appDirectory, fileFolder ?? '')); - await fs.writeFile(join(appDirectory, fileFolder ?? '', fileName), content); -}; - -const createDefaultPreInstallFunction = async ({ - appDirectory, - fileFolder, - fileName, -}: { - appDirectory: string; - fileFolder?: string; - fileName: string; -}) => { - const universalIdentifier = v4(); - - const content = `import { definePreInstallLogicFunction, type InstallLogicFunctionPayload } from 'twenty-sdk'; - -const handler = async (payload: InstallLogicFunctionPayload): Promise => { - console.log('Pre install logic function executed successfully!', payload.previousVersion); -}; - -export default definePreInstallLogicFunction({ - universalIdentifier: '${universalIdentifier}', - name: 'pre-install', - description: 'Runs before installation to prepare the application.', - timeoutSeconds: 300, - handler, -}); -`; - - await fs.ensureDir(join(appDirectory, fileFolder ?? '')); - await fs.writeFile(join(appDirectory, fileFolder ?? '', fileName), content); -}; - -const createDefaultPostInstallFunction = async ({ - appDirectory, - fileFolder, - fileName, -}: { - appDirectory: string; - fileFolder?: string; - fileName: string; -}) => { - const universalIdentifier = v4(); - - const content = `import { definePostInstallLogicFunction, type InstallLogicFunctionPayload } from 'twenty-sdk'; - -const handler = async (payload: InstallLogicFunctionPayload): Promise => { - console.log('Post install logic function executed successfully!', payload.previousVersion); -}; - -export default definePostInstallLogicFunction({ - universalIdentifier: '${universalIdentifier}', - name: 'post-install', - description: 'Runs after installation to set up the application.', - timeoutSeconds: 300, - handler, -}); -`; - - await fs.ensureDir(join(appDirectory, fileFolder ?? '')); - await fs.writeFile(join(appDirectory, fileFolder ?? '', fileName), content); -}; - -const createExampleObject = async ({ - appDirectory, - fileFolder, - fileName, -}: { - appDirectory: string; - fileFolder?: string; - fileName: string; -}) => { - const objectUniversalIdentifier = v4(); - const nameFieldUniversalIdentifier = v4(); - - const content = `import { defineObject, FieldType } from 'twenty-sdk'; - -export const EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER = - '${objectUniversalIdentifier}'; - -export const NAME_FIELD_UNIVERSAL_IDENTIFIER = - '${nameFieldUniversalIdentifier}'; - -export default defineObject({ - universalIdentifier: EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER, - nameSingular: 'exampleItem', - namePlural: 'exampleItems', - labelSingular: 'Example item', - labelPlural: 'Example items', - description: 'A sample custom object', - icon: 'IconBox', - labelIdentifierFieldMetadataUniversalIdentifier: NAME_FIELD_UNIVERSAL_IDENTIFIER, - fields: [ - { - universalIdentifier: NAME_FIELD_UNIVERSAL_IDENTIFIER, - type: FieldType.TEXT, - name: 'name', - label: 'Name', - description: 'Name of the example item', - icon: 'IconAbc', - }, - ], -}); -`; - - await fs.ensureDir(join(appDirectory, fileFolder ?? '')); - await fs.writeFile(join(appDirectory, fileFolder ?? '', fileName), content); -}; - -const createExampleField = async ({ - appDirectory, - fileFolder, - fileName, -}: { - appDirectory: string; - fileFolder?: string; - fileName: string; -}) => { - const universalIdentifier = v4(); - - const content = `import { defineField, FieldType } from 'twenty-sdk'; -import { EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER } from 'src/objects/example-object'; - -export default defineField({ - objectUniversalIdentifier: EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER, - universalIdentifier: '${universalIdentifier}', - type: FieldType.NUMBER, - name: 'priority', - label: 'Priority', - description: 'Priority level for the example item (1-10)', -}); -`; - - await fs.ensureDir(join(appDirectory, fileFolder ?? '')); - await fs.writeFile(join(appDirectory, fileFolder ?? '', fileName), content); -}; - -const createExampleView = async ({ - appDirectory, - fileFolder, - fileName, -}: { - appDirectory: string; - fileFolder?: string; - fileName: string; -}) => { - const universalIdentifier = v4(); - const viewFieldUniversalIdentifier = v4(); - - const content = `import { defineView, ViewKey } from 'twenty-sdk'; -import { EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER, NAME_FIELD_UNIVERSAL_IDENTIFIER } from 'src/objects/example-object'; - -export const EXAMPLE_VIEW_UNIVERSAL_IDENTIFIER = '${universalIdentifier}'; - -export default defineView({ - universalIdentifier: EXAMPLE_VIEW_UNIVERSAL_IDENTIFIER, - name: 'All example items', - objectUniversalIdentifier: EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER, - icon: 'IconList', - key: ViewKey.INDEX, - position: 0, - fields: [ - { - universalIdentifier: '${viewFieldUniversalIdentifier}', - fieldMetadataUniversalIdentifier: NAME_FIELD_UNIVERSAL_IDENTIFIER, - position: 0, - isVisible: true, - size: 200, - }, - ], -}); -`; - - await fs.ensureDir(join(appDirectory, fileFolder ?? '')); - await fs.writeFile(join(appDirectory, fileFolder ?? '', fileName), content); -}; - -const createExampleNavigationMenuItem = async ({ - appDirectory, - fileFolder, - fileName, -}: { - appDirectory: string; - fileFolder?: string; - fileName: string; -}) => { - const universalIdentifier = v4(); - - const content = `import { defineNavigationMenuItem } from 'twenty-sdk'; -import { EXAMPLE_VIEW_UNIVERSAL_IDENTIFIER } from 'src/views/example-view'; - -export default defineNavigationMenuItem({ - universalIdentifier: '${universalIdentifier}', - name: 'example-navigation-menu-item', - icon: 'IconList', - color: 'blue', - position: 0, - type: 'VIEW', - viewUniversalIdentifier: EXAMPLE_VIEW_UNIVERSAL_IDENTIFIER, -}); -`; - - await fs.ensureDir(join(appDirectory, fileFolder ?? '')); - await fs.writeFile(join(appDirectory, fileFolder ?? '', fileName), content); -}; - -const createExampleSkill = async ({ - appDirectory, - fileFolder, - fileName, -}: { - appDirectory: string; - fileFolder?: string; - fileName: string; -}) => { - const universalIdentifier = v4(); - - const content = `import { defineSkill } from 'twenty-sdk'; - -export const EXAMPLE_SKILL_UNIVERSAL_IDENTIFIER = - '${universalIdentifier}'; - -export default defineSkill({ - universalIdentifier: EXAMPLE_SKILL_UNIVERSAL_IDENTIFIER, - name: 'example-skill', - label: 'Example Skill', - description: 'A sample skill for your application', - icon: 'IconBrain', - content: 'Add your skill instructions here. Skills provide context and capabilities to AI agents.', -}); -`; - - await fs.ensureDir(join(appDirectory, fileFolder ?? '')); - await fs.writeFile(join(appDirectory, fileFolder ?? '', fileName), content); -}; - -const createExampleAgent = async ({ - appDirectory, - fileFolder, - fileName, -}: { - appDirectory: string; - fileFolder?: string; - fileName: string; -}) => { - const universalIdentifier = v4(); - - const content = `import { defineAgent } from 'twenty-sdk'; - -export const EXAMPLE_AGENT_UNIVERSAL_IDENTIFIER = - '${universalIdentifier}'; - -export default defineAgent({ - universalIdentifier: EXAMPLE_AGENT_UNIVERSAL_IDENTIFIER, - name: 'example-agent', - label: 'Example Agent', - description: 'A sample AI agent for your application', - icon: 'IconRobot', - prompt: 'You are a helpful assistant. Help users with their questions and tasks.', -}); -`; - - await fs.ensureDir(join(appDirectory, fileFolder ?? '')); - await fs.writeFile(join(appDirectory, fileFolder ?? '', fileName), content); -}; - -const createApplicationConfig = async ({ - displayName, - description, - appDirectory, - fileFolder, - fileName, -}: { - displayName: string; - description?: string; - appDirectory: string; - fileFolder?: string; - fileName: string; -}) => { - const universalIdentifier = v4(); - - const content = `import { defineApplication } from 'twenty-sdk'; -import { DEFAULT_ROLE_UNIVERSAL_IDENTIFIER } from 'src/roles/default-role'; - -export const APPLICATION_UNIVERSAL_IDENTIFIER = - '${universalIdentifier}'; - -export default defineApplication({ - universalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER, - displayName: '${displayName}', - description: '${description ?? ''}', - defaultRoleUniversalIdentifier: DEFAULT_ROLE_UNIVERSAL_IDENTIFIER, -}); -`; - - await fs.ensureDir(join(appDirectory, fileFolder ?? '')); - await fs.writeFile(join(appDirectory, fileFolder ?? '', fileName), content); -}; - -const createYarnLock = async (appDirectory: string) => { - const yarnLockContent = `# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 -`; - - await fs.writeFile(join(appDirectory, 'yarn.lock'), yarnLockContent); -}; - -const createPackageJson = async ({ +const updatePackageJson = async ({ appName, appDirectory, - includeExampleIntegrationTest, }: { appName: string; appDirectory: string; - includeExampleIntegrationTest: boolean; }) => { - const scripts: Record = { - twenty: 'twenty', - lint: 'oxlint -c .oxlintrc.json .', - 'lint:fix': 'oxlint --fix -c .oxlintrc.json .', - }; + const packageJson = await fs.readJson(join(appDirectory, 'package.json')); - const devDependencies: Record = { - typescript: '^5.9.3', - '@types/node': '^24.7.2', - '@types/react': '^19.0.0', - react: '^19.0.0', - 'react-dom': '^19.0.0', - oxlint: '^0.16.0', - 'twenty-sdk': createTwentyAppPackageJson.version, - 'twenty-client-sdk': createTwentyAppPackageJson.version, - }; - - if (includeExampleIntegrationTest) { - scripts.test = 'vitest run'; - scripts['test:watch'] = 'vitest'; - devDependencies.vitest = '^3.1.1'; - devDependencies['vite-tsconfig-paths'] = '^4.2.1'; - } - - const packageJson = { - name: appName, - version: '0.1.0', - license: 'MIT', - engines: { - node: '^24.5.0', - npm: 'please-use-yarn', - yarn: '>=4.0.2', - }, - keywords: ['twenty-app'], - packageManager: 'yarn@4.9.2', - scripts, - devDependencies, - }; + packageJson.name = appName; + packageJson.dependencies['twenty-sdk'] = createTwentyAppPackageJson.version; + packageJson.dependencies['twenty-client-sdk'] = + createTwentyAppPackageJson.version; await fs.writeFile( join(appDirectory, 'package.json'), diff --git a/packages/create-twenty-app/src/utils/download-example.ts b/packages/create-twenty-app/src/utils/download-example.ts new file mode 100644 index 0000000000..5106b1d44a --- /dev/null +++ b/packages/create-twenty-app/src/utils/download-example.ts @@ -0,0 +1,179 @@ +import { execSync } from 'node:child_process'; +import * as fs from 'fs-extra'; +import { join } from 'path'; +import { tmpdir } from 'node:os'; +import chalk from 'chalk'; + +const TWENTY_REPO_OWNER = 'twentyhq'; +const TWENTY_REPO_NAME = 'twenty'; +const TWENTY_FALLBACK_REF = 'main'; +const TWENTY_EXAMPLES_PATH = 'packages/twenty-apps/examples'; +const TWENTY_EXAMPLES_URL = `https://github.com/${TWENTY_REPO_OWNER}/${TWENTY_REPO_NAME}/tree/${TWENTY_FALLBACK_REF}/${TWENTY_EXAMPLES_PATH}`; + +// Fetches the latest release tag from the repo, or falls back to main +const resolveRef = async (): Promise => { + const response = await fetch( + `https://api.github.com/repos/${TWENTY_REPO_OWNER}/${TWENTY_REPO_NAME}/releases/latest`, + { headers: { Accept: 'application/vnd.github.v3+json' } }, + ); + + if (response.ok) { + const release = (await response.json()) as { tag_name: string }; + + return release.tag_name; + } + + return TWENTY_FALLBACK_REF; +}; + +// Uses the GitHub Contents API to list directories — fast and doesn't download the repo +const fetchGitHubDirectoryContents = async ( + path: string, + ref: string, +): Promise<{ name: string; type: string }[] | null> => { + const apiUrl = `https://api.github.com/repos/${TWENTY_REPO_OWNER}/${TWENTY_REPO_NAME}/contents/${path}?ref=${ref}`; + + const response = await fetch(apiUrl, { + headers: { Accept: 'application/vnd.github.v3+json' }, + }); + + if (!response.ok) { + return null; + } + + const data = await response.json(); + + if (!Array.isArray(data)) { + return null; + } + + return data as { name: string; type: string }[]; +}; + +const listAvailableExamples = async (ref: string): Promise => { + const contents = await fetchGitHubDirectoryContents( + TWENTY_EXAMPLES_PATH, + ref, + ); + + if (!contents) { + return []; + } + + return contents + .filter((entry) => entry.type === 'dir') + .map((entry) => entry.name); +}; + +const validateExampleExists = async ( + exampleName: string, + ref: string, +): Promise => { + const examplePath = `${TWENTY_EXAMPLES_PATH}/${exampleName}`; + + const contents = await fetchGitHubDirectoryContents(examplePath, ref); + + if (contents !== null) { + return; + } + + const availableExamples = await listAvailableExamples(ref); + + throw new Error( + `Example "${exampleName}" not found.\n\n` + + (availableExamples.length > 0 + ? `Available examples:\n${availableExamples.map((name) => ` - ${name}`).join('\n')}\n\n` + : '') + + `Browse all examples: ${TWENTY_EXAMPLES_URL}`, + ); +}; + +export const downloadExample = async ( + exampleName: string, + targetDirectory: string, +): Promise => { + if ( + exampleName.includes('/') || + exampleName.includes('\\') || + exampleName.includes('..') + ) { + throw new Error( + `Invalid example name: "${exampleName}". Example names must be simple directory names (e.g., "hello-world").`, + ); + } + + const ref = await resolveRef(); + const examplePath = `${TWENTY_EXAMPLES_PATH}/${exampleName}`; + + console.log(chalk.gray(`Resolving examples from ref '${ref}'...`)); + + await validateExampleExists(exampleName, ref); + + console.log(chalk.gray(`Example '${examplePath}' validated successfully.`)); + + const tarballUrl = `https://codeload.github.com/${TWENTY_REPO_OWNER}/${TWENTY_REPO_NAME}/tar.gz/${ref}`; + + const tempDir = join( + tmpdir(), + `create-twenty-app-${Date.now()}-${Math.random().toString(36).slice(2)}`, + ); + + try { + await fs.ensureDir(tempDir); + + console.log(chalk.gray(`Downloading tarball from ${tarballUrl}...`)); + + const response = await fetch(tarballUrl); + + if (!response.ok) { + if (response.status === 404) { + throw new Error( + `Could not find repository: ${TWENTY_REPO_OWNER}/${TWENTY_REPO_NAME} (ref: ${ref})`, + ); + } + throw new Error( + `Failed to download from GitHub: ${response.status} ${response.statusText}`, + ); + } + + console.log(chalk.gray('Tarball downloaded. Writing to disk...')); + + const tarballPath = join(tempDir, 'archive.tar.gz'); + + const buffer = Buffer.from(await response.arrayBuffer()); + + await fs.writeFile(tarballPath, buffer); + + console.log( + chalk.gray( + `Tarball saved (${(buffer.length / 1024 / 1024).toFixed(1)} MB). Extracting...`, + ), + ); + + execSync(`tar xzf "${tarballPath}" -C "${tempDir}"`, { + stdio: 'pipe', + }); + + // GitHub tarballs extract to a directory named {repo}-{ref}/ + const extractedEntries = await fs.readdir(tempDir); + const extractedDir = extractedEntries.find( + (entry) => entry !== 'archive.tar.gz', + ); + + if (!extractedDir) { + throw new Error('Failed to extract archive: no directory found'); + } + + const sourcePath = join(tempDir, extractedDir, examplePath); + + if (!(await fs.pathExists(sourcePath))) { + throw new Error( + `Example directory not found in archive: "${examplePath}"`, + ); + } + + await fs.copy(sourcePath, targetDirectory); + } finally { + await fs.remove(tempDir); + } +}; diff --git a/packages/create-twenty-app/src/utils/test-template.ts b/packages/create-twenty-app/src/utils/test-template.ts deleted file mode 100644 index 0ea50c8b42..0000000000 --- a/packages/create-twenty-app/src/utils/test-template.ts +++ /dev/null @@ -1,279 +0,0 @@ -import * as fs from 'fs-extra'; -import { join } from 'path'; - -const SEED_API_KEY = - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ1c2VySWQiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ3b3Jrc3BhY2VJZCI6IjIwMjAyMDIwLTFjMjUtNGQwMi1iZjI1LTZhZWNjZjdlYTQxOSIsIndvcmtzcGFjZU1lbWJlcklkIjoiMjAyMDIwMjAtNDYzZi00MzViLTgyOGMtMTA3ZTAwN2EyNzExIiwidXNlcldvcmtzcGFjZUlkIjoiMjAyMDIwMjAtMWU3Yy00M2Q5LWE1ZGItNjg1YjUwNjlkODE2IiwidHlwZSI6IkFDQ0VTUyIsImF1dGhQcm92aWRlciI6InBhc3N3b3JkIiwiaWF0IjoxNzUxMjgxNzA0LCJleHAiOjIwNjY4NTc3MDR9.HMGqCsVlOAPVUBhKSGlD1X86VoHKt4LIUtET3CGIdik'; - -export const scaffoldIntegrationTest = async ({ - appDirectory, - sourceFolderPath, -}: { - appDirectory: string; - sourceFolderPath: string; -}) => { - await createIntegrationTest({ - appDirectory: sourceFolderPath, - fileFolder: '__tests__', - fileName: 'app-install.integration-test.ts', - }); - - await createSetupTest({ - appDirectory: sourceFolderPath, - fileFolder: '__tests__', - fileName: 'setup-test.ts', - }); - - await createVitestConfig(appDirectory); - await createTsconfigSpec(appDirectory); - await createGithubWorkflow(appDirectory); -}; - -const createVitestConfig = async (appDirectory: string) => { - const content = `import tsconfigPaths from 'vite-tsconfig-paths'; -import { defineConfig } from 'vitest/config'; - -export default defineConfig({ - plugins: [ - tsconfigPaths({ - projects: ['tsconfig.spec.json'], - ignoreConfigErrors: true, - }), - ], - test: { - testTimeout: 120_000, - hookTimeout: 120_000, - include: ['src/**/*.integration-test.ts'], - setupFiles: ['src/__tests__/setup-test.ts'], - env: { - TWENTY_API_KEY: - '${SEED_API_KEY}', - }, - }, -}); -`; - - await fs.writeFile(join(appDirectory, 'vitest.config.ts'), content); -}; - -const createTsconfigSpec = async (appDirectory: string) => { - const tsconfigSpec = { - extends: './tsconfig.json', - compilerOptions: { - composite: true, - types: ['vitest/globals'], - }, - include: ['src/**/*.ts', 'src/**/*.tsx'], - exclude: ['node_modules', 'dist'], - }; - - await fs.writeFile( - join(appDirectory, 'tsconfig.spec.json'), - JSON.stringify(tsconfigSpec, null, 2), - ); - - const tsconfigPath = join(appDirectory, 'tsconfig.json'); - const tsconfig = await fs.readJson(tsconfigPath); - - tsconfig.references = [{ path: './tsconfig.spec.json' }]; - - await fs.writeFile(tsconfigPath, JSON.stringify(tsconfig, null, 2)); -}; - -const createSetupTest = async ({ - appDirectory, - fileFolder, - fileName, -}: { - appDirectory: string; - fileFolder?: string; - fileName: string; -}) => { - const content = `import * as fs from 'fs'; -import * as os from 'os'; -import * as path from 'path'; -import { beforeAll } from 'vitest'; - -const TWENTY_API_URL = process.env.TWENTY_API_URL ?? 'http://localhost:2020'; -const TEST_CONFIG_DIR = path.join(os.tmpdir(), '.twenty-sdk-test'); - -const assertServerIsReachable = async () => { - let response: Response; - - try { - response = await fetch(\`\${TWENTY_API_URL}/healthz\`); - } catch { - throw new Error( - \`Twenty server is not reachable at \${TWENTY_API_URL}. \` + - 'Make sure the server is running before executing integration tests.', - ); - } - - if (!response.ok) { - throw new Error(\`Server at \${TWENTY_API_URL} returned \${response.status}\`); - } -}; - -beforeAll(async () => { - await assertServerIsReachable(); - - fs.mkdirSync(TEST_CONFIG_DIR, { recursive: true }); - - const configFile = { - remotes: { - local: { - apiUrl: process.env.TWENTY_API_URL, - apiKey: process.env.TWENTY_API_KEY, - }, - }, - defaultRemote: 'local', - }; - - fs.writeFileSync( - path.join(TEST_CONFIG_DIR, 'config.json'), - JSON.stringify(configFile, null, 2), - ); -}); -`; - - await fs.ensureDir(join(appDirectory, fileFolder ?? '')); - await fs.writeFile(join(appDirectory, fileFolder ?? '', fileName), content); -}; - -const createIntegrationTest = async ({ - appDirectory, - fileFolder, - fileName, -}: { - appDirectory: string; - fileFolder?: string; - fileName: string; -}) => { - const content = `import { APPLICATION_UNIVERSAL_IDENTIFIER } from 'src/application-config'; -import { appBuild, appDeploy, appInstall, appUninstall } from 'twenty-sdk/cli'; -import { MetadataApiClient } from 'twenty-client-sdk/metadata'; -import { afterAll, beforeAll, describe, expect, it } from 'vitest'; - -const APP_PATH = process.cwd(); - -describe('App installation', () => { - beforeAll(async () => { - const buildResult = await appBuild({ - appPath: APP_PATH, - tarball: true, - onProgress: (message: string) => console.log(\`[build] \${message}\`), - }); - - if (!buildResult.success) { - throw new Error( - \`Build failed: \${buildResult.error?.message ?? 'Unknown error'}\`, - ); - } - - const deployResult = await appDeploy({ - tarballPath: buildResult.data.tarballPath!, - onProgress: (message: string) => console.log(\`[deploy] \${message}\`), - }); - - if (!deployResult.success) { - throw new Error( - \`Deploy failed: \${deployResult.error?.message ?? 'Unknown error'}\`, - ); - } - - const installResult = await appInstall({ appPath: APP_PATH }); - - if (!installResult.success) { - throw new Error( - \`Install failed: \${installResult.error?.message ?? 'Unknown error'}\`, - ); - } - }); - - afterAll(async () => { - const uninstallResult = await appUninstall({ appPath: APP_PATH }); - - if (!uninstallResult.success) { - console.warn( - \`App uninstall failed: \${uninstallResult.error?.message ?? 'Unknown error'}\`, - ); - } - }); - - it('should find the installed app in the applications list', async () => { - const metadataClient = new MetadataApiClient(); - - const result = await metadataClient.query({ - findManyApplications: { - id: true, - name: true, - universalIdentifier: true, - }, - }); - - const installedApp = result.findManyApplications.find( - (application: { universalIdentifier: string }) => - application.universalIdentifier === - APPLICATION_UNIVERSAL_IDENTIFIER, - ); - - expect(installedApp).toBeDefined(); - }); -}); -`; - - await fs.ensureDir(join(appDirectory, fileFolder ?? '')); - await fs.writeFile(join(appDirectory, fileFolder ?? '', fileName), content); -}; - -const DEFAULT_TWENTY_VERSION = 'latest'; - -const createGithubWorkflow = async (appDirectory: string) => { - const content = `name: CI - -on: - push: - branches: - - main - pull_request: {} - -env: - TWENTY_VERSION: ${DEFAULT_TWENTY_VERSION} - -jobs: - test: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Spawn Twenty instance - id: twenty - uses: twentyhq/twenty/.github/actions/spawn-twenty-docker-image@main - with: - twenty-version: \${{ env.TWENTY_VERSION }} - github-token: \${{ secrets.GITHUB_TOKEN }} - - - name: Enable Corepack - run: corepack enable - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: 'yarn' - - - name: Install dependencies - run: yarn install --immutable - - - name: Run integration tests - run: yarn test - env: - TWENTY_API_URL: \${{ steps.twenty.outputs.server-url }} - TWENTY_API_KEY: \${{ steps.twenty.outputs.access-token }} -`; - - const workflowDir = join(appDirectory, '.github', 'workflows'); - - await fs.ensureDir(workflowDir); - await fs.writeFile(join(workflowDir, 'ci.yml'), content); -}; diff --git a/packages/create-twenty-app/tsconfig.json b/packages/create-twenty-app/tsconfig.json index fc85ffd6d6..a98bfce2e3 100644 --- a/packages/create-twenty-app/tsconfig.json +++ b/packages/create-twenty-app/tsconfig.json @@ -24,5 +24,9 @@ "vite.config.ts", "jest.config.mjs" ], - "exclude": ["src/constants/base-application/vitest.config.ts"] + "exclude": [ + "src/constants/template/vitest.config.ts", + "src/constants/template/src/**", + "src/constants/template/tsconfig.spec.json" + ] } diff --git a/packages/create-twenty-app/tsconfig.lib.json b/packages/create-twenty-app/tsconfig.lib.json index f75975d390..1e33d4aed7 100644 --- a/packages/create-twenty-app/tsconfig.lib.json +++ b/packages/create-twenty-app/tsconfig.lib.json @@ -18,6 +18,9 @@ "dist", "**/*.test.ts", "**/*.spec.ts", - "**/__tests__/**" + "**/__tests__/**", + "src/constants/template/src/**", + "src/constants/template/vitest.config.ts", + "src/constants/template/tsconfig.spec.json" ] } diff --git a/packages/create-twenty-app/vite.config.ts b/packages/create-twenty-app/vite.config.ts index ffd871632c..a6b53cfaee 100644 --- a/packages/create-twenty-app/vite.config.ts +++ b/packages/create-twenty-app/vite.config.ts @@ -62,8 +62,8 @@ export default defineConfig(() => { dts({ entryRoot: './src', tsconfigPath: tsConfigPath }), copyAssetPlugin([ { - src: 'src/constants/base-application', - dest: 'dist/constants/base-application', + src: 'src/constants/template', + dest: 'dist/constants/template', }, ]), ], diff --git a/packages/twenty-apps/community/apollo-enrich/LLMS.md b/packages/twenty-apps/community/apollo-enrich/LLMS.md index dcd0011a9e..e218993207 100644 --- a/packages/twenty-apps/community/apollo-enrich/LLMS.md +++ b/packages/twenty-apps/community/apollo-enrich/LLMS.md @@ -1,7 +1,7 @@ ## Base documentation - Documentation: https://docs.twenty.com/developers/extend/capabilities/apps -- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/fixtures/postcard-app +- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/fixtures/rich-app ## UUID requirement - All generated UUIDs must be valid UUID v4. diff --git a/packages/twenty-apps/examples/hello-world/.github/workflows/ci.yml b/packages/twenty-apps/examples/hello-world/.github/workflows/ci.yml new file mode 100644 index 0000000000..92bd0e994f --- /dev/null +++ b/packages/twenty-apps/examples/hello-world/.github/workflows/ci.yml @@ -0,0 +1,42 @@ +name: CI + +on: + push: + branches: + - main + pull_request: {} + +env: + TWENTY_VERSION: latest + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Spawn Twenty instance + id: twenty + uses: twentyhq/twenty/.github/actions/spawn-twenty-docker-image@main + with: + twenty-version: ${{ env.TWENTY_VERSION }} + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Enable Corepack + run: corepack enable + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + cache: 'yarn' + + - name: Install dependencies + run: yarn install --immutable + + - name: Run integration tests + run: yarn test + env: + TWENTY_API_URL: ${{ steps.twenty.outputs.server-url }} + TWENTY_API_KEY: ${{ steps.twenty.outputs.access-token }} diff --git a/packages/twenty-apps/examples/hello-world/.gitignore b/packages/twenty-apps/examples/hello-world/.gitignore new file mode 100644 index 0000000000..6cd0610624 --- /dev/null +++ b/packages/twenty-apps/examples/hello-world/.gitignore @@ -0,0 +1,38 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn + +# codegen +generated + +# testing +/coverage + +# dev +/dist/ + +.twenty + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# typescript +*.tsbuildinfo +*.d.ts diff --git a/packages/twenty-apps/hello-world/.nvmrc b/packages/twenty-apps/examples/hello-world/.nvmrc similarity index 100% rename from packages/twenty-apps/hello-world/.nvmrc rename to packages/twenty-apps/examples/hello-world/.nvmrc diff --git a/packages/twenty-apps/fixtures/postcard-app/.oxlintrc.json b/packages/twenty-apps/examples/hello-world/.oxlintrc.json similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/.oxlintrc.json rename to packages/twenty-apps/examples/hello-world/.oxlintrc.json diff --git a/packages/twenty-apps/hello-world/.yarnrc.yml b/packages/twenty-apps/examples/hello-world/.yarnrc.yml similarity index 100% rename from packages/twenty-apps/hello-world/.yarnrc.yml rename to packages/twenty-apps/examples/hello-world/.yarnrc.yml diff --git a/packages/twenty-apps/hello-world/LLMS.md b/packages/twenty-apps/examples/hello-world/LLMS.md similarity index 82% rename from packages/twenty-apps/hello-world/LLMS.md rename to packages/twenty-apps/examples/hello-world/LLMS.md index 4227b88d35..5df0b248de 100644 --- a/packages/twenty-apps/hello-world/LLMS.md +++ b/packages/twenty-apps/examples/hello-world/LLMS.md @@ -1,7 +1,7 @@ ## Base documentation -- Documentation: https://docs.twenty.com/developers/extend/capabilities/apps -- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/fixtures/postcard-app +- Documentation: https://docs.twenty.com/developers/extend/apps/getting-started +- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/fixtures/rich-app ## UUID requirement diff --git a/packages/twenty-apps/hello-world/README.md b/packages/twenty-apps/examples/hello-world/README.md similarity index 100% rename from packages/twenty-apps/hello-world/README.md rename to packages/twenty-apps/examples/hello-world/README.md diff --git a/packages/twenty-apps/hello-world/package.json b/packages/twenty-apps/examples/hello-world/package.json similarity index 91% rename from packages/twenty-apps/hello-world/package.json rename to packages/twenty-apps/examples/hello-world/package.json index b5261feb83..6c69c70ef3 100644 --- a/packages/twenty-apps/hello-world/package.json +++ b/packages/twenty-apps/examples/hello-world/package.json @@ -15,13 +15,15 @@ "test": "vitest run", "test:watch": "vitest" }, + "dependencies": { + "twenty-client-sdk": "0.8.0-canary.5", + "twenty-sdk": "0.8.0-canary.5" + }, "devDependencies": { "@types/node": "^24.7.2", "@types/react": "^18.2.0", "oxlint": "^0.16.0", "react": "^18.2.0", - "twenty-client-sdk": "0.8.0-canary.5", - "twenty-sdk": "0.8.0-canary.5", "typescript": "^5.9.3", "vite-tsconfig-paths": "^4.2.1", "vitest": "^3.1.1" diff --git a/packages/twenty-apps/hello-world/src/__tests__/app-install.integration-test.ts b/packages/twenty-apps/examples/hello-world/src/__tests__/app-install.integration-test.ts similarity index 100% rename from packages/twenty-apps/hello-world/src/__tests__/app-install.integration-test.ts rename to packages/twenty-apps/examples/hello-world/src/__tests__/app-install.integration-test.ts diff --git a/packages/twenty-apps/hello-world/src/__tests__/setup-test.ts b/packages/twenty-apps/examples/hello-world/src/__tests__/setup-test.ts similarity index 100% rename from packages/twenty-apps/hello-world/src/__tests__/setup-test.ts rename to packages/twenty-apps/examples/hello-world/src/__tests__/setup-test.ts diff --git a/packages/twenty-apps/hello-world/src/agents/example-agent.ts b/packages/twenty-apps/examples/hello-world/src/agents/example-agent.ts similarity index 100% rename from packages/twenty-apps/hello-world/src/agents/example-agent.ts rename to packages/twenty-apps/examples/hello-world/src/agents/example-agent.ts diff --git a/packages/twenty-apps/hello-world/src/application-config.ts b/packages/twenty-apps/examples/hello-world/src/application-config.ts similarity index 100% rename from packages/twenty-apps/hello-world/src/application-config.ts rename to packages/twenty-apps/examples/hello-world/src/application-config.ts diff --git a/packages/twenty-apps/hello-world/src/fields/example-field.ts b/packages/twenty-apps/examples/hello-world/src/fields/example-field.ts similarity index 100% rename from packages/twenty-apps/hello-world/src/fields/example-field.ts rename to packages/twenty-apps/examples/hello-world/src/fields/example-field.ts diff --git a/packages/twenty-apps/hello-world/src/front-components/hello-world.tsx b/packages/twenty-apps/examples/hello-world/src/front-components/hello-world.tsx similarity index 100% rename from packages/twenty-apps/hello-world/src/front-components/hello-world.tsx rename to packages/twenty-apps/examples/hello-world/src/front-components/hello-world.tsx diff --git a/packages/twenty-apps/hello-world/src/logic-functions/create-hello-world-company.ts b/packages/twenty-apps/examples/hello-world/src/logic-functions/create-hello-world-company.ts similarity index 100% rename from packages/twenty-apps/hello-world/src/logic-functions/create-hello-world-company.ts rename to packages/twenty-apps/examples/hello-world/src/logic-functions/create-hello-world-company.ts diff --git a/packages/twenty-apps/hello-world/src/logic-functions/hello-world.ts b/packages/twenty-apps/examples/hello-world/src/logic-functions/hello-world.ts similarity index 100% rename from packages/twenty-apps/hello-world/src/logic-functions/hello-world.ts rename to packages/twenty-apps/examples/hello-world/src/logic-functions/hello-world.ts diff --git a/packages/twenty-apps/hello-world/src/logic-functions/post-install.ts b/packages/twenty-apps/examples/hello-world/src/logic-functions/post-install.ts similarity index 100% rename from packages/twenty-apps/hello-world/src/logic-functions/post-install.ts rename to packages/twenty-apps/examples/hello-world/src/logic-functions/post-install.ts diff --git a/packages/twenty-apps/hello-world/src/logic-functions/pre-install.ts b/packages/twenty-apps/examples/hello-world/src/logic-functions/pre-install.ts similarity index 100% rename from packages/twenty-apps/hello-world/src/logic-functions/pre-install.ts rename to packages/twenty-apps/examples/hello-world/src/logic-functions/pre-install.ts diff --git a/packages/twenty-apps/hello-world/src/navigation-menu-items/example-navigation-menu-item.ts b/packages/twenty-apps/examples/hello-world/src/navigation-menu-items/example-navigation-menu-item.ts similarity index 100% rename from packages/twenty-apps/hello-world/src/navigation-menu-items/example-navigation-menu-item.ts rename to packages/twenty-apps/examples/hello-world/src/navigation-menu-items/example-navigation-menu-item.ts diff --git a/packages/twenty-apps/hello-world/src/objects/example-object.ts b/packages/twenty-apps/examples/hello-world/src/objects/example-object.ts similarity index 100% rename from packages/twenty-apps/hello-world/src/objects/example-object.ts rename to packages/twenty-apps/examples/hello-world/src/objects/example-object.ts diff --git a/packages/twenty-apps/hello-world/src/page-layouts/example-record-page-layout.ts b/packages/twenty-apps/examples/hello-world/src/page-layouts/example-record-page-layout.ts similarity index 100% rename from packages/twenty-apps/hello-world/src/page-layouts/example-record-page-layout.ts rename to packages/twenty-apps/examples/hello-world/src/page-layouts/example-record-page-layout.ts diff --git a/packages/twenty-apps/hello-world/src/roles/default-role.ts b/packages/twenty-apps/examples/hello-world/src/roles/default-role.ts similarity index 100% rename from packages/twenty-apps/hello-world/src/roles/default-role.ts rename to packages/twenty-apps/examples/hello-world/src/roles/default-role.ts diff --git a/packages/twenty-apps/hello-world/src/skills/example-skill.ts b/packages/twenty-apps/examples/hello-world/src/skills/example-skill.ts similarity index 100% rename from packages/twenty-apps/hello-world/src/skills/example-skill.ts rename to packages/twenty-apps/examples/hello-world/src/skills/example-skill.ts diff --git a/packages/twenty-apps/hello-world/src/views/example-view.ts b/packages/twenty-apps/examples/hello-world/src/views/example-view.ts similarity index 100% rename from packages/twenty-apps/hello-world/src/views/example-view.ts rename to packages/twenty-apps/examples/hello-world/src/views/example-view.ts diff --git a/packages/twenty-apps/hello-world/tsconfig.json b/packages/twenty-apps/examples/hello-world/tsconfig.json similarity index 100% rename from packages/twenty-apps/hello-world/tsconfig.json rename to packages/twenty-apps/examples/hello-world/tsconfig.json diff --git a/packages/twenty-apps/hello-world/tsconfig.spec.json b/packages/twenty-apps/examples/hello-world/tsconfig.spec.json similarity index 100% rename from packages/twenty-apps/hello-world/tsconfig.spec.json rename to packages/twenty-apps/examples/hello-world/tsconfig.spec.json diff --git a/packages/twenty-apps/hello-world/vitest.config.ts b/packages/twenty-apps/examples/hello-world/vitest.config.ts similarity index 100% rename from packages/twenty-apps/hello-world/vitest.config.ts rename to packages/twenty-apps/examples/hello-world/vitest.config.ts diff --git a/packages/twenty-apps/hello-world/yarn.lock b/packages/twenty-apps/examples/hello-world/yarn.lock similarity index 100% rename from packages/twenty-apps/hello-world/yarn.lock rename to packages/twenty-apps/examples/hello-world/yarn.lock diff --git a/packages/twenty-apps/examples/postcard/.github/workflows/ci.yml b/packages/twenty-apps/examples/postcard/.github/workflows/ci.yml new file mode 100644 index 0000000000..92bd0e994f --- /dev/null +++ b/packages/twenty-apps/examples/postcard/.github/workflows/ci.yml @@ -0,0 +1,42 @@ +name: CI + +on: + push: + branches: + - main + pull_request: {} + +env: + TWENTY_VERSION: latest + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Spawn Twenty instance + id: twenty + uses: twentyhq/twenty/.github/actions/spawn-twenty-docker-image@main + with: + twenty-version: ${{ env.TWENTY_VERSION }} + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Enable Corepack + run: corepack enable + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + cache: 'yarn' + + - name: Install dependencies + run: yarn install --immutable + + - name: Run integration tests + run: yarn test + env: + TWENTY_API_URL: ${{ steps.twenty.outputs.server-url }} + TWENTY_API_KEY: ${{ steps.twenty.outputs.access-token }} diff --git a/packages/twenty-apps/examples/postcard/.gitignore b/packages/twenty-apps/examples/postcard/.gitignore new file mode 100644 index 0000000000..6cd0610624 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/.gitignore @@ -0,0 +1,38 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn + +# codegen +generated + +# testing +/coverage + +# dev +/dist/ + +.twenty + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# typescript +*.tsbuildinfo +*.d.ts diff --git a/packages/twenty-apps/examples/postcard/.nvmrc b/packages/twenty-apps/examples/postcard/.nvmrc new file mode 100644 index 0000000000..341cb50613 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/.nvmrc @@ -0,0 +1 @@ +24.5.0 diff --git a/packages/twenty-apps/hello-world/.oxlintrc.json b/packages/twenty-apps/examples/postcard/.oxlintrc.json similarity index 100% rename from packages/twenty-apps/hello-world/.oxlintrc.json rename to packages/twenty-apps/examples/postcard/.oxlintrc.json diff --git a/packages/twenty-apps/examples/postcard/.yarnrc.yml b/packages/twenty-apps/examples/postcard/.yarnrc.yml new file mode 100644 index 0000000000..3186f3f079 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/packages/twenty-apps/examples/postcard/AGENT.md b/packages/twenty-apps/examples/postcard/AGENT.md new file mode 100644 index 0000000000..5df0b248de --- /dev/null +++ b/packages/twenty-apps/examples/postcard/AGENT.md @@ -0,0 +1,14 @@ +## Base documentation + +- Documentation: https://docs.twenty.com/developers/extend/apps/getting-started +- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/fixtures/rich-app + +## UUID requirement + +- All generated UUIDs must be valid UUID v4. + +## Common Pitfalls + +- Creating an object without an index view associated. Unless this is a technical object, user will need to visualize it. +- Creating a view without a navigationMenuItem associated. This will make the view available on the left sidebar. +- Creating a front-end component that has a scroll instead of being responsive to its fixed widget height and width, unless it is specifically meant to be used in a canvas tab. diff --git a/packages/twenty-apps/examples/postcard/CLAUDE.md b/packages/twenty-apps/examples/postcard/CLAUDE.md new file mode 100644 index 0000000000..5df0b248de --- /dev/null +++ b/packages/twenty-apps/examples/postcard/CLAUDE.md @@ -0,0 +1,14 @@ +## Base documentation + +- Documentation: https://docs.twenty.com/developers/extend/apps/getting-started +- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/fixtures/rich-app + +## UUID requirement + +- All generated UUIDs must be valid UUID v4. + +## Common Pitfalls + +- Creating an object without an index view associated. Unless this is a technical object, user will need to visualize it. +- Creating a view without a navigationMenuItem associated. This will make the view available on the left sidebar. +- Creating a front-end component that has a scroll instead of being responsive to its fixed widget height and width, unless it is specifically meant to be used in a canvas tab. diff --git a/packages/twenty-apps/examples/postcard/LLMS.md b/packages/twenty-apps/examples/postcard/LLMS.md new file mode 100644 index 0000000000..5df0b248de --- /dev/null +++ b/packages/twenty-apps/examples/postcard/LLMS.md @@ -0,0 +1,14 @@ +## Base documentation + +- Documentation: https://docs.twenty.com/developers/extend/apps/getting-started +- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/fixtures/rich-app + +## UUID requirement + +- All generated UUIDs must be valid UUID v4. + +## Common Pitfalls + +- Creating an object without an index view associated. Unless this is a technical object, user will need to visualize it. +- Creating a view without a navigationMenuItem associated. This will make the view available on the left sidebar. +- Creating a front-end component that has a scroll instead of being responsive to its fixed widget height and width, unless it is specifically meant to be used in a canvas tab. diff --git a/packages/twenty-apps/examples/postcard/README.md b/packages/twenty-apps/examples/postcard/README.md new file mode 100644 index 0000000000..4ad9b39506 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/README.md @@ -0,0 +1,42 @@ +# Postcard App — Twenty App Example + +A rich example app showcasing all Twenty app entity types. Use this as a reference when building your own apps. + +## What's included + +This app demonstrates every entity type available in the Twenty SDK: + +| Entity | Files | What it shows | +|--------|-------|---------------| +| **Application** | `src/application.config.ts` | App metadata, application variables, server variables | +| **Objects** | `src/objects/` | Custom objects with inline fields, junction tables | +| **Fields** | `src/fields/` | Standalone fields, relations (ONE_TO_MANY, MANY_TO_ONE), extending standard objects | +| **Logic Functions** | `src/logic-functions/` | HTTP routes, database event triggers, cron schedules, tool functions, install hooks | +| **Front Components** | `src/components/` | React components rendered inside Twenty's UI | +| **Roles** | `src/roles/` | Permission roles with object and field-level access control | +| **Views** | `src/views/` | Saved table views with column configuration | +| **Navigation** | `src/navigation-menu-items/` | Sidebar links targeting views | +| **Skills** | `src/skills/` | AI skill providing context to agents | +| **Agents** | `src/agents/` | AI agent with a system prompt | +| **Page Layouts** | `src/page-layouts/` | Custom record page with a front component widget | + +## Getting started + +```bash +# From this directory +yarn install +yarn twenty dev +``` + +Or use it as a template via create-twenty-app: + +```bash +npx create-twenty-app@latest my-app --example postcard +``` + +## Learn more + +- [Getting Started](https://docs.twenty.com/developers/extend/apps/getting-started) +- [Building Apps](https://docs.twenty.com/developers/extend/apps/building) +- [Publishing](https://docs.twenty.com/developers/extend/apps/publishing) +- [Discord](https://discord.gg/cx5n4Jzs57) diff --git a/packages/twenty-apps/examples/postcard/package.json b/packages/twenty-apps/examples/postcard/package.json new file mode 100644 index 0000000000..32541760e0 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/package.json @@ -0,0 +1,35 @@ +{ + "name": "postcard", + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": "^24.5.0", + "npm": "please-use-yarn", + "yarn": ">=4.0.2" + }, + "keywords": [ + "twenty-app" + ], + "packageManager": "yarn@4.9.2", + "scripts": { + "twenty": "twenty", + "lint": "oxlint -c .oxlintrc.json .", + "lint:fix": "oxlint --fix -c .oxlintrc.json .", + "test": "vitest run", + "test:watch": "vitest" + }, + "dependencies": { + "twenty-client-sdk": "0.8.0-canary.8", + "twenty-sdk": "0.8.0-canary.8" + }, + "devDependencies": { + "@types/node": "^24.7.2", + "@types/react": "^19.0.0", + "oxlint": "^0.16.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "typescript": "^5.9.3", + "vite-tsconfig-paths": "^4.2.1", + "vitest": "^3.1.1" + } +} diff --git a/packages/twenty-apps/fixtures/postcard-app/public/favicon.png b/packages/twenty-apps/examples/postcard/public/favicon.png similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/public/favicon.png rename to packages/twenty-apps/examples/postcard/public/favicon.png diff --git a/packages/twenty-apps/examples/postcard/src/__tests__/app-install.integration-test.ts b/packages/twenty-apps/examples/postcard/src/__tests__/app-install.integration-test.ts new file mode 100644 index 0000000000..b05dabe928 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/src/__tests__/app-install.integration-test.ts @@ -0,0 +1,70 @@ +import { APPLICATION_UNIVERSAL_IDENTIFIER } from 'src/application.config'; +import { appBuild, appDeploy, appInstall, appUninstall } from 'twenty-sdk/cli'; +import { MetadataApiClient } from 'twenty-client-sdk/metadata'; +import { afterAll, beforeAll, describe, expect, it } from 'vitest'; + +const APP_PATH = process.cwd(); + +describe('App installation', () => { + beforeAll(async () => { + const buildResult = await appBuild({ + appPath: APP_PATH, + tarball: true, + onProgress: (message: string) => console.log(`[build] ${message}`), + }); + + if (!buildResult.success) { + throw new Error( + `Build failed: ${buildResult.error?.message ?? 'Unknown error'}`, + ); + } + + const deployResult = await appDeploy({ + tarballPath: buildResult.data.tarballPath!, + onProgress: (message: string) => console.log(`[deploy] ${message}`), + }); + + if (!deployResult.success) { + throw new Error( + `Deploy failed: ${deployResult.error?.message ?? 'Unknown error'}`, + ); + } + + const installResult = await appInstall({ appPath: APP_PATH }); + + if (!installResult.success) { + throw new Error( + `Install failed: ${installResult.error?.message ?? 'Unknown error'}`, + ); + } + }); + + afterAll(async () => { + const uninstallResult = await appUninstall({ appPath: APP_PATH }); + + if (!uninstallResult.success) { + console.warn( + `App uninstall failed: ${uninstallResult.error?.message ?? 'Unknown error'}`, + ); + } + }); + + it('should find the installed app in the applications list', async () => { + const metadataClient = new MetadataApiClient(); + + const result = await metadataClient.query({ + findManyApplications: { + id: true, + name: true, + universalIdentifier: true, + }, + }); + + const installedApp = result.findManyApplications.find( + (application: { universalIdentifier: string }) => + application.universalIdentifier === APPLICATION_UNIVERSAL_IDENTIFIER, + ); + + expect(installedApp).toBeDefined(); + }); +}); diff --git a/packages/twenty-apps/examples/postcard/src/__tests__/setup-test.ts b/packages/twenty-apps/examples/postcard/src/__tests__/setup-test.ts new file mode 100644 index 0000000000..16e00da406 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/src/__tests__/setup-test.ts @@ -0,0 +1,45 @@ +import * as fs from 'fs'; +import * as os from 'os'; +import * as path from 'path'; +import { beforeAll } from 'vitest'; + +const TWENTY_API_URL = process.env.TWENTY_API_URL ?? 'http://localhost:2020'; +const TEST_CONFIG_DIR = path.join(os.tmpdir(), '.twenty-sdk-test'); + +const assertServerIsReachable = async () => { + let response: Response; + + try { + response = await fetch(`${TWENTY_API_URL}/healthz`); + } catch { + throw new Error( + `Twenty server is not reachable at ${TWENTY_API_URL}. ` + + 'Make sure the server is running before executing integration tests.', + ); + } + + if (!response.ok) { + throw new Error(`Server at ${TWENTY_API_URL} returned ${response.status}`); + } +}; + +beforeAll(async () => { + await assertServerIsReachable(); + + fs.mkdirSync(TEST_CONFIG_DIR, { recursive: true }); + + const configFile = { + remotes: { + local: { + apiUrl: process.env.TWENTY_API_URL, + apiKey: process.env.TWENTY_API_KEY, + }, + }, + defaultRemote: 'local', + }; + + fs.writeFileSync( + path.join(TEST_CONFIG_DIR, 'config.json'), + JSON.stringify(configFile, null, 2), + ); +}); diff --git a/packages/twenty-apps/examples/postcard/src/agents/postcard-drafter.agent.ts b/packages/twenty-apps/examples/postcard/src/agents/postcard-drafter.agent.ts new file mode 100644 index 0000000000..a3fc6cb169 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/src/agents/postcard-drafter.agent.ts @@ -0,0 +1,13 @@ +import { defineAgent } from 'twenty-sdk'; + +export default defineAgent({ + universalIdentifier: 'b8d4f2a3-9c5e-4f7b-a012-3e4d5c6b7a8f', + name: 'postcard-drafter', + label: 'Postcard Drafter', + icon: 'IconRobot', + description: 'Helps draft postcard messages', + prompt: + 'You are a postcard writing assistant. Help users draft concise, warm ' + + 'postcard messages. Follow the postcard writing guidelines. Ask for the ' + + 'recipient name and the occasion if not provided.', +}); diff --git a/packages/twenty-apps/examples/postcard/src/application.config.ts b/packages/twenty-apps/examples/postcard/src/application.config.ts new file mode 100644 index 0000000000..6b8abd8834 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/src/application.config.ts @@ -0,0 +1,33 @@ +import { defineApplication } from 'twenty-sdk'; +import { DEFAULT_ROLE_UNIVERSAL_IDENTIFIER } from './roles/default-function.role'; + +export const APPLICATION_UNIVERSAL_IDENTIFIER = + '8b2df3cc-23ad-4e1b-87fd-f880d4cefd58'; + +export default defineApplication({ + universalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER, + displayName: 'Postcard App', + description: 'Send postcards easily with Twenty', + icon: 'IconWorld', + applicationVariables: { + DEFAULT_RECIPIENT_NAME: { + universalIdentifier: '19e94e59-d4fe-4251-8981-b96d0a9f74de', + description: 'Default recipient name for postcards', + value: 'Alex Karp', + isSecret: false, + }, + }, + serverVariables: { + POSTCARD_API_KEY: { + description: 'API key for the postcard printing service', + isSecret: true, + isRequired: true, + }, + POSTCARD_SENDER_NAME: { + description: 'Default sender name on postcards', + isSecret: false, + isRequired: false, + }, + }, + defaultRoleUniversalIdentifier: DEFAULT_ROLE_UNIVERSAL_IDENTIFIER, +}); diff --git a/packages/twenty-apps/examples/postcard/src/components/card.front-component.tsx b/packages/twenty-apps/examples/postcard/src/components/card.front-component.tsx new file mode 100644 index 0000000000..4f7166e333 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/src/components/card.front-component.tsx @@ -0,0 +1,189 @@ +import { useCallback, useEffect, useState } from 'react'; +import { defineFrontComponent, useRecordId } from 'twenty-sdk'; +import { CoreApiClient } from 'twenty-client-sdk/core'; +import { isDefined } from 'twenty-shared/utils'; + +export const CARD_FRONT_COMPONENT_UNIVERSAL_IDENTIFIER = + '88c15ae2-5f87-4a6b-b48f-1974bbe62eb7'; + +type PostCardRecord = { + name: string; + content: string; + status: string; +}; + +const STATUS_COLORS: Record = { + DRAFT: '#999', + SENT: '#e88c30', + DELIVERED: '#4caf50', + RETURNED: '#e05252', +}; + +const CardDisplay = ({ + name, + content, + status, +}: { + name: string; + content: string; + status: string; +}) => { + return ( +
+
+ + {name || 'Untitled'} + + + {status} + +
+ +

+ {content || 'No content yet...'} +

+
+ ); +}; + +const PostCardPreview = () => { + const recordId = useRecordId(); + const [postCard, setPostCard] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + const fetchPostCard = useCallback(async () => { + if (!isDefined(recordId)) { + setLoading(false); + setError('No record ID'); + return; + } + + try { + setError(null); + const client = new CoreApiClient(); + + const result = await client.query({ + postCard: { + __args: { + filter: { id: { eq: recordId } }, + }, + name: true, + content: true, + status: true, + }, + }); + + const record = result?.postCard; + + if (!isDefined(record)) { + setError('Record not found'); + setPostCard(null); + } else { + setPostCard({ + name: record.name ?? '', + content: record.content ?? '', + status: record.status ?? 'DRAFT', + }); + } + } catch (fetchError) { + setError( + fetchError instanceof Error ? fetchError.message : String(fetchError), + ); + setPostCard(null); + } + setLoading(false); + }, [recordId]); + + useEffect(() => { + fetchPostCard(); + + const interval = setInterval(fetchPostCard, 3000); + + return () => { + clearInterval(interval); + setPostCard(null); + setLoading(false); + setError(null); + }; + }, [fetchPostCard]); + + if (loading) { + return ( +
+ Loading postcard... +
+ ); + } + + if (!isDefined(postCard)) { + return ( +
+
{error ?? 'No postcard data'}
+
+ recordId: {recordId ?? 'null'} | apiUrl:{' '} + {process.env.TWENTY_API_URL ? 'set' : 'missing'} | token:{' '} + {process.env.TWENTY_APP_ACCESS_TOKEN ?? process.env.TWENTY_API_KEY + ? 'set' + : 'missing'} +
+
+ ); + } + + return ( + + ); +}; + +export default defineFrontComponent({ + universalIdentifier: CARD_FRONT_COMPONENT_UNIVERSAL_IDENTIFIER, + name: 'card-component', + description: 'A component using an external component file', + component: PostCardPreview, +}); diff --git a/packages/twenty-apps/examples/postcard/src/components/generate-post-card-component-effect.tsx b/packages/twenty-apps/examples/postcard/src/components/generate-post-card-component-effect.tsx new file mode 100644 index 0000000000..199b578f22 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/src/components/generate-post-card-component-effect.tsx @@ -0,0 +1,125 @@ +import { useEffect } from 'react'; +import { + defineFrontComponent, + useRecordId, + updateProgress, + enqueueSnackbar, + unmountFrontComponent, +} from 'twenty-sdk'; +import { CoreApiClient } from 'twenty-client-sdk/core'; +import { isDefined } from 'twenty-shared/utils'; +import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object'; + +const SYSTEM_PROMPT = + 'You are a postcard writing assistant. Write a short, warm postcard message ' + + 'under 150 words. Use a personal tone. Output ONLY the postcard message ' + + 'text, nothing else — no greeting label, no sign-off label, just the message.'; + +const GeneratePostCardEffect = () => { + const recordId = useRecordId(); + + useEffect(() => { + if (!isDefined(recordId)) { + enqueueSnackbar({ + message: 'No record selected', + variant: 'error', + }); + unmountFrontComponent(); + return; + } + + const generate = async () => { + try { + const client = new CoreApiClient(); + + const userPrompt = 'Write a postcard message for a friend.'; + + const apiBaseUrl = process.env.TWENTY_API_URL; + const token = + process.env.TWENTY_APP_ACCESS_TOKEN ?? process.env.TWENTY_API_KEY; + + if (!apiBaseUrl || !token) { + throw new Error('API configuration missing'); + } + + const response = await fetch(`${apiBaseUrl}/rest/ai/generate-text`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}`, + }, + body: JSON.stringify({ + systemPrompt: SYSTEM_PROMPT, + userPrompt, + }), + }); + + if (!response.ok) { + const errorBody = await response.text(); + + if (errorBody.includes('No AI models are available')) { + throw new Error( + 'No AI models configured. Go to Settings > Admin Panel > AI to add a provider API key.', + ); + } + + throw new Error(`AI request failed with status ${response.status}`); + } + + const data = (await response.json()) as { text?: string }; + const generatedContent = data.text ?? ''; + + await updateProgress(0.7); + + await client.mutation({ + updatePostCard: { + __args: { + id: recordId, + data: { content: generatedContent }, + }, + id: true, + }, + }); + + await updateProgress(1); + + await enqueueSnackbar({ + message: 'Post card content generated!', + variant: 'success', + }); + + await unmountFrontComponent(); + } catch (error) { + await enqueueSnackbar({ + message: + error instanceof Error + ? error.message + : 'Failed to generate content', + variant: 'error', + }); + await unmountFrontComponent(); + } + }; + + generate(); + }, [recordId]); + + return null; +}; + +export default defineFrontComponent({ + universalIdentifier: 'bd7649c0-7540-4267-ac4b-f062fbd635a3', + name: 'Generate Post Card', + description: 'Generates postcard content using AI', + isHeadless: true, + component: GeneratePostCardEffect, + command: { + universalIdentifier: '0f795c1c-8e25-44da-8962-80bef9602ee2', + label: 'Generate post card content', + shortLabel: 'Generate content', + icon: 'IconSparkles', + isPinned: true, + availabilityType: 'RECORD_SELECTION', + availabilityObjectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER, + }, +}); diff --git a/packages/twenty-apps/examples/postcard/src/components/send-post-cards-component-effect.tsx b/packages/twenty-apps/examples/postcard/src/components/send-post-cards-component-effect.tsx new file mode 100644 index 0000000000..e366210128 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/src/components/send-post-cards-component-effect.tsx @@ -0,0 +1,102 @@ +import { useEffect } from 'react'; +import { + defineFrontComponent, + useRecordId, + updateProgress, + enqueueSnackbar, + unmountFrontComponent, +} from 'twenty-sdk'; +import { CoreApiClient } from 'twenty-client-sdk/core'; +import { isDefined } from 'twenty-shared/utils'; +import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object'; + +const SendPostCardsEffect = () => { + const recordId = useRecordId(); + + useEffect(() => { + const send = async () => { + try { + await updateProgress(0.1); + const client = new CoreApiClient(); + + let idsToSend: string[] = []; + + if (isDefined(recordId)) { + idsToSend = [recordId]; + } else { + const { postCards } = await client.query({ + postCards: { + __args: { + filter: { status: { eq: 'DRAFT' } }, + }, + edges: { node: { id: true } }, + }, + }); + + idsToSend = + postCards?.edges?.map( + (edge: { node: { id: string; status: true } }) => edge.node.id, + ) ?? []; + } + + if (idsToSend.length === 0) { + await updateProgress(1); + await unmountFrontComponent(); + return; + } + + await updateProgress(0.3); + + for (let i = 0; i < idsToSend.length; i++) { + await client.mutation({ + updatePostCard: { + __args: { + id: idsToSend[i], + data: { status: 'SENT' }, + }, + id: true, + }, + }); + + await updateProgress(0.3 + (0.7 * (i + 1)) / idsToSend.length); + } + + const count = idsToSend.length; + + await enqueueSnackbar({ + message: `${count} postcard${count > 1 ? 's' : ''} sent`, + variant: 'success', + }); + + await unmountFrontComponent(); + } catch (error) { + const message = + error instanceof Error ? error.message : 'Failed to send postcards'; + + await enqueueSnackbar({ message, variant: 'error' }); + await unmountFrontComponent(); + } + }; + + send(); + }, [recordId]); + + return null; +}; + +export default defineFrontComponent({ + universalIdentifier: 'a3b7c2d1-4e5f-4a8b-9c0d-1e2f3a4b5c6d', + name: 'Send Post Cards', + description: 'Sets postcard status to Sent', + isHeadless: true, + component: SendPostCardsEffect, + command: { + universalIdentifier: 'bd75de13-87a1-4f7a-94e2-92e19e97523c', + label: 'Send post cards', + shortLabel: 'Send', + icon: 'IconSend', + isPinned: true, + availabilityType: 'RECORD_SELECTION', + availabilityObjectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER, + }, +}); diff --git a/packages/twenty-apps/examples/postcard/src/fields/person-can-receive-postcards.field.ts b/packages/twenty-apps/examples/postcard/src/fields/person-can-receive-postcards.field.ts new file mode 100644 index 0000000000..87a2fd71e3 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/src/fields/person-can-receive-postcards.field.ts @@ -0,0 +1,18 @@ +import { + defineField, + FieldType, + STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS, +} from 'twenty-sdk'; + +// Field on existing company object +export default defineField({ + universalIdentifier: 'f922fdb8-10a9-4f11-a1d0-992a779f6dff', + objectUniversalIdentifier: + STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier, + type: FieldType.BOOLEAN, + name: 'canReceivePostcards', + label: 'Can Receive Postcards', + description: 'Whether the company can receive postcards', + icon: 'IconMailbox', + defaultValue: true, +}); diff --git a/packages/twenty-apps/examples/postcard/src/fields/post-cards-on-person.field.ts b/packages/twenty-apps/examples/postcard/src/fields/post-cards-on-person.field.ts new file mode 100644 index 0000000000..82af972c1a --- /dev/null +++ b/packages/twenty-apps/examples/postcard/src/fields/post-cards-on-person.field.ts @@ -0,0 +1,27 @@ +import { + defineField, + FieldType, + RelationType, + STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS, +} from 'twenty-sdk'; +import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object'; +import { + POST_CARDS_ON_PERSON_ID, + RECIPIENT_ON_POST_CARD_ID, +} from './recipient-on-post-card.field'; + +export default defineField({ + universalIdentifier: POST_CARDS_ON_PERSON_ID, + objectUniversalIdentifier: + STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier, + type: FieldType.RELATION, + name: 'postCards', + label: 'Post Cards', + icon: 'IconMail', + relationTargetObjectMetadataUniversalIdentifier: + POST_CARD_UNIVERSAL_IDENTIFIER, + relationTargetFieldMetadataUniversalIdentifier: RECIPIENT_ON_POST_CARD_ID, + universalSettings: { + relationType: RelationType.ONE_TO_MANY, + }, +}); diff --git a/packages/twenty-apps/examples/postcard/src/fields/recipient-on-post-card.field.ts b/packages/twenty-apps/examples/postcard/src/fields/recipient-on-post-card.field.ts new file mode 100644 index 0000000000..7ce62d9b7d --- /dev/null +++ b/packages/twenty-apps/examples/postcard/src/fields/recipient-on-post-card.field.ts @@ -0,0 +1,28 @@ +import { + defineField, + FieldType, + RelationType, + OnDeleteAction, + STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS, +} from 'twenty-sdk'; +import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object'; + +export const RECIPIENT_ON_POST_CARD_ID = 'c44f158e-2747-42c6-9295-75b8cbae7039'; +export const POST_CARDS_ON_PERSON_ID = 'd4aa40b9-077b-46f3-a685-5f0f08ad318c'; + +export default defineField({ + universalIdentifier: RECIPIENT_ON_POST_CARD_ID, + objectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER, + type: FieldType.RELATION, + name: 'recipient', + label: 'Recipient', + icon: 'IconUser', + relationTargetObjectMetadataUniversalIdentifier: + STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier, + relationTargetFieldMetadataUniversalIdentifier: POST_CARDS_ON_PERSON_ID, + universalSettings: { + relationType: RelationType.MANY_TO_ONE, + onDelete: OnDeleteAction.SET_NULL, + joinColumnName: 'recipientId', + }, +}); diff --git a/packages/twenty-apps/fixtures/postcard-app/src/navigation-menu-items/post-cards.navigation-menu-item.ts b/packages/twenty-apps/examples/postcard/src/navigation-menu-items/post-cards.navigation-menu-item.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/navigation-menu-items/post-cards.navigation-menu-item.ts rename to packages/twenty-apps/examples/postcard/src/navigation-menu-items/post-cards.navigation-menu-item.ts diff --git a/packages/twenty-apps/examples/postcard/src/objects/post-card.object.ts b/packages/twenty-apps/examples/postcard/src/objects/post-card.object.ts new file mode 100644 index 0000000000..a1d925fa9a --- /dev/null +++ b/packages/twenty-apps/examples/postcard/src/objects/post-card.object.ts @@ -0,0 +1,94 @@ +import { defineObject, FieldType } from 'twenty-sdk'; + +enum PostCardStatus { + DRAFT = 'DRAFT', + SENT = 'SENT', + DELIVERED = 'DELIVERED', + RETURNED = 'RETURNED', +} + +export const POST_CARD_UNIVERSAL_IDENTIFIER = + '54b589ca-eeed-4950-a176-358418b85c05'; + +export const CONTENT_FIELD_UNIVERSAL_IDENTIFIER = + 'cb9679ff-8f10-4dba-9e75-d571922c6d29'; + +export const NAME_FIELD_UNIVERSAL_IDENTIFIER = + 'f84f131c-1cfb-4800-916f-7f98e0bdf748'; + +export default defineObject({ + universalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER, + nameSingular: 'postCard', + namePlural: 'postCards', + labelSingular: 'Post card', + labelPlural: 'Post cards', + description: 'A post card object', + icon: 'IconMail', + labelIdentifierFieldMetadataUniversalIdentifier: + NAME_FIELD_UNIVERSAL_IDENTIFIER, + fields: [ + { + universalIdentifier: NAME_FIELD_UNIVERSAL_IDENTIFIER, + type: FieldType.TEXT, + label: 'Name', + description: "Postcard's name", + icon: 'IconAbc', + name: 'name', + }, + { + universalIdentifier: CONTENT_FIELD_UNIVERSAL_IDENTIFIER, + type: FieldType.TEXT, + label: 'Content', + description: "Postcard's content", + icon: 'IconAbc', + name: 'content', + }, + { + universalIdentifier: '87b675b8-dd8c-4448-b4ca-20e5a2234a1e', + type: FieldType.SELECT, + label: 'Status', + icon: 'IconSend', + defaultValue: `'${PostCardStatus.DRAFT}'`, + options: [ + { + id: 'a1b2c3d4-0001-4000-8000-000000000001', + value: PostCardStatus.DRAFT, + label: 'Draft', + position: 0, + color: 'gray', + }, + { + id: 'a1b2c3d4-0002-4000-8000-000000000002', + value: PostCardStatus.SENT, + label: 'Sent', + position: 1, + color: 'orange', + }, + { + id: 'a1b2c3d4-0003-4000-8000-000000000003', + value: PostCardStatus.DELIVERED, + label: 'Delivered', + position: 2, + color: 'green', + }, + { + id: 'a1b2c3d4-0004-4000-8000-000000000004', + value: PostCardStatus.RETURNED, + label: 'Returned', + position: 3, + color: 'orange', + }, + ], + name: 'status', + }, + { + universalIdentifier: 'e06abe72-5b44-4e7f-93be-afc185a3c433', + type: FieldType.DATE_TIME, + label: 'Delivered at', + icon: 'IconCheck', + isNullable: true, + defaultValue: null, + name: 'deliveredAt', + }, + ], +}); diff --git a/packages/twenty-apps/examples/postcard/src/page-layouts/post-card-record-page.page-layout.ts b/packages/twenty-apps/examples/postcard/src/page-layouts/post-card-record-page.page-layout.ts new file mode 100644 index 0000000000..37b8c3dc1a --- /dev/null +++ b/packages/twenty-apps/examples/postcard/src/page-layouts/post-card-record-page.page-layout.ts @@ -0,0 +1,47 @@ +import { definePageLayout, PageLayoutTabLayoutMode } from 'twenty-sdk'; +import { POST_CARD_UNIVERSAL_IDENTIFIER } from 'src/objects/post-card.object'; +import { CARD_FRONT_COMPONENT_UNIVERSAL_IDENTIFIER } from 'src/components/card.front-component'; + +export default definePageLayout({ + universalIdentifier: 'f2bf4b9f-0485-46f0-89bb-9a65d2b939b1', + name: 'Post Card Record Page', + type: 'RECORD_PAGE', + objectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER, + tabs: [ + { + universalIdentifier: 'a8c3d1e2-4f5b-4a6c-9d0e-1f2a3b4c5d6e', + title: 'Fields', + position: 0, + icon: 'IconList', + layoutMode: PageLayoutTabLayoutMode.VERTICAL_LIST, + widgets: [ + { + universalIdentifier: '3d388201-f421-4189-8266-f632e494091b', + title: 'Post Card Fields', + type: 'FIELDS', + configuration: { + configurationType: 'FIELDS', + }, + }, + ], + }, + { + universalIdentifier: '14dbc57a-5080-48d8-b276-bea9146edff9', + title: 'Preview', + position: 50, + icon: 'IconEye', + widgets: [ + { + universalIdentifier: 'd70f837e-8d0c-4fe2-b70e-89b5bc173499', + title: 'Card Preview', + type: 'FRONT_COMPONENT', + configuration: { + configurationType: 'FRONT_COMPONENT', + frontComponentUniversalIdentifier: + CARD_FRONT_COMPONENT_UNIVERSAL_IDENTIFIER, + }, + }, + ], + }, + ], +}); diff --git a/packages/twenty-apps/fixtures/postcard-app/src/roles/default-function.role.ts b/packages/twenty-apps/examples/postcard/src/roles/default-function.role.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/roles/default-function.role.ts rename to packages/twenty-apps/examples/postcard/src/roles/default-function.role.ts diff --git a/packages/twenty-apps/examples/postcard/src/skills/postcard-writing.skill.ts b/packages/twenty-apps/examples/postcard/src/skills/postcard-writing.skill.ts new file mode 100644 index 0000000000..057b127f11 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/src/skills/postcard-writing.skill.ts @@ -0,0 +1,15 @@ +import { defineSkill } from 'twenty-sdk'; + +export default defineSkill({ + universalIdentifier: 'a7c3e1f2-8b4d-4e6a-9f01-2d3c4b5a6e7f', + name: 'postcard-writing-guidelines', + label: 'Postcard Writing Guidelines', + icon: 'IconPencil', + description: 'Guidelines for writing effective postcards', + content: + 'When writing a postcard: keep the message under 150 words, use a warm ' + + 'and personal tone, mention the recipient by name, and include a clear ' + + 'call-to-action if the postcard is business-related. Always fill in both ' + + 'the recipientName and recipientAddress fields before marking the status ' + + 'as SENT.', +}); diff --git a/packages/twenty-apps/examples/postcard/src/views/all-post-cards.view.ts b/packages/twenty-apps/examples/postcard/src/views/all-post-cards.view.ts new file mode 100644 index 0000000000..a9b461b164 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/src/views/all-post-cards.view.ts @@ -0,0 +1,56 @@ +import { defineView } from 'twenty-sdk'; +import { + CONTENT_FIELD_UNIVERSAL_IDENTIFIER, + NAME_FIELD_UNIVERSAL_IDENTIFIER, + POST_CARD_UNIVERSAL_IDENTIFIER, +} from '../objects/post-card.object'; +import { RECIPIENT_ON_POST_CARD_ID } from '../fields/recipient-on-post-card.field'; +import { ViewType } from 'twenty-shared/types'; + +export const ALL_POST_CARDS_VIEW_ID = 'b1a2b3c4-0001-4a7b-8c9d-0e1f2a3b4c5d'; + +export default defineView({ + universalIdentifier: ALL_POST_CARDS_VIEW_ID, + name: 'All Post Cards', + objectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER, + type: ViewType.TABLE, + icon: 'IconMail', + position: 0, + fields: [ + { + universalIdentifier: '501adcc2-6c2b-48bd-a042-042478e839ec', + fieldMetadataUniversalIdentifier: NAME_FIELD_UNIVERSAL_IDENTIFIER, + position: 0, + isVisible: true, + size: 200, + }, + { + universalIdentifier: '38d9c9d1-a55c-4662-9727-e1e19bed6d82', + fieldMetadataUniversalIdentifier: RECIPIENT_ON_POST_CARD_ID, + position: 1, + isVisible: true, + size: 300, + }, + { + universalIdentifier: '75956ae8-5725-48be-a785-c6d1d4c74b60', + fieldMetadataUniversalIdentifier: CONTENT_FIELD_UNIVERSAL_IDENTIFIER, + position: 2, + isVisible: true, + size: 500, + }, + { + universalIdentifier: 'cedd1429-c589-41d7-bae2-81b26c3534a0', + fieldMetadataUniversalIdentifier: '87b675b8-dd8c-4448-b4ca-20e5a2234a1e', + position: 3, + isVisible: true, + size: 150, + }, + { + universalIdentifier: 'babf6f19-6261-40cb-85fa-6c67eccf75f9', + fieldMetadataUniversalIdentifier: 'e06abe72-5b44-4e7f-93be-afc185a3c433', + position: 4, + isVisible: true, + size: 150, + }, + ], +}); diff --git a/packages/twenty-apps/examples/postcard/tsconfig.json b/packages/twenty-apps/examples/postcard/tsconfig.json new file mode 100644 index 0000000000..d574c8c810 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/tsconfig.json @@ -0,0 +1,42 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "sourceMap": true, + "declaration": true, + "outDir": "./dist", + "rootDir": ".", + "jsx": "react-jsx", + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "allowUnreachableCode": false, + "strict": true, + "alwaysStrict": true, + "noImplicitAny": true, + "strictBindCallApply": false, + "target": "es2018", + "module": "esnext", + "lib": ["es2020", "dom"], + "skipLibCheck": true, + "skipDefaultLibCheck": true, + "resolveJsonModule": true, + "paths": { + "src/*": ["./src/*"], + "~/*": ["./*"] + } + }, + "exclude": [ + "node_modules", + "dist", + "**/*.test.ts", + "**/*.spec.ts", + "**/*.integration-test.ts" + ], + "references": [ + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/packages/twenty-apps/examples/postcard/tsconfig.spec.json b/packages/twenty-apps/examples/postcard/tsconfig.spec.json new file mode 100644 index 0000000000..ea69a6c010 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "composite": true, + "types": ["vitest/globals", "node"] + }, + "include": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/twenty-apps/examples/postcard/vitest.config.ts b/packages/twenty-apps/examples/postcard/vitest.config.ts new file mode 100644 index 0000000000..2fed127a84 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/vitest.config.ts @@ -0,0 +1,21 @@ +import tsconfigPaths from 'vite-tsconfig-paths'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + plugins: [ + tsconfigPaths({ + projects: ['tsconfig.spec.json'], + ignoreConfigErrors: true, + }), + ], + test: { + testTimeout: 120_000, + hookTimeout: 120_000, + include: ['src/**/*.integration-test.ts'], + setupFiles: ['src/__tests__/setup-test.ts'], + env: { + TWENTY_API_KEY: + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ1c2VySWQiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ3b3Jrc3BhY2VJZCI6IjIwMjAyMDIwLTFjMjUtNGQwMi1iZjI1LTZhZWNjZjdlYTQxOSIsIndvcmtzcGFjZU1lbWJlcklkIjoiMjAyMDIwMjAtNDYzZi00MzViLTgyOGMtMTA3ZTAwN2EyNzExIiwidXNlcldvcmtzcGFjZUlkIjoiMjAyMDIwMjAtMWU3Yy00M2Q5LWE1ZGItNjg1YjUwNjlkODE2IiwidHlwZSI6IkFDQ0VTUyIsImF1dGhQcm92aWRlciI6InBhc3N3b3JkIiwiaWF0IjoxNzUxMjgxNzA0LCJleHAiOjIwNjY4NTc3MDR9.HMGqCsVlOAPVUBhKSGlD1X86VoHKt4LIUtET3CGIdik', + }, + }, +}); diff --git a/packages/twenty-apps/examples/postcard/yarn.lock b/packages/twenty-apps/examples/postcard/yarn.lock new file mode 100644 index 0000000000..35ddc0a141 --- /dev/null +++ b/packages/twenty-apps/examples/postcard/yarn.lock @@ -0,0 +1,4589 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@alcalzone/ansi-tokenize@npm:^0.2.4": + version: 0.2.5 + resolution: "@alcalzone/ansi-tokenize@npm:0.2.5" + dependencies: + ansi-styles: "npm:^6.2.1" + is-fullwidth-code-point: "npm:^5.0.0" + checksum: 10c0/dd8622288426b5b7dbf8b68d51d4b930cea591d0e3b9dbc3f523131464d78ac922c165fcb7ba5307f133d35dbcaa0e6648a1c3fb6a0dc2725546d6f867b70af4 + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/aix-ppc64@npm:0.25.12" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/aix-ppc64@npm:0.27.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/android-arm64@npm:0.25.12" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/android-arm64@npm:0.27.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/android-arm@npm:0.25.12" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/android-arm@npm:0.27.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/android-x64@npm:0.25.12" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/android-x64@npm:0.27.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/darwin-arm64@npm:0.25.12" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/darwin-arm64@npm:0.27.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/darwin-x64@npm:0.25.12" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/darwin-x64@npm:0.27.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/freebsd-arm64@npm:0.25.12" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/freebsd-arm64@npm:0.27.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/freebsd-x64@npm:0.25.12" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/freebsd-x64@npm:0.27.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-arm64@npm:0.25.12" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/linux-arm64@npm:0.27.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-arm@npm:0.25.12" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/linux-arm@npm:0.27.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-ia32@npm:0.25.12" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/linux-ia32@npm:0.27.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-loong64@npm:0.25.12" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/linux-loong64@npm:0.27.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-mips64el@npm:0.25.12" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/linux-mips64el@npm:0.27.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-ppc64@npm:0.25.12" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/linux-ppc64@npm:0.27.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-riscv64@npm:0.25.12" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/linux-riscv64@npm:0.27.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-s390x@npm:0.25.12" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/linux-s390x@npm:0.27.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-x64@npm:0.25.12" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/linux-x64@npm:0.27.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/netbsd-arm64@npm:0.25.12" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/netbsd-arm64@npm:0.27.5" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/netbsd-x64@npm:0.25.12" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/netbsd-x64@npm:0.27.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/openbsd-arm64@npm:0.25.12" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/openbsd-arm64@npm:0.27.5" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/openbsd-x64@npm:0.25.12" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/openbsd-x64@npm:0.27.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openharmony-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/openharmony-arm64@npm:0.25.12" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openharmony-arm64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/openharmony-arm64@npm:0.27.5" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/sunos-x64@npm:0.25.12" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/sunos-x64@npm:0.27.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/win32-arm64@npm:0.25.12" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/win32-arm64@npm:0.27.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/win32-ia32@npm:0.25.12" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/win32-ia32@npm:0.27.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/win32-x64@npm:0.25.12" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.27.5": + version: 0.27.5 + resolution: "@esbuild/win32-x64@npm:0.27.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@fastify/busboy@npm:^2.0.0": + version: 2.1.1 + resolution: "@fastify/busboy@npm:2.1.1" + checksum: 10c0/6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3 + languageName: node + linkType: hard + +"@gar/promise-retry@npm:^1.0.0": + version: 1.0.3 + resolution: "@gar/promise-retry@npm:1.0.3" + checksum: 10c0/885b02c8b0d75b2d215da25f3b639158c4fbe8fefe0d79163304534b9a6d0710db4b7699f7cd3cc1a730792bff04cbe19f4850a62d3e105a663eaeec88f38332 + languageName: node + linkType: hard + +"@genql/cli@npm:^3.0.3": + version: 3.0.5 + resolution: "@genql/cli@npm:3.0.5" + dependencies: + "@graphql-tools/graphql-file-loader": "npm:^7.5.11" + "@graphql-tools/load": "npm:^7.8.6" + fs-extra: "npm:^10.1.0" + graphql: "npm:^16.6.0" + kleur: "npm:^4.1.5" + listr: "npm:^0.14.3" + lodash: "npm:^4.17.21" + mkdirp: "npm:^0.5.1" + native-fetch: "npm:^4.0.2" + prettier: "npm:^2.8.0" + qs: "npm:^6.11.0" + rimraf: "npm:^2.6.3" + undici: "npm:^5.18.0" + yargs: "npm:^15.3.1" + bin: + genql: dist/cli.js + checksum: 10c0/646d4da8986741a8f1b610bd8cfb5bc26cd9a856de671461e4ca87fb05443f37dd0edfb3b30ceaa34cd049077873afa07febfd4714dd2e0681fb07484e19a080 + languageName: node + linkType: hard + +"@genql/runtime@npm:^2.10.0": + version: 2.10.0 + resolution: "@genql/runtime@npm:2.10.0" + dependencies: + "@types/qs": "npm:^6.9.0" + "@types/ws": "npm:^6.0.1" + graphql-query-batcher: "npm:^1.0.1" + isomorphic-unfetch: "npm:^3.0.0" + lodash: "npm:^4.17.20" + subscriptions-transport-ws: "npm:^0.9.16" + tslib: "npm:^2.0.0" + utility-types: "npm:^3.10.0" + ws: "npm:^6.1.4" + zen-observable-ts: "npm:^0.8.21" + peerDependencies: + graphql: "*" + checksum: 10c0/e2a886c2469c933681e2b0ddd6a5b7f4cb12932251ba460e3cf2db4246817da79313ea4ba9769ec7cbe53ab9c1cb81ad8fcce6a969cd241185b79398d2a4f3c6 + languageName: node + linkType: hard + +"@graphql-tools/graphql-file-loader@npm:^7.5.11": + version: 7.5.17 + resolution: "@graphql-tools/graphql-file-loader@npm:7.5.17" + dependencies: + "@graphql-tools/import": "npm:6.7.18" + "@graphql-tools/utils": "npm:^9.2.1" + globby: "npm:^11.0.3" + tslib: "npm:^2.4.0" + unixify: "npm:^1.0.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/f737f14357731ad01da57755e1cf26ce375b475209d6ab7e4b656b56191a8979d2ab7dd5d1c54a1f11e04374f7a373fa95ea5ec6a001d0cef913ea208fadc65b + languageName: node + linkType: hard + +"@graphql-tools/import@npm:6.7.18": + version: 6.7.18 + resolution: "@graphql-tools/import@npm:6.7.18" + dependencies: + "@graphql-tools/utils": "npm:^9.2.1" + resolve-from: "npm:5.0.0" + tslib: "npm:^2.4.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/d33e37a1879dd43ac2851c9bac2f2873c58bb3687f1c06e159760dbb5e540ef074d688df70cc6dbd3ee5de48d437878df8f65a7c65ae80bd025bf98f2d615732 + languageName: node + linkType: hard + +"@graphql-tools/load@npm:^7.8.6": + version: 7.8.14 + resolution: "@graphql-tools/load@npm:7.8.14" + dependencies: + "@graphql-tools/schema": "npm:^9.0.18" + "@graphql-tools/utils": "npm:^9.2.1" + p-limit: "npm:3.1.0" + tslib: "npm:^2.4.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/1fa036ac596ccf48f350aa545d108c173184d9b53247f9e21c0d4ba96c5cba4a0b44281f9154f122e1e8e9d9d6eab93a5b2618ca8a797969bde1e75c1d45e786 + languageName: node + linkType: hard + +"@graphql-tools/merge@npm:^8.4.1": + version: 8.4.2 + resolution: "@graphql-tools/merge@npm:8.4.2" + dependencies: + "@graphql-tools/utils": "npm:^9.2.1" + tslib: "npm:^2.4.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/2df55222b48e010e683572f456cf265aabae5748c59f7c1260c66dec9794b7a076d3706f04da969b77f0a32c7ccb4551fee30125931d3fe9c98a8806aae9a3f4 + languageName: node + linkType: hard + +"@graphql-tools/schema@npm:^9.0.18": + version: 9.0.19 + resolution: "@graphql-tools/schema@npm:9.0.19" + dependencies: + "@graphql-tools/merge": "npm:^8.4.1" + "@graphql-tools/utils": "npm:^9.2.1" + tslib: "npm:^2.4.0" + value-or-promise: "npm:^1.0.12" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/42fd8ca8d3c8d60b583077c201980518482ff0cd5ed0c1f14bd9b835a2689ad41d02cbd3478f7d7dea7aec1227f7639fd5deb5e6360852a2e542b96b44bfb7a4 + languageName: node + linkType: hard + +"@graphql-tools/utils@npm:^9.2.1": + version: 9.2.1 + resolution: "@graphql-tools/utils@npm:9.2.1" + dependencies: + "@graphql-typed-document-node/core": "npm:^3.1.1" + tslib: "npm:^2.4.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/37a7bd7e14d28ff1bacc007dca84bc6cef2d7d7af9a547b5dbe52fcd134afddd6d4a7b2148cfbaff5ddba91a868453d597da77bd0457fb0be15928f916901606 + languageName: node + linkType: hard + +"@graphql-typed-document-node/core@npm:^3.1.1": + version: 3.2.0 + resolution: "@graphql-typed-document-node/core@npm:3.2.0" + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/94e9d75c1f178bbae8d874f5a9361708a3350c8def7eaeb6920f2c820e82403b7d4f55b3735856d68e145e86c85cbfe2adc444fdc25519cd51f108697e99346c + languageName: node + linkType: hard + +"@inquirer/checkbox@npm:^2.5.0": + version: 2.5.0 + resolution: "@inquirer/checkbox@npm:2.5.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/figures": "npm:^1.0.5" + "@inquirer/type": "npm:^1.5.3" + ansi-escapes: "npm:^4.3.2" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/679d17ffe3aef0825593f3bc8d193b6c37b860c6cf6e0e9a10d4e60cc254a2dfc5da4a982bf5b9b5147018e456fffcb0b0dadf93ee1914b9d600b0c814284e22 + languageName: node + linkType: hard + +"@inquirer/confirm@npm:^3.2.0": + version: 3.2.0 + resolution: "@inquirer/confirm@npm:3.2.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + checksum: 10c0/a2cbfc8ae9c880bba4cce1993f5c399fb0d12741fdd574917c87fceb40ece62ffa60e35aaadf4e62d7c114f54008e45aee5d6d90497bb62d493996c02725d243 + languageName: node + linkType: hard + +"@inquirer/core@npm:^9.1.0": + version: 9.2.1 + resolution: "@inquirer/core@npm:9.2.1" + dependencies: + "@inquirer/figures": "npm:^1.0.6" + "@inquirer/type": "npm:^2.0.0" + "@types/mute-stream": "npm:^0.0.4" + "@types/node": "npm:^22.5.5" + "@types/wrap-ansi": "npm:^3.0.0" + ansi-escapes: "npm:^4.3.2" + cli-width: "npm:^4.1.0" + mute-stream: "npm:^1.0.0" + signal-exit: "npm:^4.1.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^6.2.0" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/11c14be77a9fa85831de799a585721b0a49ab2f3b7d8fd1780c48ea2b29229c6bdc94e7892419086d0f7734136c2ba87b6a32e0782571eae5bbd655b1afad453 + languageName: node + linkType: hard + +"@inquirer/editor@npm:^2.2.0": + version: 2.2.0 + resolution: "@inquirer/editor@npm:2.2.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + external-editor: "npm:^3.1.0" + checksum: 10c0/b8afc0790a7a5d82998bdfe469cbaa83b0cd0700be432cf95256c548e2a6a494997b5e93d65cbf94979c17b510758cf8494d85559f6b9508eb15d239a7f22aee + languageName: node + linkType: hard + +"@inquirer/expand@npm:^2.3.0": + version: 2.3.0 + resolution: "@inquirer/expand@npm:2.3.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/f2030cb482a715e4d5153c19b3f0fd8bf47c16cdc16e1c669e90985386edf4f7b0f3b0e97e2990bb228878b93716228eb067d94fc557c25d3c5ee58747c0a995 + languageName: node + linkType: hard + +"@inquirer/figures@npm:^1.0.5, @inquirer/figures@npm:^1.0.6": + version: 1.0.15 + resolution: "@inquirer/figures@npm:1.0.15" + checksum: 10c0/6e39a040d260ae234ae220180b7994ff852673e20be925f8aa95e78c7934d732b018cbb4d0ec39e600a410461bcb93dca771e7de23caa10630d255692e440f69 + languageName: node + linkType: hard + +"@inquirer/input@npm:^2.3.0": + version: 2.3.0 + resolution: "@inquirer/input@npm:2.3.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + checksum: 10c0/44c8cea38c9192f528cae556f38709135a00230132deab3b9bb9a925375fce0513fecf4e8c1df7c4319e1ed7aa31fb4dd2c4956c8bc9dd39af087aafff5b6f1f + languageName: node + linkType: hard + +"@inquirer/number@npm:^1.1.0": + version: 1.1.0 + resolution: "@inquirer/number@npm:1.1.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + checksum: 10c0/db472dab57c951c4a083b2a749ce58262b1efd9889e7603de6e9c3f9af7d8dce8fbdfa3859f65402d3587470e0397a076e5fb4ed775db33310f17a42c9faeb20 + languageName: node + linkType: hard + +"@inquirer/password@npm:^2.2.0": + version: 2.2.0 + resolution: "@inquirer/password@npm:2.2.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + ansi-escapes: "npm:^4.3.2" + checksum: 10c0/fa4b335164b2c9c3304d29a7214ef93bac8d3da6788146603ea3d0485b8d811151e49bf66cb0dcc729a9dc21406c3a8c2718c5beec572a91d07026d22842c13f + languageName: node + linkType: hard + +"@inquirer/prompts@npm:^5.5.0": + version: 5.5.0 + resolution: "@inquirer/prompts@npm:5.5.0" + dependencies: + "@inquirer/checkbox": "npm:^2.5.0" + "@inquirer/confirm": "npm:^3.2.0" + "@inquirer/editor": "npm:^2.2.0" + "@inquirer/expand": "npm:^2.3.0" + "@inquirer/input": "npm:^2.3.0" + "@inquirer/number": "npm:^1.1.0" + "@inquirer/password": "npm:^2.2.0" + "@inquirer/rawlist": "npm:^2.3.0" + "@inquirer/search": "npm:^1.1.0" + "@inquirer/select": "npm:^2.5.0" + checksum: 10c0/2d62b50ca761b2bd2d5759f48c03758f1af0665ac602c26ae1ae257ac512cf5c27fd82cde108ee0c6371ec39187adc6f45637f31ca79adf5bf96579f23e77143 + languageName: node + linkType: hard + +"@inquirer/rawlist@npm:^2.3.0": + version: 2.3.0 + resolution: "@inquirer/rawlist@npm:2.3.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/d49d5e12b7a54394c140b27c8d8748ba1ab855c67c01fa72b5a63810f12865df3bf4d5ae929f54fad77b5fc2f7431a332ae1e5fe4babb335380c28917002f364 + languageName: node + linkType: hard + +"@inquirer/search@npm:^1.1.0": + version: 1.1.0 + resolution: "@inquirer/search@npm:1.1.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/figures": "npm:^1.0.5" + "@inquirer/type": "npm:^1.5.3" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/20d7e910266b9e3f0dc8eef8f3007f487e6149fa8421d293eaf7c11a1e35c3d82aa30af118b3a6e35eed1048a27d7d806f45722abb10005db5d099ea64b00b17 + languageName: node + linkType: hard + +"@inquirer/select@npm:^2.5.0": + version: 2.5.0 + resolution: "@inquirer/select@npm:2.5.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/figures": "npm:^1.0.5" + "@inquirer/type": "npm:^1.5.3" + ansi-escapes: "npm:^4.3.2" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/280fa700187ff29da0ad4bf32aa11db776261584ddf5cc1ceac5caebb242a4ac0c5944af522a2579d78b6ec7d6e8b1b9f6564872101abd8dcc69929b4e33fc4c + languageName: node + linkType: hard + +"@inquirer/type@npm:^1.5.3": + version: 1.5.5 + resolution: "@inquirer/type@npm:1.5.5" + dependencies: + mute-stream: "npm:^1.0.0" + checksum: 10c0/4c41736c09ba9426b5a9e44993bdd54e8f532e791518802e33866f233a2a6126a25c1c82c19d1abbf1df627e57b1b957dd3f8318ea96073d8bfc32193943bcb3 + languageName: node + linkType: hard + +"@inquirer/type@npm:^2.0.0": + version: 2.0.0 + resolution: "@inquirer/type@npm:2.0.0" + dependencies: + mute-stream: "npm:^1.0.0" + checksum: 10c0/8c663d52beb2b89a896d3c3d5cc3d6d024fa149e565555bcb42fa640cbe23fba7ff2c51445342cef1fe6e46305e2d16c1590fa1d11ad0ddf93a67b655ef41f0a + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.5.5": + version: 1.5.5 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" + checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/agent@npm:4.0.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^11.2.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/f7b5ce0f3dd42c3f8c6546e8433573d8049f67ef11ec22aa4704bc41483122f68bf97752e06302c455ead667af5cb753e6a09bff06632bc465c1cfd4c4b75a53 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^5.0.0": + version: 5.0.0 + resolution: "@npmcli/fs@npm:5.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/26e376d780f60ff16e874a0ac9bc3399186846baae0b6e1352286385ac134d900cc5dafaded77f38d77f86898fc923ae1cee9d7399f0275b1aa24878915d722b + languageName: node + linkType: hard + +"@npmcli/redact@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/redact@npm:4.0.0" + checksum: 10c0/a1e9ba9c70a6b40e175bda2c3dd8cfdaf096e6b7f7a132c855c083c8dfe545c3237cd56702e2e6627a580b1d63373599d49a1192c4078a85bf47bbde824df31c + languageName: node + linkType: hard + +"@oxlint/darwin-arm64@npm:0.16.12": + version: 0.16.12 + resolution: "@oxlint/darwin-arm64@npm:0.16.12" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint/darwin-x64@npm:0.16.12": + version: 0.16.12 + resolution: "@oxlint/darwin-x64@npm:0.16.12" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@oxlint/linux-arm64-gnu@npm:0.16.12": + version: 0.16.12 + resolution: "@oxlint/linux-arm64-gnu@npm:0.16.12" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@oxlint/linux-arm64-musl@npm:0.16.12": + version: 0.16.12 + resolution: "@oxlint/linux-arm64-musl@npm:0.16.12" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@oxlint/linux-x64-gnu@npm:0.16.12": + version: 0.16.12 + resolution: "@oxlint/linux-x64-gnu@npm:0.16.12" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@oxlint/linux-x64-musl@npm:0.16.12": + version: 0.16.12 + resolution: "@oxlint/linux-x64-musl@npm:0.16.12" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@oxlint/win32-arm64@npm:0.16.12": + version: 0.16.12 + resolution: "@oxlint/win32-arm64@npm:0.16.12" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint/win32-x64@npm:0.16.12": + version: 0.16.12 + resolution: "@oxlint/win32-x64@npm:0.16.12" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-android-arm-eabi@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.60.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-android-arm64@npm:4.60.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.60.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.60.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.60.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-freebsd-x64@npm:4.60.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.60.1" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.60.1" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.60.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.60.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-gnu@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.60.1" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-musl@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-loong64-musl@npm:4.60.1" + conditions: os=linux & cpu=loong64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-gnu@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.60.1" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-musl@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.60.1" + conditions: os=linux & cpu=ppc64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.60.1" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-musl@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.60.1" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.60.1" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.60.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.60.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-openbsd-x64@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-openbsd-x64@npm:4.60.1" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-openharmony-arm64@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.60.1" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.60.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.60.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-gnu@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.60.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.60.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@samverschueren/stream-to-observable@npm:^0.3.0": + version: 0.3.1 + resolution: "@samverschueren/stream-to-observable@npm:0.3.1" + dependencies: + any-observable: "npm:^0.3.0" + peerDependenciesMeta: + rxjs: + optional: true + zen-observable: + optional: true + checksum: 10c0/0d874453f6bc2460d71783292291f52feb36c2a75314b1072a6ffe6206562f33e9d664a554348d565a6b54da9041d75070371052545bc329caaa52f64216987f + languageName: node + linkType: hard + +"@sniptt/guards@npm:^0.2.0": + version: 0.2.0 + resolution: "@sniptt/guards@npm:0.2.0" + checksum: 10c0/749bb0f550d1ddd4abdb23dc1076cba26e977659922b73d000bceeb253c09270aaced0d18e92f09d4ce2fdaae33e55f60f2142f5359bc90ba505422af0873526 + languageName: node + linkType: hard + +"@types/chai@npm:^5.2.2": + version: 5.2.3 + resolution: "@types/chai@npm:5.2.3" + dependencies: + "@types/deep-eql": "npm:*" + assertion-error: "npm:^2.0.1" + checksum: 10c0/e0ef1de3b6f8045a5e473e867c8565788c444271409d155588504840ad1a53611011f85072188c2833941189400228c1745d78323dac13fcede9c2b28bacfb2f + languageName: node + linkType: hard + +"@types/deep-eql@npm:*": + version: 4.0.2 + resolution: "@types/deep-eql@npm:4.0.2" + checksum: 10c0/bf3f811843117900d7084b9d0c852da9a044d12eb40e6de73b552598a6843c21291a8a381b0532644574beecd5e3491c5ff3a0365ab86b15d59862c025384844 + languageName: node + linkType: hard + +"@types/estree@npm:1.0.8, @types/estree@npm:^1.0.0": + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 + languageName: node + linkType: hard + +"@types/mute-stream@npm:^0.0.4": + version: 0.0.4 + resolution: "@types/mute-stream@npm:0.0.4" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/944730fd7b398c5078de3c3d4d0afeec8584283bc694da1803fdfca14149ea385e18b1b774326f1601baf53898ce6d121a952c51eb62d188ef6fcc41f725c0dc + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 25.5.0 + resolution: "@types/node@npm:25.5.0" + dependencies: + undici-types: "npm:~7.18.0" + checksum: 10c0/70c508165b6758c4f88d4f91abca526c3985eee1985503d4c2bd994dbaf588e52ac57e571160f18f117d76e963570ac82bd20e743c18987e82564312b3b62119 + languageName: node + linkType: hard + +"@types/node@npm:^22.5.5": + version: 22.19.15 + resolution: "@types/node@npm:22.19.15" + dependencies: + undici-types: "npm:~6.21.0" + checksum: 10c0/f17eaf3d0d1da5e93ad9e287efb78201f8a5282973c004c5f70d91675c5c6b926a23acaa7b158a42b3d7e27e36b349d65a531710c91c308fca53dd7fa280ef98 + languageName: node + linkType: hard + +"@types/node@npm:^24.7.2": + version: 24.12.0 + resolution: "@types/node@npm:24.12.0" + dependencies: + undici-types: "npm:~7.16.0" + checksum: 10c0/8b31c0af5b5474f13048a4e77c57f22cd4f8fe6e58c4b6fde9456b0c13f46a5bfaf5744ff88fd089581de9f0d6e99c584e022681de7acb26a58d258c654c4843 + languageName: node + linkType: hard + +"@types/qs@npm:^6.9.0": + version: 6.15.0 + resolution: "@types/qs@npm:6.15.0" + checksum: 10c0/1b104cac50e655fc41d7fc1de2c2aba2908c4cf833a555b6808fb4c96752662b439238f2392a15d2590a7a6ca75dbd40e42d9378ac2be0d548ee484954363688 + languageName: node + linkType: hard + +"@types/react@npm:^19.0.0": + version: 19.2.14 + resolution: "@types/react@npm:19.2.14" + dependencies: + csstype: "npm:^3.2.2" + checksum: 10c0/7d25bf41b57719452d86d2ac0570b659210402707313a36ee612666bf11275a1c69824f8c3ee1fdca077ccfe15452f6da8f1224529b917050eb2d861e52b59b7 + languageName: node + linkType: hard + +"@types/wrap-ansi@npm:^3.0.0": + version: 3.0.0 + resolution: "@types/wrap-ansi@npm:3.0.0" + checksum: 10c0/8d8f53363f360f38135301a06b596c295433ad01debd082078c33c6ed98b05a5c8fe8853a88265432126096084f4a135ec1564e3daad631b83296905509f90b3 + languageName: node + linkType: hard + +"@types/ws@npm:^6.0.1": + version: 6.0.4 + resolution: "@types/ws@npm:6.0.4" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/fa958e64596ca9487c3ed6012834de70b47f25d971f1950cfb8e6a99cb77ff340ae82ac7627744e01b58010674ef8ede07d5a2ac29ca9ad0d67a430fcc69ae14 + languageName: node + linkType: hard + +"@vitest/expect@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/expect@npm:3.2.4" + dependencies: + "@types/chai": "npm:^5.2.2" + "@vitest/spy": "npm:3.2.4" + "@vitest/utils": "npm:3.2.4" + chai: "npm:^5.2.0" + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/7586104e3fd31dbe1e6ecaafb9a70131e4197dce2940f727b6a84131eee3decac7b10f9c7c72fa5edbdb68b6f854353bd4c0fa84779e274207fb7379563b10db + languageName: node + linkType: hard + +"@vitest/mocker@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/mocker@npm:3.2.4" + dependencies: + "@vitest/spy": "npm:3.2.4" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.17" + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10c0/f7a4aea19bbbf8f15905847ee9143b6298b2c110f8b64789224cb0ffdc2e96f9802876aa2ca83f1ec1b6e1ff45e822abb34f0054c24d57b29ab18add06536ccd + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:3.2.4, @vitest/pretty-format@npm:^3.2.4": + version: 3.2.4 + resolution: "@vitest/pretty-format@npm:3.2.4" + dependencies: + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/5ad7d4278e067390d7d633e307fee8103958806a419ca380aec0e33fae71b44a64415f7a9b4bc11635d3c13d4a9186111c581d3cef9c65cc317e68f077456887 + languageName: node + linkType: hard + +"@vitest/runner@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/runner@npm:3.2.4" + dependencies: + "@vitest/utils": "npm:3.2.4" + pathe: "npm:^2.0.3" + strip-literal: "npm:^3.0.0" + checksum: 10c0/e8be51666c72b3668ae3ea348b0196656a4a5adb836cb5e270720885d9517421815b0d6c98bfdf1795ed02b994b7bfb2b21566ee356a40021f5bf4f6ed4e418a + languageName: node + linkType: hard + +"@vitest/snapshot@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/snapshot@npm:3.2.4" + dependencies: + "@vitest/pretty-format": "npm:3.2.4" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + checksum: 10c0/f8301a3d7d1559fd3d59ed51176dd52e1ed5c2d23aa6d8d6aa18787ef46e295056bc726a021698d8454c16ed825ecba163362f42fa90258bb4a98cfd2c9424fc + languageName: node + linkType: hard + +"@vitest/spy@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/spy@npm:3.2.4" + dependencies: + tinyspy: "npm:^4.0.3" + checksum: 10c0/6ebf0b4697dc238476d6b6a60c76ba9eb1dd8167a307e30f08f64149612fd50227682b876420e4c2e09a76334e73f72e3ebf0e350714dc22474258292e202024 + languageName: node + linkType: hard + +"@vitest/utils@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/utils@npm:3.2.4" + dependencies: + "@vitest/pretty-format": "npm:3.2.4" + loupe: "npm:^3.1.4" + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/024a9b8c8bcc12cf40183c246c244b52ecff861c6deb3477cbf487ac8781ad44c68a9c5fd69f8c1361878e55b97c10d99d511f2597f1f7244b5e5101d028ba64 + languageName: node + linkType: hard + +"abbrev@npm:^4.0.0": + version: 4.0.0 + resolution: "abbrev@npm:4.0.0" + checksum: 10c0/b4cc16935235e80702fc90192e349e32f8ef0ed151ef506aa78c81a7c455ec18375c4125414b99f84b2e055199d66383e787675f0bcd87da7a4dbd59f9eac1d5 + languageName: node + linkType: hard + +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.4 + resolution: "agent-base@npm:7.1.4" + checksum: 10c0/c2c9ab7599692d594b6a161559ada307b7a624fa4c7b03e3afdb5a5e31cd0e53269115b620fcab024c5ac6a6f37fa5eb2e004f076ad30f5f7e6b8b671f7b35fe + languageName: node + linkType: hard + +"ansi-escapes@npm:^3.0.0": + version: 3.2.0 + resolution: "ansi-escapes@npm:3.2.0" + checksum: 10c0/084e1ce38139ad2406f18a8e7efe2b850ddd06ce3c00f633392d1ce67756dab44fe290e573d09ef3c9a0cb13c12881e0e35a8f77a017d39a0a4ab85ae2fae04f + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.3.2": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: "npm:^0.21.3" + checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 + languageName: node + linkType: hard + +"ansi-escapes@npm:^7.3.0": + version: 7.3.0 + resolution: "ansi-escapes@npm:7.3.0" + dependencies: + environment: "npm:^1.0.0" + checksum: 10c0/068961d99f0ef28b661a4a9f84a5d645df93ccf3b9b93816cc7d46bbe1913321d4cdf156bb842a4e1e4583b7375c631fa963efb43001c4eb7ff9ab8f78fc0679 + languageName: node + linkType: hard + +"ansi-regex@npm:^2.0.0": + version: 2.1.1 + resolution: "ansi-regex@npm:2.1.1" + checksum: 10c0/78cebaf50bce2cb96341a7230adf28d804611da3ce6bf338efa7b72f06cc6ff648e29f80cd95e582617ba58d5fdbec38abfeed3500a98bce8381a9daec7c548b + languageName: node + linkType: hard + +"ansi-regex@npm:^3.0.0": + version: 3.0.1 + resolution: "ansi-regex@npm:3.0.1" + checksum: 10c0/d108a7498b8568caf4a46eea4f1784ab4e0dfb2e3f3938c697dee21443d622d765c958f2b7e2b9f6b9e55e2e2af0584eaa9915d51782b89a841c28e744e7a167 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.2.2": + version: 6.2.2 + resolution: "ansi-regex@npm:6.2.2" + checksum: 10c0/05d4acb1d2f59ab2cf4b794339c7b168890d44dda4bf0ce01152a8da0213aca207802f930442ce8cd22d7a92f44907664aac6508904e75e038fa944d2601b30f + languageName: node + linkType: hard + +"ansi-styles@npm:^2.2.1": + version: 2.2.1 + resolution: "ansi-styles@npm:2.2.1" + checksum: 10c0/7c68aed4f1857389e7a12f85537ea5b40d832656babbf511cc7ecd9efc52889b9c3e5653a71a6aade783c3c5e0aa223ad4ff8e83c27ac8a666514e6c79068cab + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.2.1, ansi-styles@npm:^6.2.3": + version: 6.2.3 + resolution: "ansi-styles@npm:6.2.3" + checksum: 10c0/23b8a4ce14e18fb854693b95351e286b771d23d8844057ed2e7d083cd3e708376c3323707ec6a24365f7d7eda3ca00327fe04092e29e551499ec4c8b7bfac868 + languageName: node + linkType: hard + +"any-observable@npm:^0.3.0": + version: 0.3.0 + resolution: "any-observable@npm:0.3.0" + checksum: 10c0/104c2b79c2ac7e6c75b35f8fd62babf73015668f22bd25336c6f848350d91f9e7daf2fddbf1c1b76fe795e89fbc91b49f70a2aec5c69f1acf0562c344f36042b + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 + languageName: node + linkType: hard + +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8 + languageName: node + linkType: hard + +"async-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-function@npm:1.0.0" + checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 + languageName: node + linkType: hard + +"async-generator-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-generator-function@npm:1.0.0" + checksum: 10c0/2c50ef856c543ad500d8d8777d347e3c1ba623b93e99c9263ecc5f965c1b12d2a140e2ab6e43c3d0b85366110696f28114649411cbcd10b452a92a2318394186 + languageName: node + linkType: hard + +"async-limiter@npm:~1.0.0": + version: 1.0.1 + resolution: "async-limiter@npm:1.0.1" + checksum: 10c0/0693d378cfe86842a70d4c849595a0bb50dc44c11649640ca982fa90cbfc74e3cc4753b5a0847e51933f2e9c65ce8e05576e75e5e1fd963a086e673735b35969 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + +"auto-bind@npm:^5.0.1": + version: 5.0.1 + resolution: "auto-bind@npm:5.0.1" + checksum: 10c0/a703375350ea7b6e92405d8e6bcc6dbfb84b0d7c7172b33e5788a7593929a18227999ff9aa9c32436741d06d021e6672457b1cec73287efe3fab95cff6627eaf + languageName: node + linkType: hard + +"axios@npm:^1.13.5": + version: 1.14.0 + resolution: "axios@npm:1.14.0" + dependencies: + follow-redirects: "npm:^1.15.11" + form-data: "npm:^4.0.5" + proxy-from-env: "npm:^2.1.0" + checksum: 10c0/2541f4aa215a7d1842429dad006fc682d82bc0e74bd14500823f7d8cce3bbae0e0a8c328c8538946718f366ab8ce5a4c12e9ad40e5a0f3482ff8bff0cd115d45 + languageName: node + linkType: hard + +"backo2@npm:^1.0.2": + version: 1.0.2 + resolution: "backo2@npm:1.0.2" + checksum: 10c0/a9e825a6a38a6d1c4a94476eabc13d6127dfaafb0967baf104affbb67806ae26abbb58dab8d572d2cd21ef06634ff57c3ad48dff14b904e18de1474cc2f22bf3 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"balanced-match@npm:^4.0.2": + version: 4.0.4 + resolution: "balanced-match@npm:4.0.4" + checksum: 10c0/07e86102a3eb2ee2a6a1a89164f29d0dbaebd28f2ca3f5ca786f36b8b23d9e417eb3be45a4acf754f837be5ac0a2317de90d3fcb7f4f4dc95720a1f36b26a17b + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.13 + resolution: "brace-expansion@npm:1.1.13" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/384c61bb329b6adfdcc0cbbdd108dc19fb5f3e84ae15a02a74f94c6c791b5a9b035aae73b2a51929a8a478e2f0f212a771eb6a8b5b514cccfb8d0c9f2ce8cbd8 + languageName: node + linkType: hard + +"brace-expansion@npm:^5.0.5": + version: 5.0.5 + resolution: "brace-expansion@npm:5.0.5" + dependencies: + balanced-match: "npm:^4.0.2" + checksum: 10c0/4d238e14ed4f5cc9c07285550a41cef23121ca08ba99fa9eb5b55b580dcb6bf868b8210aa10526bdc9f8dc97f33ca2a7259039c4cc131a93042beddb424c48e3 + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 + languageName: node + linkType: hard + +"cacache@npm:^20.0.1": + version: 20.0.4 + resolution: "cacache@npm:20.0.4" + dependencies: + "@npmcli/fs": "npm:^5.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^13.0.0" + lru-cache: "npm:^11.1.0" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^13.0.0" + checksum: 10c0/539bf4020e44ba9ca5afc2ec435623ed7e0dd80c020097677e6b4a0545df5cc9d20b473212d01209c8b4aea43c0d095af0bb6da97bcb991642ea6fac0d7c462b + languageName: node + linkType: hard + +"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2": + version: 1.0.4 + resolution: "call-bound@npm:1.0.4" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + get-intrinsic: "npm:^1.3.0" + checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 + languageName: node + linkType: hard + +"camelcase@npm:^5.0.0": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 + languageName: node + linkType: hard + +"chai@npm:^5.2.0": + version: 5.3.3 + resolution: "chai@npm:5.3.3" + dependencies: + assertion-error: "npm:^2.0.1" + check-error: "npm:^2.1.1" + deep-eql: "npm:^5.0.1" + loupe: "npm:^3.1.0" + pathval: "npm:^2.0.0" + checksum: 10c0/b360fd4d38861622e5010c2f709736988b05c7f31042305fa3f4e9911f6adb80ccfb4e302068bf8ed10e835c2e2520cba0f5edc13d878b886987e5aa62483f53 + languageName: node + linkType: hard + +"chalk@npm:^1.0.0, chalk@npm:^1.1.3": + version: 1.1.3 + resolution: "chalk@npm:1.1.3" + dependencies: + ansi-styles: "npm:^2.2.1" + escape-string-regexp: "npm:^1.0.2" + has-ansi: "npm:^2.0.0" + strip-ansi: "npm:^3.0.0" + supports-color: "npm:^2.0.0" + checksum: 10c0/28c3e399ec286bb3a7111fd4225ebedb0d7b813aef38a37bca7c498d032459c265ef43404201d5fbb8d888d29090899c95335b4c0cda13e8b126ff15c541cef8 + languageName: node + linkType: hard + +"chalk@npm:^2.4.1": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + +"chalk@npm:^5.3.0, chalk@npm:^5.6.0": + version: 5.6.2 + resolution: "chalk@npm:5.6.2" + checksum: 10c0/99a4b0f0e7991796b1e7e3f52dceb9137cae2a9dfc8fc0784a550dc4c558e15ab32ed70b14b21b52beb2679b4892b41a0aa44249bcb996f01e125d58477c6976 + languageName: node + linkType: hard + +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 10c0/96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d + languageName: node + linkType: hard + +"check-error@npm:^2.1.1": + version: 2.1.3 + resolution: "check-error@npm:2.1.3" + checksum: 10c0/878e99038fb6476316b74668cd6a498c7e66df3efe48158fa40db80a06ba4258742ac3ee2229c4a2a98c5e73f5dff84eb3e50ceb6b65bbd8f831eafc8338607d + languageName: node + linkType: hard + +"chokidar@npm:^4.0.0": + version: 4.0.3 + resolution: "chokidar@npm:4.0.3" + dependencies: + readdirp: "npm:^4.0.1" + checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + +"cli-boxes@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-boxes@npm:3.0.0" + checksum: 10c0/4db3e8fbfaf1aac4fb3a6cbe5a2d3fa048bee741a45371b906439b9ffc821c6e626b0f108bdcd3ddf126a4a319409aedcf39a0730573ff050fdd7b6731e99fb9 + languageName: node + linkType: hard + +"cli-cursor@npm:^2.0.0, cli-cursor@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-cursor@npm:2.1.0" + dependencies: + restore-cursor: "npm:^2.0.0" + checksum: 10c0/09ee6d8b5b818d840bf80ec9561eaf696672197d3a02a7daee2def96d5f52ce6e0bbe7afca754ccf14f04830b5a1b4556273e983507d5029f95bba3016618eda + languageName: node + linkType: hard + +"cli-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "cli-cursor@npm:4.0.0" + dependencies: + restore-cursor: "npm:^4.0.0" + checksum: 10c0/e776e8c3c6727300d0539b0d25160b2bb56aed1a63942753ba1826b012f337a6f4b7ace3548402e4f2f13b5e16bfd751be672c44b203205e7eca8be94afec42c + languageName: node + linkType: hard + +"cli-truncate@npm:^0.2.1": + version: 0.2.1 + resolution: "cli-truncate@npm:0.2.1" + dependencies: + slice-ansi: "npm:0.0.4" + string-width: "npm:^1.0.1" + checksum: 10c0/c6caa5e2b70d841c42f4a2270d6fc7129df915f8911e4afa90c79231ccc857cd819a2c90e0707fde04e51ce56b4d71646b843f6cbaff4f7cdcb3b91ed51f6e89 + languageName: node + linkType: hard + +"cli-truncate@npm:^5.1.1": + version: 5.2.0 + resolution: "cli-truncate@npm:5.2.0" + dependencies: + slice-ansi: "npm:^8.0.0" + string-width: "npm:^8.2.0" + checksum: 10c0/0d4ec94702ca85b64522ac93633837fb5ea7db17b79b1322a60f6045e6ae2b8cd7bd4c1d19ac7d1f9e10e3bbda1112e172e439b68c02b785ee00da8d6a5c5471 + languageName: node + linkType: hard + +"cli-width@npm:^4.1.0": + version: 4.1.0 + resolution: "cli-width@npm:4.1.0" + checksum: 10c0/1fbd56413578f6117abcaf858903ba1f4ad78370a4032f916745fa2c7e390183a9d9029cf837df320b0fdce8137668e522f60a30a5f3d6529ff3872d265a955f + languageName: node + linkType: hard + +"cliui@npm:^6.0.0": + version: 6.0.0 + resolution: "cliui@npm:6.0.0" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.0" + wrap-ansi: "npm:^6.2.0" + checksum: 10c0/35229b1bb48647e882104cac374c9a18e34bbf0bace0e2cf03000326b6ca3050d6b59545d91e17bfe3705f4a0e2988787aa5cde6331bf5cbbf0164732cef6492 + languageName: node + linkType: hard + +"code-excerpt@npm:^4.0.0": + version: 4.0.0 + resolution: "code-excerpt@npm:4.0.0" + dependencies: + convert-to-spaces: "npm:^2.0.1" + checksum: 10c0/b6c5a06e039cecd2ab6a0e10ee0831de8362107d1f298ca3558b5f9004cb8e0260b02dd6c07f57b9a0e346c76864d2873311ee1989809fdeb05bd5fbbadde773 + languageName: node + linkType: hard + +"code-point-at@npm:^1.0.0": + version: 1.1.0 + resolution: "code-point-at@npm:1.1.0" + checksum: 10c0/33f6b234084e46e6e369b6f0b07949392651b4dde70fc6a592a8d3dafa08d5bb32e3981a02f31f6fc323a26bc03a4c063a9d56834848695bda7611c2417ea2e6 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + +"commander@npm:^12.0.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"convert-to-spaces@npm:^2.0.1": + version: 2.0.1 + resolution: "convert-to-spaces@npm:2.0.1" + checksum: 10c0/d90aa0e3b6a27f9d5265a8d32def3c5c855b3e823a9db1f26d772f8146d6b91020a2fdfd905ce8048a73fad3aaf836fef8188c67602c374405e2ae8396c4ac46 + languageName: node + linkType: hard + +"csstype@npm:^3.2.2": + version: 3.2.3 + resolution: "csstype@npm:3.2.3" + checksum: 10c0/cd29c51e70fa822f1cecd8641a1445bed7063697469d35633b516e60fe8c1bde04b08f6c5b6022136bb669b64c63d4173af54864510fbb4ee23281801841a3ce + languageName: node + linkType: hard + +"date-fns@npm:^1.27.2": + version: 1.30.1 + resolution: "date-fns@npm:1.30.1" + checksum: 10c0/bad6ad7c15180121e15d61ad62a4a214c108d66f35b35f5eeb6ade837a3c29aa4444b9528a93a5374b95ba11231c142276351bf52f4d168676f9a1e17ce3726a + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.4, debug@npm:^4.4.1": + version: 4.4.3 + resolution: "debug@npm:4.4.3" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 + languageName: node + linkType: hard + +"decamelize@npm:^1.2.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 + languageName: node + linkType: hard + +"deep-eql@npm:^5.0.1": + version: 5.0.2 + resolution: "deep-eql@npm:5.0.2" + checksum: 10c0/7102cf3b7bb719c6b9c0db2e19bf0aa9318d141581befe8c7ce8ccd39af9eaa4346e5e05adef7f9bd7015da0f13a3a25dcfe306ef79dc8668aedbecb658dd247 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + +"dotenv@npm:^16.4.0": + version: 16.6.1 + resolution: "dotenv@npm:16.6.1" + checksum: 10c0/15ce56608326ea0d1d9414a5c8ee6dcf0fffc79d2c16422b4ac2268e7e2d76ff5a572d37ffe747c377de12005f14b3cc22361e79fc7f1061cce81f77d2c973dc + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 + languageName: node + linkType: hard + +"elegant-spinner@npm:^1.0.1": + version: 1.0.1 + resolution: "elegant-spinner@npm:1.0.1" + checksum: 10c0/df607c83c20fc3ce56c514175dd5d1ee7f667da00cee13d04d32c70d55e76555091fa236689e691cf7dedba17b0020fec635e499cdde84dbea2ef8639314e5f8 + languageName: node + linkType: hard + +"emoji-regex@npm:^10.3.0": + version: 10.6.0 + resolution: "emoji-regex@npm:10.6.0" + checksum: 10c0/1e4aa097bb007301c3b4b1913879ae27327fdc48e93eeefefe3b87e495eb33c5af155300be951b4349ff6ac084f4403dc9eff970acba7c1c572d89396a9a32d7 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"environment@npm:^1.0.0": + version: 1.1.0 + resolution: "environment@npm:1.1.0" + checksum: 10c0/fb26434b0b581ab397039e51ff3c92b34924a98b2039dcb47e41b7bca577b9dbf134a8eadb364415c74464b682e2d3afe1a4c0eb9873dc44ea814c5d3103331d + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.7.0": + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" + dependencies: + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af + languageName: node + linkType: hard + +"es-toolkit@npm:^1.39.10": + version: 1.45.1 + resolution: "es-toolkit@npm:1.45.1" + dependenciesMeta: + "@trivago/prettier-plugin-sort-imports@4.3.0": + unplugged: true + prettier-plugin-sort-re-exports@0.0.1: + unplugged: true + checksum: 10c0/b19180c778af8fe2fb450e8e05a5793166c91e0aa66b87d9fcfcc5618bd33e6ceec9c103e074458d32b2044972dc4fc63631b3b615834fde261917e9561f6f59 + languageName: node + linkType: hard + +"esbuild@npm:^0.25.0": + version: 0.25.12 + resolution: "esbuild@npm:0.25.12" + dependencies: + "@esbuild/aix-ppc64": "npm:0.25.12" + "@esbuild/android-arm": "npm:0.25.12" + "@esbuild/android-arm64": "npm:0.25.12" + "@esbuild/android-x64": "npm:0.25.12" + "@esbuild/darwin-arm64": "npm:0.25.12" + "@esbuild/darwin-x64": "npm:0.25.12" + "@esbuild/freebsd-arm64": "npm:0.25.12" + "@esbuild/freebsd-x64": "npm:0.25.12" + "@esbuild/linux-arm": "npm:0.25.12" + "@esbuild/linux-arm64": "npm:0.25.12" + "@esbuild/linux-ia32": "npm:0.25.12" + "@esbuild/linux-loong64": "npm:0.25.12" + "@esbuild/linux-mips64el": "npm:0.25.12" + "@esbuild/linux-ppc64": "npm:0.25.12" + "@esbuild/linux-riscv64": "npm:0.25.12" + "@esbuild/linux-s390x": "npm:0.25.12" + "@esbuild/linux-x64": "npm:0.25.12" + "@esbuild/netbsd-arm64": "npm:0.25.12" + "@esbuild/netbsd-x64": "npm:0.25.12" + "@esbuild/openbsd-arm64": "npm:0.25.12" + "@esbuild/openbsd-x64": "npm:0.25.12" + "@esbuild/openharmony-arm64": "npm:0.25.12" + "@esbuild/sunos-x64": "npm:0.25.12" + "@esbuild/win32-arm64": "npm:0.25.12" + "@esbuild/win32-ia32": "npm:0.25.12" + "@esbuild/win32-x64": "npm:0.25.12" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/c205357531423220a9de8e1e6c6514242bc9b1666e762cd67ccdf8fdfdc3f1d0bd76f8d9383958b97ad4c953efdb7b6e8c1f9ca5951cd2b7c5235e8755b34a6b + languageName: node + linkType: hard + +"esbuild@npm:^0.27.0": + version: 0.27.5 + resolution: "esbuild@npm:0.27.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.27.5" + "@esbuild/android-arm": "npm:0.27.5" + "@esbuild/android-arm64": "npm:0.27.5" + "@esbuild/android-x64": "npm:0.27.5" + "@esbuild/darwin-arm64": "npm:0.27.5" + "@esbuild/darwin-x64": "npm:0.27.5" + "@esbuild/freebsd-arm64": "npm:0.27.5" + "@esbuild/freebsd-x64": "npm:0.27.5" + "@esbuild/linux-arm": "npm:0.27.5" + "@esbuild/linux-arm64": "npm:0.27.5" + "@esbuild/linux-ia32": "npm:0.27.5" + "@esbuild/linux-loong64": "npm:0.27.5" + "@esbuild/linux-mips64el": "npm:0.27.5" + "@esbuild/linux-ppc64": "npm:0.27.5" + "@esbuild/linux-riscv64": "npm:0.27.5" + "@esbuild/linux-s390x": "npm:0.27.5" + "@esbuild/linux-x64": "npm:0.27.5" + "@esbuild/netbsd-arm64": "npm:0.27.5" + "@esbuild/netbsd-x64": "npm:0.27.5" + "@esbuild/openbsd-arm64": "npm:0.27.5" + "@esbuild/openbsd-x64": "npm:0.27.5" + "@esbuild/openharmony-arm64": "npm:0.27.5" + "@esbuild/sunos-x64": "npm:0.27.5" + "@esbuild/win32-arm64": "npm:0.27.5" + "@esbuild/win32-ia32": "npm:0.27.5" + "@esbuild/win32-x64": "npm:0.27.5" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/dc8b6e4c2c5c8077b1a94d26dcbf4efa5f3d7d2a930357dc76db7c55e2d16c730c45a0f5c756d01ebef6fbd0d8722c2f75add190825a48c09954d7571ce556a9 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 + languageName: node + linkType: hard + +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d + languageName: node + linkType: hard + +"eventemitter3@npm:^3.1.0": + version: 3.1.2 + resolution: "eventemitter3@npm:3.1.2" + checksum: 10c0/c67262eccbf85848b7cc6d4abb6c6e34155e15686db2a01c57669fd0d44441a574a19d44d25948b442929e065774cbe5003d8e77eed47674fbf876ac77887793 + languageName: node + linkType: hard + +"expect-type@npm:^1.2.1": + version: 1.3.0 + resolution: "expect-type@npm:1.3.0" + checksum: 10c0/8412b3fe4f392c420ab41dae220b09700e4e47c639a29ba7ba2e83cc6cffd2b4926f7ac9e47d7e277e8f4f02acda76fd6931cb81fd2b382fa9477ef9ada953fd + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.3 + resolution: "exponential-backoff@npm:3.1.3" + checksum: 10c0/77e3ae682b7b1f4972f563c6dbcd2b0d54ac679e62d5d32f3e5085feba20483cf28bd505543f520e287a56d4d55a28d7874299941faf637e779a1aa5994d1267 + languageName: node + linkType: hard + +"external-editor@npm:^3.1.0": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" + dependencies: + chardet: "npm:^0.7.0" + iconv-lite: "npm:^0.4.24" + tmp: "npm:^0.0.33" + checksum: 10c0/c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.8" + checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.20.1 + resolution: "fastq@npm:1.20.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/e5dd725884decb1f11e5c822221d76136f239d0236f176fab80b7b8f9e7619ae57e6b4e5b73defc21e6b9ef99437ee7b545cff8e6c2c337819633712fa9d352e + languageName: node + linkType: hard + +"fdir@npm:^6.5.0": + version: 6.5.0 + resolution: "fdir@npm:6.5.0" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/e345083c4306b3aed6cb8ec551e26c36bab5c511e99ea4576a16750ddc8d3240e63826cc624f5ae17ad4dc82e68a253213b60d556c11bfad064b7607847ed07f + languageName: node + linkType: hard + +"figures@npm:^1.7.0": + version: 1.7.0 + resolution: "figures@npm:1.7.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + object-assign: "npm:^4.1.0" + checksum: 10c0/a10942b0eec3372bf61822ab130d2bbecdf527d551b0b013fbe7175b7a0238ead644ee8930a1a3cb872fb9ab2ec27df30e303765a3b70b97852e2e9ee43bdff3 + languageName: node + linkType: hard + +"figures@npm:^2.0.0": + version: 2.0.0 + resolution: "figures@npm:2.0.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 10c0/5dc5a75fec3e7e04ae65d6ce51d28b3e70d4656c51b06996b6fdb2cb5b542df512e3b3c04482f5193a964edddafa5521479ff948fa84e12ff556e53e094ab4ce + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.15.11": + version: 1.15.11 + resolution: "follow-redirects@npm:1.15.11" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 + languageName: node + linkType: hard + +"form-data@npm:^4.0.5": + version: 4.0.5 + resolution: "form-data@npm:4.0.5" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + es-set-tostringtag: "npm:^2.1.0" + hasown: "npm:^2.0.2" + mime-types: "npm:^2.1.12" + checksum: 10c0/dd6b767ee0bbd6d84039db12a0fa5a2028160ffbfaba1800695713b46ae974a5f6e08b3356c3195137f8530dcd9dfcb5d5ae1eeff53d0db1e5aad863b619ce3b + languageName: node + linkType: hard + +"fs-extra@npm:^10.1.0": + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"generator-function@npm:^2.0.0": + version: 2.0.1 + resolution: "generator-function@npm:2.0.1" + checksum: 10c0/8a9f59df0f01cfefafdb3b451b80555e5cf6d76487095db91ac461a0e682e4ff7a9dbce15f4ecec191e53586d59eece01949e05a4b4492879600bbbe8e28d6b8 + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.1": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + +"get-east-asian-width@npm:^1.0.0, get-east-asian-width@npm:^1.3.1, get-east-asian-width@npm:^1.5.0": + version: 1.5.0 + resolution: "get-east-asian-width@npm:1.5.0" + checksum: 10c0/bff8bbc8d81790b9477f7aa55b1806b9f082a8dc1359fff7bd8b96939622c86b729685afc2bfeb22def1fc6ef1e5228e4d87dd4e6da60bc43a5edfb03c4ee167 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0": + version: 1.3.1 + resolution: "get-intrinsic@npm:1.3.1" + dependencies: + async-function: "npm:^1.0.0" + async-generator-function: "npm:^1.0.0" + call-bind-apply-helpers: "npm:^1.0.2" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + function-bind: "npm:^1.1.2" + generator-function: "npm:^2.0.0" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/9f4ab0cf7efe0fd2c8185f52e6f637e708f3a112610c88869f8f041bb9ecc2ce44bf285dfdbdc6f4f7c277a5b88d8e94a432374d97cca22f3de7fc63795deb5d + languageName: node + linkType: hard + +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob@npm:^13.0.0": + version: 13.0.6 + resolution: "glob@npm:13.0.6" + dependencies: + minimatch: "npm:^10.2.2" + minipass: "npm:^7.1.3" + path-scurry: "npm:^2.0.2" + checksum: 10c0/269c236f11a9b50357fe7a8c6aadac667e01deb5242b19c84975628f05f4438d8ee1354bb62c5d6c10f37fd59911b54d7799730633a2786660d8c69f1d18120a + languageName: node + linkType: hard + +"glob@npm:^7.1.3": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.1.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe + languageName: node + linkType: hard + +"globby@npm:^11.0.3": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: "npm:^2.1.0" + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.2.9" + ignore: "npm:^5.2.0" + merge2: "npm:^1.4.1" + slash: "npm:^3.0.0" + checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 + languageName: node + linkType: hard + +"globrex@npm:^0.1.2": + version: 0.1.2 + resolution: "globrex@npm:0.1.2" + checksum: 10c0/a54c029520cf58bda1d8884f72bd49b4cd74e977883268d931fd83bcbd1a9eb96d57c7dbd4ad80148fb9247467ebfb9b215630b2ed7563b2a8de02e1ff7f89d1 + languageName: node + linkType: hard + +"gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"graphql-query-batcher@npm:^1.0.1": + version: 1.0.1 + resolution: "graphql-query-batcher@npm:1.0.1" + checksum: 10c0/804d0f4064721a2116a16b9eac422e9233e85f4ab5b250cb8f83662725658ffde35779a8ae8211037f3dd2f9717de8cb63b394ad8057ce22171a83db2471196a + languageName: node + linkType: hard + +"graphql-sse@npm:^2.5.4": + version: 2.6.0 + resolution: "graphql-sse@npm:2.6.0" + peerDependencies: + graphql: ">=0.11 <=16" + checksum: 10c0/e05f0b5c8539d61e5ce34af8e0bb418c02bf922d6a7f9232a9abd53c77df5654684ca14f674ac771645c8fba9c37ce666c5d06f46eef54ea07e63653468065b0 + languageName: node + linkType: hard + +"graphql@npm:^16.6.0, graphql@npm:^16.8.1": + version: 16.13.2 + resolution: "graphql@npm:16.13.2" + checksum: 10c0/64e822a0a0e4398781e4bc9765b88d370c08261498b517add4b878038ef7be2005b6b394a79a5102b9379d57052f60bc7f23fec8f39808d101984a74772ebd9d + languageName: node + linkType: hard + +"has-ansi@npm:^2.0.0": + version: 2.0.0 + resolution: "has-ansi@npm:2.0.0" + dependencies: + ansi-regex: "npm:^2.0.0" + checksum: 10c0/f54e4887b9f8f3c4bfefd649c48825b3c093987c92c27880ee9898539e6f01aed261e82e73153c3f920fde0db5bf6ebd58deb498ed1debabcb4bc40113ccdf05 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + +"hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.2.0 + resolution: "http-cache-semantics@npm:4.2.0" + checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + +"iconv-lite@npm:^0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3" + checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.7.2": + version: 0.7.2 + resolution: "iconv-lite@npm:0.7.2" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/3c228920f3bd307f56bf8363706a776f4a060eb042f131cd23855ceca962951b264d0997ab38a1ad340e1c5df8499ed26e1f4f0db6b2a2ad9befaff22f14b722 + languageName: node + linkType: hard + +"ignore@npm:^5.2.0": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"indent-string@npm:^3.0.0": + version: 3.2.0 + resolution: "indent-string@npm:3.2.0" + checksum: 10c0/91b6d61621d24944c5c4d365d6f1ff4a490264ccaf1162a602faa0d323e69231db2180ad4ccc092c2f49cf8888cdb3da7b73e904cc0fdeec40d0bfb41ceb9478 + languageName: node + linkType: hard + +"indent-string@npm:^5.0.0": + version: 5.0.0 + resolution: "indent-string@npm:5.0.0" + checksum: 10c0/8ee77b57d92e71745e133f6f444d6fa3ed503ad0e1bcd7e80c8da08b42375c07117128d670589725ed07b1978065803fa86318c309ba45415b7fe13e7f170220 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 + languageName: node + linkType: hard + +"inherits@npm:2": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"ink@npm:^6.8.0": + version: 6.8.0 + resolution: "ink@npm:6.8.0" + dependencies: + "@alcalzone/ansi-tokenize": "npm:^0.2.4" + ansi-escapes: "npm:^7.3.0" + ansi-styles: "npm:^6.2.1" + auto-bind: "npm:^5.0.1" + chalk: "npm:^5.6.0" + cli-boxes: "npm:^3.0.0" + cli-cursor: "npm:^4.0.0" + cli-truncate: "npm:^5.1.1" + code-excerpt: "npm:^4.0.0" + es-toolkit: "npm:^1.39.10" + indent-string: "npm:^5.0.0" + is-in-ci: "npm:^2.0.0" + patch-console: "npm:^2.0.0" + react-reconciler: "npm:^0.33.0" + scheduler: "npm:^0.27.0" + signal-exit: "npm:^3.0.7" + slice-ansi: "npm:^8.0.0" + stack-utils: "npm:^2.0.6" + string-width: "npm:^8.1.1" + terminal-size: "npm:^4.0.1" + type-fest: "npm:^5.4.1" + widest-line: "npm:^6.0.0" + wrap-ansi: "npm:^9.0.0" + ws: "npm:^8.18.0" + yoga-layout: "npm:~3.2.1" + peerDependencies: + "@types/react": ">=19.0.0" + react: ">=19.0.0" + react-devtools-core: ">=6.1.2" + peerDependenciesMeta: + "@types/react": + optional: true + react-devtools-core: + optional: true + checksum: 10c0/50500e547fdf6a1f1d836d6befbd4770e3ab649ef0be1884500a6da411fb68a90e22dd7dcc9c404911d30e9f87506b3b9d8e997c6c6ceac85ee054b4dadefaff + languageName: node + linkType: hard + +"inquirer@npm:^10.0.0": + version: 10.2.2 + resolution: "inquirer@npm:10.2.2" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/prompts": "npm:^5.5.0" + "@inquirer/type": "npm:^1.5.3" + "@types/mute-stream": "npm:^0.0.4" + ansi-escapes: "npm:^4.3.2" + mute-stream: "npm:^1.0.0" + run-async: "npm:^3.0.0" + rxjs: "npm:^7.8.1" + checksum: 10c0/09bcff887a968ce29d3a8cba749ef35b6531b7fb7bf5b28aaf3e10aebae07af2494dd3ec67ae6f1dabe76da1064cfe4514098d4c7658fcaf3fd480b2975d7163 + languageName: node + linkType: hard + +"ip-address@npm:^10.0.1": + version: 10.1.0 + resolution: "ip-address@npm:10.1.0" + checksum: 10c0/0103516cfa93f6433b3bd7333fa876eb21263912329bfa47010af5e16934eeeff86f3d2ae700a3744a137839ddfad62b900c7a445607884a49b5d1e32a3d7566 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^1.0.0": + version: 1.0.0 + resolution: "is-fullwidth-code-point@npm:1.0.0" + dependencies: + number-is-nan: "npm:^1.0.0" + checksum: 10c0/12acfcf16142f2d431bf6af25d68569d3198e81b9799b4ae41058247aafcc666b0127d64384ea28e67a746372611fcbe9b802f69175287aba466da3eddd5ba0f + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^2.0.0": + version: 2.0.0 + resolution: "is-fullwidth-code-point@npm:2.0.0" + checksum: 10c0/e58f3e4a601fc0500d8b2677e26e9fe0cd450980e66adb29d85b6addf7969731e38f8e43ed2ec868a09c101a55ac3d8b78902209269f38c5286bc98f5bc1b4d9 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^5.0.0, is-fullwidth-code-point@npm:^5.1.0": + version: 5.1.0 + resolution: "is-fullwidth-code-point@npm:5.1.0" + dependencies: + get-east-asian-width: "npm:^1.3.1" + checksum: 10c0/c1172c2e417fb73470c56c431851681591f6a17233603a9e6f94b7ba870b2e8a5266506490573b607fb1081318589372034aa436aec07b465c2029c0bc7f07a4 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-in-ci@npm:^2.0.0": + version: 2.0.0 + resolution: "is-in-ci@npm:2.0.0" + bin: + is-in-ci: cli.js + checksum: 10c0/1e1d1056939a681e8206035de5ad84e0404556eaa7622bb55f0f1868b9788bff3df427bc0b1ed5a172623154a90fcb1e759a230817cd73d09435543ae3c71feb + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-observable@npm:^1.1.0": + version: 1.1.0 + resolution: "is-observable@npm:1.1.0" + dependencies: + symbol-observable: "npm:^1.1.0" + checksum: 10c0/cf3166b0822f70ad06e7851e09430166ce658349d54aaa64c93a03320420b9285735821b23164bdce741ff83a86730ac3e53035ce4e2511ed843dbff4105bfa2 + languageName: node + linkType: hard + +"is-promise@npm:^2.1.0": + version: 2.2.2 + resolution: "is-promise@npm:2.2.2" + checksum: 10c0/2dba959812380e45b3df0fb12e7cb4d4528c989c7abb03ececb1d1fd6ab1cbfee956ca9daa587b9db1d8ac3c1e5738cf217bdb3dfd99df8c691be4c00ae09069 + languageName: node + linkType: hard + +"is-stream@npm:^1.1.0": + version: 1.1.0 + resolution: "is-stream@npm:1.1.0" + checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 + languageName: node + linkType: hard + +"isexe@npm:^4.0.0": + version: 4.0.0 + resolution: "isexe@npm:4.0.0" + checksum: 10c0/5884815115bceac452877659a9c7726382531592f43dc29e5d48b7c4100661aed54018cb90bd36cb2eaeba521092570769167acbb95c18d39afdccbcca06c5ce + languageName: node + linkType: hard + +"isomorphic-unfetch@npm:^3.0.0": + version: 3.1.0 + resolution: "isomorphic-unfetch@npm:3.1.0" + dependencies: + node-fetch: "npm:^2.6.1" + unfetch: "npm:^4.2.0" + checksum: 10c0/d3b61fca06304db692b7f76bdfd3a00f410e42cfa7403c3b250546bf71589d18cf2f355922f57198e4cc4a9872d3647b20397a5c3edf1a347c90d57c83cf2a89 + languageName: node + linkType: hard + +"iterall@npm:^1.2.1": + version: 1.3.0 + resolution: "iterall@npm:1.3.0" + checksum: 10c0/40de624e5fe937c4c0e511981b91caea9ff2142bfc0316cccc8506eaa03aa253820cc17c5bc5f0a98706c7268a373e5ebee9af9a0c8a359730cf7c05938b57b5 + languageName: node + linkType: hard + +"js-tokens@npm:^9.0.1": + version: 9.0.1 + resolution: "js-tokens@npm:9.0.1" + checksum: 10c0/68dcab8f233dde211a6b5fd98079783cbcd04b53617c1250e3553ee16ab3e6134f5e65478e41d82f6d351a052a63d71024553933808570f04dbf828d7921e80e + languageName: node + linkType: hard + +"jsonc-parser@npm:^3.2.0": + version: 3.3.1 + resolution: "jsonc-parser@npm:3.3.1" + checksum: 10c0/269c3ae0a0e4f907a914bf334306c384aabb9929bd8c99f909275ebd5c2d3bc70b9bcd119ad794f339dec9f24b6a4ee9cd5a8ab2e6435e730ad4075388fc2ab6 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.2.0 + resolution: "jsonfile@npm:6.2.0" + dependencies: + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/7f4f43b08d1869ded8a6822213d13ae3b99d651151d77efd1557ced0889c466296a7d9684e397bd126acf5eb2cfcb605808c3e681d0fdccd2fe5a04b47e76c0d + languageName: node + linkType: hard + +"kleur@npm:^4.1.5": + version: 4.1.5 + resolution: "kleur@npm:4.1.5" + checksum: 10c0/e9de6cb49657b6fa70ba2d1448fd3d691a5c4370d8f7bbf1c2f64c24d461270f2117e1b0afe8cb3114f13bbd8e51de158c2a224953960331904e636a5e4c0f2a + languageName: node + linkType: hard + +"listr-silent-renderer@npm:^1.1.1": + version: 1.1.1 + resolution: "listr-silent-renderer@npm:1.1.1" + checksum: 10c0/a13e08ebf863516a757bce4887f05290070772113d89095e9f51a07cf0b11a43a7563a67ff3b287c752c08f6d781fdb2123b02957534e3e0675fb564f2a42e1b + languageName: node + linkType: hard + +"listr-update-renderer@npm:^0.5.0": + version: 0.5.0 + resolution: "listr-update-renderer@npm:0.5.0" + dependencies: + chalk: "npm:^1.1.3" + cli-truncate: "npm:^0.2.1" + elegant-spinner: "npm:^1.0.1" + figures: "npm:^1.7.0" + indent-string: "npm:^3.0.0" + log-symbols: "npm:^1.0.2" + log-update: "npm:^2.3.0" + strip-ansi: "npm:^3.0.1" + peerDependencies: + listr: ^0.14.2 + checksum: 10c0/8ade44bf3dc6146c8e0178000619439e8889792c4689b66be6ce82bd459f5fe462ecb34b05147fb206a8ad60e6d4e6f34c9f48038e18366f867fd972688b8edc + languageName: node + linkType: hard + +"listr-verbose-renderer@npm:^0.5.0": + version: 0.5.0 + resolution: "listr-verbose-renderer@npm:0.5.0" + dependencies: + chalk: "npm:^2.4.1" + cli-cursor: "npm:^2.1.0" + date-fns: "npm:^1.27.2" + figures: "npm:^2.0.0" + checksum: 10c0/041cd1e82da7054f27ae0a914e98b40d15faf9f950ef850578fc6241d3fff3c2d7158a4f6226006e566b4c47bf445be2d254dd1ce5c16569a3a5dcd575bec656 + languageName: node + linkType: hard + +"listr@npm:^0.14.3": + version: 0.14.3 + resolution: "listr@npm:0.14.3" + dependencies: + "@samverschueren/stream-to-observable": "npm:^0.3.0" + is-observable: "npm:^1.1.0" + is-promise: "npm:^2.1.0" + is-stream: "npm:^1.1.0" + listr-silent-renderer: "npm:^1.1.1" + listr-update-renderer: "npm:^0.5.0" + listr-verbose-renderer: "npm:^0.5.0" + p-map: "npm:^2.0.0" + rxjs: "npm:^6.3.3" + checksum: 10c0/753d518218c423f46bee8eeacccecadfd2e414ba9c0f602e7f85fe3f6fa18404dfab0812433aeda4683ee2548358488f597ac1a3d321196baec5d3149b200b10 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 + languageName: node + linkType: hard + +"lodash@npm:^4.17.20, lodash@npm:^4.17.21": + version: 4.18.1 + resolution: "lodash@npm:4.18.1" + checksum: 10c0/757228fc68805c59789e82185135cf85f05d0b2d3d54631d680ca79ec21944ec8314d4533639a14b8bcfbd97a517e78960933041a5af17ecb693ec6eecb99a27 + languageName: node + linkType: hard + +"log-symbols@npm:^1.0.2": + version: 1.0.2 + resolution: "log-symbols@npm:1.0.2" + dependencies: + chalk: "npm:^1.0.0" + checksum: 10c0/c64e1fe41d0d043840f8b592d043b8607a836b846506f525a53d99d578561f02f97b2cba1d2b3c30bae5311d64b308d5a392a9930d252b906a9042fc2877da7a + languageName: node + linkType: hard + +"log-update@npm:^2.3.0": + version: 2.3.0 + resolution: "log-update@npm:2.3.0" + dependencies: + ansi-escapes: "npm:^3.0.0" + cli-cursor: "npm:^2.0.0" + wrap-ansi: "npm:^3.0.1" + checksum: 10c0/9bf21b138801ab4770a2bfa735161cf005b869360eaf5003a84ba64ddc5f5c3ce7217f4f1fa79d9c1f510d792213b2c9800327228e94df05859d19b716215d90 + languageName: node + linkType: hard + +"loupe@npm:^3.1.0, loupe@npm:^3.1.4": + version: 3.2.1 + resolution: "loupe@npm:3.2.1" + checksum: 10c0/910c872cba291309664c2d094368d31a68907b6f5913e989d301b5c25f30e97d76d77f23ab3bf3b46d0f601ff0b6af8810c10c31b91d2c6b2f132809ca2cc705 + languageName: node + linkType: hard + +"lru-cache@npm:^11.0.0, lru-cache@npm:^11.1.0, lru-cache@npm:^11.2.1": + version: 11.2.7 + resolution: "lru-cache@npm:11.2.7" + checksum: 10c0/549cdb59488baa617135fc12159cafb1a97f91079f35093bb3bcad72e849fc64ace636d244212c181dfdf1a99bbfa90757ff303f98561958ee4d0f885d9bd5f7 + languageName: node + linkType: hard + +"magic-string@npm:^0.30.17": + version: 0.30.21 + resolution: "magic-string@npm:0.30.21" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.5" + checksum: 10c0/299378e38f9a270069fc62358522ddfb44e94244baa0d6a8980ab2a9b2490a1d03b236b447eee309e17eb3bddfa482c61259d47960eb018a904f0ded52780c4a + languageName: node + linkType: hard + +"make-fetch-happen@npm:^15.0.0": + version: 15.0.5 + resolution: "make-fetch-happen@npm:15.0.5" + dependencies: + "@gar/promise-retry": "npm:^1.0.0" + "@npmcli/agent": "npm:^4.0.0" + "@npmcli/redact": "npm:^4.0.0" + cacache: "npm:^20.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^5.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^6.0.0" + ssri: "npm:^13.0.0" + checksum: 10c0/527580eb5e5476e6ad07a4e3bd017d13e935f4be815674b442081ae5a721c13d3af5715006619e6be79a85723067e047f83a0c9e699f41d8cec43609a8de4f7b + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mimic-fn@npm:^1.0.0": + version: 1.2.0 + resolution: "mimic-fn@npm:1.2.0" + checksum: 10c0/ad55214aec6094c0af4c0beec1a13787556f8116ed88807cf3f05828500f21f93a9482326bcd5a077ae91e3e8795b4e76b5b4c8bb12237ff0e4043a365516cba + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 + languageName: node + linkType: hard + +"minimatch@npm:^10.2.2": + version: 10.2.5 + resolution: "minimatch@npm:10.2.5" + dependencies: + brace-expansion: "npm:^5.0.5" + checksum: 10c0/6bb058bd6324104b9ec2f763476a35386d05079c1f5fe4fbf1f324a25237cd4534d6813ecd71f48208f4e635c1221899bef94c3c89f7df55698fe373aaae20fd + languageName: node + linkType: hard + +"minimatch@npm:^3.1.1": + version: 3.1.5 + resolution: "minimatch@npm:3.1.5" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/2ecbdc0d33f07bddb0315a8b5afbcb761307a8778b48f0b312418ccbced99f104a2d17d8aca7573433c70e8ccd1c56823a441897a45e384ea76ef401a26ace70 + languageName: node + linkType: hard + +"minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^5.0.0": + version: 5.0.2 + resolution: "minipass-fetch@npm:5.0.2" + dependencies: + iconv-lite: "npm:^0.7.2" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^2.0.0" + minizlib: "npm:^3.0.1" + dependenciesMeta: + iconv-lite: + optional: true + checksum: 10c0/ce4ab9f21cfabaead2097d95dd33f485af8072fbc6b19611bce694965393453a1639d641c2bcf1c48f2ea7d41ea7fab8278373f1d0bee4e63b0a5b2cdd0ef649 + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.7 + resolution: "minipass-flush@npm:1.0.7" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/960915c02aa0991662c37c404517dd93708d17f96533b2ca8c1e776d158715d8107c5ced425ffc61674c167d93607f07f48a83c139ce1057f8781e5dfb4b90c2 + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^2.0.0": + version: 2.0.0 + resolution: "minipass-sized@npm:2.0.0" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/f9201696a6f6d68610d04c9c83e3d2e5cb9c026aae1c8cbf7e17f386105cb79c1bb088dbc21bf0b1eb4f3fb5df384fd1e7aa3bf1f33868c416ae8c8a92679db8 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2, minipass@npm:^7.1.3": + version: 7.1.3 + resolution: "minipass@npm:7.1.3" + checksum: 10c0/539da88daca16533211ea5a9ee98dc62ff5742f531f54640dd34429e621955e91cc280a91a776026264b7f9f6735947629f920944e9c1558369e8bf22eb33fbb + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1, minizlib@npm:^3.1.0": + version: 3.1.0 + resolution: "minizlib@npm:3.1.0" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/5aad75ab0090b8266069c9aabe582c021ae53eb33c6c691054a13a45db3b4f91a7fb1bd79151e6b4e9e9a86727b522527c0a06ec7d45206b745d54cd3097bcec + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.1": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: "npm:^1.2.6" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01 + languageName: node + linkType: hard + +"ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"mute-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "mute-stream@npm:1.0.0" + checksum: 10c0/dce2a9ccda171ec979a3b4f869a102b1343dee35e920146776780de182f16eae459644d187e38d59a3d37adf85685e1c17c38cf7bfda7e39a9880f7a1d10a74c + languageName: node + linkType: hard + +"nanoid@npm:^3.3.11": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b + languageName: node + linkType: hard + +"native-fetch@npm:^4.0.2": + version: 4.0.2 + resolution: "native-fetch@npm:4.0.2" + peerDependencies: + undici: "*" + checksum: 10c0/e3b824721daaa628086d9dcd02e8eb12f0a6c5e13a1d182682bae238d80c9bbf3dfd6314a94692ebe20316aa354476804b4df148201d066b46fc552a5794cfab + languageName: node + linkType: hard + +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.1": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 12.2.0 + resolution: "node-gyp@npm:12.2.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^15.0.0" + nopt: "npm:^9.0.0" + proc-log: "npm:^6.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.5.4" + tinyglobby: "npm:^0.2.12" + which: "npm:^6.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/3ed046746a5a7d90950cd8b0547332b06598443f31fe213ef4332a7174c7b7d259e1704835feda79b87d3f02e59d7791842aac60642ede4396ab25fdf0f8f759 + languageName: node + linkType: hard + +"nopt@npm:^9.0.0": + version: 9.0.0 + resolution: "nopt@npm:9.0.0" + dependencies: + abbrev: "npm:^4.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/1822eb6f9b020ef6f7a7516d7b64a8036e09666ea55ac40416c36e4b2b343122c3cff0e2f085675f53de1d2db99a2a89a60ccea1d120bcd6a5347bf6ceb4a7fd + languageName: node + linkType: hard + +"normalize-path@npm:^2.1.1": + version: 2.1.1 + resolution: "normalize-path@npm:2.1.1" + dependencies: + remove-trailing-separator: "npm:^1.0.1" + checksum: 10c0/db814326ff88057437233361b4c7e9cac7b54815b051b57f2d341ce89b1d8ec8cbd43e7fa95d7652b3b69ea8fcc294b89b8530d556a84d1bdace94229e1e9a8b + languageName: node + linkType: hard + +"number-is-nan@npm:^1.0.0": + version: 1.0.1 + resolution: "number-is-nan@npm:1.0.1" + checksum: 10c0/cb97149006acc5cd512c13c1838223abdf202e76ddfa059c5e8e7507aff2c3a78cd19057516885a2f6f5b576543dc4f7b6f3c997cc7df53ae26c260855466df5 + languageName: node + linkType: hard + +"object-assign@npm:^4.1.0": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.3": + version: 1.13.4 + resolution: "object-inspect@npm:1.13.4" + checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"onetime@npm:^2.0.0": + version: 2.0.1 + resolution: "onetime@npm:2.0.1" + dependencies: + mimic-fn: "npm:^1.0.0" + checksum: 10c0/b4e44a8c34e70e02251bfb578a6e26d6de6eedbed106cd78211d2fd64d28b6281d54924696554e4e966559644243753ac5df73c87f283b0927533d3315696215 + languageName: node + linkType: hard + +"onetime@npm:^5.1.0": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: "npm:^2.1.0" + checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 + languageName: node + linkType: hard + +"oxlint@npm:^0.16.0": + version: 0.16.12 + resolution: "oxlint@npm:0.16.12" + dependencies: + "@oxlint/darwin-arm64": "npm:0.16.12" + "@oxlint/darwin-x64": "npm:0.16.12" + "@oxlint/linux-arm64-gnu": "npm:0.16.12" + "@oxlint/linux-arm64-musl": "npm:0.16.12" + "@oxlint/linux-x64-gnu": "npm:0.16.12" + "@oxlint/linux-x64-musl": "npm:0.16.12" + "@oxlint/win32-arm64": "npm:0.16.12" + "@oxlint/win32-x64": "npm:0.16.12" + dependenciesMeta: + "@oxlint/darwin-arm64": + optional: true + "@oxlint/darwin-x64": + optional: true + "@oxlint/linux-arm64-gnu": + optional: true + "@oxlint/linux-arm64-musl": + optional: true + "@oxlint/linux-x64-gnu": + optional: true + "@oxlint/linux-x64-musl": + optional: true + "@oxlint/win32-arm64": + optional: true + "@oxlint/win32-x64": + optional: true + bin: + oxc_language_server: bin/oxc_language_server + oxlint: bin/oxlint + checksum: 10c0/209c3484039c4f1fdd340689e81be93a70fdf74e8c111731e70d81580d223b0029439107c95fa4118cec3c9b03ba6c56624d3dcb8cdc79af222da3561122b3e7 + languageName: node + linkType: hard + +"p-limit@npm:3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 + languageName: node + linkType: hard + +"p-map@npm:^2.0.0": + version: 2.1.0 + resolution: "p-map@npm:2.1.0" + checksum: 10c0/735dae87badd4737a2dd582b6d8f93e49a1b79eabbc9815a4d63a528d5e3523e978e127a21d784cccb637010e32103a40d2aaa3ab23ae60250b1a820ca752043 + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.4 + resolution: "p-map@npm:7.0.4" + checksum: 10c0/a5030935d3cb2919d7e89454d1ce82141e6f9955413658b8c9403cfe379283770ed3048146b44cde168aa9e8c716505f196d5689db0ae3ce9a71521a2fef3abd + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f + languageName: node + linkType: hard + +"patch-console@npm:^2.0.0": + version: 2.0.0 + resolution: "patch-console@npm:2.0.0" + checksum: 10c0/486602591a0af7af8d4c76d8eea42cad32b6de7200488819c6383c75e43733ca7bdc80e30f2e68ce05f06a1607cce1683a1706c6672ca27dada1921b366e8f1c + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 + languageName: node + linkType: hard + +"path-scurry@npm:^2.0.2": + version: 2.0.2 + resolution: "path-scurry@npm:2.0.2" + dependencies: + lru-cache: "npm:^11.0.0" + minipass: "npm:^7.1.2" + checksum: 10c0/b35ad37cf6557a87fd057121ce2be7695380c9138d93e87ae928609da259ea0a170fac6f3ef1eb3ece8a068e8b7f2f3adf5bb2374cf4d4a57fe484954fcc9482 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + +"pathe@npm:^2.0.3": + version: 2.0.3 + resolution: "pathe@npm:2.0.3" + checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 + languageName: node + linkType: hard + +"pathval@npm:^2.0.0": + version: 2.0.1 + resolution: "pathval@npm:2.0.1" + checksum: 10c0/460f4709479fbf2c45903a65655fc8f0a5f6d808f989173aeef5fdea4ff4f303dc13f7870303999add60ec49d4c14733895c0a869392e9866f1091fa64fd7581 + languageName: node + linkType: hard + +"picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.3.1": + version: 2.3.2 + resolution: "picomatch@npm:2.3.2" + checksum: 10c0/a554d1709e59be97d1acb9eaedbbc700a5c03dbd4579807baed95100b00420bc729335440ef15004ae2378984e2487a7c1cebd743cfdb72b6fa9ab69223c0d61 + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2, picomatch@npm:^4.0.3": + version: 4.0.4 + resolution: "picomatch@npm:4.0.4" + checksum: 10c0/e2c6023372cc7b5764719a5ffb9da0f8e781212fa7ca4bd0562db929df8e117460f00dff3cb7509dacfc06b86de924b247f504d0ce1806a37fac4633081466b0 + languageName: node + linkType: hard + +"postcard@workspace:.": + version: 0.0.0-use.local + resolution: "postcard@workspace:." + dependencies: + "@types/node": "npm:^24.7.2" + "@types/react": "npm:^19.0.0" + oxlint: "npm:^0.16.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" + twenty-client-sdk: "npm:0.8.0-canary.8" + twenty-sdk: "npm:0.8.0-canary.8" + typescript: "npm:^5.9.3" + vite-tsconfig-paths: "npm:^4.2.1" + vitest: "npm:^3.1.1" + languageName: unknown + linkType: soft + +"postcss@npm:^8.5.6": + version: 8.5.8 + resolution: "postcss@npm:8.5.8" + dependencies: + nanoid: "npm:^3.3.11" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/dd918f7127ee7c60a0295bae2e72b3787892296e1d1c3c564d7a2a00c68d8df83cadc3178491259daa19ccc54804fb71ed8c937c6787e08d8bd4bedf8d17044c + languageName: node + linkType: hard + +"preact@npm:^10.28.3": + version: 10.29.0 + resolution: "preact@npm:10.29.0" + checksum: 10c0/d111381e5b48335e3a797a03adb83521cf5e9bdf880570fb2eff4fe9da9c82e6dedcbdf54538b1ed8f60bf813a0df0f4891b03dc32140ad93f8f720a8812dd5c + languageName: node + linkType: hard + +"prettier@npm:^2.8.0": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: 10c0/463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a + languageName: node + linkType: hard + +"proc-log@npm:^6.0.0": + version: 6.1.0 + resolution: "proc-log@npm:6.1.0" + checksum: 10c0/4f178d4062733ead9d71a9b1ab24ebcecdfe2250916a5b1555f04fe2eda972a0ec76fbaa8df1ad9c02707add6749219d118a4fc46dc56bdfe4dde4b47d80bb82 + languageName: node + linkType: hard + +"proxy-from-env@npm:^2.1.0": + version: 2.1.0 + resolution: "proxy-from-env@npm:2.1.0" + checksum: 10c0/ed01729fd4d094eab619cd7e17ce3698b3413b31eb102c4904f9875e677cd207392795d5b4adee9cec359dfd31c44d5ad7595a3a3ad51c40250e141512281c58 + languageName: node + linkType: hard + +"qs@npm:^6.11.0": + version: 6.15.0 + resolution: "qs@npm:6.15.0" + dependencies: + side-channel: "npm:^1.1.0" + checksum: 10c0/ff341078a78a991d8a48b4524d52949211447b4b1ad907f489cac0770cbc346a28e47304455c0320e5fb000f8762d64b03331e3b71865f663bf351bcba8cdb4b + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"react-dom@npm:^19.0.0": + version: 19.2.4 + resolution: "react-dom@npm:19.2.4" + dependencies: + scheduler: "npm:^0.27.0" + peerDependencies: + react: ^19.2.4 + checksum: 10c0/f0c63f1794dedb154136d4d0f59af00b41907f4859571c155940296808f4b94bf9c0c20633db75b5b2112ec13d8d7dd4f9bf57362ed48782f317b11d05a44f35 + languageName: node + linkType: hard + +"react-reconciler@npm:^0.33.0": + version: 0.33.0 + resolution: "react-reconciler@npm:0.33.0" + dependencies: + scheduler: "npm:^0.27.0" + peerDependencies: + react: ^19.2.0 + checksum: 10c0/3f7b27ea8d0ff4c8bf0e402a285e1af9b7d0e6f4c1a70a28f4384938bc1130bc82a90a31df0b79ef5e380e2e55e2598bd90b4dbf802b1203d735ba0355817d3a + languageName: node + linkType: hard + +"react@npm:^19.0.0": + version: 19.2.4 + resolution: "react@npm:19.2.4" + checksum: 10c0/cd2c9ff67a720799cc3b38a516009986f7fc4cb8d3e15716c6211cf098d1357ee3e348ab05ad0600042bbb0fd888530ba92e329198c92eafa0994f5213396596 + languageName: node + linkType: hard + +"readdirp@npm:^4.0.1": + version: 4.1.2 + resolution: "readdirp@npm:4.1.2" + checksum: 10c0/60a14f7619dec48c9c850255cd523e2717001b0e179dc7037cfa0895da7b9e9ab07532d324bfb118d73a710887d1e35f79c495fa91582784493e085d18c72c62 + languageName: node + linkType: hard + +"remove-trailing-separator@npm:^1.0.1": + version: 1.1.0 + resolution: "remove-trailing-separator@npm:1.1.0" + checksum: 10c0/3568f9f8f5af3737b4aee9e6e1e8ec4be65a92da9cb27f989e0893714d50aa95ed2ff02d40d1fa35e1b1a234dc9c2437050ef356704a3999feaca6667d9e9bfc + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + +"require-main-filename@npm:^2.0.0": + version: 2.0.0 + resolution: "require-main-filename@npm:2.0.0" + checksum: 10c0/db91467d9ead311b4111cbd73a4e67fa7820daed2989a32f7023785a2659008c6d119752d9c4ac011ae07e537eb86523adff99804c5fdb39cd3a017f9b401bb6 + languageName: node + linkType: hard + +"resolve-from@npm:5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + +"restore-cursor@npm:^2.0.0": + version: 2.0.0 + resolution: "restore-cursor@npm:2.0.0" + dependencies: + onetime: "npm:^2.0.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/f5b335bee06f440445e976a7031a3ef53691f9b7c4a9d42a469a0edaf8a5508158a0d561ff2b26a1f4f38783bcca2c0e5c3a44f927326f6694d5b44d7a4993e6 + languageName: node + linkType: hard + +"restore-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "restore-cursor@npm:4.0.0" + dependencies: + onetime: "npm:^5.1.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/6f7da8c5e422ac26aa38354870b1afac09963572cf2879443540449068cb43476e9cbccf6f8de3e0171e0d6f7f533c2bc1a0a008003c9a525bbc098e89041318 + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa + languageName: node + linkType: hard + +"rimraf@npm:^2.6.3": + version: 2.7.1 + resolution: "rimraf@npm:2.7.1" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: ./bin.js + checksum: 10c0/4eef73d406c6940927479a3a9dee551e14a54faf54b31ef861250ac815172bade86cc6f7d64a4dc5e98b65e4b18a2e1c9ff3b68d296be0c748413f092bb0dd40 + languageName: node + linkType: hard + +"rollup@npm:^4.43.0": + version: 4.60.1 + resolution: "rollup@npm:4.60.1" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.60.1" + "@rollup/rollup-android-arm64": "npm:4.60.1" + "@rollup/rollup-darwin-arm64": "npm:4.60.1" + "@rollup/rollup-darwin-x64": "npm:4.60.1" + "@rollup/rollup-freebsd-arm64": "npm:4.60.1" + "@rollup/rollup-freebsd-x64": "npm:4.60.1" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.60.1" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.60.1" + "@rollup/rollup-linux-arm64-gnu": "npm:4.60.1" + "@rollup/rollup-linux-arm64-musl": "npm:4.60.1" + "@rollup/rollup-linux-loong64-gnu": "npm:4.60.1" + "@rollup/rollup-linux-loong64-musl": "npm:4.60.1" + "@rollup/rollup-linux-ppc64-gnu": "npm:4.60.1" + "@rollup/rollup-linux-ppc64-musl": "npm:4.60.1" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.60.1" + "@rollup/rollup-linux-riscv64-musl": "npm:4.60.1" + "@rollup/rollup-linux-s390x-gnu": "npm:4.60.1" + "@rollup/rollup-linux-x64-gnu": "npm:4.60.1" + "@rollup/rollup-linux-x64-musl": "npm:4.60.1" + "@rollup/rollup-openbsd-x64": "npm:4.60.1" + "@rollup/rollup-openharmony-arm64": "npm:4.60.1" + "@rollup/rollup-win32-arm64-msvc": "npm:4.60.1" + "@rollup/rollup-win32-ia32-msvc": "npm:4.60.1" + "@rollup/rollup-win32-x64-gnu": "npm:4.60.1" + "@rollup/rollup-win32-x64-msvc": "npm:4.60.1" + "@types/estree": "npm:1.0.8" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loong64-gnu": + optional: true + "@rollup/rollup-linux-loong64-musl": + optional: true + "@rollup/rollup-linux-ppc64-gnu": + optional: true + "@rollup/rollup-linux-ppc64-musl": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-openbsd-x64": + optional: true + "@rollup/rollup-openharmony-arm64": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-gnu": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/48d3f2216b5533639b007e6756e2275c7f594e45adee21ce03674aa2e004406c661f8b86c7a0b471c9e889c6a9efbb29240ca0b7673c50e391406c490c309833 + languageName: node + linkType: hard + +"run-async@npm:^3.0.0": + version: 3.0.0 + resolution: "run-async@npm:3.0.0" + checksum: 10c0/b18b562ae37c3020083dcaae29642e4cc360c824fbfb6b7d50d809a9d5227bb986152d09310255842c8dce40526e82ca768f02f00806c91ba92a8dfa6159cb85 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"rxjs@npm:^6.3.3": + version: 6.6.7 + resolution: "rxjs@npm:6.6.7" + dependencies: + tslib: "npm:^1.9.0" + checksum: 10c0/e556a13a9aa89395e5c9d825eabcfa325568d9c9990af720f3f29f04a888a3b854f25845c2b55875d875381abcae2d8100af9cacdc57576e7ed6be030a01d2fe + languageName: node + linkType: hard + +"rxjs@npm:^7.8.1": + version: 7.8.2 + resolution: "rxjs@npm:7.8.2" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/1fcd33d2066ada98ba8f21fcbbcaee9f0b271de1d38dc7f4e256bfbc6ffcdde68c8bfb69093de7eeb46f24b1fb820620bf0223706cff26b4ab99a7ff7b2e2c45 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"scheduler@npm:^0.27.0": + version: 0.27.0 + resolution: "scheduler@npm:0.27.0" + checksum: 10c0/4f03048cb05a3c8fddc45813052251eca00688f413a3cee236d984a161da28db28ba71bd11e7a3dd02f7af84ab28d39fb311431d3b3772fed557945beb00c452 + languageName: node + linkType: hard + +"semver@npm:^7.3.5": + version: 7.7.4 + resolution: "semver@npm:7.7.4" + bin: + semver: bin/semver.js + checksum: 10c0/5215ad0234e2845d4ea5bb9d836d42b03499546ddafb12075566899fc617f68794bb6f146076b6881d755de17d6c6cc73372555879ec7dce2c2feee947866ad2 + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 + languageName: node + linkType: hard + +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 + languageName: node + linkType: hard + +"side-channel@npm:^1.1.0": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + side-channel-list: "npm:^1.0.0" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 + languageName: node + linkType: hard + +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 + languageName: node + linkType: hard + +"signal-exit@npm:^4.1.0": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b + languageName: node + linkType: hard + +"slice-ansi@npm:0.0.4": + version: 0.0.4 + resolution: "slice-ansi@npm:0.0.4" + checksum: 10c0/997d4cc73e34aa8c0f60bdb71701b16c062cc4acd7a95e3b10e8c05d790eb5e735d9b470270dc6f443b1ba21492db7ceb849d5c93011d1256061bf7ed7216c7a + languageName: node + linkType: hard + +"slice-ansi@npm:^8.0.0": + version: 8.0.0 + resolution: "slice-ansi@npm:8.0.0" + dependencies: + ansi-styles: "npm:^6.2.3" + is-fullwidth-code-point: "npm:^5.1.0" + checksum: 10c0/0ce4aa91febb7cea4a00c2c27bb820fa53b6d2862ce0f80f7120134719f7914fc416b0ed966cf35250a3169e152916392f35917a2d7cad0fcc5d8b841010fa9a + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.7 + resolution: "socks@npm:2.8.7" + dependencies: + ip-address: "npm:^10.0.1" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/2805a43a1c4bcf9ebf6e018268d87b32b32b06fbbc1f9282573583acc155860dc361500f89c73bfbb157caa1b4ac78059eac0ef15d1811eb0ca75e0bdadbc9d2 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"ssri@npm:^13.0.0": + version: 13.0.1 + resolution: "ssri@npm:13.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/cf6408a18676c57ff2ed06b8a20dc64bb3e748e5c7e095332e6aecaa2b8422b1e94a739a8453bf65156a8a47afe23757ba4ab52d3ea3b62322dc40875763e17a + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.6": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: "npm:^2.0.0" + checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a + languageName: node + linkType: hard + +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 + languageName: node + linkType: hard + +"std-env@npm:^3.9.0": + version: 3.10.0 + resolution: "std-env@npm:3.10.0" + checksum: 10c0/1814927a45004d36dde6707eaf17552a546769bc79a6421be2c16ce77d238158dfe5de30910b78ec30d95135cc1c59ea73ee22d2ca170f8b9753f84da34c427f + languageName: node + linkType: hard + +"string-width@npm:^1.0.1": + version: 1.0.2 + resolution: "string-width@npm:1.0.2" + dependencies: + code-point-at: "npm:^1.0.0" + is-fullwidth-code-point: "npm:^1.0.0" + strip-ansi: "npm:^3.0.0" + checksum: 10c0/c558438baed23a9ab9370bb6a939acbdb2b2ffc517838d651aad0f5b2b674fb85d460d9b1d0b6a4c210dffd09e3235222d89a5bd4c0c1587f78b2bb7bc00c65e + languageName: node + linkType: hard + +"string-width@npm:^2.1.1": + version: 2.1.1 + resolution: "string-width@npm:2.1.1" + dependencies: + is-fullwidth-code-point: "npm:^2.0.0" + strip-ansi: "npm:^4.0.0" + checksum: 10c0/e5f2b169fcf8a4257a399f95d069522f056e92ec97dbdcb9b0cdf14d688b7ca0b1b1439a1c7b9773cd79446cbafd582727279d6bfdd9f8edd306ea5e90e5b610 + languageName: node + linkType: hard + +"string-width@npm:^4.1.0, string-width@npm:^4.2.0": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^7.0.0": + version: 7.2.0 + resolution: "string-width@npm:7.2.0" + dependencies: + emoji-regex: "npm:^10.3.0" + get-east-asian-width: "npm:^1.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10c0/eb0430dd43f3199c7a46dcbf7a0b34539c76fe3aa62763d0b0655acdcbdf360b3f66f3d58ca25ba0205f42ea3491fa00f09426d3b7d3040e506878fc7664c9b9 + languageName: node + linkType: hard + +"string-width@npm:^8.1.0, string-width@npm:^8.1.1, string-width@npm:^8.2.0": + version: 8.2.0 + resolution: "string-width@npm:8.2.0" + dependencies: + get-east-asian-width: "npm:^1.5.0" + strip-ansi: "npm:^7.1.2" + checksum: 10c0/d8915428b43519b0f494da6590dbe4491857d8a12e40250e50fc01fbb616ffd8400a436bbe25712255ee129511fe0414c49d3b6b9627e2bc3a33dcec1d2eda02 + languageName: node + linkType: hard + +"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": + version: 3.0.1 + resolution: "strip-ansi@npm:3.0.1" + dependencies: + ansi-regex: "npm:^2.0.0" + checksum: 10c0/f6e7fbe8e700105dccf7102eae20e4f03477537c74b286fd22cfc970f139002ed6f0d9c10d0e21aa9ed9245e0fa3c9275930e8795c5b947da136e4ecb644a70f + languageName: node + linkType: hard + +"strip-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-ansi@npm:4.0.0" + dependencies: + ansi-regex: "npm:^3.0.0" + checksum: 10c0/d75d9681e0637ea316ddbd7d4d3be010b1895a17e885155e0ed6a39755ae0fd7ef46e14b22162e66a62db122d3a98ab7917794e255532ab461bb0a04feb03e7d + languageName: node + linkType: hard + +"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.1.0, strip-ansi@npm:^7.1.2": + version: 7.2.0 + resolution: "strip-ansi@npm:7.2.0" + dependencies: + ansi-regex: "npm:^6.2.2" + checksum: 10c0/544d13b7582f8254811ea97db202f519e189e59d35740c46095897e254e4f1aa9fe1524a83ad6bc5ad67d4dd6c0281d2e0219ed62b880a6238a16a17d375f221 + languageName: node + linkType: hard + +"strip-literal@npm:^3.0.0": + version: 3.1.0 + resolution: "strip-literal@npm:3.1.0" + dependencies: + js-tokens: "npm:^9.0.1" + checksum: 10c0/50918f669915d9ad0fe4b7599902b735f853f2201c97791ead00104a654259c0c61bc2bc8fa3db05109339b61f4cf09e47b94ecc874ffbd0e013965223893af8 + languageName: node + linkType: hard + +"subscriptions-transport-ws@npm:^0.9.16": + version: 0.9.19 + resolution: "subscriptions-transport-ws@npm:0.9.19" + dependencies: + backo2: "npm:^1.0.2" + eventemitter3: "npm:^3.1.0" + iterall: "npm:^1.2.1" + symbol-observable: "npm:^1.0.4" + ws: "npm:^5.2.0 || ^6.0.0 || ^7.0.0" + peerDependencies: + graphql: ">=0.10.0" + checksum: 10c0/6f2ade56865f0ba291d3ff82c79781b051c2374873bac853286fedfdbc05001b8c4018ab7cba44af667ead7f573e48d18892d58a8f9ca8d90dfb4bff5c125045 + languageName: node + linkType: hard + +"supports-color@npm:^2.0.0": + version: 2.0.0 + resolution: "supports-color@npm:2.0.0" + checksum: 10c0/570e0b63be36cccdd25186350a6cb2eaad332a95ff162fa06d9499982315f2fe4217e69dd98e862fbcd9c81eaff300a825a1fe7bf5cc752e5b84dfed042b0dda + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"symbol-observable@npm:^1.0.4, symbol-observable@npm:^1.1.0": + version: 1.2.0 + resolution: "symbol-observable@npm:1.2.0" + checksum: 10c0/009fee50798ef80ed4b8195048288f108b03de162db07493f2e1fd993b33fafa72d659e832b584da5a2427daa78e5a738fb2a9ab027ee9454252e0bedbcd1fdc + languageName: node + linkType: hard + +"tagged-tag@npm:^1.0.0": + version: 1.0.0 + resolution: "tagged-tag@npm:1.0.0" + checksum: 10c0/91d25c9ffb86a91f20522cefb2cbec9b64caa1febe27ad0df52f08993ff60888022d771e868e6416cf2e72dab68449d2139e8709ba009b74c6c7ecd4000048d1 + languageName: node + linkType: hard + +"tar@npm:^7.5.4": + version: 7.5.13 + resolution: "tar@npm:7.5.13" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.1.0" + yallist: "npm:^5.0.0" + checksum: 10c0/5c65b8084799bde7a791593a1c1a45d3d6ee98182e3700b24c247b7b8f8654df4191642abbdb07ff25043d45dcff35620827c3997b88ae6c12040f64bed5076b + languageName: node + linkType: hard + +"terminal-size@npm:^4.0.1": + version: 4.0.1 + resolution: "terminal-size@npm:4.0.1" + checksum: 10c0/89afd9d816dd9dbfe4499da9aeea70491bbde4ff4592226a9c8ac71074a7580afead6a78e95ecc35f6d42e09087b55ffcb1019302cd55e0cc957b6ce5c4847e8 + languageName: node + linkType: hard + +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c + languageName: node + linkType: hard + +"tinyexec@npm:^0.3.2": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.14, tinyglobby@npm:^0.2.15": + version: 0.2.15 + resolution: "tinyglobby@npm:0.2.15" + dependencies: + fdir: "npm:^6.5.0" + picomatch: "npm:^4.0.3" + checksum: 10c0/869c31490d0d88eedb8305d178d4c75e7463e820df5a9b9d388291daf93e8b1eb5de1dad1c1e139767e4269fe75f3b10d5009b2cc14db96ff98986920a186844 + languageName: node + linkType: hard + +"tinypool@npm:^1.1.1": + version: 1.1.1 + resolution: "tinypool@npm:1.1.1" + checksum: 10c0/bf26727d01443061b04fa863f571016950888ea994ba0cd8cba3a1c51e2458d84574341ab8dbc3664f1c3ab20885c8cf9ff1cc4b18201f04c2cde7d317fff69b + languageName: node + linkType: hard + +"tinyrainbow@npm:^2.0.0": + version: 2.0.0 + resolution: "tinyrainbow@npm:2.0.0" + checksum: 10c0/c83c52bef4e0ae7fb8ec6a722f70b5b6fa8d8be1c85792e829f56c0e1be94ab70b293c032dc5048d4d37cfe678f1f5babb04bdc65fd123098800148ca989184f + languageName: node + linkType: hard + +"tinyspy@npm:^4.0.3": + version: 4.0.4 + resolution: "tinyspy@npm:4.0.4" + checksum: 10c0/a8020fc17799251e06a8398dcc352601d2770aa91c556b9531ecd7a12581161fd1c14e81cbdaff0c1306c93bfdde8ff6d1c1a3f9bbe6d91604f0fd4e01e2f1eb + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: "npm:~1.0.2" + checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 + languageName: node + linkType: hard + +"tsconfck@npm:^3.0.3": + version: 3.1.6 + resolution: "tsconfck@npm:3.1.6" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + bin: + tsconfck: bin/tsconfck.js + checksum: 10c0/269c3c513540be44844117bb9b9258fe6f8aeab026d32aeebf458d5299125f330711429dbb556dbf125a0bc25f4a81e6c24ac96de2740badd295c3fb400f66c4 + languageName: node + linkType: hard + +"tslib@npm:^1.9.0, tslib@npm:^1.9.3": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 + languageName: node + linkType: hard + +"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.4.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + +"twenty-client-sdk@npm:0.8.0-canary.8": + version: 0.8.0-canary.8 + resolution: "twenty-client-sdk@npm:0.8.0-canary.8" + dependencies: + "@genql/cli": "npm:^3.0.3" + "@genql/runtime": "npm:^2.10.0" + esbuild: "npm:^0.25.0" + graphql: "npm:^16.8.1" + checksum: 10c0/acb5bf952a9729811235a3474ccb4db82630c53a2caed03176bfb4f442576ee2ef7e625886f63714e2534f7ec83b03d83e4c0b1170a0eb816c531acfc2c98010 + languageName: node + linkType: hard + +"twenty-sdk@npm:0.8.0-canary.8": + version: 0.8.0-canary.8 + resolution: "twenty-sdk@npm:0.8.0-canary.8" + dependencies: + "@genql/cli": "npm:^3.0.3" + "@genql/runtime": "npm:^2.10.0" + "@sniptt/guards": "npm:^0.2.0" + axios: "npm:^1.13.5" + chalk: "npm:^5.3.0" + chokidar: "npm:^4.0.0" + commander: "npm:^12.0.0" + dotenv: "npm:^16.4.0" + esbuild: "npm:^0.25.0" + graphql: "npm:^16.8.1" + graphql-sse: "npm:^2.5.4" + ink: "npm:^6.8.0" + inquirer: "npm:^10.0.0" + jsonc-parser: "npm:^3.2.0" + preact: "npm:^10.28.3" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" + tinyglobby: "npm:^0.2.15" + twenty-client-sdk: "npm:0.8.0-canary.8" + typescript: "npm:^5.9.2" + uuid: "npm:^13.0.0" + vite: "npm:^7.0.0" + vite-tsconfig-paths: "npm:^4.2.1" + zod: "npm:^4.1.11" + bin: + twenty: dist/cli.cjs + checksum: 10c0/a22cf071f41c19d769e68a995912a0bda0f087bd9a295534bf9e545544f6dfc84f284a477f9011fc135f2a44de9372b977a66de06454e760822119e76921ea69 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 + languageName: node + linkType: hard + +"type-fest@npm:^5.4.1": + version: 5.5.0 + resolution: "type-fest@npm:5.5.0" + dependencies: + tagged-tag: "npm:^1.0.0" + checksum: 10c0/60bf79a8df45abf99490e3204eceb5cf7f915413f8a69fb578c75cab37ddcb7d29ee21f185f0e1617323ac0b2a441e001b8dc691e220d0b087e9c29ea205538c + languageName: node + linkType: hard + +"typescript@npm:^5.9.2, typescript@npm:^5.9.3": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.9.2#optional!builtin, typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 + languageName: node + linkType: hard + +"undici-types@npm:~6.21.0": + version: 6.21.0 + resolution: "undici-types@npm:6.21.0" + checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 + languageName: node + linkType: hard + +"undici-types@npm:~7.16.0": + version: 7.16.0 + resolution: "undici-types@npm:7.16.0" + checksum: 10c0/3033e2f2b5c9f1504bdc5934646cb54e37ecaca0f9249c983f7b1fc2e87c6d18399ebb05dc7fd5419e02b2e915f734d872a65da2e3eeed1813951c427d33cc9a + languageName: node + linkType: hard + +"undici-types@npm:~7.18.0": + version: 7.18.2 + resolution: "undici-types@npm:7.18.2" + checksum: 10c0/85a79189113a238959d7a647368e4f7c5559c3a404ebdb8fc4488145ce9426fcd82252a844a302798dfc0e37e6fb178ff481ed03bc4caf634c5757d9ef43521d + languageName: node + linkType: hard + +"undici@npm:^5.18.0": + version: 5.29.0 + resolution: "undici@npm:5.29.0" + dependencies: + "@fastify/busboy": "npm:^2.0.0" + checksum: 10c0/e4e4d631ca54ee0ad82d2e90e7798fa00a106e27e6c880687e445cc2f13b4bc87c5eba2a88c266c3eecffb18f26e227b778412da74a23acc374fca7caccec49b + languageName: node + linkType: hard + +"unfetch@npm:^4.2.0": + version: 4.2.0 + resolution: "unfetch@npm:4.2.0" + checksum: 10c0/a5c0a896a6f09f278b868075aea65652ad185db30e827cb7df45826fe5ab850124bf9c44c4dafca4bf0c55a0844b17031e8243467fcc38dd7a7d435007151f1b + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a + languageName: node + linkType: hard + +"unixify@npm:^1.0.0": + version: 1.0.0 + resolution: "unixify@npm:1.0.0" + dependencies: + normalize-path: "npm:^2.1.1" + checksum: 10c0/8b89100619ebde9f0ab4024a4d402316fb7b1d4853723410fc828944e8d3d01480f210cddf94d9a1699559f8180d861eb6323da8011b7bcc1bbaf6a11a5b1f1e + languageName: node + linkType: hard + +"utility-types@npm:^3.10.0": + version: 3.11.0 + resolution: "utility-types@npm:3.11.0" + checksum: 10c0/2f1580137b0c3e6cf5405f37aaa8f5249961a76d26f1ca8efc0ff49a2fc0e0b2db56de8e521a174d075758e0c7eb3e590edec0832eb44478b958f09914920f19 + languageName: node + linkType: hard + +"uuid@npm:^13.0.0": + version: 13.0.0 + resolution: "uuid@npm:13.0.0" + bin: + uuid: dist-node/bin/uuid + checksum: 10c0/950e4c18d57fef6c69675344f5700a08af21e26b9eff2bf2180427564297368c538ea11ac9fb2e6528b17fc3966a9fd2c5049361b0b63c7d654f3c550c9b3d67 + languageName: node + linkType: hard + +"value-or-promise@npm:^1.0.12": + version: 1.0.12 + resolution: "value-or-promise@npm:1.0.12" + checksum: 10c0/b75657b74e4d17552bd88e0c2857020fbab34a4d091dc058db18c470e7da0336067e72c130b3358e3321ac0a6ff11c0b92b67a382318a3705ad5d57de7ff3262 + languageName: node + linkType: hard + +"vite-node@npm:3.2.4": + version: 3.2.4 + resolution: "vite-node@npm:3.2.4" + dependencies: + cac: "npm:^6.7.14" + debug: "npm:^4.4.1" + es-module-lexer: "npm:^1.7.0" + pathe: "npm:^2.0.3" + vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" + bin: + vite-node: vite-node.mjs + checksum: 10c0/6ceca67c002f8ef6397d58b9539f80f2b5d79e103a18367288b3f00a8ab55affa3d711d86d9112fce5a7fa658a212a087a005a045eb8f4758947dd99af2a6c6b + languageName: node + linkType: hard + +"vite-tsconfig-paths@npm:^4.2.1": + version: 4.3.2 + resolution: "vite-tsconfig-paths@npm:4.3.2" + dependencies: + debug: "npm:^4.1.1" + globrex: "npm:^0.1.2" + tsconfck: "npm:^3.0.3" + peerDependencies: + vite: "*" + peerDependenciesMeta: + vite: + optional: true + checksum: 10c0/f390ac1d1c3992fc5ac50f9274c1090f8b55ab34a89ea88893db9a6924a3b26c9f64bc1163615150ad100749db73b6b2cf1d57f6cd60df6e762ceb5b8ad30024 + languageName: node + linkType: hard + +"vite@npm:^5.0.0 || ^6.0.0 || ^7.0.0-0, vite@npm:^7.0.0": + version: 7.3.1 + resolution: "vite@npm:7.3.1" + dependencies: + esbuild: "npm:^0.27.0" + fdir: "npm:^6.5.0" + fsevents: "npm:~2.3.3" + picomatch: "npm:^4.0.3" + postcss: "npm:^8.5.6" + rollup: "npm:^4.43.0" + tinyglobby: "npm:^0.2.15" + peerDependencies: + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/5c7548f5f43a23533e53324304db4ad85f1896b1bfd3ee32ae9b866bac2933782c77b350eb2b52a02c625c8ad1ddd4c000df077419410650c982cd97fde8d014 + languageName: node + linkType: hard + +"vitest@npm:^3.1.1": + version: 3.2.4 + resolution: "vitest@npm:3.2.4" + dependencies: + "@types/chai": "npm:^5.2.2" + "@vitest/expect": "npm:3.2.4" + "@vitest/mocker": "npm:3.2.4" + "@vitest/pretty-format": "npm:^3.2.4" + "@vitest/runner": "npm:3.2.4" + "@vitest/snapshot": "npm:3.2.4" + "@vitest/spy": "npm:3.2.4" + "@vitest/utils": "npm:3.2.4" + chai: "npm:^5.2.0" + debug: "npm:^4.4.1" + expect-type: "npm:^1.2.1" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + picomatch: "npm:^4.0.2" + std-env: "npm:^3.9.0" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^0.3.2" + tinyglobby: "npm:^0.2.14" + tinypool: "npm:^1.1.1" + tinyrainbow: "npm:^2.0.0" + vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" + vite-node: "npm:3.2.4" + why-is-node-running: "npm:^2.3.0" + peerDependencies: + "@edge-runtime/vm": "*" + "@types/debug": ^4.1.12 + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + "@vitest/browser": 3.2.4 + "@vitest/ui": 3.2.4 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/debug": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 10c0/5bf53ede3ae6a0e08956d72dab279ae90503f6b5a05298a6a5e6ef47d2fd1ab386aaf48fafa61ed07a0ebfe9e371772f1ccbe5c258dd765206a8218bf2eb79eb + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + +"which-module@npm:^2.0.0": + version: 2.0.1 + resolution: "which-module@npm:2.0.1" + checksum: 10c0/087038e7992649eaffa6c7a4f3158d5b53b14cf5b6c1f0e043dccfacb1ba179d12f17545d5b85ebd94a42ce280a6fe65d0cbcab70f4fc6daad1dfae85e0e6a3e + languageName: node + linkType: hard + +"which@npm:^6.0.0": + version: 6.0.1 + resolution: "which@npm:6.0.1" + dependencies: + isexe: "npm:^4.0.0" + bin: + node-which: bin/which.js + checksum: 10c0/7e710e54ea36d2d6183bee2f9caa27a3b47b9baf8dee55a199b736fcf85eab3b9df7556fca3d02b50af7f3dfba5ea3a45644189836df06267df457e354da66d5 + languageName: node + linkType: hard + +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 + languageName: node + linkType: hard + +"widest-line@npm:^6.0.0": + version: 6.0.0 + resolution: "widest-line@npm:6.0.0" + dependencies: + string-width: "npm:^8.1.0" + checksum: 10c0/735f1fdcd97fe765a07bb8b5e73c020bed8e53ab34e83ce0ef01693ba3c914d9e7977fe5f5facf0d0b670297a82dd5e376d3efa0896860dfcdaf7cd6924c0fb7 + languageName: node + linkType: hard + +"wrap-ansi@npm:^3.0.1": + version: 3.0.1 + resolution: "wrap-ansi@npm:3.0.1" + dependencies: + string-width: "npm:^2.1.1" + strip-ansi: "npm:^4.0.0" + checksum: 10c0/ad6fed8f242c26755badaf452da154122d0d862f8b7aab56e758466857f230efafdc5fbffca026650b947ac3fc0eb563df5c05b9e2190a52a4a68f4eef3d4555 + languageName: node + linkType: hard + +"wrap-ansi@npm:^6.2.0": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c + languageName: node + linkType: hard + +"wrap-ansi@npm:^9.0.0": + version: 9.0.2 + resolution: "wrap-ansi@npm:9.0.2" + dependencies: + ansi-styles: "npm:^6.2.1" + string-width: "npm:^7.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10c0/3305839b9a0d6fb930cb63a52f34d3936013d8b0682ff3ec133c9826512620f213800ffa19ea22904876d5b7e9a3c1f40682f03597d986a4ca881fa7b033688c + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"ws@npm:^5.2.0 || ^6.0.0 || ^7.0.0": + version: 7.5.10 + resolution: "ws@npm:7.5.10" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/bd7d5f4aaf04fae7960c23dcb6c6375d525e00f795dd20b9385902bd008c40a94d3db3ce97d878acc7573df852056ca546328b27b39f47609f80fb22a0a9b61d + languageName: node + linkType: hard + +"ws@npm:^6.1.4": + version: 6.2.3 + resolution: "ws@npm:6.2.3" + dependencies: + async-limiter: "npm:~1.0.0" + checksum: 10c0/56a35b9799993cea7ce2260197e7879f21bbbb194a967f31acbbda6f7f46ecda4365951966fb062044c95197e19fb2f053be6f65c172435455186835f494de41 + languageName: node + linkType: hard + +"ws@npm:^8.18.0": + version: 8.20.0 + resolution: "ws@npm:8.20.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/956ac5f11738c914089b65878b9223692ace77337ba55379ae68e1ecbeae9b47a0c6eb9403688f609999a58c80d83d99865fe0029b229d308b08c1ef93d4ea14 + languageName: node + linkType: hard + +"y18n@npm:^4.0.0": + version: 4.0.3 + resolution: "y18n@npm:4.0.3" + checksum: 10c0/308a2efd7cc296ab2c0f3b9284fd4827be01cfeb647b3ba18230e3a416eb1bc887ac050de9f8c4fd9e7856b2e8246e05d190b53c96c5ad8d8cb56dffb6f81024 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + +"yargs-parser@npm:^18.1.2": + version: 18.1.3 + resolution: "yargs-parser@npm:18.1.3" + dependencies: + camelcase: "npm:^5.0.0" + decamelize: "npm:^1.2.0" + checksum: 10c0/25df918833592a83f52e7e4f91ba7d7bfaa2b891ebf7fe901923c2ee797534f23a176913ff6ff7ebbc1cc1725a044cc6a6539fed8bfd4e13b5b16376875f9499 + languageName: node + linkType: hard + +"yargs@npm:^15.3.1": + version: 15.4.1 + resolution: "yargs@npm:15.4.1" + dependencies: + cliui: "npm:^6.0.0" + decamelize: "npm:^1.2.0" + find-up: "npm:^4.1.0" + get-caller-file: "npm:^2.0.1" + require-directory: "npm:^2.1.1" + require-main-filename: "npm:^2.0.0" + set-blocking: "npm:^2.0.0" + string-width: "npm:^4.2.0" + which-module: "npm:^2.0.0" + y18n: "npm:^4.0.0" + yargs-parser: "npm:^18.1.2" + checksum: 10c0/f1ca680c974333a5822732825cca7e95306c5a1e7750eb7b973ce6dc4f97a6b0a8837203c8b194f461969bfe1fb1176d1d423036635285f6010b392fa498ab2d + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard + +"yoctocolors-cjs@npm:^2.1.2": + version: 2.1.3 + resolution: "yoctocolors-cjs@npm:2.1.3" + checksum: 10c0/584168ef98eb5d913473a4858dce128803c4a6cd87c0f09e954fa01126a59a33ab9e513b633ad9ab953786ed16efdd8c8700097a51635aafaeed3fef7712fa79 + languageName: node + linkType: hard + +"yoga-layout@npm:~3.2.1": + version: 3.2.1 + resolution: "yoga-layout@npm:3.2.1" + checksum: 10c0/9001e51be993c85e03757e5a04a2b61b8b30c9e5a7865d0156ca87a6431a3b717d51eb4990bfe588189fcfeac688dd9c3de707bbd50d1c344a84e63974cc54a8 + languageName: node + linkType: hard + +"zen-observable-ts@npm:^0.8.21": + version: 0.8.21 + resolution: "zen-observable-ts@npm:0.8.21" + dependencies: + tslib: "npm:^1.9.3" + zen-observable: "npm:^0.8.0" + checksum: 10c0/fe4a02f862b5f7e8ae0f86230c37b84c7d5611f5c206981afb4043e732d04cf7067a6cbe1ba82d20f18b735a3387937195a12542158a631d308ae3959a1d93c4 + languageName: node + linkType: hard + +"zen-observable@npm:^0.8.0": + version: 0.8.15 + resolution: "zen-observable@npm:0.8.15" + checksum: 10c0/71cc2f2bbb537300c3f569e25693d37b3bc91f225cefce251a71c30bc6bb3e7f8e9420ca0eb57f2ac9e492b085b8dfa075fd1e8195c40b83c951dd59c6e4fbf8 + languageName: node + linkType: hard + +"zod@npm:^4.1.11": + version: 4.3.6 + resolution: "zod@npm:4.3.6" + checksum: 10c0/860d25a81ab41d33aa25f8d0d07b091a04acb426e605f396227a796e9e800c44723ed96d0f53a512b57be3d1520f45bf69c0cb3b378a232a00787a2609625307 + languageName: node + linkType: hard diff --git a/packages/twenty-apps/fixtures/postcard-app/.gitignore b/packages/twenty-apps/fixtures/rich-app/.gitignore similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/.gitignore rename to packages/twenty-apps/fixtures/rich-app/.gitignore diff --git a/packages/twenty-apps/fixtures/rich-app/.oxlintrc.json b/packages/twenty-apps/fixtures/rich-app/.oxlintrc.json new file mode 100644 index 0000000000..87c62c5183 --- /dev/null +++ b/packages/twenty-apps/fixtures/rich-app/.oxlintrc.json @@ -0,0 +1,19 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["typescript"], + "categories": { + "correctness": "off" + }, + "ignorePatterns": ["node_modules", "dist"], + "rules": { + "no-unused-vars": "off", + + "typescript/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "^_" + } + ], + "typescript/no-explicit-any": "off" + } +} diff --git a/packages/twenty-apps/fixtures/postcard-app/application.config.ts b/packages/twenty-apps/fixtures/rich-app/application.config.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/application.config.ts rename to packages/twenty-apps/fixtures/rich-app/application.config.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/package.json b/packages/twenty-apps/fixtures/rich-app/package.json similarity index 95% rename from packages/twenty-apps/fixtures/postcard-app/package.json rename to packages/twenty-apps/fixtures/rich-app/package.json index c91688dd60..81d0772e51 100644 --- a/packages/twenty-apps/fixtures/postcard-app/package.json +++ b/packages/twenty-apps/fixtures/rich-app/package.json @@ -1,5 +1,5 @@ { - "name": "postcard-app", + "name": "rich-app", "version": "0.1.0", "license": "MIT", "engines": { diff --git a/packages/twenty-apps/fixtures/rich-app/public/favicon.png b/packages/twenty-apps/fixtures/rich-app/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..ba655d69b81193d3bb5db511797987a44e26c489 GIT binary patch literal 570 zcmV-A0>%A_P)8OKA7C;Wtx7hVl*wW@+&(s?E4v@bPBOa|N#Xt8_i%-K zZ~5d7-&2RTbGpxS&U?;17q~#;rf^fau@9Jh<-C!9ium4CO+>bUTr=hCdaw#xs|8?# z#rQT0q|<2xgTV*iX0t)PUPmkzLo^zN&34IeJRYOd>6lUJo6~GI*)xvEBgj~$K#A=OXm0cS-D)Mn4%~wl}g=WlgWhb_xslbB9RD@2(o*B zsZ=8WY&K((Bt67htro?M1awX2ndt7YP$-~MsbINWBA?Hr-|xe2x8qglR70T%r}IBbiKMG#cSu=mb0-4>eJUG#U-;c02INqS$J+!r^eBb1s*| zd_IT6;h?M3{6=_aN+1wmW)Pz*20&F+U5rneVUrD)oybm9@C>mI#99!sY&Hw0(~0x> zjNx#I!C+vR{r}&lLSPFEAq1wd4nN{Yg2f+wO+@}6v7(Xx0{@D>gsmf3-v9sr07*qo IM6N<$f*!p6$p8QV literal 0 HcmV?d00001 diff --git a/packages/twenty-apps/fixtures/postcard-app/src/components/card.front-component.tsx b/packages/twenty-apps/fixtures/rich-app/src/components/card.front-component.tsx similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/components/card.front-component.tsx rename to packages/twenty-apps/fixtures/rich-app/src/components/card.front-component.tsx diff --git a/packages/twenty-apps/fixtures/postcard-app/src/components/greeting.front-component.tsx b/packages/twenty-apps/fixtures/rich-app/src/components/greeting.front-component.tsx similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/components/greeting.front-component.tsx rename to packages/twenty-apps/fixtures/rich-app/src/components/greeting.front-component.tsx diff --git a/packages/twenty-apps/fixtures/postcard-app/src/components/test.front-component.tsx b/packages/twenty-apps/fixtures/rich-app/src/components/test.front-component.tsx similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/components/test.front-component.tsx rename to packages/twenty-apps/fixtures/rich-app/src/components/test.front-component.tsx diff --git a/packages/twenty-apps/fixtures/postcard-app/src/fields/company-can-receive-postcards.field.ts b/packages/twenty-apps/fixtures/rich-app/src/fields/company-can-receive-postcards.field.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/fields/company-can-receive-postcards.field.ts rename to packages/twenty-apps/fixtures/rich-app/src/fields/company-can-receive-postcards.field.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/fields/post-card-category.field.ts b/packages/twenty-apps/fixtures/rich-app/src/fields/post-card-category.field.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/fields/post-card-category.field.ts rename to packages/twenty-apps/fixtures/rich-app/src/fields/post-card-category.field.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/fields/post-card-number.field.ts b/packages/twenty-apps/fixtures/rich-app/src/fields/post-card-number.field.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/fields/post-card-number.field.ts rename to packages/twenty-apps/fixtures/rich-app/src/fields/post-card-number.field.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/fields/post-card-on-post-card-recipient.field.ts b/packages/twenty-apps/fixtures/rich-app/src/fields/post-card-on-post-card-recipient.field.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/fields/post-card-on-post-card-recipient.field.ts rename to packages/twenty-apps/fixtures/rich-app/src/fields/post-card-on-post-card-recipient.field.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/fields/post-card-recipients-on-post-card.field.ts b/packages/twenty-apps/fixtures/rich-app/src/fields/post-card-recipients-on-post-card.field.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/fields/post-card-recipients-on-post-card.field.ts rename to packages/twenty-apps/fixtures/rich-app/src/fields/post-card-recipients-on-post-card.field.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/fields/post-card-recipients-on-recipient.field.ts b/packages/twenty-apps/fixtures/rich-app/src/fields/post-card-recipients-on-recipient.field.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/fields/post-card-recipients-on-recipient.field.ts rename to packages/twenty-apps/fixtures/rich-app/src/fields/post-card-recipients-on-recipient.field.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/fields/recipient-on-post-card-recipient.field.ts b/packages/twenty-apps/fixtures/rich-app/src/fields/recipient-on-post-card-recipient.field.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/fields/recipient-on-post-card-recipient.field.ts rename to packages/twenty-apps/fixtures/rich-app/src/fields/recipient-on-post-card-recipient.field.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/logic-functions/greeting.function.ts b/packages/twenty-apps/fixtures/rich-app/src/logic-functions/greeting.function.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/logic-functions/greeting.function.ts rename to packages/twenty-apps/fixtures/rich-app/src/logic-functions/greeting.function.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/logic-functions/lookup-recipient.function.ts b/packages/twenty-apps/fixtures/rich-app/src/logic-functions/lookup-recipient.function.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/logic-functions/lookup-recipient.function.ts rename to packages/twenty-apps/fixtures/rich-app/src/logic-functions/lookup-recipient.function.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/logic-functions/on-post-card-created.function.ts b/packages/twenty-apps/fixtures/rich-app/src/logic-functions/on-post-card-created.function.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/logic-functions/on-post-card-created.function.ts rename to packages/twenty-apps/fixtures/rich-app/src/logic-functions/on-post-card-created.function.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/logic-functions/test-function-2.function.ts b/packages/twenty-apps/fixtures/rich-app/src/logic-functions/test-function-2.function.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/logic-functions/test-function-2.function.ts rename to packages/twenty-apps/fixtures/rich-app/src/logic-functions/test-function-2.function.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/logic-functions/test-function.function.ts b/packages/twenty-apps/fixtures/rich-app/src/logic-functions/test-function.function.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/logic-functions/test-function.function.ts rename to packages/twenty-apps/fixtures/rich-app/src/logic-functions/test-function.function.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/navigation-menu-items/post-card-recipients.navigation-menu-item.ts b/packages/twenty-apps/fixtures/rich-app/src/navigation-menu-items/post-card-recipients.navigation-menu-item.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/navigation-menu-items/post-card-recipients.navigation-menu-item.ts rename to packages/twenty-apps/fixtures/rich-app/src/navigation-menu-items/post-card-recipients.navigation-menu-item.ts diff --git a/packages/twenty-apps/fixtures/rich-app/src/navigation-menu-items/post-cards.navigation-menu-item.ts b/packages/twenty-apps/fixtures/rich-app/src/navigation-menu-items/post-cards.navigation-menu-item.ts new file mode 100644 index 0000000000..bc18bd6e32 --- /dev/null +++ b/packages/twenty-apps/fixtures/rich-app/src/navigation-menu-items/post-cards.navigation-menu-item.ts @@ -0,0 +1,10 @@ +import { defineNavigationMenuItem } from 'twenty-sdk'; +import { NavigationMenuItemType } from 'twenty-shared/types'; +import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object'; + +export default defineNavigationMenuItem({ + universalIdentifier: 'c1a2b3c4-0001-4a7b-8c9d-0e1f2a3b4c5d', + position: 0, + type: NavigationMenuItemType.OBJECT, + targetObjectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER, +}); diff --git a/packages/twenty-apps/fixtures/postcard-app/src/navigation-menu-items/recipients.navigation-menu-item.ts b/packages/twenty-apps/fixtures/rich-app/src/navigation-menu-items/recipients.navigation-menu-item.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/navigation-menu-items/recipients.navigation-menu-item.ts rename to packages/twenty-apps/fixtures/rich-app/src/navigation-menu-items/recipients.navigation-menu-item.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/objects/post-card-recipient.object.ts b/packages/twenty-apps/fixtures/rich-app/src/objects/post-card-recipient.object.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/objects/post-card-recipient.object.ts rename to packages/twenty-apps/fixtures/rich-app/src/objects/post-card-recipient.object.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/objects/post-card.object.ts b/packages/twenty-apps/fixtures/rich-app/src/objects/post-card.object.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/objects/post-card.object.ts rename to packages/twenty-apps/fixtures/rich-app/src/objects/post-card.object.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/objects/recipient.object.ts b/packages/twenty-apps/fixtures/rich-app/src/objects/recipient.object.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/objects/recipient.object.ts rename to packages/twenty-apps/fixtures/rich-app/src/objects/recipient.object.ts diff --git a/packages/twenty-apps/fixtures/rich-app/src/roles/default-function.role.ts b/packages/twenty-apps/fixtures/rich-app/src/roles/default-function.role.ts new file mode 100644 index 0000000000..dc68a1db49 --- /dev/null +++ b/packages/twenty-apps/fixtures/rich-app/src/roles/default-function.role.ts @@ -0,0 +1,40 @@ +import { PermissionFlag, defineRole } from 'twenty-sdk'; +import { + CONTENT_FIELD_UNIVERSAL_IDENTIFIER, + POST_CARD_UNIVERSAL_IDENTIFIER, +} from '../objects/post-card.object'; + +export const DEFAULT_ROLE_UNIVERSAL_IDENTIFIER = + 'b648f87b-1d26-4961-b974-0908fd991061'; + +export default defineRole({ + universalIdentifier: DEFAULT_ROLE_UNIVERSAL_IDENTIFIER, + label: 'Default function role', + description: 'Default role for function Twenty client', + canReadAllObjectRecords: false, + canUpdateAllObjectRecords: false, + canSoftDeleteAllObjectRecords: false, + canDestroyAllObjectRecords: false, + canUpdateAllSettings: false, + canBeAssignedToAgents: false, + canBeAssignedToUsers: false, + canBeAssignedToApiKeys: false, + objectPermissions: [ + { + objectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER, + canReadObjectRecords: true, + canUpdateObjectRecords: true, + canSoftDeleteObjectRecords: false, + canDestroyObjectRecords: false, + }, + ], + fieldPermissions: [ + { + objectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER, + fieldUniversalIdentifier: CONTENT_FIELD_UNIVERSAL_IDENTIFIER, + canReadFieldValue: false, + canUpdateFieldValue: false, + }, + ], + permissionFlags: [PermissionFlag.APPLICATIONS], +}); diff --git a/packages/twenty-apps/fixtures/postcard-app/src/root.front-component.tsx b/packages/twenty-apps/fixtures/rich-app/src/root.front-component.tsx similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/root.front-component.tsx rename to packages/twenty-apps/fixtures/rich-app/src/root.front-component.tsx diff --git a/packages/twenty-apps/fixtures/postcard-app/src/root.function.ts b/packages/twenty-apps/fixtures/rich-app/src/root.function.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/root.function.ts rename to packages/twenty-apps/fixtures/rich-app/src/root.function.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/root.object.ts b/packages/twenty-apps/fixtures/rich-app/src/root.object.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/root.object.ts rename to packages/twenty-apps/fixtures/rich-app/src/root.object.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/root.role.ts b/packages/twenty-apps/fixtures/rich-app/src/root.role.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/root.role.ts rename to packages/twenty-apps/fixtures/rich-app/src/root.role.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/utils/card-display.component.tsx b/packages/twenty-apps/fixtures/rich-app/src/utils/card-display.component.tsx similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/utils/card-display.component.tsx rename to packages/twenty-apps/fixtures/rich-app/src/utils/card-display.component.tsx diff --git a/packages/twenty-apps/fixtures/postcard-app/src/utils/greeting.util.ts b/packages/twenty-apps/fixtures/rich-app/src/utils/greeting.util.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/utils/greeting.util.ts rename to packages/twenty-apps/fixtures/rich-app/src/utils/greeting.util.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/utils/test-function-2.util.ts b/packages/twenty-apps/fixtures/rich-app/src/utils/test-function-2.util.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/utils/test-function-2.util.ts rename to packages/twenty-apps/fixtures/rich-app/src/utils/test-function-2.util.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/views/all-post-card-recipients.view.ts b/packages/twenty-apps/fixtures/rich-app/src/views/all-post-card-recipients.view.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/views/all-post-card-recipients.view.ts rename to packages/twenty-apps/fixtures/rich-app/src/views/all-post-card-recipients.view.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/views/all-post-cards.view.ts b/packages/twenty-apps/fixtures/rich-app/src/views/all-post-cards.view.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/views/all-post-cards.view.ts rename to packages/twenty-apps/fixtures/rich-app/src/views/all-post-cards.view.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/src/views/all-recipients.view.ts b/packages/twenty-apps/fixtures/rich-app/src/views/all-recipients.view.ts similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/src/views/all-recipients.view.ts rename to packages/twenty-apps/fixtures/rich-app/src/views/all-recipients.view.ts diff --git a/packages/twenty-apps/fixtures/postcard-app/tsconfig.json b/packages/twenty-apps/fixtures/rich-app/tsconfig.json similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/tsconfig.json rename to packages/twenty-apps/fixtures/rich-app/tsconfig.json diff --git a/packages/twenty-apps/fixtures/postcard-app/yarn.lock b/packages/twenty-apps/fixtures/rich-app/yarn.lock similarity index 100% rename from packages/twenty-apps/fixtures/postcard-app/yarn.lock rename to packages/twenty-apps/fixtures/rich-app/yarn.lock diff --git a/packages/twenty-apps/internal/call-recording/LLMS.md b/packages/twenty-apps/internal/call-recording/LLMS.md index f8d437390b..9418d307b4 100644 --- a/packages/twenty-apps/internal/call-recording/LLMS.md +++ b/packages/twenty-apps/internal/call-recording/LLMS.md @@ -1,7 +1,7 @@ ## Base documentation -- Documentation: https://docs.twenty.com/developers/extend/capabilities/apps -- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/fixtures/postcard-app +- Documentation: https://docs.twenty.com/developers/extend/apps/getting-started +- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/fixtures/rich-app ## Common Pitfalls diff --git a/packages/twenty-apps/my-twenty-app/.github/workflows/ci.yml b/packages/twenty-apps/my-twenty-app/.github/workflows/ci.yml new file mode 100644 index 0000000000..92bd0e994f --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/.github/workflows/ci.yml @@ -0,0 +1,42 @@ +name: CI + +on: + push: + branches: + - main + pull_request: {} + +env: + TWENTY_VERSION: latest + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Spawn Twenty instance + id: twenty + uses: twentyhq/twenty/.github/actions/spawn-twenty-docker-image@main + with: + twenty-version: ${{ env.TWENTY_VERSION }} + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Enable Corepack + run: corepack enable + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + cache: 'yarn' + + - name: Install dependencies + run: yarn install --immutable + + - name: Run integration tests + run: yarn test + env: + TWENTY_API_URL: ${{ steps.twenty.outputs.server-url }} + TWENTY_API_KEY: ${{ steps.twenty.outputs.access-token }} diff --git a/packages/twenty-apps/my-twenty-app/.gitignore b/packages/twenty-apps/my-twenty-app/.gitignore new file mode 100644 index 0000000000..6cd0610624 --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/.gitignore @@ -0,0 +1,38 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn + +# codegen +generated + +# testing +/coverage + +# dev +/dist/ + +.twenty + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# typescript +*.tsbuildinfo +*.d.ts diff --git a/packages/twenty-apps/my-twenty-app/.nvmrc b/packages/twenty-apps/my-twenty-app/.nvmrc new file mode 100644 index 0000000000..341cb50613 --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/.nvmrc @@ -0,0 +1 @@ +24.5.0 diff --git a/packages/twenty-apps/my-twenty-app/.oxlintrc.json b/packages/twenty-apps/my-twenty-app/.oxlintrc.json new file mode 100644 index 0000000000..87c62c5183 --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/.oxlintrc.json @@ -0,0 +1,19 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["typescript"], + "categories": { + "correctness": "off" + }, + "ignorePatterns": ["node_modules", "dist"], + "rules": { + "no-unused-vars": "off", + + "typescript/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "^_" + } + ], + "typescript/no-explicit-any": "off" + } +} diff --git a/packages/twenty-apps/my-twenty-app/.yarnrc.yml b/packages/twenty-apps/my-twenty-app/.yarnrc.yml new file mode 100644 index 0000000000..3186f3f079 --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/packages/twenty-apps/my-twenty-app/AGENT.md b/packages/twenty-apps/my-twenty-app/AGENT.md new file mode 100644 index 0000000000..b10256427b --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/AGENT.md @@ -0,0 +1,14 @@ +## Base documentation + +- Documentation: https://docs.twenty.com/developers/extend/apps/getting-started +- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/examples/postcard + +## UUID requirement + +- All generated UUIDs must be valid UUID v4. + +## Common Pitfalls + +- Creating an object without an index view associated. Unless this is a technical object, user will need to visualize it. +- Creating a view without a navigationMenuItem associated. This will make the view available on the left sidebar. +- Creating a front-end component that has a scroll instead of being responsive to its fixed widget height and width, unless it is specifically meant to be used in a canvas tab. diff --git a/packages/twenty-apps/my-twenty-app/CLAUDE.md b/packages/twenty-apps/my-twenty-app/CLAUDE.md new file mode 100644 index 0000000000..b10256427b --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/CLAUDE.md @@ -0,0 +1,14 @@ +## Base documentation + +- Documentation: https://docs.twenty.com/developers/extend/apps/getting-started +- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/examples/postcard + +## UUID requirement + +- All generated UUIDs must be valid UUID v4. + +## Common Pitfalls + +- Creating an object without an index view associated. Unless this is a technical object, user will need to visualize it. +- Creating a view without a navigationMenuItem associated. This will make the view available on the left sidebar. +- Creating a front-end component that has a scroll instead of being responsive to its fixed widget height and width, unless it is specifically meant to be used in a canvas tab. diff --git a/packages/twenty-apps/my-twenty-app/LLMS.md b/packages/twenty-apps/my-twenty-app/LLMS.md new file mode 100644 index 0000000000..b10256427b --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/LLMS.md @@ -0,0 +1,14 @@ +## Base documentation + +- Documentation: https://docs.twenty.com/developers/extend/apps/getting-started +- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/examples/postcard + +## UUID requirement + +- All generated UUIDs must be valid UUID v4. + +## Common Pitfalls + +- Creating an object without an index view associated. Unless this is a technical object, user will need to visualize it. +- Creating a view without a navigationMenuItem associated. This will make the view available on the left sidebar. +- Creating a front-end component that has a scroll instead of being responsive to its fixed widget height and width, unless it is specifically meant to be used in a canvas tab. diff --git a/packages/twenty-apps/my-twenty-app/README.md b/packages/twenty-apps/my-twenty-app/README.md new file mode 100644 index 0000000000..16b8e5ac96 --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/README.md @@ -0,0 +1,11 @@ +This is a [Twenty](https://twenty.com) application bootstrapped with [`create-twenty-app`](https://www.npmjs.com/package/create-twenty-app). + +## Getting Started + +Run `yarn twenty help` to list all available commands. + +## Learn More + +- [Twenty Apps documentation](https://docs.twenty.com/developers/extend/apps/getting-started) +- [twenty-sdk CLI reference](https://www.npmjs.com/package/twenty-sdk) +- [Discord](https://discord.gg/cx5n4Jzs57) diff --git a/packages/twenty-apps/my-twenty-app/package.json b/packages/twenty-apps/my-twenty-app/package.json new file mode 100644 index 0000000000..f757677ff7 --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/package.json @@ -0,0 +1,35 @@ +{ + "name": "my-twenty-app", + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": "^24.5.0", + "npm": "please-use-yarn", + "yarn": ">=4.0.2" + }, + "keywords": [ + "twenty-app" + ], + "packageManager": "yarn@4.9.2", + "scripts": { + "twenty": "twenty", + "lint": "oxlint -c .oxlintrc.json .", + "lint:fix": "oxlint --fix -c .oxlintrc.json .", + "test": "vitest run", + "test:watch": "vitest" + }, + "dependencies": { + "twenty-client-sdk": "0.8.0-canary.8", + "twenty-sdk": "0.8.0-canary.8" + }, + "devDependencies": { + "@types/node": "^24.7.2", + "@types/react": "^19.0.0", + "oxlint": "^0.16.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", + "typescript": "^5.9.3", + "vite-tsconfig-paths": "^4.2.1", + "vitest": "^3.1.1" + } +} diff --git a/packages/twenty-apps/my-twenty-app/src/__tests__/app-install.integration-test.ts b/packages/twenty-apps/my-twenty-app/src/__tests__/app-install.integration-test.ts new file mode 100644 index 0000000000..a51ac84432 --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/src/__tests__/app-install.integration-test.ts @@ -0,0 +1,70 @@ +import { APPLICATION_UNIVERSAL_IDENTIFIER } from 'src/constants/universal-identifiers'; +import { appBuild, appDeploy, appInstall, appUninstall } from 'twenty-sdk/cli'; +import { MetadataApiClient } from 'twenty-client-sdk/metadata'; +import { afterAll, beforeAll, describe, expect, it } from 'vitest'; + +const APP_PATH = process.cwd(); + +describe('App installation', () => { + beforeAll(async () => { + const buildResult = await appBuild({ + appPath: APP_PATH, + tarball: true, + onProgress: (message: string) => console.log(`[build] ${message}`), + }); + + if (!buildResult.success) { + throw new Error( + `Build failed: ${buildResult.error?.message ?? 'Unknown error'}`, + ); + } + + const deployResult = await appDeploy({ + tarballPath: buildResult.data.tarballPath!, + onProgress: (message: string) => console.log(`[deploy] ${message}`), + }); + + if (!deployResult.success) { + throw new Error( + `Deploy failed: ${deployResult.error?.message ?? 'Unknown error'}`, + ); + } + + const installResult = await appInstall({ appPath: APP_PATH }); + + if (!installResult.success) { + throw new Error( + `Install failed: ${installResult.error?.message ?? 'Unknown error'}`, + ); + } + }); + + afterAll(async () => { + const uninstallResult = await appUninstall({ appPath: APP_PATH }); + + if (!uninstallResult.success) { + console.warn( + `App uninstall failed: ${uninstallResult.error?.message ?? 'Unknown error'}`, + ); + } + }); + + it('should find the installed app in the applications list', async () => { + const metadataClient = new MetadataApiClient(); + + const result = await metadataClient.query({ + findManyApplications: { + id: true, + name: true, + universalIdentifier: true, + }, + }); + + const installedApp = result.findManyApplications.find( + (application: { universalIdentifier: string }) => + application.universalIdentifier === APPLICATION_UNIVERSAL_IDENTIFIER, + ); + + expect(installedApp).toBeDefined(); + }); +}); diff --git a/packages/twenty-apps/my-twenty-app/src/__tests__/setup-test.ts b/packages/twenty-apps/my-twenty-app/src/__tests__/setup-test.ts new file mode 100644 index 0000000000..16e00da406 --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/src/__tests__/setup-test.ts @@ -0,0 +1,45 @@ +import * as fs from 'fs'; +import * as os from 'os'; +import * as path from 'path'; +import { beforeAll } from 'vitest'; + +const TWENTY_API_URL = process.env.TWENTY_API_URL ?? 'http://localhost:2020'; +const TEST_CONFIG_DIR = path.join(os.tmpdir(), '.twenty-sdk-test'); + +const assertServerIsReachable = async () => { + let response: Response; + + try { + response = await fetch(`${TWENTY_API_URL}/healthz`); + } catch { + throw new Error( + `Twenty server is not reachable at ${TWENTY_API_URL}. ` + + 'Make sure the server is running before executing integration tests.', + ); + } + + if (!response.ok) { + throw new Error(`Server at ${TWENTY_API_URL} returned ${response.status}`); + } +}; + +beforeAll(async () => { + await assertServerIsReachable(); + + fs.mkdirSync(TEST_CONFIG_DIR, { recursive: true }); + + const configFile = { + remotes: { + local: { + apiUrl: process.env.TWENTY_API_URL, + apiKey: process.env.TWENTY_API_KEY, + }, + }, + defaultRemote: 'local', + }; + + fs.writeFileSync( + path.join(TEST_CONFIG_DIR, 'config.json'), + JSON.stringify(configFile, null, 2), + ); +}); diff --git a/packages/twenty-apps/my-twenty-app/src/application-config.ts b/packages/twenty-apps/my-twenty-app/src/application-config.ts new file mode 100644 index 0000000000..e42254f4e1 --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/src/application-config.ts @@ -0,0 +1,15 @@ +import { defineApplication } from 'twenty-sdk'; + +import { + APP_DESCRIPTION, + APP_DISPLAY_NAME, + APPLICATION_UNIVERSAL_IDENTIFIER, + DEFAULT_ROLE_UNIVERSAL_IDENTIFIER, +} from 'src/constants/universal-identifiers'; + +export default defineApplication({ + universalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER, + displayName: APP_DISPLAY_NAME, + description: APP_DESCRIPTION, + defaultRoleUniversalIdentifier: DEFAULT_ROLE_UNIVERSAL_IDENTIFIER, +}); diff --git a/packages/twenty-apps/my-twenty-app/src/constants/universal-identifiers.ts b/packages/twenty-apps/my-twenty-app/src/constants/universal-identifiers.ts new file mode 100644 index 0000000000..3b41cc970e --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/src/constants/universal-identifiers.ts @@ -0,0 +1,4 @@ +export const APP_DISPLAY_NAME = 'My twenty app'; +export const APP_DESCRIPTION = ''; +export const APPLICATION_UNIVERSAL_IDENTIFIER = '83a4b244-c80d-4923-b0d5-ae2406e83072'; +export const DEFAULT_ROLE_UNIVERSAL_IDENTIFIER = 'a1a28134-04d1-43ac-b8cc-b547e8cf97ba'; diff --git a/packages/twenty-apps/my-twenty-app/src/default-role.ts b/packages/twenty-apps/my-twenty-app/src/default-role.ts new file mode 100644 index 0000000000..0e9129a1cb --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/src/default-role.ts @@ -0,0 +1,16 @@ +import { defineRole } from 'twenty-sdk'; + +import { + APP_DISPLAY_NAME, + DEFAULT_ROLE_UNIVERSAL_IDENTIFIER, +} from 'src/constants/universal-identifiers'; + +export default defineRole({ + universalIdentifier: DEFAULT_ROLE_UNIVERSAL_IDENTIFIER, + label: `${APP_DISPLAY_NAME} default function role`, + description: `${APP_DISPLAY_NAME} default function role`, + canReadAllObjectRecords: true, + canUpdateAllObjectRecords: true, + canSoftDeleteAllObjectRecords: true, + canDestroyAllObjectRecords: false, +}); diff --git a/packages/twenty-apps/my-twenty-app/tsconfig.json b/packages/twenty-apps/my-twenty-app/tsconfig.json new file mode 100644 index 0000000000..d574c8c810 --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/tsconfig.json @@ -0,0 +1,42 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "sourceMap": true, + "declaration": true, + "outDir": "./dist", + "rootDir": ".", + "jsx": "react-jsx", + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "allowUnreachableCode": false, + "strict": true, + "alwaysStrict": true, + "noImplicitAny": true, + "strictBindCallApply": false, + "target": "es2018", + "module": "esnext", + "lib": ["es2020", "dom"], + "skipLibCheck": true, + "skipDefaultLibCheck": true, + "resolveJsonModule": true, + "paths": { + "src/*": ["./src/*"], + "~/*": ["./*"] + } + }, + "exclude": [ + "node_modules", + "dist", + "**/*.test.ts", + "**/*.spec.ts", + "**/*.integration-test.ts" + ], + "references": [ + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/packages/twenty-apps/my-twenty-app/tsconfig.spec.json b/packages/twenty-apps/my-twenty-app/tsconfig.spec.json new file mode 100644 index 0000000000..ea69a6c010 --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "composite": true, + "types": ["vitest/globals", "node"] + }, + "include": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/twenty-apps/my-twenty-app/vitest.config.ts b/packages/twenty-apps/my-twenty-app/vitest.config.ts new file mode 100644 index 0000000000..2fed127a84 --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/vitest.config.ts @@ -0,0 +1,21 @@ +import tsconfigPaths from 'vite-tsconfig-paths'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + plugins: [ + tsconfigPaths({ + projects: ['tsconfig.spec.json'], + ignoreConfigErrors: true, + }), + ], + test: { + testTimeout: 120_000, + hookTimeout: 120_000, + include: ['src/**/*.integration-test.ts'], + setupFiles: ['src/__tests__/setup-test.ts'], + env: { + TWENTY_API_KEY: + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ1c2VySWQiOiIyMDIwMjAyMC1lNmI1LTQ2ODAtOGEzMi1iODIwOTczNzE1NmIiLCJ3b3Jrc3BhY2VJZCI6IjIwMjAyMDIwLTFjMjUtNGQwMi1iZjI1LTZhZWNjZjdlYTQxOSIsIndvcmtzcGFjZU1lbWJlcklkIjoiMjAyMDIwMjAtNDYzZi00MzViLTgyOGMtMTA3ZTAwN2EyNzExIiwidXNlcldvcmtzcGFjZUlkIjoiMjAyMDIwMjAtMWU3Yy00M2Q5LWE1ZGItNjg1YjUwNjlkODE2IiwidHlwZSI6IkFDQ0VTUyIsImF1dGhQcm92aWRlciI6InBhc3N3b3JkIiwiaWF0IjoxNzUxMjgxNzA0LCJleHAiOjIwNjY4NTc3MDR9.HMGqCsVlOAPVUBhKSGlD1X86VoHKt4LIUtET3CGIdik', + }, + }, +}); diff --git a/packages/twenty-apps/my-twenty-app/yarn.lock b/packages/twenty-apps/my-twenty-app/yarn.lock new file mode 100644 index 0000000000..16cc3d542a --- /dev/null +++ b/packages/twenty-apps/my-twenty-app/yarn.lock @@ -0,0 +1,4589 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@alcalzone/ansi-tokenize@npm:^0.2.4": + version: 0.2.5 + resolution: "@alcalzone/ansi-tokenize@npm:0.2.5" + dependencies: + ansi-styles: "npm:^6.2.1" + is-fullwidth-code-point: "npm:^5.0.0" + checksum: 10c0/dd8622288426b5b7dbf8b68d51d4b930cea591d0e3b9dbc3f523131464d78ac922c165fcb7ba5307f133d35dbcaa0e6648a1c3fb6a0dc2725546d6f867b70af4 + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/aix-ppc64@npm:0.25.12" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/aix-ppc64@npm:0.27.7" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/android-arm64@npm:0.25.12" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/android-arm64@npm:0.27.7" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/android-arm@npm:0.25.12" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/android-arm@npm:0.27.7" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/android-x64@npm:0.25.12" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/android-x64@npm:0.27.7" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/darwin-arm64@npm:0.25.12" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/darwin-arm64@npm:0.27.7" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/darwin-x64@npm:0.25.12" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/darwin-x64@npm:0.27.7" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/freebsd-arm64@npm:0.25.12" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/freebsd-arm64@npm:0.27.7" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/freebsd-x64@npm:0.25.12" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/freebsd-x64@npm:0.27.7" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-arm64@npm:0.25.12" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-arm64@npm:0.27.7" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-arm@npm:0.25.12" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-arm@npm:0.27.7" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-ia32@npm:0.25.12" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-ia32@npm:0.27.7" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-loong64@npm:0.25.12" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-loong64@npm:0.27.7" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-mips64el@npm:0.25.12" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-mips64el@npm:0.27.7" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-ppc64@npm:0.25.12" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-ppc64@npm:0.27.7" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-riscv64@npm:0.25.12" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-riscv64@npm:0.27.7" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-s390x@npm:0.25.12" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-s390x@npm:0.27.7" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-x64@npm:0.25.12" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-x64@npm:0.27.7" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/netbsd-arm64@npm:0.25.12" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/netbsd-arm64@npm:0.27.7" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/netbsd-x64@npm:0.25.12" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/netbsd-x64@npm:0.27.7" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/openbsd-arm64@npm:0.25.12" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/openbsd-arm64@npm:0.27.7" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/openbsd-x64@npm:0.25.12" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/openbsd-x64@npm:0.27.7" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openharmony-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/openharmony-arm64@npm:0.25.12" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openharmony-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/openharmony-arm64@npm:0.27.7" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/sunos-x64@npm:0.25.12" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/sunos-x64@npm:0.27.7" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/win32-arm64@npm:0.25.12" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/win32-arm64@npm:0.27.7" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/win32-ia32@npm:0.25.12" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/win32-ia32@npm:0.27.7" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/win32-x64@npm:0.25.12" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/win32-x64@npm:0.27.7" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@fastify/busboy@npm:^2.0.0": + version: 2.1.1 + resolution: "@fastify/busboy@npm:2.1.1" + checksum: 10c0/6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3 + languageName: node + linkType: hard + +"@gar/promise-retry@npm:^1.0.0": + version: 1.0.3 + resolution: "@gar/promise-retry@npm:1.0.3" + checksum: 10c0/885b02c8b0d75b2d215da25f3b639158c4fbe8fefe0d79163304534b9a6d0710db4b7699f7cd3cc1a730792bff04cbe19f4850a62d3e105a663eaeec88f38332 + languageName: node + linkType: hard + +"@genql/cli@npm:^3.0.3": + version: 3.0.5 + resolution: "@genql/cli@npm:3.0.5" + dependencies: + "@graphql-tools/graphql-file-loader": "npm:^7.5.11" + "@graphql-tools/load": "npm:^7.8.6" + fs-extra: "npm:^10.1.0" + graphql: "npm:^16.6.0" + kleur: "npm:^4.1.5" + listr: "npm:^0.14.3" + lodash: "npm:^4.17.21" + mkdirp: "npm:^0.5.1" + native-fetch: "npm:^4.0.2" + prettier: "npm:^2.8.0" + qs: "npm:^6.11.0" + rimraf: "npm:^2.6.3" + undici: "npm:^5.18.0" + yargs: "npm:^15.3.1" + bin: + genql: dist/cli.js + checksum: 10c0/646d4da8986741a8f1b610bd8cfb5bc26cd9a856de671461e4ca87fb05443f37dd0edfb3b30ceaa34cd049077873afa07febfd4714dd2e0681fb07484e19a080 + languageName: node + linkType: hard + +"@genql/runtime@npm:^2.10.0": + version: 2.10.0 + resolution: "@genql/runtime@npm:2.10.0" + dependencies: + "@types/qs": "npm:^6.9.0" + "@types/ws": "npm:^6.0.1" + graphql-query-batcher: "npm:^1.0.1" + isomorphic-unfetch: "npm:^3.0.0" + lodash: "npm:^4.17.20" + subscriptions-transport-ws: "npm:^0.9.16" + tslib: "npm:^2.0.0" + utility-types: "npm:^3.10.0" + ws: "npm:^6.1.4" + zen-observable-ts: "npm:^0.8.21" + peerDependencies: + graphql: "*" + checksum: 10c0/e2a886c2469c933681e2b0ddd6a5b7f4cb12932251ba460e3cf2db4246817da79313ea4ba9769ec7cbe53ab9c1cb81ad8fcce6a969cd241185b79398d2a4f3c6 + languageName: node + linkType: hard + +"@graphql-tools/graphql-file-loader@npm:^7.5.11": + version: 7.5.17 + resolution: "@graphql-tools/graphql-file-loader@npm:7.5.17" + dependencies: + "@graphql-tools/import": "npm:6.7.18" + "@graphql-tools/utils": "npm:^9.2.1" + globby: "npm:^11.0.3" + tslib: "npm:^2.4.0" + unixify: "npm:^1.0.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/f737f14357731ad01da57755e1cf26ce375b475209d6ab7e4b656b56191a8979d2ab7dd5d1c54a1f11e04374f7a373fa95ea5ec6a001d0cef913ea208fadc65b + languageName: node + linkType: hard + +"@graphql-tools/import@npm:6.7.18": + version: 6.7.18 + resolution: "@graphql-tools/import@npm:6.7.18" + dependencies: + "@graphql-tools/utils": "npm:^9.2.1" + resolve-from: "npm:5.0.0" + tslib: "npm:^2.4.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/d33e37a1879dd43ac2851c9bac2f2873c58bb3687f1c06e159760dbb5e540ef074d688df70cc6dbd3ee5de48d437878df8f65a7c65ae80bd025bf98f2d615732 + languageName: node + linkType: hard + +"@graphql-tools/load@npm:^7.8.6": + version: 7.8.14 + resolution: "@graphql-tools/load@npm:7.8.14" + dependencies: + "@graphql-tools/schema": "npm:^9.0.18" + "@graphql-tools/utils": "npm:^9.2.1" + p-limit: "npm:3.1.0" + tslib: "npm:^2.4.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/1fa036ac596ccf48f350aa545d108c173184d9b53247f9e21c0d4ba96c5cba4a0b44281f9154f122e1e8e9d9d6eab93a5b2618ca8a797969bde1e75c1d45e786 + languageName: node + linkType: hard + +"@graphql-tools/merge@npm:^8.4.1": + version: 8.4.2 + resolution: "@graphql-tools/merge@npm:8.4.2" + dependencies: + "@graphql-tools/utils": "npm:^9.2.1" + tslib: "npm:^2.4.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/2df55222b48e010e683572f456cf265aabae5748c59f7c1260c66dec9794b7a076d3706f04da969b77f0a32c7ccb4551fee30125931d3fe9c98a8806aae9a3f4 + languageName: node + linkType: hard + +"@graphql-tools/schema@npm:^9.0.18": + version: 9.0.19 + resolution: "@graphql-tools/schema@npm:9.0.19" + dependencies: + "@graphql-tools/merge": "npm:^8.4.1" + "@graphql-tools/utils": "npm:^9.2.1" + tslib: "npm:^2.4.0" + value-or-promise: "npm:^1.0.12" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/42fd8ca8d3c8d60b583077c201980518482ff0cd5ed0c1f14bd9b835a2689ad41d02cbd3478f7d7dea7aec1227f7639fd5deb5e6360852a2e542b96b44bfb7a4 + languageName: node + linkType: hard + +"@graphql-tools/utils@npm:^9.2.1": + version: 9.2.1 + resolution: "@graphql-tools/utils@npm:9.2.1" + dependencies: + "@graphql-typed-document-node/core": "npm:^3.1.1" + tslib: "npm:^2.4.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/37a7bd7e14d28ff1bacc007dca84bc6cef2d7d7af9a547b5dbe52fcd134afddd6d4a7b2148cfbaff5ddba91a868453d597da77bd0457fb0be15928f916901606 + languageName: node + linkType: hard + +"@graphql-typed-document-node/core@npm:^3.1.1": + version: 3.2.0 + resolution: "@graphql-typed-document-node/core@npm:3.2.0" + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10c0/94e9d75c1f178bbae8d874f5a9361708a3350c8def7eaeb6920f2c820e82403b7d4f55b3735856d68e145e86c85cbfe2adc444fdc25519cd51f108697e99346c + languageName: node + linkType: hard + +"@inquirer/checkbox@npm:^2.5.0": + version: 2.5.0 + resolution: "@inquirer/checkbox@npm:2.5.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/figures": "npm:^1.0.5" + "@inquirer/type": "npm:^1.5.3" + ansi-escapes: "npm:^4.3.2" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/679d17ffe3aef0825593f3bc8d193b6c37b860c6cf6e0e9a10d4e60cc254a2dfc5da4a982bf5b9b5147018e456fffcb0b0dadf93ee1914b9d600b0c814284e22 + languageName: node + linkType: hard + +"@inquirer/confirm@npm:^3.2.0": + version: 3.2.0 + resolution: "@inquirer/confirm@npm:3.2.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + checksum: 10c0/a2cbfc8ae9c880bba4cce1993f5c399fb0d12741fdd574917c87fceb40ece62ffa60e35aaadf4e62d7c114f54008e45aee5d6d90497bb62d493996c02725d243 + languageName: node + linkType: hard + +"@inquirer/core@npm:^9.1.0": + version: 9.2.1 + resolution: "@inquirer/core@npm:9.2.1" + dependencies: + "@inquirer/figures": "npm:^1.0.6" + "@inquirer/type": "npm:^2.0.0" + "@types/mute-stream": "npm:^0.0.4" + "@types/node": "npm:^22.5.5" + "@types/wrap-ansi": "npm:^3.0.0" + ansi-escapes: "npm:^4.3.2" + cli-width: "npm:^4.1.0" + mute-stream: "npm:^1.0.0" + signal-exit: "npm:^4.1.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^6.2.0" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/11c14be77a9fa85831de799a585721b0a49ab2f3b7d8fd1780c48ea2b29229c6bdc94e7892419086d0f7734136c2ba87b6a32e0782571eae5bbd655b1afad453 + languageName: node + linkType: hard + +"@inquirer/editor@npm:^2.2.0": + version: 2.2.0 + resolution: "@inquirer/editor@npm:2.2.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + external-editor: "npm:^3.1.0" + checksum: 10c0/b8afc0790a7a5d82998bdfe469cbaa83b0cd0700be432cf95256c548e2a6a494997b5e93d65cbf94979c17b510758cf8494d85559f6b9508eb15d239a7f22aee + languageName: node + linkType: hard + +"@inquirer/expand@npm:^2.3.0": + version: 2.3.0 + resolution: "@inquirer/expand@npm:2.3.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/f2030cb482a715e4d5153c19b3f0fd8bf47c16cdc16e1c669e90985386edf4f7b0f3b0e97e2990bb228878b93716228eb067d94fc557c25d3c5ee58747c0a995 + languageName: node + linkType: hard + +"@inquirer/figures@npm:^1.0.5, @inquirer/figures@npm:^1.0.6": + version: 1.0.15 + resolution: "@inquirer/figures@npm:1.0.15" + checksum: 10c0/6e39a040d260ae234ae220180b7994ff852673e20be925f8aa95e78c7934d732b018cbb4d0ec39e600a410461bcb93dca771e7de23caa10630d255692e440f69 + languageName: node + linkType: hard + +"@inquirer/input@npm:^2.3.0": + version: 2.3.0 + resolution: "@inquirer/input@npm:2.3.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + checksum: 10c0/44c8cea38c9192f528cae556f38709135a00230132deab3b9bb9a925375fce0513fecf4e8c1df7c4319e1ed7aa31fb4dd2c4956c8bc9dd39af087aafff5b6f1f + languageName: node + linkType: hard + +"@inquirer/number@npm:^1.1.0": + version: 1.1.0 + resolution: "@inquirer/number@npm:1.1.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + checksum: 10c0/db472dab57c951c4a083b2a749ce58262b1efd9889e7603de6e9c3f9af7d8dce8fbdfa3859f65402d3587470e0397a076e5fb4ed775db33310f17a42c9faeb20 + languageName: node + linkType: hard + +"@inquirer/password@npm:^2.2.0": + version: 2.2.0 + resolution: "@inquirer/password@npm:2.2.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + ansi-escapes: "npm:^4.3.2" + checksum: 10c0/fa4b335164b2c9c3304d29a7214ef93bac8d3da6788146603ea3d0485b8d811151e49bf66cb0dcc729a9dc21406c3a8c2718c5beec572a91d07026d22842c13f + languageName: node + linkType: hard + +"@inquirer/prompts@npm:^5.5.0": + version: 5.5.0 + resolution: "@inquirer/prompts@npm:5.5.0" + dependencies: + "@inquirer/checkbox": "npm:^2.5.0" + "@inquirer/confirm": "npm:^3.2.0" + "@inquirer/editor": "npm:^2.2.0" + "@inquirer/expand": "npm:^2.3.0" + "@inquirer/input": "npm:^2.3.0" + "@inquirer/number": "npm:^1.1.0" + "@inquirer/password": "npm:^2.2.0" + "@inquirer/rawlist": "npm:^2.3.0" + "@inquirer/search": "npm:^1.1.0" + "@inquirer/select": "npm:^2.5.0" + checksum: 10c0/2d62b50ca761b2bd2d5759f48c03758f1af0665ac602c26ae1ae257ac512cf5c27fd82cde108ee0c6371ec39187adc6f45637f31ca79adf5bf96579f23e77143 + languageName: node + linkType: hard + +"@inquirer/rawlist@npm:^2.3.0": + version: 2.3.0 + resolution: "@inquirer/rawlist@npm:2.3.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/d49d5e12b7a54394c140b27c8d8748ba1ab855c67c01fa72b5a63810f12865df3bf4d5ae929f54fad77b5fc2f7431a332ae1e5fe4babb335380c28917002f364 + languageName: node + linkType: hard + +"@inquirer/search@npm:^1.1.0": + version: 1.1.0 + resolution: "@inquirer/search@npm:1.1.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/figures": "npm:^1.0.5" + "@inquirer/type": "npm:^1.5.3" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/20d7e910266b9e3f0dc8eef8f3007f487e6149fa8421d293eaf7c11a1e35c3d82aa30af118b3a6e35eed1048a27d7d806f45722abb10005db5d099ea64b00b17 + languageName: node + linkType: hard + +"@inquirer/select@npm:^2.5.0": + version: 2.5.0 + resolution: "@inquirer/select@npm:2.5.0" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/figures": "npm:^1.0.5" + "@inquirer/type": "npm:^1.5.3" + ansi-escapes: "npm:^4.3.2" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10c0/280fa700187ff29da0ad4bf32aa11db776261584ddf5cc1ceac5caebb242a4ac0c5944af522a2579d78b6ec7d6e8b1b9f6564872101abd8dcc69929b4e33fc4c + languageName: node + linkType: hard + +"@inquirer/type@npm:^1.5.3": + version: 1.5.5 + resolution: "@inquirer/type@npm:1.5.5" + dependencies: + mute-stream: "npm:^1.0.0" + checksum: 10c0/4c41736c09ba9426b5a9e44993bdd54e8f532e791518802e33866f233a2a6126a25c1c82c19d1abbf1df627e57b1b957dd3f8318ea96073d8bfc32193943bcb3 + languageName: node + linkType: hard + +"@inquirer/type@npm:^2.0.0": + version: 2.0.0 + resolution: "@inquirer/type@npm:2.0.0" + dependencies: + mute-stream: "npm:^1.0.0" + checksum: 10c0/8c663d52beb2b89a896d3c3d5cc3d6d024fa149e565555bcb42fa640cbe23fba7ff2c51445342cef1fe6e46305e2d16c1590fa1d11ad0ddf93a67b655ef41f0a + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.5.5": + version: 1.5.5 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" + checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/agent@npm:4.0.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^11.2.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/f7b5ce0f3dd42c3f8c6546e8433573d8049f67ef11ec22aa4704bc41483122f68bf97752e06302c455ead667af5cb753e6a09bff06632bc465c1cfd4c4b75a53 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^5.0.0": + version: 5.0.0 + resolution: "@npmcli/fs@npm:5.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/26e376d780f60ff16e874a0ac9bc3399186846baae0b6e1352286385ac134d900cc5dafaded77f38d77f86898fc923ae1cee9d7399f0275b1aa24878915d722b + languageName: node + linkType: hard + +"@npmcli/redact@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/redact@npm:4.0.0" + checksum: 10c0/a1e9ba9c70a6b40e175bda2c3dd8cfdaf096e6b7f7a132c855c083c8dfe545c3237cd56702e2e6627a580b1d63373599d49a1192c4078a85bf47bbde824df31c + languageName: node + linkType: hard + +"@oxlint/darwin-arm64@npm:0.16.12": + version: 0.16.12 + resolution: "@oxlint/darwin-arm64@npm:0.16.12" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint/darwin-x64@npm:0.16.12": + version: 0.16.12 + resolution: "@oxlint/darwin-x64@npm:0.16.12" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@oxlint/linux-arm64-gnu@npm:0.16.12": + version: 0.16.12 + resolution: "@oxlint/linux-arm64-gnu@npm:0.16.12" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@oxlint/linux-arm64-musl@npm:0.16.12": + version: 0.16.12 + resolution: "@oxlint/linux-arm64-musl@npm:0.16.12" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@oxlint/linux-x64-gnu@npm:0.16.12": + version: 0.16.12 + resolution: "@oxlint/linux-x64-gnu@npm:0.16.12" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@oxlint/linux-x64-musl@npm:0.16.12": + version: 0.16.12 + resolution: "@oxlint/linux-x64-musl@npm:0.16.12" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@oxlint/win32-arm64@npm:0.16.12": + version: 0.16.12 + resolution: "@oxlint/win32-arm64@npm:0.16.12" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint/win32-x64@npm:0.16.12": + version: 0.16.12 + resolution: "@oxlint/win32-x64@npm:0.16.12" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-android-arm-eabi@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.60.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-android-arm64@npm:4.60.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.60.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.60.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.60.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-freebsd-x64@npm:4.60.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.60.1" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.60.1" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.60.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.60.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-gnu@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.60.1" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-musl@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-loong64-musl@npm:4.60.1" + conditions: os=linux & cpu=loong64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-gnu@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.60.1" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-musl@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.60.1" + conditions: os=linux & cpu=ppc64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.60.1" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-musl@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.60.1" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.60.1" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.60.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.60.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-openbsd-x64@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-openbsd-x64@npm:4.60.1" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-openharmony-arm64@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.60.1" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.60.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.60.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-gnu@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.60.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.60.1": + version: 4.60.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.60.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@samverschueren/stream-to-observable@npm:^0.3.0": + version: 0.3.1 + resolution: "@samverschueren/stream-to-observable@npm:0.3.1" + dependencies: + any-observable: "npm:^0.3.0" + peerDependenciesMeta: + rxjs: + optional: true + zen-observable: + optional: true + checksum: 10c0/0d874453f6bc2460d71783292291f52feb36c2a75314b1072a6ffe6206562f33e9d664a554348d565a6b54da9041d75070371052545bc329caaa52f64216987f + languageName: node + linkType: hard + +"@sniptt/guards@npm:^0.2.0": + version: 0.2.0 + resolution: "@sniptt/guards@npm:0.2.0" + checksum: 10c0/749bb0f550d1ddd4abdb23dc1076cba26e977659922b73d000bceeb253c09270aaced0d18e92f09d4ce2fdaae33e55f60f2142f5359bc90ba505422af0873526 + languageName: node + linkType: hard + +"@types/chai@npm:^5.2.2": + version: 5.2.3 + resolution: "@types/chai@npm:5.2.3" + dependencies: + "@types/deep-eql": "npm:*" + assertion-error: "npm:^2.0.1" + checksum: 10c0/e0ef1de3b6f8045a5e473e867c8565788c444271409d155588504840ad1a53611011f85072188c2833941189400228c1745d78323dac13fcede9c2b28bacfb2f + languageName: node + linkType: hard + +"@types/deep-eql@npm:*": + version: 4.0.2 + resolution: "@types/deep-eql@npm:4.0.2" + checksum: 10c0/bf3f811843117900d7084b9d0c852da9a044d12eb40e6de73b552598a6843c21291a8a381b0532644574beecd5e3491c5ff3a0365ab86b15d59862c025384844 + languageName: node + linkType: hard + +"@types/estree@npm:1.0.8, @types/estree@npm:^1.0.0": + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 + languageName: node + linkType: hard + +"@types/mute-stream@npm:^0.0.4": + version: 0.0.4 + resolution: "@types/mute-stream@npm:0.0.4" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/944730fd7b398c5078de3c3d4d0afeec8584283bc694da1803fdfca14149ea385e18b1b774326f1601baf53898ce6d121a952c51eb62d188ef6fcc41f725c0dc + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 25.5.2 + resolution: "@types/node@npm:25.5.2" + dependencies: + undici-types: "npm:~7.18.0" + checksum: 10c0/11e41a85401724cd1a4de6fb7bd4264ec46db10c09fc8cf8d41de4ede0a7063db458348f859ead4ec0929906aa26aaf45a5fef3aa59742ca0521cda9cee52377 + languageName: node + linkType: hard + +"@types/node@npm:^22.5.5": + version: 22.19.17 + resolution: "@types/node@npm:22.19.17" + dependencies: + undici-types: "npm:~6.21.0" + checksum: 10c0/b66c484c0a9f6d88b1ef360b0f487717234ee1a482cb2551ff73d9f3c43a42a777daf4c8a5eee970960728f8fe1f3877d3d8c6ffabcbca74cb401a59db700fa4 + languageName: node + linkType: hard + +"@types/node@npm:^24.7.2": + version: 24.12.2 + resolution: "@types/node@npm:24.12.2" + dependencies: + undici-types: "npm:~7.16.0" + checksum: 10c0/710050c42f89075c4479e4e1e4c2532486b0c41b1e2a8a13ad88641c88b88cdaea87414e19224f30028719737bd70e327edcaa184d50e86b9418941edd7eb02b + languageName: node + linkType: hard + +"@types/qs@npm:^6.9.0": + version: 6.15.0 + resolution: "@types/qs@npm:6.15.0" + checksum: 10c0/1b104cac50e655fc41d7fc1de2c2aba2908c4cf833a555b6808fb4c96752662b439238f2392a15d2590a7a6ca75dbd40e42d9378ac2be0d548ee484954363688 + languageName: node + linkType: hard + +"@types/react@npm:^19.0.0": + version: 19.2.14 + resolution: "@types/react@npm:19.2.14" + dependencies: + csstype: "npm:^3.2.2" + checksum: 10c0/7d25bf41b57719452d86d2ac0570b659210402707313a36ee612666bf11275a1c69824f8c3ee1fdca077ccfe15452f6da8f1224529b917050eb2d861e52b59b7 + languageName: node + linkType: hard + +"@types/wrap-ansi@npm:^3.0.0": + version: 3.0.0 + resolution: "@types/wrap-ansi@npm:3.0.0" + checksum: 10c0/8d8f53363f360f38135301a06b596c295433ad01debd082078c33c6ed98b05a5c8fe8853a88265432126096084f4a135ec1564e3daad631b83296905509f90b3 + languageName: node + linkType: hard + +"@types/ws@npm:^6.0.1": + version: 6.0.4 + resolution: "@types/ws@npm:6.0.4" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/fa958e64596ca9487c3ed6012834de70b47f25d971f1950cfb8e6a99cb77ff340ae82ac7627744e01b58010674ef8ede07d5a2ac29ca9ad0d67a430fcc69ae14 + languageName: node + linkType: hard + +"@vitest/expect@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/expect@npm:3.2.4" + dependencies: + "@types/chai": "npm:^5.2.2" + "@vitest/spy": "npm:3.2.4" + "@vitest/utils": "npm:3.2.4" + chai: "npm:^5.2.0" + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/7586104e3fd31dbe1e6ecaafb9a70131e4197dce2940f727b6a84131eee3decac7b10f9c7c72fa5edbdb68b6f854353bd4c0fa84779e274207fb7379563b10db + languageName: node + linkType: hard + +"@vitest/mocker@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/mocker@npm:3.2.4" + dependencies: + "@vitest/spy": "npm:3.2.4" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.17" + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10c0/f7a4aea19bbbf8f15905847ee9143b6298b2c110f8b64789224cb0ffdc2e96f9802876aa2ca83f1ec1b6e1ff45e822abb34f0054c24d57b29ab18add06536ccd + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:3.2.4, @vitest/pretty-format@npm:^3.2.4": + version: 3.2.4 + resolution: "@vitest/pretty-format@npm:3.2.4" + dependencies: + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/5ad7d4278e067390d7d633e307fee8103958806a419ca380aec0e33fae71b44a64415f7a9b4bc11635d3c13d4a9186111c581d3cef9c65cc317e68f077456887 + languageName: node + linkType: hard + +"@vitest/runner@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/runner@npm:3.2.4" + dependencies: + "@vitest/utils": "npm:3.2.4" + pathe: "npm:^2.0.3" + strip-literal: "npm:^3.0.0" + checksum: 10c0/e8be51666c72b3668ae3ea348b0196656a4a5adb836cb5e270720885d9517421815b0d6c98bfdf1795ed02b994b7bfb2b21566ee356a40021f5bf4f6ed4e418a + languageName: node + linkType: hard + +"@vitest/snapshot@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/snapshot@npm:3.2.4" + dependencies: + "@vitest/pretty-format": "npm:3.2.4" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + checksum: 10c0/f8301a3d7d1559fd3d59ed51176dd52e1ed5c2d23aa6d8d6aa18787ef46e295056bc726a021698d8454c16ed825ecba163362f42fa90258bb4a98cfd2c9424fc + languageName: node + linkType: hard + +"@vitest/spy@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/spy@npm:3.2.4" + dependencies: + tinyspy: "npm:^4.0.3" + checksum: 10c0/6ebf0b4697dc238476d6b6a60c76ba9eb1dd8167a307e30f08f64149612fd50227682b876420e4c2e09a76334e73f72e3ebf0e350714dc22474258292e202024 + languageName: node + linkType: hard + +"@vitest/utils@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/utils@npm:3.2.4" + dependencies: + "@vitest/pretty-format": "npm:3.2.4" + loupe: "npm:^3.1.4" + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/024a9b8c8bcc12cf40183c246c244b52ecff861c6deb3477cbf487ac8781ad44c68a9c5fd69f8c1361878e55b97c10d99d511f2597f1f7244b5e5101d028ba64 + languageName: node + linkType: hard + +"abbrev@npm:^4.0.0": + version: 4.0.0 + resolution: "abbrev@npm:4.0.0" + checksum: 10c0/b4cc16935235e80702fc90192e349e32f8ef0ed151ef506aa78c81a7c455ec18375c4125414b99f84b2e055199d66383e787675f0bcd87da7a4dbd59f9eac1d5 + languageName: node + linkType: hard + +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.4 + resolution: "agent-base@npm:7.1.4" + checksum: 10c0/c2c9ab7599692d594b6a161559ada307b7a624fa4c7b03e3afdb5a5e31cd0e53269115b620fcab024c5ac6a6f37fa5eb2e004f076ad30f5f7e6b8b671f7b35fe + languageName: node + linkType: hard + +"ansi-escapes@npm:^3.0.0": + version: 3.2.0 + resolution: "ansi-escapes@npm:3.2.0" + checksum: 10c0/084e1ce38139ad2406f18a8e7efe2b850ddd06ce3c00f633392d1ce67756dab44fe290e573d09ef3c9a0cb13c12881e0e35a8f77a017d39a0a4ab85ae2fae04f + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.3.2": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: "npm:^0.21.3" + checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 + languageName: node + linkType: hard + +"ansi-escapes@npm:^7.3.0": + version: 7.3.0 + resolution: "ansi-escapes@npm:7.3.0" + dependencies: + environment: "npm:^1.0.0" + checksum: 10c0/068961d99f0ef28b661a4a9f84a5d645df93ccf3b9b93816cc7d46bbe1913321d4cdf156bb842a4e1e4583b7375c631fa963efb43001c4eb7ff9ab8f78fc0679 + languageName: node + linkType: hard + +"ansi-regex@npm:^2.0.0": + version: 2.1.1 + resolution: "ansi-regex@npm:2.1.1" + checksum: 10c0/78cebaf50bce2cb96341a7230adf28d804611da3ce6bf338efa7b72f06cc6ff648e29f80cd95e582617ba58d5fdbec38abfeed3500a98bce8381a9daec7c548b + languageName: node + linkType: hard + +"ansi-regex@npm:^3.0.0": + version: 3.0.1 + resolution: "ansi-regex@npm:3.0.1" + checksum: 10c0/d108a7498b8568caf4a46eea4f1784ab4e0dfb2e3f3938c697dee21443d622d765c958f2b7e2b9f6b9e55e2e2af0584eaa9915d51782b89a841c28e744e7a167 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.2.2": + version: 6.2.2 + resolution: "ansi-regex@npm:6.2.2" + checksum: 10c0/05d4acb1d2f59ab2cf4b794339c7b168890d44dda4bf0ce01152a8da0213aca207802f930442ce8cd22d7a92f44907664aac6508904e75e038fa944d2601b30f + languageName: node + linkType: hard + +"ansi-styles@npm:^2.2.1": + version: 2.2.1 + resolution: "ansi-styles@npm:2.2.1" + checksum: 10c0/7c68aed4f1857389e7a12f85537ea5b40d832656babbf511cc7ecd9efc52889b9c3e5653a71a6aade783c3c5e0aa223ad4ff8e83c27ac8a666514e6c79068cab + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.2.1, ansi-styles@npm:^6.2.3": + version: 6.2.3 + resolution: "ansi-styles@npm:6.2.3" + checksum: 10c0/23b8a4ce14e18fb854693b95351e286b771d23d8844057ed2e7d083cd3e708376c3323707ec6a24365f7d7eda3ca00327fe04092e29e551499ec4c8b7bfac868 + languageName: node + linkType: hard + +"any-observable@npm:^0.3.0": + version: 0.3.0 + resolution: "any-observable@npm:0.3.0" + checksum: 10c0/104c2b79c2ac7e6c75b35f8fd62babf73015668f22bd25336c6f848350d91f9e7daf2fddbf1c1b76fe795e89fbc91b49f70a2aec5c69f1acf0562c344f36042b + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 + languageName: node + linkType: hard + +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8 + languageName: node + linkType: hard + +"async-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-function@npm:1.0.0" + checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 + languageName: node + linkType: hard + +"async-generator-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-generator-function@npm:1.0.0" + checksum: 10c0/2c50ef856c543ad500d8d8777d347e3c1ba623b93e99c9263ecc5f965c1b12d2a140e2ab6e43c3d0b85366110696f28114649411cbcd10b452a92a2318394186 + languageName: node + linkType: hard + +"async-limiter@npm:~1.0.0": + version: 1.0.1 + resolution: "async-limiter@npm:1.0.1" + checksum: 10c0/0693d378cfe86842a70d4c849595a0bb50dc44c11649640ca982fa90cbfc74e3cc4753b5a0847e51933f2e9c65ce8e05576e75e5e1fd963a086e673735b35969 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + +"auto-bind@npm:^5.0.1": + version: 5.0.1 + resolution: "auto-bind@npm:5.0.1" + checksum: 10c0/a703375350ea7b6e92405d8e6bcc6dbfb84b0d7c7172b33e5788a7593929a18227999ff9aa9c32436741d06d021e6672457b1cec73287efe3fab95cff6627eaf + languageName: node + linkType: hard + +"axios@npm:^1.13.5": + version: 1.14.0 + resolution: "axios@npm:1.14.0" + dependencies: + follow-redirects: "npm:^1.15.11" + form-data: "npm:^4.0.5" + proxy-from-env: "npm:^2.1.0" + checksum: 10c0/2541f4aa215a7d1842429dad006fc682d82bc0e74bd14500823f7d8cce3bbae0e0a8c328c8538946718f366ab8ce5a4c12e9ad40e5a0f3482ff8bff0cd115d45 + languageName: node + linkType: hard + +"backo2@npm:^1.0.2": + version: 1.0.2 + resolution: "backo2@npm:1.0.2" + checksum: 10c0/a9e825a6a38a6d1c4a94476eabc13d6127dfaafb0967baf104affbb67806ae26abbb58dab8d572d2cd21ef06634ff57c3ad48dff14b904e18de1474cc2f22bf3 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"balanced-match@npm:^4.0.2": + version: 4.0.4 + resolution: "balanced-match@npm:4.0.4" + checksum: 10c0/07e86102a3eb2ee2a6a1a89164f29d0dbaebd28f2ca3f5ca786f36b8b23d9e417eb3be45a4acf754f837be5ac0a2317de90d3fcb7f4f4dc95720a1f36b26a17b + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.13 + resolution: "brace-expansion@npm:1.1.13" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/384c61bb329b6adfdcc0cbbdd108dc19fb5f3e84ae15a02a74f94c6c791b5a9b035aae73b2a51929a8a478e2f0f212a771eb6a8b5b514cccfb8d0c9f2ce8cbd8 + languageName: node + linkType: hard + +"brace-expansion@npm:^5.0.5": + version: 5.0.5 + resolution: "brace-expansion@npm:5.0.5" + dependencies: + balanced-match: "npm:^4.0.2" + checksum: 10c0/4d238e14ed4f5cc9c07285550a41cef23121ca08ba99fa9eb5b55b580dcb6bf868b8210aa10526bdc9f8dc97f33ca2a7259039c4cc131a93042beddb424c48e3 + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 + languageName: node + linkType: hard + +"cacache@npm:^20.0.1": + version: 20.0.4 + resolution: "cacache@npm:20.0.4" + dependencies: + "@npmcli/fs": "npm:^5.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^13.0.0" + lru-cache: "npm:^11.1.0" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^13.0.0" + checksum: 10c0/539bf4020e44ba9ca5afc2ec435623ed7e0dd80c020097677e6b4a0545df5cc9d20b473212d01209c8b4aea43c0d095af0bb6da97bcb991642ea6fac0d7c462b + languageName: node + linkType: hard + +"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2": + version: 1.0.4 + resolution: "call-bound@npm:1.0.4" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + get-intrinsic: "npm:^1.3.0" + checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 + languageName: node + linkType: hard + +"camelcase@npm:^5.0.0": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 + languageName: node + linkType: hard + +"chai@npm:^5.2.0": + version: 5.3.3 + resolution: "chai@npm:5.3.3" + dependencies: + assertion-error: "npm:^2.0.1" + check-error: "npm:^2.1.1" + deep-eql: "npm:^5.0.1" + loupe: "npm:^3.1.0" + pathval: "npm:^2.0.0" + checksum: 10c0/b360fd4d38861622e5010c2f709736988b05c7f31042305fa3f4e9911f6adb80ccfb4e302068bf8ed10e835c2e2520cba0f5edc13d878b886987e5aa62483f53 + languageName: node + linkType: hard + +"chalk@npm:^1.0.0, chalk@npm:^1.1.3": + version: 1.1.3 + resolution: "chalk@npm:1.1.3" + dependencies: + ansi-styles: "npm:^2.2.1" + escape-string-regexp: "npm:^1.0.2" + has-ansi: "npm:^2.0.0" + strip-ansi: "npm:^3.0.0" + supports-color: "npm:^2.0.0" + checksum: 10c0/28c3e399ec286bb3a7111fd4225ebedb0d7b813aef38a37bca7c498d032459c265ef43404201d5fbb8d888d29090899c95335b4c0cda13e8b126ff15c541cef8 + languageName: node + linkType: hard + +"chalk@npm:^2.4.1": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + +"chalk@npm:^5.3.0, chalk@npm:^5.6.0": + version: 5.6.2 + resolution: "chalk@npm:5.6.2" + checksum: 10c0/99a4b0f0e7991796b1e7e3f52dceb9137cae2a9dfc8fc0784a550dc4c558e15ab32ed70b14b21b52beb2679b4892b41a0aa44249bcb996f01e125d58477c6976 + languageName: node + linkType: hard + +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 10c0/96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d + languageName: node + linkType: hard + +"check-error@npm:^2.1.1": + version: 2.1.3 + resolution: "check-error@npm:2.1.3" + checksum: 10c0/878e99038fb6476316b74668cd6a498c7e66df3efe48158fa40db80a06ba4258742ac3ee2229c4a2a98c5e73f5dff84eb3e50ceb6b65bbd8f831eafc8338607d + languageName: node + linkType: hard + +"chokidar@npm:^4.0.0": + version: 4.0.3 + resolution: "chokidar@npm:4.0.3" + dependencies: + readdirp: "npm:^4.0.1" + checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + +"cli-boxes@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-boxes@npm:3.0.0" + checksum: 10c0/4db3e8fbfaf1aac4fb3a6cbe5a2d3fa048bee741a45371b906439b9ffc821c6e626b0f108bdcd3ddf126a4a319409aedcf39a0730573ff050fdd7b6731e99fb9 + languageName: node + linkType: hard + +"cli-cursor@npm:^2.0.0, cli-cursor@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-cursor@npm:2.1.0" + dependencies: + restore-cursor: "npm:^2.0.0" + checksum: 10c0/09ee6d8b5b818d840bf80ec9561eaf696672197d3a02a7daee2def96d5f52ce6e0bbe7afca754ccf14f04830b5a1b4556273e983507d5029f95bba3016618eda + languageName: node + linkType: hard + +"cli-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "cli-cursor@npm:4.0.0" + dependencies: + restore-cursor: "npm:^4.0.0" + checksum: 10c0/e776e8c3c6727300d0539b0d25160b2bb56aed1a63942753ba1826b012f337a6f4b7ace3548402e4f2f13b5e16bfd751be672c44b203205e7eca8be94afec42c + languageName: node + linkType: hard + +"cli-truncate@npm:^0.2.1": + version: 0.2.1 + resolution: "cli-truncate@npm:0.2.1" + dependencies: + slice-ansi: "npm:0.0.4" + string-width: "npm:^1.0.1" + checksum: 10c0/c6caa5e2b70d841c42f4a2270d6fc7129df915f8911e4afa90c79231ccc857cd819a2c90e0707fde04e51ce56b4d71646b843f6cbaff4f7cdcb3b91ed51f6e89 + languageName: node + linkType: hard + +"cli-truncate@npm:^5.1.1": + version: 5.2.0 + resolution: "cli-truncate@npm:5.2.0" + dependencies: + slice-ansi: "npm:^8.0.0" + string-width: "npm:^8.2.0" + checksum: 10c0/0d4ec94702ca85b64522ac93633837fb5ea7db17b79b1322a60f6045e6ae2b8cd7bd4c1d19ac7d1f9e10e3bbda1112e172e439b68c02b785ee00da8d6a5c5471 + languageName: node + linkType: hard + +"cli-width@npm:^4.1.0": + version: 4.1.0 + resolution: "cli-width@npm:4.1.0" + checksum: 10c0/1fbd56413578f6117abcaf858903ba1f4ad78370a4032f916745fa2c7e390183a9d9029cf837df320b0fdce8137668e522f60a30a5f3d6529ff3872d265a955f + languageName: node + linkType: hard + +"cliui@npm:^6.0.0": + version: 6.0.0 + resolution: "cliui@npm:6.0.0" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.0" + wrap-ansi: "npm:^6.2.0" + checksum: 10c0/35229b1bb48647e882104cac374c9a18e34bbf0bace0e2cf03000326b6ca3050d6b59545d91e17bfe3705f4a0e2988787aa5cde6331bf5cbbf0164732cef6492 + languageName: node + linkType: hard + +"code-excerpt@npm:^4.0.0": + version: 4.0.0 + resolution: "code-excerpt@npm:4.0.0" + dependencies: + convert-to-spaces: "npm:^2.0.1" + checksum: 10c0/b6c5a06e039cecd2ab6a0e10ee0831de8362107d1f298ca3558b5f9004cb8e0260b02dd6c07f57b9a0e346c76864d2873311ee1989809fdeb05bd5fbbadde773 + languageName: node + linkType: hard + +"code-point-at@npm:^1.0.0": + version: 1.1.0 + resolution: "code-point-at@npm:1.1.0" + checksum: 10c0/33f6b234084e46e6e369b6f0b07949392651b4dde70fc6a592a8d3dafa08d5bb32e3981a02f31f6fc323a26bc03a4c063a9d56834848695bda7611c2417ea2e6 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + +"commander@npm:^12.0.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"convert-to-spaces@npm:^2.0.1": + version: 2.0.1 + resolution: "convert-to-spaces@npm:2.0.1" + checksum: 10c0/d90aa0e3b6a27f9d5265a8d32def3c5c855b3e823a9db1f26d772f8146d6b91020a2fdfd905ce8048a73fad3aaf836fef8188c67602c374405e2ae8396c4ac46 + languageName: node + linkType: hard + +"csstype@npm:^3.2.2": + version: 3.2.3 + resolution: "csstype@npm:3.2.3" + checksum: 10c0/cd29c51e70fa822f1cecd8641a1445bed7063697469d35633b516e60fe8c1bde04b08f6c5b6022136bb669b64c63d4173af54864510fbb4ee23281801841a3ce + languageName: node + linkType: hard + +"date-fns@npm:^1.27.2": + version: 1.30.1 + resolution: "date-fns@npm:1.30.1" + checksum: 10c0/bad6ad7c15180121e15d61ad62a4a214c108d66f35b35f5eeb6ade837a3c29aa4444b9528a93a5374b95ba11231c142276351bf52f4d168676f9a1e17ce3726a + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.4, debug@npm:^4.4.1": + version: 4.4.3 + resolution: "debug@npm:4.4.3" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 + languageName: node + linkType: hard + +"decamelize@npm:^1.2.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 + languageName: node + linkType: hard + +"deep-eql@npm:^5.0.1": + version: 5.0.2 + resolution: "deep-eql@npm:5.0.2" + checksum: 10c0/7102cf3b7bb719c6b9c0db2e19bf0aa9318d141581befe8c7ce8ccd39af9eaa4346e5e05adef7f9bd7015da0f13a3a25dcfe306ef79dc8668aedbecb658dd247 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + +"dotenv@npm:^16.4.0": + version: 16.6.1 + resolution: "dotenv@npm:16.6.1" + checksum: 10c0/15ce56608326ea0d1d9414a5c8ee6dcf0fffc79d2c16422b4ac2268e7e2d76ff5a572d37ffe747c377de12005f14b3cc22361e79fc7f1061cce81f77d2c973dc + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 + languageName: node + linkType: hard + +"elegant-spinner@npm:^1.0.1": + version: 1.0.1 + resolution: "elegant-spinner@npm:1.0.1" + checksum: 10c0/df607c83c20fc3ce56c514175dd5d1ee7f667da00cee13d04d32c70d55e76555091fa236689e691cf7dedba17b0020fec635e499cdde84dbea2ef8639314e5f8 + languageName: node + linkType: hard + +"emoji-regex@npm:^10.3.0": + version: 10.6.0 + resolution: "emoji-regex@npm:10.6.0" + checksum: 10c0/1e4aa097bb007301c3b4b1913879ae27327fdc48e93eeefefe3b87e495eb33c5af155300be951b4349ff6ac084f4403dc9eff970acba7c1c572d89396a9a32d7 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"environment@npm:^1.0.0": + version: 1.1.0 + resolution: "environment@npm:1.1.0" + checksum: 10c0/fb26434b0b581ab397039e51ff3c92b34924a98b2039dcb47e41b7bca577b9dbf134a8eadb364415c74464b682e2d3afe1a4c0eb9873dc44ea814c5d3103331d + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.7.0": + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" + dependencies: + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af + languageName: node + linkType: hard + +"es-toolkit@npm:^1.39.10": + version: 1.45.1 + resolution: "es-toolkit@npm:1.45.1" + dependenciesMeta: + "@trivago/prettier-plugin-sort-imports@4.3.0": + unplugged: true + prettier-plugin-sort-re-exports@0.0.1: + unplugged: true + checksum: 10c0/b19180c778af8fe2fb450e8e05a5793166c91e0aa66b87d9fcfcc5618bd33e6ceec9c103e074458d32b2044972dc4fc63631b3b615834fde261917e9561f6f59 + languageName: node + linkType: hard + +"esbuild@npm:^0.25.0": + version: 0.25.12 + resolution: "esbuild@npm:0.25.12" + dependencies: + "@esbuild/aix-ppc64": "npm:0.25.12" + "@esbuild/android-arm": "npm:0.25.12" + "@esbuild/android-arm64": "npm:0.25.12" + "@esbuild/android-x64": "npm:0.25.12" + "@esbuild/darwin-arm64": "npm:0.25.12" + "@esbuild/darwin-x64": "npm:0.25.12" + "@esbuild/freebsd-arm64": "npm:0.25.12" + "@esbuild/freebsd-x64": "npm:0.25.12" + "@esbuild/linux-arm": "npm:0.25.12" + "@esbuild/linux-arm64": "npm:0.25.12" + "@esbuild/linux-ia32": "npm:0.25.12" + "@esbuild/linux-loong64": "npm:0.25.12" + "@esbuild/linux-mips64el": "npm:0.25.12" + "@esbuild/linux-ppc64": "npm:0.25.12" + "@esbuild/linux-riscv64": "npm:0.25.12" + "@esbuild/linux-s390x": "npm:0.25.12" + "@esbuild/linux-x64": "npm:0.25.12" + "@esbuild/netbsd-arm64": "npm:0.25.12" + "@esbuild/netbsd-x64": "npm:0.25.12" + "@esbuild/openbsd-arm64": "npm:0.25.12" + "@esbuild/openbsd-x64": "npm:0.25.12" + "@esbuild/openharmony-arm64": "npm:0.25.12" + "@esbuild/sunos-x64": "npm:0.25.12" + "@esbuild/win32-arm64": "npm:0.25.12" + "@esbuild/win32-ia32": "npm:0.25.12" + "@esbuild/win32-x64": "npm:0.25.12" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/c205357531423220a9de8e1e6c6514242bc9b1666e762cd67ccdf8fdfdc3f1d0bd76f8d9383958b97ad4c953efdb7b6e8c1f9ca5951cd2b7c5235e8755b34a6b + languageName: node + linkType: hard + +"esbuild@npm:^0.27.0": + version: 0.27.7 + resolution: "esbuild@npm:0.27.7" + dependencies: + "@esbuild/aix-ppc64": "npm:0.27.7" + "@esbuild/android-arm": "npm:0.27.7" + "@esbuild/android-arm64": "npm:0.27.7" + "@esbuild/android-x64": "npm:0.27.7" + "@esbuild/darwin-arm64": "npm:0.27.7" + "@esbuild/darwin-x64": "npm:0.27.7" + "@esbuild/freebsd-arm64": "npm:0.27.7" + "@esbuild/freebsd-x64": "npm:0.27.7" + "@esbuild/linux-arm": "npm:0.27.7" + "@esbuild/linux-arm64": "npm:0.27.7" + "@esbuild/linux-ia32": "npm:0.27.7" + "@esbuild/linux-loong64": "npm:0.27.7" + "@esbuild/linux-mips64el": "npm:0.27.7" + "@esbuild/linux-ppc64": "npm:0.27.7" + "@esbuild/linux-riscv64": "npm:0.27.7" + "@esbuild/linux-s390x": "npm:0.27.7" + "@esbuild/linux-x64": "npm:0.27.7" + "@esbuild/netbsd-arm64": "npm:0.27.7" + "@esbuild/netbsd-x64": "npm:0.27.7" + "@esbuild/openbsd-arm64": "npm:0.27.7" + "@esbuild/openbsd-x64": "npm:0.27.7" + "@esbuild/openharmony-arm64": "npm:0.27.7" + "@esbuild/sunos-x64": "npm:0.27.7" + "@esbuild/win32-arm64": "npm:0.27.7" + "@esbuild/win32-ia32": "npm:0.27.7" + "@esbuild/win32-x64": "npm:0.27.7" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/ccd51f0555708bc9ff4ec9dc3ac92d3daacd45ecaac949ca8645984c5c323bf8cefe98c2df307418685e0b4ce37f9a3bdbfe8e3651fe632a0059a436195a17d4 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 + languageName: node + linkType: hard + +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d + languageName: node + linkType: hard + +"eventemitter3@npm:^3.1.0": + version: 3.1.2 + resolution: "eventemitter3@npm:3.1.2" + checksum: 10c0/c67262eccbf85848b7cc6d4abb6c6e34155e15686db2a01c57669fd0d44441a574a19d44d25948b442929e065774cbe5003d8e77eed47674fbf876ac77887793 + languageName: node + linkType: hard + +"expect-type@npm:^1.2.1": + version: 1.3.0 + resolution: "expect-type@npm:1.3.0" + checksum: 10c0/8412b3fe4f392c420ab41dae220b09700e4e47c639a29ba7ba2e83cc6cffd2b4926f7ac9e47d7e277e8f4f02acda76fd6931cb81fd2b382fa9477ef9ada953fd + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.3 + resolution: "exponential-backoff@npm:3.1.3" + checksum: 10c0/77e3ae682b7b1f4972f563c6dbcd2b0d54ac679e62d5d32f3e5085feba20483cf28bd505543f520e287a56d4d55a28d7874299941faf637e779a1aa5994d1267 + languageName: node + linkType: hard + +"external-editor@npm:^3.1.0": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" + dependencies: + chardet: "npm:^0.7.0" + iconv-lite: "npm:^0.4.24" + tmp: "npm:^0.0.33" + checksum: 10c0/c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.8" + checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.20.1 + resolution: "fastq@npm:1.20.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/e5dd725884decb1f11e5c822221d76136f239d0236f176fab80b7b8f9e7619ae57e6b4e5b73defc21e6b9ef99437ee7b545cff8e6c2c337819633712fa9d352e + languageName: node + linkType: hard + +"fdir@npm:^6.5.0": + version: 6.5.0 + resolution: "fdir@npm:6.5.0" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/e345083c4306b3aed6cb8ec551e26c36bab5c511e99ea4576a16750ddc8d3240e63826cc624f5ae17ad4dc82e68a253213b60d556c11bfad064b7607847ed07f + languageName: node + linkType: hard + +"figures@npm:^1.7.0": + version: 1.7.0 + resolution: "figures@npm:1.7.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + object-assign: "npm:^4.1.0" + checksum: 10c0/a10942b0eec3372bf61822ab130d2bbecdf527d551b0b013fbe7175b7a0238ead644ee8930a1a3cb872fb9ab2ec27df30e303765a3b70b97852e2e9ee43bdff3 + languageName: node + linkType: hard + +"figures@npm:^2.0.0": + version: 2.0.0 + resolution: "figures@npm:2.0.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 10c0/5dc5a75fec3e7e04ae65d6ce51d28b3e70d4656c51b06996b6fdb2cb5b542df512e3b3c04482f5193a964edddafa5521479ff948fa84e12ff556e53e094ab4ce + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.15.11": + version: 1.15.11 + resolution: "follow-redirects@npm:1.15.11" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 + languageName: node + linkType: hard + +"form-data@npm:^4.0.5": + version: 4.0.5 + resolution: "form-data@npm:4.0.5" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + es-set-tostringtag: "npm:^2.1.0" + hasown: "npm:^2.0.2" + mime-types: "npm:^2.1.12" + checksum: 10c0/dd6b767ee0bbd6d84039db12a0fa5a2028160ffbfaba1800695713b46ae974a5f6e08b3356c3195137f8530dcd9dfcb5d5ae1eeff53d0db1e5aad863b619ce3b + languageName: node + linkType: hard + +"fs-extra@npm:^10.1.0": + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"generator-function@npm:^2.0.0": + version: 2.0.1 + resolution: "generator-function@npm:2.0.1" + checksum: 10c0/8a9f59df0f01cfefafdb3b451b80555e5cf6d76487095db91ac461a0e682e4ff7a9dbce15f4ecec191e53586d59eece01949e05a4b4492879600bbbe8e28d6b8 + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.1": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + +"get-east-asian-width@npm:^1.0.0, get-east-asian-width@npm:^1.3.1, get-east-asian-width@npm:^1.5.0": + version: 1.5.0 + resolution: "get-east-asian-width@npm:1.5.0" + checksum: 10c0/bff8bbc8d81790b9477f7aa55b1806b9f082a8dc1359fff7bd8b96939622c86b729685afc2bfeb22def1fc6ef1e5228e4d87dd4e6da60bc43a5edfb03c4ee167 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0": + version: 1.3.1 + resolution: "get-intrinsic@npm:1.3.1" + dependencies: + async-function: "npm:^1.0.0" + async-generator-function: "npm:^1.0.0" + call-bind-apply-helpers: "npm:^1.0.2" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + function-bind: "npm:^1.1.2" + generator-function: "npm:^2.0.0" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/9f4ab0cf7efe0fd2c8185f52e6f637e708f3a112610c88869f8f041bb9ecc2ce44bf285dfdbdc6f4f7c277a5b88d8e94a432374d97cca22f3de7fc63795deb5d + languageName: node + linkType: hard + +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob@npm:^13.0.0": + version: 13.0.6 + resolution: "glob@npm:13.0.6" + dependencies: + minimatch: "npm:^10.2.2" + minipass: "npm:^7.1.3" + path-scurry: "npm:^2.0.2" + checksum: 10c0/269c236f11a9b50357fe7a8c6aadac667e01deb5242b19c84975628f05f4438d8ee1354bb62c5d6c10f37fd59911b54d7799730633a2786660d8c69f1d18120a + languageName: node + linkType: hard + +"glob@npm:^7.1.3": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.1.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe + languageName: node + linkType: hard + +"globby@npm:^11.0.3": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: "npm:^2.1.0" + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.2.9" + ignore: "npm:^5.2.0" + merge2: "npm:^1.4.1" + slash: "npm:^3.0.0" + checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 + languageName: node + linkType: hard + +"globrex@npm:^0.1.2": + version: 0.1.2 + resolution: "globrex@npm:0.1.2" + checksum: 10c0/a54c029520cf58bda1d8884f72bd49b4cd74e977883268d931fd83bcbd1a9eb96d57c7dbd4ad80148fb9247467ebfb9b215630b2ed7563b2a8de02e1ff7f89d1 + languageName: node + linkType: hard + +"gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"graphql-query-batcher@npm:^1.0.1": + version: 1.0.1 + resolution: "graphql-query-batcher@npm:1.0.1" + checksum: 10c0/804d0f4064721a2116a16b9eac422e9233e85f4ab5b250cb8f83662725658ffde35779a8ae8211037f3dd2f9717de8cb63b394ad8057ce22171a83db2471196a + languageName: node + linkType: hard + +"graphql-sse@npm:^2.5.4": + version: 2.6.0 + resolution: "graphql-sse@npm:2.6.0" + peerDependencies: + graphql: ">=0.11 <=16" + checksum: 10c0/e05f0b5c8539d61e5ce34af8e0bb418c02bf922d6a7f9232a9abd53c77df5654684ca14f674ac771645c8fba9c37ce666c5d06f46eef54ea07e63653468065b0 + languageName: node + linkType: hard + +"graphql@npm:^16.6.0, graphql@npm:^16.8.1": + version: 16.13.2 + resolution: "graphql@npm:16.13.2" + checksum: 10c0/64e822a0a0e4398781e4bc9765b88d370c08261498b517add4b878038ef7be2005b6b394a79a5102b9379d57052f60bc7f23fec8f39808d101984a74772ebd9d + languageName: node + linkType: hard + +"has-ansi@npm:^2.0.0": + version: 2.0.0 + resolution: "has-ansi@npm:2.0.0" + dependencies: + ansi-regex: "npm:^2.0.0" + checksum: 10c0/f54e4887b9f8f3c4bfefd649c48825b3c093987c92c27880ee9898539e6f01aed261e82e73153c3f920fde0db5bf6ebd58deb498ed1debabcb4bc40113ccdf05 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + +"hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.2.0 + resolution: "http-cache-semantics@npm:4.2.0" + checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + +"iconv-lite@npm:^0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3" + checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.7.2": + version: 0.7.2 + resolution: "iconv-lite@npm:0.7.2" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/3c228920f3bd307f56bf8363706a776f4a060eb042f131cd23855ceca962951b264d0997ab38a1ad340e1c5df8499ed26e1f4f0db6b2a2ad9befaff22f14b722 + languageName: node + linkType: hard + +"ignore@npm:^5.2.0": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"indent-string@npm:^3.0.0": + version: 3.2.0 + resolution: "indent-string@npm:3.2.0" + checksum: 10c0/91b6d61621d24944c5c4d365d6f1ff4a490264ccaf1162a602faa0d323e69231db2180ad4ccc092c2f49cf8888cdb3da7b73e904cc0fdeec40d0bfb41ceb9478 + languageName: node + linkType: hard + +"indent-string@npm:^5.0.0": + version: 5.0.0 + resolution: "indent-string@npm:5.0.0" + checksum: 10c0/8ee77b57d92e71745e133f6f444d6fa3ed503ad0e1bcd7e80c8da08b42375c07117128d670589725ed07b1978065803fa86318c309ba45415b7fe13e7f170220 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 + languageName: node + linkType: hard + +"inherits@npm:2": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"ink@npm:^6.8.0": + version: 6.8.0 + resolution: "ink@npm:6.8.0" + dependencies: + "@alcalzone/ansi-tokenize": "npm:^0.2.4" + ansi-escapes: "npm:^7.3.0" + ansi-styles: "npm:^6.2.1" + auto-bind: "npm:^5.0.1" + chalk: "npm:^5.6.0" + cli-boxes: "npm:^3.0.0" + cli-cursor: "npm:^4.0.0" + cli-truncate: "npm:^5.1.1" + code-excerpt: "npm:^4.0.0" + es-toolkit: "npm:^1.39.10" + indent-string: "npm:^5.0.0" + is-in-ci: "npm:^2.0.0" + patch-console: "npm:^2.0.0" + react-reconciler: "npm:^0.33.0" + scheduler: "npm:^0.27.0" + signal-exit: "npm:^3.0.7" + slice-ansi: "npm:^8.0.0" + stack-utils: "npm:^2.0.6" + string-width: "npm:^8.1.1" + terminal-size: "npm:^4.0.1" + type-fest: "npm:^5.4.1" + widest-line: "npm:^6.0.0" + wrap-ansi: "npm:^9.0.0" + ws: "npm:^8.18.0" + yoga-layout: "npm:~3.2.1" + peerDependencies: + "@types/react": ">=19.0.0" + react: ">=19.0.0" + react-devtools-core: ">=6.1.2" + peerDependenciesMeta: + "@types/react": + optional: true + react-devtools-core: + optional: true + checksum: 10c0/50500e547fdf6a1f1d836d6befbd4770e3ab649ef0be1884500a6da411fb68a90e22dd7dcc9c404911d30e9f87506b3b9d8e997c6c6ceac85ee054b4dadefaff + languageName: node + linkType: hard + +"inquirer@npm:^10.0.0": + version: 10.2.2 + resolution: "inquirer@npm:10.2.2" + dependencies: + "@inquirer/core": "npm:^9.1.0" + "@inquirer/prompts": "npm:^5.5.0" + "@inquirer/type": "npm:^1.5.3" + "@types/mute-stream": "npm:^0.0.4" + ansi-escapes: "npm:^4.3.2" + mute-stream: "npm:^1.0.0" + run-async: "npm:^3.0.0" + rxjs: "npm:^7.8.1" + checksum: 10c0/09bcff887a968ce29d3a8cba749ef35b6531b7fb7bf5b28aaf3e10aebae07af2494dd3ec67ae6f1dabe76da1064cfe4514098d4c7658fcaf3fd480b2975d7163 + languageName: node + linkType: hard + +"ip-address@npm:^10.0.1": + version: 10.1.0 + resolution: "ip-address@npm:10.1.0" + checksum: 10c0/0103516cfa93f6433b3bd7333fa876eb21263912329bfa47010af5e16934eeeff86f3d2ae700a3744a137839ddfad62b900c7a445607884a49b5d1e32a3d7566 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^1.0.0": + version: 1.0.0 + resolution: "is-fullwidth-code-point@npm:1.0.0" + dependencies: + number-is-nan: "npm:^1.0.0" + checksum: 10c0/12acfcf16142f2d431bf6af25d68569d3198e81b9799b4ae41058247aafcc666b0127d64384ea28e67a746372611fcbe9b802f69175287aba466da3eddd5ba0f + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^2.0.0": + version: 2.0.0 + resolution: "is-fullwidth-code-point@npm:2.0.0" + checksum: 10c0/e58f3e4a601fc0500d8b2677e26e9fe0cd450980e66adb29d85b6addf7969731e38f8e43ed2ec868a09c101a55ac3d8b78902209269f38c5286bc98f5bc1b4d9 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^5.0.0, is-fullwidth-code-point@npm:^5.1.0": + version: 5.1.0 + resolution: "is-fullwidth-code-point@npm:5.1.0" + dependencies: + get-east-asian-width: "npm:^1.3.1" + checksum: 10c0/c1172c2e417fb73470c56c431851681591f6a17233603a9e6f94b7ba870b2e8a5266506490573b607fb1081318589372034aa436aec07b465c2029c0bc7f07a4 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-in-ci@npm:^2.0.0": + version: 2.0.0 + resolution: "is-in-ci@npm:2.0.0" + bin: + is-in-ci: cli.js + checksum: 10c0/1e1d1056939a681e8206035de5ad84e0404556eaa7622bb55f0f1868b9788bff3df427bc0b1ed5a172623154a90fcb1e759a230817cd73d09435543ae3c71feb + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-observable@npm:^1.1.0": + version: 1.1.0 + resolution: "is-observable@npm:1.1.0" + dependencies: + symbol-observable: "npm:^1.1.0" + checksum: 10c0/cf3166b0822f70ad06e7851e09430166ce658349d54aaa64c93a03320420b9285735821b23164bdce741ff83a86730ac3e53035ce4e2511ed843dbff4105bfa2 + languageName: node + linkType: hard + +"is-promise@npm:^2.1.0": + version: 2.2.2 + resolution: "is-promise@npm:2.2.2" + checksum: 10c0/2dba959812380e45b3df0fb12e7cb4d4528c989c7abb03ececb1d1fd6ab1cbfee956ca9daa587b9db1d8ac3c1e5738cf217bdb3dfd99df8c691be4c00ae09069 + languageName: node + linkType: hard + +"is-stream@npm:^1.1.0": + version: 1.1.0 + resolution: "is-stream@npm:1.1.0" + checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 + languageName: node + linkType: hard + +"isexe@npm:^4.0.0": + version: 4.0.0 + resolution: "isexe@npm:4.0.0" + checksum: 10c0/5884815115bceac452877659a9c7726382531592f43dc29e5d48b7c4100661aed54018cb90bd36cb2eaeba521092570769167acbb95c18d39afdccbcca06c5ce + languageName: node + linkType: hard + +"isomorphic-unfetch@npm:^3.0.0": + version: 3.1.0 + resolution: "isomorphic-unfetch@npm:3.1.0" + dependencies: + node-fetch: "npm:^2.6.1" + unfetch: "npm:^4.2.0" + checksum: 10c0/d3b61fca06304db692b7f76bdfd3a00f410e42cfa7403c3b250546bf71589d18cf2f355922f57198e4cc4a9872d3647b20397a5c3edf1a347c90d57c83cf2a89 + languageName: node + linkType: hard + +"iterall@npm:^1.2.1": + version: 1.3.0 + resolution: "iterall@npm:1.3.0" + checksum: 10c0/40de624e5fe937c4c0e511981b91caea9ff2142bfc0316cccc8506eaa03aa253820cc17c5bc5f0a98706c7268a373e5ebee9af9a0c8a359730cf7c05938b57b5 + languageName: node + linkType: hard + +"js-tokens@npm:^9.0.1": + version: 9.0.1 + resolution: "js-tokens@npm:9.0.1" + checksum: 10c0/68dcab8f233dde211a6b5fd98079783cbcd04b53617c1250e3553ee16ab3e6134f5e65478e41d82f6d351a052a63d71024553933808570f04dbf828d7921e80e + languageName: node + linkType: hard + +"jsonc-parser@npm:^3.2.0": + version: 3.3.1 + resolution: "jsonc-parser@npm:3.3.1" + checksum: 10c0/269c3ae0a0e4f907a914bf334306c384aabb9929bd8c99f909275ebd5c2d3bc70b9bcd119ad794f339dec9f24b6a4ee9cd5a8ab2e6435e730ad4075388fc2ab6 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.2.0 + resolution: "jsonfile@npm:6.2.0" + dependencies: + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/7f4f43b08d1869ded8a6822213d13ae3b99d651151d77efd1557ced0889c466296a7d9684e397bd126acf5eb2cfcb605808c3e681d0fdccd2fe5a04b47e76c0d + languageName: node + linkType: hard + +"kleur@npm:^4.1.5": + version: 4.1.5 + resolution: "kleur@npm:4.1.5" + checksum: 10c0/e9de6cb49657b6fa70ba2d1448fd3d691a5c4370d8f7bbf1c2f64c24d461270f2117e1b0afe8cb3114f13bbd8e51de158c2a224953960331904e636a5e4c0f2a + languageName: node + linkType: hard + +"listr-silent-renderer@npm:^1.1.1": + version: 1.1.1 + resolution: "listr-silent-renderer@npm:1.1.1" + checksum: 10c0/a13e08ebf863516a757bce4887f05290070772113d89095e9f51a07cf0b11a43a7563a67ff3b287c752c08f6d781fdb2123b02957534e3e0675fb564f2a42e1b + languageName: node + linkType: hard + +"listr-update-renderer@npm:^0.5.0": + version: 0.5.0 + resolution: "listr-update-renderer@npm:0.5.0" + dependencies: + chalk: "npm:^1.1.3" + cli-truncate: "npm:^0.2.1" + elegant-spinner: "npm:^1.0.1" + figures: "npm:^1.7.0" + indent-string: "npm:^3.0.0" + log-symbols: "npm:^1.0.2" + log-update: "npm:^2.3.0" + strip-ansi: "npm:^3.0.1" + peerDependencies: + listr: ^0.14.2 + checksum: 10c0/8ade44bf3dc6146c8e0178000619439e8889792c4689b66be6ce82bd459f5fe462ecb34b05147fb206a8ad60e6d4e6f34c9f48038e18366f867fd972688b8edc + languageName: node + linkType: hard + +"listr-verbose-renderer@npm:^0.5.0": + version: 0.5.0 + resolution: "listr-verbose-renderer@npm:0.5.0" + dependencies: + chalk: "npm:^2.4.1" + cli-cursor: "npm:^2.1.0" + date-fns: "npm:^1.27.2" + figures: "npm:^2.0.0" + checksum: 10c0/041cd1e82da7054f27ae0a914e98b40d15faf9f950ef850578fc6241d3fff3c2d7158a4f6226006e566b4c47bf445be2d254dd1ce5c16569a3a5dcd575bec656 + languageName: node + linkType: hard + +"listr@npm:^0.14.3": + version: 0.14.3 + resolution: "listr@npm:0.14.3" + dependencies: + "@samverschueren/stream-to-observable": "npm:^0.3.0" + is-observable: "npm:^1.1.0" + is-promise: "npm:^2.1.0" + is-stream: "npm:^1.1.0" + listr-silent-renderer: "npm:^1.1.1" + listr-update-renderer: "npm:^0.5.0" + listr-verbose-renderer: "npm:^0.5.0" + p-map: "npm:^2.0.0" + rxjs: "npm:^6.3.3" + checksum: 10c0/753d518218c423f46bee8eeacccecadfd2e414ba9c0f602e7f85fe3f6fa18404dfab0812433aeda4683ee2548358488f597ac1a3d321196baec5d3149b200b10 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 + languageName: node + linkType: hard + +"lodash@npm:^4.17.20, lodash@npm:^4.17.21": + version: 4.18.1 + resolution: "lodash@npm:4.18.1" + checksum: 10c0/757228fc68805c59789e82185135cf85f05d0b2d3d54631d680ca79ec21944ec8314d4533639a14b8bcfbd97a517e78960933041a5af17ecb693ec6eecb99a27 + languageName: node + linkType: hard + +"log-symbols@npm:^1.0.2": + version: 1.0.2 + resolution: "log-symbols@npm:1.0.2" + dependencies: + chalk: "npm:^1.0.0" + checksum: 10c0/c64e1fe41d0d043840f8b592d043b8607a836b846506f525a53d99d578561f02f97b2cba1d2b3c30bae5311d64b308d5a392a9930d252b906a9042fc2877da7a + languageName: node + linkType: hard + +"log-update@npm:^2.3.0": + version: 2.3.0 + resolution: "log-update@npm:2.3.0" + dependencies: + ansi-escapes: "npm:^3.0.0" + cli-cursor: "npm:^2.0.0" + wrap-ansi: "npm:^3.0.1" + checksum: 10c0/9bf21b138801ab4770a2bfa735161cf005b869360eaf5003a84ba64ddc5f5c3ce7217f4f1fa79d9c1f510d792213b2c9800327228e94df05859d19b716215d90 + languageName: node + linkType: hard + +"loupe@npm:^3.1.0, loupe@npm:^3.1.4": + version: 3.2.1 + resolution: "loupe@npm:3.2.1" + checksum: 10c0/910c872cba291309664c2d094368d31a68907b6f5913e989d301b5c25f30e97d76d77f23ab3bf3b46d0f601ff0b6af8810c10c31b91d2c6b2f132809ca2cc705 + languageName: node + linkType: hard + +"lru-cache@npm:^11.0.0, lru-cache@npm:^11.1.0, lru-cache@npm:^11.2.1": + version: 11.2.7 + resolution: "lru-cache@npm:11.2.7" + checksum: 10c0/549cdb59488baa617135fc12159cafb1a97f91079f35093bb3bcad72e849fc64ace636d244212c181dfdf1a99bbfa90757ff303f98561958ee4d0f885d9bd5f7 + languageName: node + linkType: hard + +"magic-string@npm:^0.30.17": + version: 0.30.21 + resolution: "magic-string@npm:0.30.21" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.5" + checksum: 10c0/299378e38f9a270069fc62358522ddfb44e94244baa0d6a8980ab2a9b2490a1d03b236b447eee309e17eb3bddfa482c61259d47960eb018a904f0ded52780c4a + languageName: node + linkType: hard + +"make-fetch-happen@npm:^15.0.0": + version: 15.0.5 + resolution: "make-fetch-happen@npm:15.0.5" + dependencies: + "@gar/promise-retry": "npm:^1.0.0" + "@npmcli/agent": "npm:^4.0.0" + "@npmcli/redact": "npm:^4.0.0" + cacache: "npm:^20.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^5.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^6.0.0" + ssri: "npm:^13.0.0" + checksum: 10c0/527580eb5e5476e6ad07a4e3bd017d13e935f4be815674b442081ae5a721c13d3af5715006619e6be79a85723067e047f83a0c9e699f41d8cec43609a8de4f7b + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mimic-fn@npm:^1.0.0": + version: 1.2.0 + resolution: "mimic-fn@npm:1.2.0" + checksum: 10c0/ad55214aec6094c0af4c0beec1a13787556f8116ed88807cf3f05828500f21f93a9482326bcd5a077ae91e3e8795b4e76b5b4c8bb12237ff0e4043a365516cba + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 + languageName: node + linkType: hard + +"minimatch@npm:^10.2.2": + version: 10.2.5 + resolution: "minimatch@npm:10.2.5" + dependencies: + brace-expansion: "npm:^5.0.5" + checksum: 10c0/6bb058bd6324104b9ec2f763476a35386d05079c1f5fe4fbf1f324a25237cd4534d6813ecd71f48208f4e635c1221899bef94c3c89f7df55698fe373aaae20fd + languageName: node + linkType: hard + +"minimatch@npm:^3.1.1": + version: 3.1.5 + resolution: "minimatch@npm:3.1.5" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/2ecbdc0d33f07bddb0315a8b5afbcb761307a8778b48f0b312418ccbced99f104a2d17d8aca7573433c70e8ccd1c56823a441897a45e384ea76ef401a26ace70 + languageName: node + linkType: hard + +"minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^5.0.0": + version: 5.0.2 + resolution: "minipass-fetch@npm:5.0.2" + dependencies: + iconv-lite: "npm:^0.7.2" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^2.0.0" + minizlib: "npm:^3.0.1" + dependenciesMeta: + iconv-lite: + optional: true + checksum: 10c0/ce4ab9f21cfabaead2097d95dd33f485af8072fbc6b19611bce694965393453a1639d641c2bcf1c48f2ea7d41ea7fab8278373f1d0bee4e63b0a5b2cdd0ef649 + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.7 + resolution: "minipass-flush@npm:1.0.7" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/960915c02aa0991662c37c404517dd93708d17f96533b2ca8c1e776d158715d8107c5ced425ffc61674c167d93607f07f48a83c139ce1057f8781e5dfb4b90c2 + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^2.0.0": + version: 2.0.0 + resolution: "minipass-sized@npm:2.0.0" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/f9201696a6f6d68610d04c9c83e3d2e5cb9c026aae1c8cbf7e17f386105cb79c1bb088dbc21bf0b1eb4f3fb5df384fd1e7aa3bf1f33868c416ae8c8a92679db8 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2, minipass@npm:^7.1.3": + version: 7.1.3 + resolution: "minipass@npm:7.1.3" + checksum: 10c0/539da88daca16533211ea5a9ee98dc62ff5742f531f54640dd34429e621955e91cc280a91a776026264b7f9f6735947629f920944e9c1558369e8bf22eb33fbb + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1, minizlib@npm:^3.1.0": + version: 3.1.0 + resolution: "minizlib@npm:3.1.0" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/5aad75ab0090b8266069c9aabe582c021ae53eb33c6c691054a13a45db3b4f91a7fb1bd79151e6b4e9e9a86727b522527c0a06ec7d45206b745d54cd3097bcec + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.1": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: "npm:^1.2.6" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01 + languageName: node + linkType: hard + +"ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"mute-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "mute-stream@npm:1.0.0" + checksum: 10c0/dce2a9ccda171ec979a3b4f869a102b1343dee35e920146776780de182f16eae459644d187e38d59a3d37adf85685e1c17c38cf7bfda7e39a9880f7a1d10a74c + languageName: node + linkType: hard + +"my-twenty-app@workspace:.": + version: 0.0.0-use.local + resolution: "my-twenty-app@workspace:." + dependencies: + "@types/node": "npm:^24.7.2" + "@types/react": "npm:^19.0.0" + oxlint: "npm:^0.16.0" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" + twenty-client-sdk: "npm:0.8.0-canary.8" + twenty-sdk: "npm:0.8.0-canary.8" + typescript: "npm:^5.9.3" + vite-tsconfig-paths: "npm:^4.2.1" + vitest: "npm:^3.1.1" + languageName: unknown + linkType: soft + +"nanoid@npm:^3.3.11": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b + languageName: node + linkType: hard + +"native-fetch@npm:^4.0.2": + version: 4.0.2 + resolution: "native-fetch@npm:4.0.2" + peerDependencies: + undici: "*" + checksum: 10c0/e3b824721daaa628086d9dcd02e8eb12f0a6c5e13a1d182682bae238d80c9bbf3dfd6314a94692ebe20316aa354476804b4df148201d066b46fc552a5794cfab + languageName: node + linkType: hard + +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.1": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 12.2.0 + resolution: "node-gyp@npm:12.2.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^15.0.0" + nopt: "npm:^9.0.0" + proc-log: "npm:^6.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.5.4" + tinyglobby: "npm:^0.2.12" + which: "npm:^6.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/3ed046746a5a7d90950cd8b0547332b06598443f31fe213ef4332a7174c7b7d259e1704835feda79b87d3f02e59d7791842aac60642ede4396ab25fdf0f8f759 + languageName: node + linkType: hard + +"nopt@npm:^9.0.0": + version: 9.0.0 + resolution: "nopt@npm:9.0.0" + dependencies: + abbrev: "npm:^4.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/1822eb6f9b020ef6f7a7516d7b64a8036e09666ea55ac40416c36e4b2b343122c3cff0e2f085675f53de1d2db99a2a89a60ccea1d120bcd6a5347bf6ceb4a7fd + languageName: node + linkType: hard + +"normalize-path@npm:^2.1.1": + version: 2.1.1 + resolution: "normalize-path@npm:2.1.1" + dependencies: + remove-trailing-separator: "npm:^1.0.1" + checksum: 10c0/db814326ff88057437233361b4c7e9cac7b54815b051b57f2d341ce89b1d8ec8cbd43e7fa95d7652b3b69ea8fcc294b89b8530d556a84d1bdace94229e1e9a8b + languageName: node + linkType: hard + +"number-is-nan@npm:^1.0.0": + version: 1.0.1 + resolution: "number-is-nan@npm:1.0.1" + checksum: 10c0/cb97149006acc5cd512c13c1838223abdf202e76ddfa059c5e8e7507aff2c3a78cd19057516885a2f6f5b576543dc4f7b6f3c997cc7df53ae26c260855466df5 + languageName: node + linkType: hard + +"object-assign@npm:^4.1.0": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.3": + version: 1.13.4 + resolution: "object-inspect@npm:1.13.4" + checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"onetime@npm:^2.0.0": + version: 2.0.1 + resolution: "onetime@npm:2.0.1" + dependencies: + mimic-fn: "npm:^1.0.0" + checksum: 10c0/b4e44a8c34e70e02251bfb578a6e26d6de6eedbed106cd78211d2fd64d28b6281d54924696554e4e966559644243753ac5df73c87f283b0927533d3315696215 + languageName: node + linkType: hard + +"onetime@npm:^5.1.0": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: "npm:^2.1.0" + checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 + languageName: node + linkType: hard + +"oxlint@npm:^0.16.0": + version: 0.16.12 + resolution: "oxlint@npm:0.16.12" + dependencies: + "@oxlint/darwin-arm64": "npm:0.16.12" + "@oxlint/darwin-x64": "npm:0.16.12" + "@oxlint/linux-arm64-gnu": "npm:0.16.12" + "@oxlint/linux-arm64-musl": "npm:0.16.12" + "@oxlint/linux-x64-gnu": "npm:0.16.12" + "@oxlint/linux-x64-musl": "npm:0.16.12" + "@oxlint/win32-arm64": "npm:0.16.12" + "@oxlint/win32-x64": "npm:0.16.12" + dependenciesMeta: + "@oxlint/darwin-arm64": + optional: true + "@oxlint/darwin-x64": + optional: true + "@oxlint/linux-arm64-gnu": + optional: true + "@oxlint/linux-arm64-musl": + optional: true + "@oxlint/linux-x64-gnu": + optional: true + "@oxlint/linux-x64-musl": + optional: true + "@oxlint/win32-arm64": + optional: true + "@oxlint/win32-x64": + optional: true + bin: + oxc_language_server: bin/oxc_language_server + oxlint: bin/oxlint + checksum: 10c0/209c3484039c4f1fdd340689e81be93a70fdf74e8c111731e70d81580d223b0029439107c95fa4118cec3c9b03ba6c56624d3dcb8cdc79af222da3561122b3e7 + languageName: node + linkType: hard + +"p-limit@npm:3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 + languageName: node + linkType: hard + +"p-map@npm:^2.0.0": + version: 2.1.0 + resolution: "p-map@npm:2.1.0" + checksum: 10c0/735dae87badd4737a2dd582b6d8f93e49a1b79eabbc9815a4d63a528d5e3523e978e127a21d784cccb637010e32103a40d2aaa3ab23ae60250b1a820ca752043 + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.4 + resolution: "p-map@npm:7.0.4" + checksum: 10c0/a5030935d3cb2919d7e89454d1ce82141e6f9955413658b8c9403cfe379283770ed3048146b44cde168aa9e8c716505f196d5689db0ae3ce9a71521a2fef3abd + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f + languageName: node + linkType: hard + +"patch-console@npm:^2.0.0": + version: 2.0.0 + resolution: "patch-console@npm:2.0.0" + checksum: 10c0/486602591a0af7af8d4c76d8eea42cad32b6de7200488819c6383c75e43733ca7bdc80e30f2e68ce05f06a1607cce1683a1706c6672ca27dada1921b366e8f1c + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 + languageName: node + linkType: hard + +"path-scurry@npm:^2.0.2": + version: 2.0.2 + resolution: "path-scurry@npm:2.0.2" + dependencies: + lru-cache: "npm:^11.0.0" + minipass: "npm:^7.1.2" + checksum: 10c0/b35ad37cf6557a87fd057121ce2be7695380c9138d93e87ae928609da259ea0a170fac6f3ef1eb3ece8a068e8b7f2f3adf5bb2374cf4d4a57fe484954fcc9482 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + +"pathe@npm:^2.0.3": + version: 2.0.3 + resolution: "pathe@npm:2.0.3" + checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 + languageName: node + linkType: hard + +"pathval@npm:^2.0.0": + version: 2.0.1 + resolution: "pathval@npm:2.0.1" + checksum: 10c0/460f4709479fbf2c45903a65655fc8f0a5f6d808f989173aeef5fdea4ff4f303dc13f7870303999add60ec49d4c14733895c0a869392e9866f1091fa64fd7581 + languageName: node + linkType: hard + +"picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.3.1": + version: 2.3.2 + resolution: "picomatch@npm:2.3.2" + checksum: 10c0/a554d1709e59be97d1acb9eaedbbc700a5c03dbd4579807baed95100b00420bc729335440ef15004ae2378984e2487a7c1cebd743cfdb72b6fa9ab69223c0d61 + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2, picomatch@npm:^4.0.3": + version: 4.0.4 + resolution: "picomatch@npm:4.0.4" + checksum: 10c0/e2c6023372cc7b5764719a5ffb9da0f8e781212fa7ca4bd0562db929df8e117460f00dff3cb7509dacfc06b86de924b247f504d0ce1806a37fac4633081466b0 + languageName: node + linkType: hard + +"postcss@npm:^8.5.6": + version: 8.5.8 + resolution: "postcss@npm:8.5.8" + dependencies: + nanoid: "npm:^3.3.11" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/dd918f7127ee7c60a0295bae2e72b3787892296e1d1c3c564d7a2a00c68d8df83cadc3178491259daa19ccc54804fb71ed8c937c6787e08d8bd4bedf8d17044c + languageName: node + linkType: hard + +"preact@npm:^10.28.3": + version: 10.29.1 + resolution: "preact@npm:10.29.1" + checksum: 10c0/55da3994d0d9ebcc26476552c6571f8be1150cccdafe842aad40eff9abc84c867555f6d01db386fc63ac4cbe9f9da245002468bb24df0642365162d8f1b545e2 + languageName: node + linkType: hard + +"prettier@npm:^2.8.0": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: 10c0/463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a + languageName: node + linkType: hard + +"proc-log@npm:^6.0.0": + version: 6.1.0 + resolution: "proc-log@npm:6.1.0" + checksum: 10c0/4f178d4062733ead9d71a9b1ab24ebcecdfe2250916a5b1555f04fe2eda972a0ec76fbaa8df1ad9c02707add6749219d118a4fc46dc56bdfe4dde4b47d80bb82 + languageName: node + linkType: hard + +"proxy-from-env@npm:^2.1.0": + version: 2.1.0 + resolution: "proxy-from-env@npm:2.1.0" + checksum: 10c0/ed01729fd4d094eab619cd7e17ce3698b3413b31eb102c4904f9875e677cd207392795d5b4adee9cec359dfd31c44d5ad7595a3a3ad51c40250e141512281c58 + languageName: node + linkType: hard + +"qs@npm:^6.11.0": + version: 6.15.0 + resolution: "qs@npm:6.15.0" + dependencies: + side-channel: "npm:^1.1.0" + checksum: 10c0/ff341078a78a991d8a48b4524d52949211447b4b1ad907f489cac0770cbc346a28e47304455c0320e5fb000f8762d64b03331e3b71865f663bf351bcba8cdb4b + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"react-dom@npm:^19.0.0": + version: 19.2.4 + resolution: "react-dom@npm:19.2.4" + dependencies: + scheduler: "npm:^0.27.0" + peerDependencies: + react: ^19.2.4 + checksum: 10c0/f0c63f1794dedb154136d4d0f59af00b41907f4859571c155940296808f4b94bf9c0c20633db75b5b2112ec13d8d7dd4f9bf57362ed48782f317b11d05a44f35 + languageName: node + linkType: hard + +"react-reconciler@npm:^0.33.0": + version: 0.33.0 + resolution: "react-reconciler@npm:0.33.0" + dependencies: + scheduler: "npm:^0.27.0" + peerDependencies: + react: ^19.2.0 + checksum: 10c0/3f7b27ea8d0ff4c8bf0e402a285e1af9b7d0e6f4c1a70a28f4384938bc1130bc82a90a31df0b79ef5e380e2e55e2598bd90b4dbf802b1203d735ba0355817d3a + languageName: node + linkType: hard + +"react@npm:^19.0.0": + version: 19.2.4 + resolution: "react@npm:19.2.4" + checksum: 10c0/cd2c9ff67a720799cc3b38a516009986f7fc4cb8d3e15716c6211cf098d1357ee3e348ab05ad0600042bbb0fd888530ba92e329198c92eafa0994f5213396596 + languageName: node + linkType: hard + +"readdirp@npm:^4.0.1": + version: 4.1.2 + resolution: "readdirp@npm:4.1.2" + checksum: 10c0/60a14f7619dec48c9c850255cd523e2717001b0e179dc7037cfa0895da7b9e9ab07532d324bfb118d73a710887d1e35f79c495fa91582784493e085d18c72c62 + languageName: node + linkType: hard + +"remove-trailing-separator@npm:^1.0.1": + version: 1.1.0 + resolution: "remove-trailing-separator@npm:1.1.0" + checksum: 10c0/3568f9f8f5af3737b4aee9e6e1e8ec4be65a92da9cb27f989e0893714d50aa95ed2ff02d40d1fa35e1b1a234dc9c2437050ef356704a3999feaca6667d9e9bfc + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + +"require-main-filename@npm:^2.0.0": + version: 2.0.0 + resolution: "require-main-filename@npm:2.0.0" + checksum: 10c0/db91467d9ead311b4111cbd73a4e67fa7820daed2989a32f7023785a2659008c6d119752d9c4ac011ae07e537eb86523adff99804c5fdb39cd3a017f9b401bb6 + languageName: node + linkType: hard + +"resolve-from@npm:5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + +"restore-cursor@npm:^2.0.0": + version: 2.0.0 + resolution: "restore-cursor@npm:2.0.0" + dependencies: + onetime: "npm:^2.0.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/f5b335bee06f440445e976a7031a3ef53691f9b7c4a9d42a469a0edaf8a5508158a0d561ff2b26a1f4f38783bcca2c0e5c3a44f927326f6694d5b44d7a4993e6 + languageName: node + linkType: hard + +"restore-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "restore-cursor@npm:4.0.0" + dependencies: + onetime: "npm:^5.1.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/6f7da8c5e422ac26aa38354870b1afac09963572cf2879443540449068cb43476e9cbccf6f8de3e0171e0d6f7f533c2bc1a0a008003c9a525bbc098e89041318 + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa + languageName: node + linkType: hard + +"rimraf@npm:^2.6.3": + version: 2.7.1 + resolution: "rimraf@npm:2.7.1" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: ./bin.js + checksum: 10c0/4eef73d406c6940927479a3a9dee551e14a54faf54b31ef861250ac815172bade86cc6f7d64a4dc5e98b65e4b18a2e1c9ff3b68d296be0c748413f092bb0dd40 + languageName: node + linkType: hard + +"rollup@npm:^4.43.0": + version: 4.60.1 + resolution: "rollup@npm:4.60.1" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.60.1" + "@rollup/rollup-android-arm64": "npm:4.60.1" + "@rollup/rollup-darwin-arm64": "npm:4.60.1" + "@rollup/rollup-darwin-x64": "npm:4.60.1" + "@rollup/rollup-freebsd-arm64": "npm:4.60.1" + "@rollup/rollup-freebsd-x64": "npm:4.60.1" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.60.1" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.60.1" + "@rollup/rollup-linux-arm64-gnu": "npm:4.60.1" + "@rollup/rollup-linux-arm64-musl": "npm:4.60.1" + "@rollup/rollup-linux-loong64-gnu": "npm:4.60.1" + "@rollup/rollup-linux-loong64-musl": "npm:4.60.1" + "@rollup/rollup-linux-ppc64-gnu": "npm:4.60.1" + "@rollup/rollup-linux-ppc64-musl": "npm:4.60.1" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.60.1" + "@rollup/rollup-linux-riscv64-musl": "npm:4.60.1" + "@rollup/rollup-linux-s390x-gnu": "npm:4.60.1" + "@rollup/rollup-linux-x64-gnu": "npm:4.60.1" + "@rollup/rollup-linux-x64-musl": "npm:4.60.1" + "@rollup/rollup-openbsd-x64": "npm:4.60.1" + "@rollup/rollup-openharmony-arm64": "npm:4.60.1" + "@rollup/rollup-win32-arm64-msvc": "npm:4.60.1" + "@rollup/rollup-win32-ia32-msvc": "npm:4.60.1" + "@rollup/rollup-win32-x64-gnu": "npm:4.60.1" + "@rollup/rollup-win32-x64-msvc": "npm:4.60.1" + "@types/estree": "npm:1.0.8" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loong64-gnu": + optional: true + "@rollup/rollup-linux-loong64-musl": + optional: true + "@rollup/rollup-linux-ppc64-gnu": + optional: true + "@rollup/rollup-linux-ppc64-musl": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-openbsd-x64": + optional: true + "@rollup/rollup-openharmony-arm64": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-gnu": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/48d3f2216b5533639b007e6756e2275c7f594e45adee21ce03674aa2e004406c661f8b86c7a0b471c9e889c6a9efbb29240ca0b7673c50e391406c490c309833 + languageName: node + linkType: hard + +"run-async@npm:^3.0.0": + version: 3.0.0 + resolution: "run-async@npm:3.0.0" + checksum: 10c0/b18b562ae37c3020083dcaae29642e4cc360c824fbfb6b7d50d809a9d5227bb986152d09310255842c8dce40526e82ca768f02f00806c91ba92a8dfa6159cb85 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"rxjs@npm:^6.3.3": + version: 6.6.7 + resolution: "rxjs@npm:6.6.7" + dependencies: + tslib: "npm:^1.9.0" + checksum: 10c0/e556a13a9aa89395e5c9d825eabcfa325568d9c9990af720f3f29f04a888a3b854f25845c2b55875d875381abcae2d8100af9cacdc57576e7ed6be030a01d2fe + languageName: node + linkType: hard + +"rxjs@npm:^7.8.1": + version: 7.8.2 + resolution: "rxjs@npm:7.8.2" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/1fcd33d2066ada98ba8f21fcbbcaee9f0b271de1d38dc7f4e256bfbc6ffcdde68c8bfb69093de7eeb46f24b1fb820620bf0223706cff26b4ab99a7ff7b2e2c45 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"scheduler@npm:^0.27.0": + version: 0.27.0 + resolution: "scheduler@npm:0.27.0" + checksum: 10c0/4f03048cb05a3c8fddc45813052251eca00688f413a3cee236d984a161da28db28ba71bd11e7a3dd02f7af84ab28d39fb311431d3b3772fed557945beb00c452 + languageName: node + linkType: hard + +"semver@npm:^7.3.5": + version: 7.7.4 + resolution: "semver@npm:7.7.4" + bin: + semver: bin/semver.js + checksum: 10c0/5215ad0234e2845d4ea5bb9d836d42b03499546ddafb12075566899fc617f68794bb6f146076b6881d755de17d6c6cc73372555879ec7dce2c2feee947866ad2 + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 + languageName: node + linkType: hard + +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 + languageName: node + linkType: hard + +"side-channel@npm:^1.1.0": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + side-channel-list: "npm:^1.0.0" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 + languageName: node + linkType: hard + +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 + languageName: node + linkType: hard + +"signal-exit@npm:^4.1.0": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b + languageName: node + linkType: hard + +"slice-ansi@npm:0.0.4": + version: 0.0.4 + resolution: "slice-ansi@npm:0.0.4" + checksum: 10c0/997d4cc73e34aa8c0f60bdb71701b16c062cc4acd7a95e3b10e8c05d790eb5e735d9b470270dc6f443b1ba21492db7ceb849d5c93011d1256061bf7ed7216c7a + languageName: node + linkType: hard + +"slice-ansi@npm:^8.0.0": + version: 8.0.0 + resolution: "slice-ansi@npm:8.0.0" + dependencies: + ansi-styles: "npm:^6.2.3" + is-fullwidth-code-point: "npm:^5.1.0" + checksum: 10c0/0ce4aa91febb7cea4a00c2c27bb820fa53b6d2862ce0f80f7120134719f7914fc416b0ed966cf35250a3169e152916392f35917a2d7cad0fcc5d8b841010fa9a + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.7 + resolution: "socks@npm:2.8.7" + dependencies: + ip-address: "npm:^10.0.1" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/2805a43a1c4bcf9ebf6e018268d87b32b32b06fbbc1f9282573583acc155860dc361500f89c73bfbb157caa1b4ac78059eac0ef15d1811eb0ca75e0bdadbc9d2 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"ssri@npm:^13.0.0": + version: 13.0.1 + resolution: "ssri@npm:13.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/cf6408a18676c57ff2ed06b8a20dc64bb3e748e5c7e095332e6aecaa2b8422b1e94a739a8453bf65156a8a47afe23757ba4ab52d3ea3b62322dc40875763e17a + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.6": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: "npm:^2.0.0" + checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a + languageName: node + linkType: hard + +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 + languageName: node + linkType: hard + +"std-env@npm:^3.9.0": + version: 3.10.0 + resolution: "std-env@npm:3.10.0" + checksum: 10c0/1814927a45004d36dde6707eaf17552a546769bc79a6421be2c16ce77d238158dfe5de30910b78ec30d95135cc1c59ea73ee22d2ca170f8b9753f84da34c427f + languageName: node + linkType: hard + +"string-width@npm:^1.0.1": + version: 1.0.2 + resolution: "string-width@npm:1.0.2" + dependencies: + code-point-at: "npm:^1.0.0" + is-fullwidth-code-point: "npm:^1.0.0" + strip-ansi: "npm:^3.0.0" + checksum: 10c0/c558438baed23a9ab9370bb6a939acbdb2b2ffc517838d651aad0f5b2b674fb85d460d9b1d0b6a4c210dffd09e3235222d89a5bd4c0c1587f78b2bb7bc00c65e + languageName: node + linkType: hard + +"string-width@npm:^2.1.1": + version: 2.1.1 + resolution: "string-width@npm:2.1.1" + dependencies: + is-fullwidth-code-point: "npm:^2.0.0" + strip-ansi: "npm:^4.0.0" + checksum: 10c0/e5f2b169fcf8a4257a399f95d069522f056e92ec97dbdcb9b0cdf14d688b7ca0b1b1439a1c7b9773cd79446cbafd582727279d6bfdd9f8edd306ea5e90e5b610 + languageName: node + linkType: hard + +"string-width@npm:^4.1.0, string-width@npm:^4.2.0": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^7.0.0": + version: 7.2.0 + resolution: "string-width@npm:7.2.0" + dependencies: + emoji-regex: "npm:^10.3.0" + get-east-asian-width: "npm:^1.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10c0/eb0430dd43f3199c7a46dcbf7a0b34539c76fe3aa62763d0b0655acdcbdf360b3f66f3d58ca25ba0205f42ea3491fa00f09426d3b7d3040e506878fc7664c9b9 + languageName: node + linkType: hard + +"string-width@npm:^8.1.0, string-width@npm:^8.1.1, string-width@npm:^8.2.0": + version: 8.2.0 + resolution: "string-width@npm:8.2.0" + dependencies: + get-east-asian-width: "npm:^1.5.0" + strip-ansi: "npm:^7.1.2" + checksum: 10c0/d8915428b43519b0f494da6590dbe4491857d8a12e40250e50fc01fbb616ffd8400a436bbe25712255ee129511fe0414c49d3b6b9627e2bc3a33dcec1d2eda02 + languageName: node + linkType: hard + +"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": + version: 3.0.1 + resolution: "strip-ansi@npm:3.0.1" + dependencies: + ansi-regex: "npm:^2.0.0" + checksum: 10c0/f6e7fbe8e700105dccf7102eae20e4f03477537c74b286fd22cfc970f139002ed6f0d9c10d0e21aa9ed9245e0fa3c9275930e8795c5b947da136e4ecb644a70f + languageName: node + linkType: hard + +"strip-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-ansi@npm:4.0.0" + dependencies: + ansi-regex: "npm:^3.0.0" + checksum: 10c0/d75d9681e0637ea316ddbd7d4d3be010b1895a17e885155e0ed6a39755ae0fd7ef46e14b22162e66a62db122d3a98ab7917794e255532ab461bb0a04feb03e7d + languageName: node + linkType: hard + +"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.1.0, strip-ansi@npm:^7.1.2": + version: 7.2.0 + resolution: "strip-ansi@npm:7.2.0" + dependencies: + ansi-regex: "npm:^6.2.2" + checksum: 10c0/544d13b7582f8254811ea97db202f519e189e59d35740c46095897e254e4f1aa9fe1524a83ad6bc5ad67d4dd6c0281d2e0219ed62b880a6238a16a17d375f221 + languageName: node + linkType: hard + +"strip-literal@npm:^3.0.0": + version: 3.1.0 + resolution: "strip-literal@npm:3.1.0" + dependencies: + js-tokens: "npm:^9.0.1" + checksum: 10c0/50918f669915d9ad0fe4b7599902b735f853f2201c97791ead00104a654259c0c61bc2bc8fa3db05109339b61f4cf09e47b94ecc874ffbd0e013965223893af8 + languageName: node + linkType: hard + +"subscriptions-transport-ws@npm:^0.9.16": + version: 0.9.19 + resolution: "subscriptions-transport-ws@npm:0.9.19" + dependencies: + backo2: "npm:^1.0.2" + eventemitter3: "npm:^3.1.0" + iterall: "npm:^1.2.1" + symbol-observable: "npm:^1.0.4" + ws: "npm:^5.2.0 || ^6.0.0 || ^7.0.0" + peerDependencies: + graphql: ">=0.10.0" + checksum: 10c0/6f2ade56865f0ba291d3ff82c79781b051c2374873bac853286fedfdbc05001b8c4018ab7cba44af667ead7f573e48d18892d58a8f9ca8d90dfb4bff5c125045 + languageName: node + linkType: hard + +"supports-color@npm:^2.0.0": + version: 2.0.0 + resolution: "supports-color@npm:2.0.0" + checksum: 10c0/570e0b63be36cccdd25186350a6cb2eaad332a95ff162fa06d9499982315f2fe4217e69dd98e862fbcd9c81eaff300a825a1fe7bf5cc752e5b84dfed042b0dda + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"symbol-observable@npm:^1.0.4, symbol-observable@npm:^1.1.0": + version: 1.2.0 + resolution: "symbol-observable@npm:1.2.0" + checksum: 10c0/009fee50798ef80ed4b8195048288f108b03de162db07493f2e1fd993b33fafa72d659e832b584da5a2427daa78e5a738fb2a9ab027ee9454252e0bedbcd1fdc + languageName: node + linkType: hard + +"tagged-tag@npm:^1.0.0": + version: 1.0.0 + resolution: "tagged-tag@npm:1.0.0" + checksum: 10c0/91d25c9ffb86a91f20522cefb2cbec9b64caa1febe27ad0df52f08993ff60888022d771e868e6416cf2e72dab68449d2139e8709ba009b74c6c7ecd4000048d1 + languageName: node + linkType: hard + +"tar@npm:^7.5.4": + version: 7.5.13 + resolution: "tar@npm:7.5.13" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.1.0" + yallist: "npm:^5.0.0" + checksum: 10c0/5c65b8084799bde7a791593a1c1a45d3d6ee98182e3700b24c247b7b8f8654df4191642abbdb07ff25043d45dcff35620827c3997b88ae6c12040f64bed5076b + languageName: node + linkType: hard + +"terminal-size@npm:^4.0.1": + version: 4.0.1 + resolution: "terminal-size@npm:4.0.1" + checksum: 10c0/89afd9d816dd9dbfe4499da9aeea70491bbde4ff4592226a9c8ac71074a7580afead6a78e95ecc35f6d42e09087b55ffcb1019302cd55e0cc957b6ce5c4847e8 + languageName: node + linkType: hard + +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c + languageName: node + linkType: hard + +"tinyexec@npm:^0.3.2": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.14, tinyglobby@npm:^0.2.15": + version: 0.2.15 + resolution: "tinyglobby@npm:0.2.15" + dependencies: + fdir: "npm:^6.5.0" + picomatch: "npm:^4.0.3" + checksum: 10c0/869c31490d0d88eedb8305d178d4c75e7463e820df5a9b9d388291daf93e8b1eb5de1dad1c1e139767e4269fe75f3b10d5009b2cc14db96ff98986920a186844 + languageName: node + linkType: hard + +"tinypool@npm:^1.1.1": + version: 1.1.1 + resolution: "tinypool@npm:1.1.1" + checksum: 10c0/bf26727d01443061b04fa863f571016950888ea994ba0cd8cba3a1c51e2458d84574341ab8dbc3664f1c3ab20885c8cf9ff1cc4b18201f04c2cde7d317fff69b + languageName: node + linkType: hard + +"tinyrainbow@npm:^2.0.0": + version: 2.0.0 + resolution: "tinyrainbow@npm:2.0.0" + checksum: 10c0/c83c52bef4e0ae7fb8ec6a722f70b5b6fa8d8be1c85792e829f56c0e1be94ab70b293c032dc5048d4d37cfe678f1f5babb04bdc65fd123098800148ca989184f + languageName: node + linkType: hard + +"tinyspy@npm:^4.0.3": + version: 4.0.4 + resolution: "tinyspy@npm:4.0.4" + checksum: 10c0/a8020fc17799251e06a8398dcc352601d2770aa91c556b9531ecd7a12581161fd1c14e81cbdaff0c1306c93bfdde8ff6d1c1a3f9bbe6d91604f0fd4e01e2f1eb + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: "npm:~1.0.2" + checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 + languageName: node + linkType: hard + +"tsconfck@npm:^3.0.3": + version: 3.1.6 + resolution: "tsconfck@npm:3.1.6" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + bin: + tsconfck: bin/tsconfck.js + checksum: 10c0/269c3c513540be44844117bb9b9258fe6f8aeab026d32aeebf458d5299125f330711429dbb556dbf125a0bc25f4a81e6c24ac96de2740badd295c3fb400f66c4 + languageName: node + linkType: hard + +"tslib@npm:^1.9.0, tslib@npm:^1.9.3": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 + languageName: node + linkType: hard + +"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.4.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + +"twenty-client-sdk@npm:0.8.0-canary.8": + version: 0.8.0-canary.8 + resolution: "twenty-client-sdk@npm:0.8.0-canary.8" + dependencies: + "@genql/cli": "npm:^3.0.3" + "@genql/runtime": "npm:^2.10.0" + esbuild: "npm:^0.25.0" + graphql: "npm:^16.8.1" + checksum: 10c0/acb5bf952a9729811235a3474ccb4db82630c53a2caed03176bfb4f442576ee2ef7e625886f63714e2534f7ec83b03d83e4c0b1170a0eb816c531acfc2c98010 + languageName: node + linkType: hard + +"twenty-sdk@npm:0.8.0-canary.8": + version: 0.8.0-canary.8 + resolution: "twenty-sdk@npm:0.8.0-canary.8" + dependencies: + "@genql/cli": "npm:^3.0.3" + "@genql/runtime": "npm:^2.10.0" + "@sniptt/guards": "npm:^0.2.0" + axios: "npm:^1.13.5" + chalk: "npm:^5.3.0" + chokidar: "npm:^4.0.0" + commander: "npm:^12.0.0" + dotenv: "npm:^16.4.0" + esbuild: "npm:^0.25.0" + graphql: "npm:^16.8.1" + graphql-sse: "npm:^2.5.4" + ink: "npm:^6.8.0" + inquirer: "npm:^10.0.0" + jsonc-parser: "npm:^3.2.0" + preact: "npm:^10.28.3" + react: "npm:^19.0.0" + react-dom: "npm:^19.0.0" + tinyglobby: "npm:^0.2.15" + twenty-client-sdk: "npm:0.8.0-canary.8" + typescript: "npm:^5.9.2" + uuid: "npm:^13.0.0" + vite: "npm:^7.0.0" + vite-tsconfig-paths: "npm:^4.2.1" + zod: "npm:^4.1.11" + bin: + twenty: dist/cli.cjs + checksum: 10c0/a22cf071f41c19d769e68a995912a0bda0f087bd9a295534bf9e545544f6dfc84f284a477f9011fc135f2a44de9372b977a66de06454e760822119e76921ea69 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 + languageName: node + linkType: hard + +"type-fest@npm:^5.4.1": + version: 5.5.0 + resolution: "type-fest@npm:5.5.0" + dependencies: + tagged-tag: "npm:^1.0.0" + checksum: 10c0/60bf79a8df45abf99490e3204eceb5cf7f915413f8a69fb578c75cab37ddcb7d29ee21f185f0e1617323ac0b2a441e001b8dc691e220d0b087e9c29ea205538c + languageName: node + linkType: hard + +"typescript@npm:^5.9.2, typescript@npm:^5.9.3": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.9.2#optional!builtin, typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 + languageName: node + linkType: hard + +"undici-types@npm:~6.21.0": + version: 6.21.0 + resolution: "undici-types@npm:6.21.0" + checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 + languageName: node + linkType: hard + +"undici-types@npm:~7.16.0": + version: 7.16.0 + resolution: "undici-types@npm:7.16.0" + checksum: 10c0/3033e2f2b5c9f1504bdc5934646cb54e37ecaca0f9249c983f7b1fc2e87c6d18399ebb05dc7fd5419e02b2e915f734d872a65da2e3eeed1813951c427d33cc9a + languageName: node + linkType: hard + +"undici-types@npm:~7.18.0": + version: 7.18.2 + resolution: "undici-types@npm:7.18.2" + checksum: 10c0/85a79189113a238959d7a647368e4f7c5559c3a404ebdb8fc4488145ce9426fcd82252a844a302798dfc0e37e6fb178ff481ed03bc4caf634c5757d9ef43521d + languageName: node + linkType: hard + +"undici@npm:^5.18.0": + version: 5.29.0 + resolution: "undici@npm:5.29.0" + dependencies: + "@fastify/busboy": "npm:^2.0.0" + checksum: 10c0/e4e4d631ca54ee0ad82d2e90e7798fa00a106e27e6c880687e445cc2f13b4bc87c5eba2a88c266c3eecffb18f26e227b778412da74a23acc374fca7caccec49b + languageName: node + linkType: hard + +"unfetch@npm:^4.2.0": + version: 4.2.0 + resolution: "unfetch@npm:4.2.0" + checksum: 10c0/a5c0a896a6f09f278b868075aea65652ad185db30e827cb7df45826fe5ab850124bf9c44c4dafca4bf0c55a0844b17031e8243467fcc38dd7a7d435007151f1b + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a + languageName: node + linkType: hard + +"unixify@npm:^1.0.0": + version: 1.0.0 + resolution: "unixify@npm:1.0.0" + dependencies: + normalize-path: "npm:^2.1.1" + checksum: 10c0/8b89100619ebde9f0ab4024a4d402316fb7b1d4853723410fc828944e8d3d01480f210cddf94d9a1699559f8180d861eb6323da8011b7bcc1bbaf6a11a5b1f1e + languageName: node + linkType: hard + +"utility-types@npm:^3.10.0": + version: 3.11.0 + resolution: "utility-types@npm:3.11.0" + checksum: 10c0/2f1580137b0c3e6cf5405f37aaa8f5249961a76d26f1ca8efc0ff49a2fc0e0b2db56de8e521a174d075758e0c7eb3e590edec0832eb44478b958f09914920f19 + languageName: node + linkType: hard + +"uuid@npm:^13.0.0": + version: 13.0.0 + resolution: "uuid@npm:13.0.0" + bin: + uuid: dist-node/bin/uuid + checksum: 10c0/950e4c18d57fef6c69675344f5700a08af21e26b9eff2bf2180427564297368c538ea11ac9fb2e6528b17fc3966a9fd2c5049361b0b63c7d654f3c550c9b3d67 + languageName: node + linkType: hard + +"value-or-promise@npm:^1.0.12": + version: 1.0.12 + resolution: "value-or-promise@npm:1.0.12" + checksum: 10c0/b75657b74e4d17552bd88e0c2857020fbab34a4d091dc058db18c470e7da0336067e72c130b3358e3321ac0a6ff11c0b92b67a382318a3705ad5d57de7ff3262 + languageName: node + linkType: hard + +"vite-node@npm:3.2.4": + version: 3.2.4 + resolution: "vite-node@npm:3.2.4" + dependencies: + cac: "npm:^6.7.14" + debug: "npm:^4.4.1" + es-module-lexer: "npm:^1.7.0" + pathe: "npm:^2.0.3" + vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" + bin: + vite-node: vite-node.mjs + checksum: 10c0/6ceca67c002f8ef6397d58b9539f80f2b5d79e103a18367288b3f00a8ab55affa3d711d86d9112fce5a7fa658a212a087a005a045eb8f4758947dd99af2a6c6b + languageName: node + linkType: hard + +"vite-tsconfig-paths@npm:^4.2.1": + version: 4.3.2 + resolution: "vite-tsconfig-paths@npm:4.3.2" + dependencies: + debug: "npm:^4.1.1" + globrex: "npm:^0.1.2" + tsconfck: "npm:^3.0.3" + peerDependencies: + vite: "*" + peerDependenciesMeta: + vite: + optional: true + checksum: 10c0/f390ac1d1c3992fc5ac50f9274c1090f8b55ab34a89ea88893db9a6924a3b26c9f64bc1163615150ad100749db73b6b2cf1d57f6cd60df6e762ceb5b8ad30024 + languageName: node + linkType: hard + +"vite@npm:^5.0.0 || ^6.0.0 || ^7.0.0-0, vite@npm:^7.0.0": + version: 7.3.1 + resolution: "vite@npm:7.3.1" + dependencies: + esbuild: "npm:^0.27.0" + fdir: "npm:^6.5.0" + fsevents: "npm:~2.3.3" + picomatch: "npm:^4.0.3" + postcss: "npm:^8.5.6" + rollup: "npm:^4.43.0" + tinyglobby: "npm:^0.2.15" + peerDependencies: + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/5c7548f5f43a23533e53324304db4ad85f1896b1bfd3ee32ae9b866bac2933782c77b350eb2b52a02c625c8ad1ddd4c000df077419410650c982cd97fde8d014 + languageName: node + linkType: hard + +"vitest@npm:^3.1.1": + version: 3.2.4 + resolution: "vitest@npm:3.2.4" + dependencies: + "@types/chai": "npm:^5.2.2" + "@vitest/expect": "npm:3.2.4" + "@vitest/mocker": "npm:3.2.4" + "@vitest/pretty-format": "npm:^3.2.4" + "@vitest/runner": "npm:3.2.4" + "@vitest/snapshot": "npm:3.2.4" + "@vitest/spy": "npm:3.2.4" + "@vitest/utils": "npm:3.2.4" + chai: "npm:^5.2.0" + debug: "npm:^4.4.1" + expect-type: "npm:^1.2.1" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + picomatch: "npm:^4.0.2" + std-env: "npm:^3.9.0" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^0.3.2" + tinyglobby: "npm:^0.2.14" + tinypool: "npm:^1.1.1" + tinyrainbow: "npm:^2.0.0" + vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" + vite-node: "npm:3.2.4" + why-is-node-running: "npm:^2.3.0" + peerDependencies: + "@edge-runtime/vm": "*" + "@types/debug": ^4.1.12 + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + "@vitest/browser": 3.2.4 + "@vitest/ui": 3.2.4 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/debug": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 10c0/5bf53ede3ae6a0e08956d72dab279ae90503f6b5a05298a6a5e6ef47d2fd1ab386aaf48fafa61ed07a0ebfe9e371772f1ccbe5c258dd765206a8218bf2eb79eb + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + +"which-module@npm:^2.0.0": + version: 2.0.1 + resolution: "which-module@npm:2.0.1" + checksum: 10c0/087038e7992649eaffa6c7a4f3158d5b53b14cf5b6c1f0e043dccfacb1ba179d12f17545d5b85ebd94a42ce280a6fe65d0cbcab70f4fc6daad1dfae85e0e6a3e + languageName: node + linkType: hard + +"which@npm:^6.0.0": + version: 6.0.1 + resolution: "which@npm:6.0.1" + dependencies: + isexe: "npm:^4.0.0" + bin: + node-which: bin/which.js + checksum: 10c0/7e710e54ea36d2d6183bee2f9caa27a3b47b9baf8dee55a199b736fcf85eab3b9df7556fca3d02b50af7f3dfba5ea3a45644189836df06267df457e354da66d5 + languageName: node + linkType: hard + +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 + languageName: node + linkType: hard + +"widest-line@npm:^6.0.0": + version: 6.0.0 + resolution: "widest-line@npm:6.0.0" + dependencies: + string-width: "npm:^8.1.0" + checksum: 10c0/735f1fdcd97fe765a07bb8b5e73c020bed8e53ab34e83ce0ef01693ba3c914d9e7977fe5f5facf0d0b670297a82dd5e376d3efa0896860dfcdaf7cd6924c0fb7 + languageName: node + linkType: hard + +"wrap-ansi@npm:^3.0.1": + version: 3.0.1 + resolution: "wrap-ansi@npm:3.0.1" + dependencies: + string-width: "npm:^2.1.1" + strip-ansi: "npm:^4.0.0" + checksum: 10c0/ad6fed8f242c26755badaf452da154122d0d862f8b7aab56e758466857f230efafdc5fbffca026650b947ac3fc0eb563df5c05b9e2190a52a4a68f4eef3d4555 + languageName: node + linkType: hard + +"wrap-ansi@npm:^6.2.0": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c + languageName: node + linkType: hard + +"wrap-ansi@npm:^9.0.0": + version: 9.0.2 + resolution: "wrap-ansi@npm:9.0.2" + dependencies: + ansi-styles: "npm:^6.2.1" + string-width: "npm:^7.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10c0/3305839b9a0d6fb930cb63a52f34d3936013d8b0682ff3ec133c9826512620f213800ffa19ea22904876d5b7e9a3c1f40682f03597d986a4ca881fa7b033688c + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"ws@npm:^5.2.0 || ^6.0.0 || ^7.0.0": + version: 7.5.10 + resolution: "ws@npm:7.5.10" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/bd7d5f4aaf04fae7960c23dcb6c6375d525e00f795dd20b9385902bd008c40a94d3db3ce97d878acc7573df852056ca546328b27b39f47609f80fb22a0a9b61d + languageName: node + linkType: hard + +"ws@npm:^6.1.4": + version: 6.2.3 + resolution: "ws@npm:6.2.3" + dependencies: + async-limiter: "npm:~1.0.0" + checksum: 10c0/56a35b9799993cea7ce2260197e7879f21bbbb194a967f31acbbda6f7f46ecda4365951966fb062044c95197e19fb2f053be6f65c172435455186835f494de41 + languageName: node + linkType: hard + +"ws@npm:^8.18.0": + version: 8.20.0 + resolution: "ws@npm:8.20.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/956ac5f11738c914089b65878b9223692ace77337ba55379ae68e1ecbeae9b47a0c6eb9403688f609999a58c80d83d99865fe0029b229d308b08c1ef93d4ea14 + languageName: node + linkType: hard + +"y18n@npm:^4.0.0": + version: 4.0.3 + resolution: "y18n@npm:4.0.3" + checksum: 10c0/308a2efd7cc296ab2c0f3b9284fd4827be01cfeb647b3ba18230e3a416eb1bc887ac050de9f8c4fd9e7856b2e8246e05d190b53c96c5ad8d8cb56dffb6f81024 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + +"yargs-parser@npm:^18.1.2": + version: 18.1.3 + resolution: "yargs-parser@npm:18.1.3" + dependencies: + camelcase: "npm:^5.0.0" + decamelize: "npm:^1.2.0" + checksum: 10c0/25df918833592a83f52e7e4f91ba7d7bfaa2b891ebf7fe901923c2ee797534f23a176913ff6ff7ebbc1cc1725a044cc6a6539fed8bfd4e13b5b16376875f9499 + languageName: node + linkType: hard + +"yargs@npm:^15.3.1": + version: 15.4.1 + resolution: "yargs@npm:15.4.1" + dependencies: + cliui: "npm:^6.0.0" + decamelize: "npm:^1.2.0" + find-up: "npm:^4.1.0" + get-caller-file: "npm:^2.0.1" + require-directory: "npm:^2.1.1" + require-main-filename: "npm:^2.0.0" + set-blocking: "npm:^2.0.0" + string-width: "npm:^4.2.0" + which-module: "npm:^2.0.0" + y18n: "npm:^4.0.0" + yargs-parser: "npm:^18.1.2" + checksum: 10c0/f1ca680c974333a5822732825cca7e95306c5a1e7750eb7b973ce6dc4f97a6b0a8837203c8b194f461969bfe1fb1176d1d423036635285f6010b392fa498ab2d + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard + +"yoctocolors-cjs@npm:^2.1.2": + version: 2.1.3 + resolution: "yoctocolors-cjs@npm:2.1.3" + checksum: 10c0/584168ef98eb5d913473a4858dce128803c4a6cd87c0f09e954fa01126a59a33ab9e513b633ad9ab953786ed16efdd8c8700097a51635aafaeed3fef7712fa79 + languageName: node + linkType: hard + +"yoga-layout@npm:~3.2.1": + version: 3.2.1 + resolution: "yoga-layout@npm:3.2.1" + checksum: 10c0/9001e51be993c85e03757e5a04a2b61b8b30c9e5a7865d0156ca87a6431a3b717d51eb4990bfe588189fcfeac688dd9c3de707bbd50d1c344a84e63974cc54a8 + languageName: node + linkType: hard + +"zen-observable-ts@npm:^0.8.21": + version: 0.8.21 + resolution: "zen-observable-ts@npm:0.8.21" + dependencies: + tslib: "npm:^1.9.3" + zen-observable: "npm:^0.8.0" + checksum: 10c0/fe4a02f862b5f7e8ae0f86230c37b84c7d5611f5c206981afb4043e732d04cf7067a6cbe1ba82d20f18b735a3387937195a12542158a631d308ae3959a1d93c4 + languageName: node + linkType: hard + +"zen-observable@npm:^0.8.0": + version: 0.8.15 + resolution: "zen-observable@npm:0.8.15" + checksum: 10c0/71cc2f2bbb537300c3f569e25693d37b3bc91f225cefce251a71c30bc6bb3e7f8e9420ca0eb57f2ac9e492b085b8dfa075fd1e8195c40b83c951dd59c6e4fbf8 + languageName: node + linkType: hard + +"zod@npm:^4.1.11": + version: 4.3.6 + resolution: "zod@npm:4.3.6" + checksum: 10c0/860d25a81ab41d33aa25f8d0d07b091a04acb426e605f396227a796e9e800c44723ed96d0f53a512b57be3d1520f45bf69c0cb3b378a232a00787a2609625307 + languageName: node + linkType: hard diff --git a/packages/twenty-client-sdk/src/core/generated/index.ts b/packages/twenty-client-sdk/src/core/generated/index.ts index c93d2f984a..b504cbb7d4 100644 --- a/packages/twenty-client-sdk/src/core/generated/index.ts +++ b/packages/twenty-client-sdk/src/core/generated/index.ts @@ -1,10 +1,15 @@ -// Stub — replaced at runtime by the generated client when the app -// is installed on a Twenty instance or during `twenty app:dev`. +// Stub — this file is replaced by the generated client when the app +// is installed or sync on a Twenty instance. +// Do not edit manually. export class CoreApiClient { + query: any; + mutation: any; + upload: any; + constructor() { throw new Error( 'CoreApiClient was not generated. ' + - 'Install this app on a Twenty instance or run `twenty app:dev`.', + 'Install this app on a Twenty instance or run `yarn twenty dev`.', ); } } diff --git a/packages/twenty-client-sdk/src/metadata/generated/schema.graphql b/packages/twenty-client-sdk/src/metadata/generated/schema.graphql index 32cdb3de55..e48ea18a56 100644 --- a/packages/twenty-client-sdk/src/metadata/generated/schema.graphql +++ b/packages/twenty-client-sdk/src/metadata/generated/schema.graphql @@ -47,6 +47,7 @@ type ApplicationRegistration { latestAvailableVersion: String isListed: Boolean! isFeatured: Boolean! + logoUrl: String createdAt: DateTime! updatedAt: DateTime! } @@ -284,6 +285,7 @@ type ApplicationRegistrationSummary { id: UUID! latestAvailableVersion: String sourceType: ApplicationRegistrationSourceType! + logoUrl: String } type ApplicationVariable { diff --git a/packages/twenty-client-sdk/src/metadata/generated/schema.ts b/packages/twenty-client-sdk/src/metadata/generated/schema.ts index 9a0b540976..9eb41a691f 100644 --- a/packages/twenty-client-sdk/src/metadata/generated/schema.ts +++ b/packages/twenty-client-sdk/src/metadata/generated/schema.ts @@ -51,6 +51,7 @@ export interface ApplicationRegistration { latestAvailableVersion?: Scalars['String'] isListed: Scalars['Boolean'] isFeatured: Scalars['Boolean'] + logoUrl?: Scalars['String'] createdAt: Scalars['DateTime'] updatedAt: Scalars['DateTime'] __typename: 'ApplicationRegistration' @@ -233,6 +234,7 @@ export interface ApplicationRegistrationSummary { id: Scalars['UUID'] latestAvailableVersion?: Scalars['String'] sourceType: ApplicationRegistrationSourceType + logoUrl?: Scalars['String'] __typename: 'ApplicationRegistrationSummary' } @@ -3099,6 +3101,7 @@ export interface ApplicationRegistrationGenqlSelection{ latestAvailableVersion?: boolean | number isListed?: boolean | number isFeatured?: boolean | number + logoUrl?: boolean | number createdAt?: boolean | number updatedAt?: boolean | number __typename?: boolean | number @@ -3274,6 +3277,7 @@ export interface ApplicationRegistrationSummaryGenqlSelection{ id?: boolean | number latestAvailableVersion?: boolean | number sourceType?: boolean | number + logoUrl?: boolean | number __typename?: boolean | number __scalar?: boolean | number } diff --git a/packages/twenty-client-sdk/src/metadata/generated/types.ts b/packages/twenty-client-sdk/src/metadata/generated/types.ts index a3f5269fab..119fd248a9 100644 --- a/packages/twenty-client-sdk/src/metadata/generated/types.ts +++ b/packages/twenty-client-sdk/src/metadata/generated/types.ts @@ -212,6 +212,9 @@ export default { "isFeatured": [ 6 ], + "logoUrl": [ + 1 + ], "createdAt": [ 4 ], @@ -617,6 +620,9 @@ export default { "sourceType": [ 8 ], + "logoUrl": [ + 1 + ], "__typename": [ 1 ] diff --git a/packages/twenty-docs/developers/extend/apps/building.mdx b/packages/twenty-docs/developers/extend/apps/building.mdx index 4fe2c22066..4a5644fbd7 100644 --- a/packages/twenty-docs/developers/extend/apps/building.mdx +++ b/packages/twenty-docs/developers/extend/apps/building.mdx @@ -81,7 +81,7 @@ import { defineApplication } from 'twenty-sdk'; import { DEFAULT_ROLE_UNIVERSAL_IDENTIFIER } from 'src/roles/default-role'; export default defineApplication({ - universalIdentifier: '4ec0391d-18d5-411c-b2f3-266ddc1c3ef7', + universalIdentifier: '39783023-bcac-41e3-b0d2-ff1944d8465d', displayName: 'My Twenty App', description: 'My first Twenty app', icon: 'IconWorld', @@ -717,6 +717,13 @@ Key points: Front components are React components that render directly inside Twenty's UI. They run in an **isolated Web Worker** using Remote DOM — your code is sandboxed but renders natively in the page, not in an iframe. +#### Where front components can be used + +Front components can render in two locations within Twenty: + +- **Side panel** — Non-headless front components open in the right-hand side panel. This is the default behavior when a front component is triggered from the command menu. +- **Widgets (dashboards and record pages)** — Front components can be embedded as widgets inside page layouts. When configuring a dashboard or a record page layout, users can add a front component widget. + #### Basic example The quickest way to see a front component in action is to register it as a **command**. Adding a `command` field with `isPinned: true` makes it appear as a quick-action button in the top-right corner of the page — no page layout needed: @@ -774,9 +781,13 @@ Click it to render the component inline. Beyond commands, you can embed a front component directly into a record page by adding it as a widget in a **page layout**. See the [definePageLayout](#definepagelayout) section for details. -#### Headless components (`isHeadless: true`) +#### Headless vs non-headless -Headless components render no visible UI but still run React logic. This is useful for **effect components** — components that perform side effects when mounted, such as syncing data, starting a timer, listening to events, or triggering a notification. +Front components come in two rendering modes controlled by the `isHeadless` option: + +**Non-headless (default)** — The component renders a visible UI. When triggered from the command menu it opens in the side panel. This is the default behavior when `isHeadless` is `false` or omitted. + +**Headless (`isHeadless: true`)** — The component mounts invisibly in the background. It does not open the side panel. Headless components are designed for actions that execute logic and then unmount themselves — for example, running an async task, navigating to a page, or showing a confirmation modal. They pair naturally with the SDK Command components described below. ```tsx src/front-components/sync-tracker.tsx import { defineFrontComponent, useRecordId, enqueueSnackbar } from 'twenty-sdk'; @@ -803,6 +814,89 @@ export default defineFrontComponent({ Because the component returns `null`, Twenty skips rendering a container for it — no empty space appears in the layout. The component still has access to all hooks and the host communication API. +#### SDK Command components + +The `twenty-sdk` package provides four Command helper components designed for headless front components. Each component executes an action on mount, handles errors by showing a snackbar notification, and automatically unmounts the front component when done. + +Import them from `twenty-sdk/command`: + +- **`Command`** — Runs an async callback via the `execute` prop. +- **`CommandLink`** — Navigates to an app path. Props: `to`, `params`, `queryParams`, `options`. +- **`CommandModal`** — Opens a confirmation modal. If the user confirms, executes the `execute` callback. Props: `title`, `subtitle`, `execute`, `confirmButtonText`, `confirmButtonAccent`. +- **`CommandOpenSidePanelPage`** — Opens a specific side panel page. Props: `page`, `pageTitle`, `pageIcon`. + +Here is a full example of a headless front component using `Command` to run an action from the command menu: + +```tsx src/front-components/run-action.tsx +import { defineFrontComponent } from 'twenty-sdk'; +import { Command } from 'twenty-sdk/command'; +import { CoreApiClient } from 'twenty-sdk/clients'; + +const RunAction = () => { + const execute = async () => { + const client = new CoreApiClient(); + + await client.mutation({ + createTask: { + __args: { data: { title: 'Created by my app' } }, + id: true, + }, + }); + }; + + return ; +}; + +export default defineFrontComponent({ + universalIdentifier: 'e5f6a7b8-c9d0-1234-efab-345678901234', + name: 'run-action', + description: 'Creates a task from the command menu', + component: RunAction, + isHeadless: true, + command: { + universalIdentifier: 'f6a7b8c9-d0e1-2345-fabc-456789012345', + label: 'Run my action', + icon: 'IconPlayerPlay', + }, +}); +``` + +And an example using `CommandModal` to ask for confirmation before executing: + +```tsx src/front-components/delete-draft.tsx +import { defineFrontComponent } from 'twenty-sdk'; +import { CommandModal } from 'twenty-sdk/command'; + +const DeleteDraft = () => { + const execute = async () => { + // perform the deletion + }; + + return ( + + ); +}; + +export default defineFrontComponent({ + universalIdentifier: 'a7b8c9d0-e1f2-3456-abcd-567890123456', + name: 'delete-draft', + description: 'Deletes a draft with confirmation', + component: DeleteDraft, + isHeadless: true, + command: { + universalIdentifier: 'b8c9d0e1-f2a3-4567-bcde-678901234567', + label: 'Delete draft', + icon: 'IconTrash', + }, +}); +``` + #### Accessing runtime context Inside your component, use SDK hooks to access the current user, record, and component instance: @@ -859,6 +953,50 @@ Front components can trigger navigation, modals, and notifications using functio | `unmountFrontComponent()` | Unmount the component | | `updateProgress(progress)` | Update a progress indicator | +Here is an example that uses the host API to show a snackbar and close the side panel after an action completes: + +```tsx src/front-components/archive-record.tsx +import { defineFrontComponent, useRecordId } from 'twenty-sdk'; +import { enqueueSnackbar, closeSidePanel } from 'twenty-sdk'; +import { CoreApiClient } from 'twenty-sdk/clients'; + +const ArchiveRecord = () => { + const recordId = useRecordId(); + + const handleArchive = async () => { + const client = new CoreApiClient(); + + await client.mutation({ + updateTask: { + __args: { id: recordId, data: { status: 'ARCHIVED' } }, + id: true, + }, + }); + + await enqueueSnackbar({ + message: 'Record archived', + variant: 'success', + }); + + await closeSidePanel(); + }; + + return ( +
+

Archive this record?

+ +
+ ); +}; + +export default defineFrontComponent({ + universalIdentifier: 'c9d0e1f2-a3b4-5678-cdef-789012345678', + name: 'archive-record', + description: 'Archives the current record', + component: ArchiveRecord, +}); +``` + #### Command options Adding a `command` field to `defineFrontComponent` registers the component in the command menu (Cmd+K). If `isPinned` is `true`, it also appears as a quick-action button in the top-right corner of the page. @@ -1714,3 +1852,86 @@ yarn twenty uninstall # Skip the confirmation prompt yarn twenty uninstall --yes ``` + +## Managing remotes + +A **remote** is a Twenty server that your app connects to. During setup, the scaffolder creates one for you automatically. You can add more remotes or switch between them at any time. + +```bash filename="Terminal" +# Add a new remote (opens a browser for OAuth login) +yarn twenty remote add + +# Connect to a local Twenty server (auto-detects port 2020 or 3000) +yarn twenty remote add --local + +# Add a remote non-interactively (useful for CI) +yarn twenty remote add --api-url https://your-twenty-server.com --api-key $TWENTY_API_KEY --as my-remote + +# List all configured remotes +yarn twenty remote list + +# Switch the active remote +yarn twenty remote switch +``` + +Your credentials are stored in `~/.twenty/config.json`. + +## CI with GitHub Actions + +The scaffolder generates a ready-to-use GitHub Actions workflow at `.github/workflows/ci.yml`. It runs your integration tests automatically on every push to `main` and on pull requests. + +The workflow: + +1. Checks out your code +2. Spins up a temporary Twenty server using the `twentyhq/twenty/.github/actions/spawn-twenty-docker-image` action +3. Installs dependencies with `yarn install --immutable` +4. Runs `yarn test` with `TWENTY_API_URL` and `TWENTY_API_KEY` injected from the action outputs + +```yaml .github/workflows/ci.yml +name: CI + +on: + push: + branches: + - main + pull_request: {} + +env: + TWENTY_VERSION: latest + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Spawn Twenty instance + id: twenty + uses: twentyhq/twenty/.github/actions/spawn-twenty-docker-image@main + with: + twenty-version: ${{ env.TWENTY_VERSION }} + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Enable Corepack + run: corepack enable + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + cache: 'yarn' + + - name: Install dependencies + run: yarn install --immutable + + - name: Run integration tests + run: yarn test + env: + TWENTY_API_URL: ${{ steps.twenty.outputs.server-url }} + TWENTY_API_KEY: ${{ steps.twenty.outputs.access-token }} +``` + +You don't need to configure any secrets — the `spawn-twenty-docker-image` action starts an ephemeral Twenty server directly in the runner and outputs the connection details. The `GITHUB_TOKEN` secret is provided automatically by GitHub. + +To pin a specific Twenty version instead of `latest`, change the `TWENTY_VERSION` environment variable at the top of the workflow. diff --git a/packages/twenty-docs/developers/extend/apps/getting-started.mdx b/packages/twenty-docs/developers/extend/apps/getting-started.mdx index 3b0001b0f8..a2dbabc672 100644 --- a/packages/twenty-docs/developers/extend/apps/getting-started.mdx +++ b/packages/twenty-docs/developers/extend/apps/getting-started.mdx @@ -7,7 +7,9 @@ description: Create your first Twenty app in minutes. Apps are currently in alpha. The feature works but is still evolving. -Apps let you extend Twenty with custom objects, fields, logic functions, AI skills, and UI components — all managed as code. +## What are apps? + +Apps let you extend Twenty with custom objects, fields, logic functions, front components, AI skills, and more — all managed as code. Instead of configuring everything through the UI, you define your data model and logic in TypeScript and deploy it to one or more workspaces. ## Prerequisites @@ -17,7 +19,9 @@ Before you begin, make sure the following is installed on your machine: - **Yarn 4** — Comes with Node.js via Corepack. Enable it by running `corepack enable` - **Docker** — [Download here](https://www.docker.com/products/docker-desktop/). Required to run a local Twenty instance. Not needed if you already have a Twenty server running. -## Step 1: Scaffold your app +## Create your first app + +### Scaffold your app Open a terminal and run: @@ -29,18 +33,7 @@ You will be prompted to enter a name and a description for your app. Press **Ent This creates a new folder called `my-twenty-app` with everything you need. - -The scaffolder supports these flags: - -- `--minimal` — scaffold only the essential files, no examples (default) -- `--exhaustive` — scaffold all example entities -- `--name ` — set the app name (skips the prompt) -- `--display-name ` — set the display name (skips the prompt) -- `--description ` — set the description (skips the prompt) -- `--skip-local-instance` — skip the local server setup prompt - - -## Step 2: Set up a local Twenty instance +### Set up a local Twenty instance The scaffolder will ask: @@ -53,7 +46,7 @@ The scaffolder will ask: Should start local instance? -## Step 3: Sign in to your workspace +### Sign in to your workspace Next, a browser window will open with the Twenty login page. Sign in with the pre-seeded demo account: @@ -64,7 +57,7 @@ Next, a browser window will open with the Twenty login page. Sign in with the pr Twenty login screen -## Step 4: Authorize the app +### Authorize the app After you sign in, you will see an authorization screen. This lets your app interact with your workspace. @@ -80,7 +73,7 @@ Once authorized, your terminal will confirm that everything is set up. App scaffolded successfully -## Step 5: Start developing +### Start developing Go into your new app folder and start the development server: @@ -105,7 +98,7 @@ Dev mode is only available on Twenty instances running in development (`NODE_ENV Dev mode terminal output -## Step 6: See your app in Twenty +### See your app in Twenty Open [http://localhost:2020/settings/applications#developer](http://localhost:2020/settings/applications#developer) in your browser. Navigate to **Settings > Apps** and select the **Developer** tab. You should see your app listed under **Your Apps**: @@ -133,13 +126,28 @@ Switch to the **Content** tab to see everything your app provides — objects, f You are all set! Edit any file in `src/` and the changes will be picked up automatically. -Head over to [Building Apps](/developers/extend/apps/building) for a detailed guide on creating objects, logic functions, front components, skills, and more. +--- + +## What you can build + +Apps are composed of **entities** — each defined as a TypeScript file with a single `export default`: + +| Entity | What it does | +|--------|-------------| +| **Objects & Fields** | Define custom data models (like Post Card, Invoice) with typed fields | +| **Logic functions** | Server-side TypeScript functions triggered by HTTP routes, cron schedules, or database events | +| **Front components** | React components that render inside Twenty's UI (side panel, widgets, command menu) | +| **Skills & Agents** | AI capabilities — reusable instructions and autonomous assistants | +| **Views & Navigation** | Pre-configured list views and sidebar menu items for your objects | +| **Page layouts** | Custom record detail pages with tabs and widgets | + +Head over to [Building Apps](/developers/extend/apps/building) for a detailed guide on each entity type. --- ## Project structure -The scaffolder generates the following file structure (shown with `--exhaustive` mode, which includes examples for every entity type): +The scaffolder generates the following file structure: ```text filename="my-twenty-app/" my-twenty-app/ @@ -148,49 +156,35 @@ my-twenty-app/ .gitignore .nvmrc .yarnrc.yml - .yarn/ - install-state.gz .oxlintrc.json tsconfig.json - tsconfig.spec.json # TypeScript config for tests - vitest.config.ts # Vitest test runner configuration + tsconfig.spec.json # TypeScript config for tests + vitest.config.ts # Vitest test runner configuration LLMS.md README.md .github/ └── workflows/ - └── ci.yml # GitHub Actions CI workflow - public/ # Public assets (images, fonts, etc.) + └── ci.yml # GitHub Actions CI workflow + public/ # Public assets (images, fonts, etc.) src/ - ├── application-config.ts # Required — main application configuration - ├── __tests__/ - │ ├── setup-test.ts # Test setup (server health check, config) - │ └── app-install.integration-test.ts # Example integration test - ├── roles/ - │ └── default-role.ts # Default role for logic functions - ├── objects/ - │ └── example-object.ts # Example custom object definition - ├── fields/ - │ └── example-field.ts # Example standalone field definition - ├── logic-functions/ - │ ├── hello-world.ts # Example logic function - │ ├── create-hello-world-company.ts # Example logic function using CoreApiClient - │ ├── pre-install.ts # Runs before installation - │ └── post-install.ts # Runs after installation - ├── front-components/ - │ └── hello-world.tsx # Example front component - ├── page-layouts/ - │ └── example-record-page-layout.ts # Example page layout with front component - ├── views/ - │ └── example-view.ts # Example saved view definition - ├── navigation-menu-items/ - │ └── example-navigation-menu-item.ts # Example sidebar navigation link - ├── skills/ - │ └── example-skill.ts # Example AI agent skill definition - └── agents/ - └── example-agent.ts # Example AI agent definition + ├── application-config.ts # Required — main application configuration + ├── default-role.ts # Default role for logic functions + ├── constants/ + │ └── universal-identifiers.ts # Auto-generated UUIDs and app metadata + └── __tests__/ + ├── setup-test.ts # Test setup (server health check, config) + └── app-install.integration-test.ts # Integration test ``` -By default (`--minimal`), only the core files are created: `application-config.ts`, `roles/default-role.ts`, `logic-functions/pre-install.ts`, and `logic-functions/post-install.ts`. Use `--exhaustive` to include all the example files shown above. +### Starting from an example + +To start from a more complete example with custom objects, fields, logic functions, front components, and more, use the `--example` flag: + +```bash filename="Terminal" +npx create-twenty-app@latest my-twenty-app --example postcard +``` + +Examples are sourced from the [twenty-apps/examples](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/examples) directory on GitHub. You can also scaffold individual entities into an existing project with `yarn twenty add` (see [Building Apps](/developers/extend/apps/building#scaffolding-entities-with-yarn-twenty-add)). ### Key files @@ -198,109 +192,14 @@ By default (`--minimal`), only the core files are created: `application-config.t |---|---| | `package.json` | Declares your app name, version, and dependencies. Includes a `twenty` script so you can run `yarn twenty help` to see all commands. | | `src/application-config.ts` | **Required.** The main configuration file for your app. | -| `src/roles/` | Defines roles that control what your logic functions can access. | -| `src/logic-functions/` | Server-side functions triggered by routes, cron schedules, or database events. | -| `src/front-components/` | React components that render inside Twenty's UI. | -| `src/objects/` | Custom object definitions to extend your data model. | -| `src/fields/` | Custom fields added to existing objects. | -| `src/views/` | Saved view configurations. | -| `src/navigation-menu-items/` | Custom links in the sidebar navigation. | -| `src/skills/` | Skills that extend Twenty's AI agents. | -| `src/agents/` | AI agents with custom prompts. | -| `src/page-layouts/` | Custom page layouts for record views. | +| `src/default-role.ts` | Default role that controls what your logic functions can access. | +| `src/constants/universal-identifiers.ts` | Auto-generated UUIDs and app metadata (display name, description). | | `src/__tests__/` | Integration tests (setup + example test). | | `public/` | Static assets (images, fonts) served with your app. | -## Managing remotes +## Local development server -A **remote** is a Twenty server that your app connects to. During setup, the scaffolder creates one for you automatically. You can add more remotes or switch between them at any time. - -```bash filename="Terminal" -# Add a new remote (opens a browser for OAuth login) -yarn twenty remote add - -# Connect to a local Twenty server (auto-detects port 2020 or 3000) -yarn twenty remote add --local - -# Add a remote non-interactively (useful for CI) -yarn twenty remote add --api-url https://your-twenty-server.com --api-key $TWENTY_API_KEY --as my-remote - -# List all configured remotes -yarn twenty remote list - -# Switch the active remote -yarn twenty remote switch -``` - -Your credentials are stored in `~/.twenty/config.json`. - -## Local development server (`yarn twenty server`) - -The CLI can manage a local Twenty server running in Docker. This is the same server started automatically when you scaffold an app with `create-twenty-app`, but you can also manage it manually. - -### Starting the server - -```bash filename="Terminal" -yarn twenty server start -``` - -This pulls the `twentycrm/twenty-app-dev:latest` Docker image (if not already present), creates a container named `twenty-app-dev`, and starts it on port **2020**. The CLI waits until the server passes its health check before returning. - -Two Docker volumes are created to persist data between restarts: -- `twenty-app-dev-data` — PostgreSQL database -- `twenty-app-dev-storage` — file storage - -If port 2020 is already in use, you can start on a different port: - -```bash filename="Terminal" -yarn twenty server start --port 3030 -``` - -The CLI automatically configures the container's internal `NODE_PORT` and `SERVER_URL` to match the chosen port, so logic functions, OAuth, and all other internal networking work correctly. - -Once started, the server is automatically registered as the `local` remote in your CLI config. - -### Checking server status - -```bash filename="Terminal" -yarn twenty server status -``` - -Displays whether the server is running, its URL, and the default login credentials (`tim@apple.dev` / `tim@apple.dev`). - -### Viewing server logs - -```bash filename="Terminal" -yarn twenty server logs -``` - -Streams the container logs. Use `--lines` to control how many recent lines to show: - -```bash filename="Terminal" -yarn twenty server logs --lines 100 -``` - -### Stopping the server - -```bash filename="Terminal" -yarn twenty server stop -``` - -Stops the container. Your data is preserved in the Docker volumes — the next `start` picks up where you left off. - -### Resetting the server - -```bash filename="Terminal" -yarn twenty server reset -``` - -Removes the container **and** deletes both Docker volumes, wiping all data. The next `start` creates a fresh instance. - - - The server requires **Docker** to be running. If you see a "Docker not running" error, make sure Docker Desktop (or the Docker daemon) is started. - - -### Command reference +The scaffolder already started a local Twenty server for you. To manage it later, use `yarn twenty server`: | Command | Description | |---------|-------------| @@ -312,66 +211,11 @@ Removes the container **and** deletes both Docker volumes, wiping all data. The | `yarn twenty server logs --lines 100` | Show the last 100 log lines | | `yarn twenty server reset` | Delete all data and start fresh | +Data is persisted across restarts in two Docker volumes (`twenty-app-dev-data` for PostgreSQL, `twenty-app-dev-storage` for files). Use `reset` to wipe everything and start fresh. -## CI with GitHub Actions - -The scaffolder generates a ready-to-use GitHub Actions workflow at `.github/workflows/ci.yml`. It runs your integration tests automatically on every push to `main` and on pull requests. - -The workflow: - -1. Checks out your code -2. Spins up a temporary Twenty server using the `twentyhq/twenty/.github/actions/spawn-twenty-docker-image` action -3. Installs dependencies with `yarn install --immutable` -4. Runs `yarn test` with `TWENTY_API_URL` and `TWENTY_API_KEY` injected from the action outputs - -```yaml .github/workflows/ci.yml -name: CI - -on: - push: - branches: - - main - pull_request: {} - -env: - TWENTY_VERSION: latest - -jobs: - test: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Spawn Twenty instance - id: twenty - uses: twentyhq/twenty/.github/actions/spawn-twenty-docker-image@main - with: - twenty-version: ${{ env.TWENTY_VERSION }} - github-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Enable Corepack - run: corepack enable - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - cache: 'yarn' - - - name: Install dependencies - run: yarn install --immutable - - - name: Run integration tests - run: yarn test - env: - TWENTY_API_URL: ${{ steps.twenty.outputs.server-url }} - TWENTY_API_KEY: ${{ steps.twenty.outputs.access-token }} -``` - -You don't need to configure any secrets — the `spawn-twenty-docker-image` action starts an ephemeral Twenty server directly in the runner and outputs the connection details. The `GITHUB_TOKEN` secret is provided automatically by GitHub. - -To pin a specific Twenty version instead of `latest`, change the `TWENTY_VERSION` environment variable at the top of the workflow. + + The server requires **Docker** to be running. If you see a "Docker not running" error, make sure Docker Desktop (or the Docker daemon) is started. + ## Manual setup (without the scaffolder) diff --git a/packages/twenty-docs/developers/extend/capabilities/apps.mdx b/packages/twenty-docs/developers/extend/capabilities/apps.mdx deleted file mode 100644 index 668c769152..0000000000 --- a/packages/twenty-docs/developers/extend/capabilities/apps.mdx +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Twenty Apps -description: Build and manage Twenty customizations as code. ---- - - -Apps are currently in alpha. The feature works but is still evolving. - - -## What are apps? - -Apps let you extend Twenty with custom objects, fields, logic functions, front components, AI skills, and more — all managed as code. Instead of configuring everything through the UI, you define your data model and logic in TypeScript and deploy it to one or more workspaces. - -**What you can build:** - -- **Custom objects and fields** — extend your data model with new entities or add fields to existing objects like Company or Person -- **Logic functions** — server-side functions triggered by database events, cron schedules, or HTTP routes -- **Front components** — React components that render inside Twenty's UI (record pages, command menu, side panels) -- **AI skills and agents** — extend Twenty's AI with custom capabilities -- **Views and navigation** — preconfigured saved views and sidebar links - -## Quick start - -```bash filename="Terminal" -npx create-twenty-app@latest my-twenty-app -cd my-twenty-app -yarn twenty dev -``` - -This scaffolds a new app, optionally starts a local Twenty server, and begins watching your files for changes. See the [Getting Started](/developers/extend/apps/getting-started) guide for the full walkthrough. - -## Detailed guides - -| Guide | Description | -|-------|-------------| -| [Getting Started](/developers/extend/apps/getting-started) | Scaffold an app, set up a local server, project structure, CI | -| [Building Apps](/developers/extend/apps/building) | Entity definitions (`defineObject`, `defineLogicFunction`, `defineFrontComponent`, etc.), API clients, npm packages, public assets, testing | -| [Publishing](/developers/extend/apps/publishing) | Deploy to a server, publish to npm, marketplace | - -## Key concepts - -### Entity detection - -The SDK detects entities by scanning your TypeScript files for `export default define({...})` calls. File naming and folder structure are flexible — detection is AST-based, not path-based. - -### Available entity types - -| Function | Purpose | -|----------|---------| -| `defineApplication()` | Application metadata (required, one per app) | -| `defineObject()` | Custom objects with fields | -| `defineField()` | Fields on existing objects | -| `defineLogicFunction()` | Server-side logic with triggers | -| `defineFrontComponent()` | React components in Twenty's UI | -| `defineRole()` | Permission roles | -| `defineView()` | Saved view configurations | -| `defineNavigationMenuItem()` | Sidebar navigation links | -| `defineSkill()` | AI agent skills | -| `defineAgent()` | AI agents with prompts | -| `definePageLayout()` | Custom record page layouts | -| `definePreInstallLogicFunction()` | Runs before app installation | -| `definePostInstallLogicFunction()` | Runs after app installation | - -### Development workflow - -1. **`yarn twenty dev`** — watches source files, rebuilds on change, syncs to the server, generates typed API clients -2. **`yarn twenty build`** — produces a distributable build -3. **`yarn twenty deploy`** — deploys to a remote Twenty server -4. **`yarn twenty add`** — scaffolds a new entity interactively - -### CLI reference - -```bash filename="Terminal" -yarn twenty help # List all commands -yarn twenty server start # Start local dev server -yarn twenty remote add # Connect to a Twenty server -yarn twenty exec -n fn # Execute a logic function -yarn twenty logs -n fn # Stream function logs -``` - -See the [Getting Started](/developers/extend/apps/getting-started) guide for the full CLI reference. diff --git a/packages/twenty-docs/images/docs/developers/extends/apps/dev.jpg b/packages/twenty-docs/images/docs/developers/extends/apps/dev.jpg index 94eb48c19c7a6e43979132f21758825a55c66c7d..12e671a1bf148ddbcc2ce0eb1edc8f11dd699b95 100644 GIT binary patch literal 246652 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�WTzPko1a+>G}RxJJ7Y?@yBkW`=kC3FH)V&&+82J2Nx(o0$^C>OA!e3v>uq_Q5FM00oGvKqK zUx)nzqvEKKX}^V4iXg1={nud?M6i(+WZEl8VPJd{rpM<^(!RIe>)GM2r`YK)>Zd!>$g2{-xU) ziVp+c9D7RtCs5?do!O@32)jLI)G8|@dq8$&9mZ#-jXrBJD8qzL5-DPnHy8%gBm<&muz{UNTnMaN4jUu3zJ z=9VKQ%^dz)lRy%#XiN;$*7)RF~B5IZX^({&69jNlYsubhT zINQ%q!S6Y&GB2Jm?%lNcf6xo^bKuX1RPEklSP!Kg`El$XEL)6OZug*jol}!Ne7&af zcG5XAh&Jyq7kK2bjqIl7zUd)mou4y%s+`zg8gOsTE0ND?pUr81y`nCEuT|059}X7G zyWCcNrvx$E3P!f*RqedibQM>TysHcJlS9HXIc({Uk<^X$^zzOVv9~2|D^wa?$&MJc z{i`G9$NnF{fvt3HU2Xm2N#_s!we1d{=R1ak}!U$N9v)$5AG+au$)D?RIp+LJ}bsp-;(?|P4|acM}!PqALRCO z;3Dl_#L-m-goT9KVvdHG%Gge~z0J)zv})ToEzM(STDHMFlVAhrkY1Pc{I&7XLHCr~ z^mHHEV#J>ff%UVMFKI`1*WXT8?Ub^<)9QBAZc&>x?~e}ZeO}*)8(W1grW=o~3LE0D z7@blbf3tUr{UtcI^eG`(8!)DpS6?MV!q3mEEN0 z0e)h6pEgYRVE%_z@^UXzHCw zx_=uSfAdaWnsoVPMB|oPna0I{6cn!&`1anpCI2dvu^35jRya9D38@>pQdZ4f&*f>I z+t9?YX6P;<(XIu_gIDtHTZdI7x7Q-|5Z1MXqLbLm1JC2+6;AdfZ-p5j;D*oec5!Jk z%=o*ofi0g;(&Bq;#qdMJP9r5VzE;>yvrB6dzB>pMMbLdPh%FPos_33#{DK_w$rRHY z$Zra+v3-3c%~;Ce%GHGW@Otj8g2fz`5=BMDZ{C^tp4S4>KubH-3&_vkiV*&i+OIUf zoVNxWow_t_>Z|z0^V0nB1^@Zwzio7HvyQb5^$l_(DfM}La_d(|t$W#t7z2_eXR`>J zyW5-a%ExrXEM;u?&{k#Q*SLB4(x=yEI;w9<1Pt(h!Mf9NmIrM+I z^ZyH_|KalO|B##XKZpO!onRuof%;4h#RXf&RYYdz7uq{GMVAh!b#UJ)S-2^3^ilXj z#?GVm8m~ex3a&DO8+5`zxpXy($}I-(rbFhVn$D;tM+!m?AXzD9B-jj9r>Sc$3wpjb zd%Rhl;XYX=@!Dg#ioAVLRrZZL-t(}#FwsDzdn2LQm;#dYSwia9N&lny#4V_2b)}4n z8@GQ=)hTj|5aun^2e+eUIaW=3pOH=*xBIqmA7LPUU)SyxyiCN*d!c`A=AD!G2g-zJ z0*9!P+%@0C(x^)b7`}bGBQr2AiWarDk%?leuSp66n3ZL@k*W8~@Qt7zPDg6E9zp&@ z)b%c34qiG{jjoyk271_o-DAn9IWf0^Q~eK2g6^o@#=ky%I>nGRSNdKjKiL3ZIB(lS z;iI25iU&i2^!$t~@CIwKxs%@Gh-@L;m3#{yQ`xAsi2(W6ZkI#}opfBPq>kBQBilZT z!Ii>A`MTZVZ?eVjop(}&_(Z}sn8X(8M;di$-6%n=Vg`h>BzkQje9?$ltJRI z5|j{+3(g0}26np>qbpN}X&=X)S2`STZ2skFH6-0@ZRg!c59l!G%jP1uJe~XCqkuu1 zy$fIU!ANfUygH%jFZ%jn-O2Vtw^Zt_n3iGp5NGiV;64WkL54IxyB z(be-NGXH2TYCe>%P^0+^-6x#lTn^VkL@AjUoT&QG%VPx*9;6}PAB~(O|5pc1*FI{D z`YGl~IXOL|jh^=yHd>@c1E2L`z3$jCu}a zo{ziou4?k*l0!O^?yXY{>;xFz0&~c-k(2uWu=k!(O}6dcCyI)6>7A&cGy$bci>P!l z0s>N_^de0uUv0cj#csZv8nK#CwObRyCrp@c}vJ=gs_yUpJ7?pd=x%$l{{ z`M`oNn&irPl=CRR|692Fc52z&mPM{cL0(0tw@(W;M7s4PIv*T=HIwVxMyPPznZuJ_ zFlK|;(#b<*`Pt4yyw{C+Sm8BPYBRfOGLb-3QtfyObmEk>Xj)^b#Te$ zw5?Ou-4&C&QKCs)IuP14DS{#4CXs?SBz(h*C8AxtF^0y%Vq^9B3T-f->KJI}e!9dGzgv;f!@n%sVELNOI{b;{71B;_14rtd^xe7D#Hnt$hi3J#p!VS977HblPq_dLrm`W9G1l*U4=8)1)#g);5H z`N;YJT}EQ#b#U%d2Y1#`nVW@!Qtjg6t^01-#aAyCyPdn#pA=z@5F|S-FU=}1AD`@m z;37{oOnY)CM1rw4jo=npkdY?s&wf5pJ@|XdZ?gm0Sph;KPOK|jxfggRaQV#>tJFyK zFejnvLc-aiEzA=}UY9uVpuyg4LBG1gMmL&MzZI|gWz^jE-?izmRnS>tSU3D8ju5ZZ zR^)CcRLdXi>uP4yy2VImzWA|eL!(3S4+z?Z{A`CJ-GHg%kx5sHmjY5Rg}?>c+ou$( z+G{u2C(aFLxKkn=7KOFzG9`_(p@8oh* z-x1xIh(z@ z(AFAihj#P%G4G}~CD*MkZfkh)t!RA2iIAQc$N-O=mFqH+?|=%{#b0!jCQAqK&5ivD z>lDGf)C3d#aJ7ACE>wUtxPwp`Ad_A;TrnT>Mr79W%%j~yws&5FEaB&!h>RWWSBaUc zLqJu*_-Y#U1d&l|@LFtdtZC?*8Qox6g>Yp15YWIt++Xj7Ui!^=ARAF{CieN-a{mD; z!j*Ohg0biZ@sgQwSm5kM!o@eN;Ms1ay$HZcoD}@pmYw6iIk_(M4;(~q{+y10-6Yln z#m6YS%h|mk7H{*eQ;)#<5dMo^XX107B-e_RukpN=?+v#lJpi_vD_|G@qCsf@1DZOW z(DRR8QqBUe0Bn?7O~-2rdz_|Bwft1)E3=tbE$S1tv@&_>1Or zGK}D!YfDGCPn=jqv8LsIjy0-1CR72OQ7 z4i%$$izu+t-wn*zk&VadC^8cd5~v!gTZ6&tVI9M4uLpmqrKYbjPE-KkE?=DADyTOv z+z#8JbOGQwvdryT=p_~QgkR_tlj*^6X=zR#EAPq!Ytkh+F>32Ek|J>41KypxSh9jX zL$;sxce7$_figV64aPF1(C$9lczhtfL6;ajN>CvlFN4p{leMN5z6tk3I@+u~%Dt}D zkAm9tX1}BmN7PnZ5i6-(XkoGg-o}oB=vSs$T&`C_kYK3bKMr#4DoVMaPpcxN$8`+2 zC|`}mD!hF635(UpVaI9lurS=*@z%#QjXQz;Q&sTqhmb<}wG22h2C?al(H+K05B>Kr%Q1%_>PU8%a{4!9hgh;fVSn{hDET*lEW@rqc4qP3Se-=Q zRq&Z7y&BQ^gP3{94Sd(@7MYy}0`DWWquuGVt-|fUaMC@WsU3E=Q$(V(dvZfnggVSr z$Q`8@IH;ZAx?iU5S>qdefa1v8D_`Rj$Fwc3&wEie7`ii;LD~Dhc09PeWpocD8MCt} zObl>r^uu%$;xYOTkt&7fBm&*|bk2yBX-=M&H#Zb2?-t{@7Ij34@({6tgHC^eLqUEZ zQ}XVhi1b@!r;?qpwlBO{gO$6|0ELrT^?@?E??X(tO7EswhBn;IZ}ofqS}?l@JS%{O zb|V-^v7S1EbH?M+7p)Vk%Z?u>)+ZgLlli`-9`|9CsiIqFS#wG_8gex;Vs%lTlA@^*%-S&x zz7#MlNB3m{Cu=^nB@pikWE>hMO3xkI}101D0 ztF9HNQ+lY2%*lTY=*uzc<;MR*pA}2K0aPRrNkJ!8-jVE+B{j*8>AT9tR>_}y zZaO*9ZAfi_FfLRh!)0Ac$Ts*?iGe8jif&J=AAFu1NHi>*1$vZcp1pS~;QKOGY`vcO zNqh2pufV9^I_PGaDwkkE>;%5C1I!9@!|V1Cs7$yE`7&h{Hk5DnLNr_7A96hoa=y#} zXc;lc0(tyaKedBDh#EP$2=5suN_C@Y02~yy2UV`~wBbu_fvw1pHL*&DuRBCqY_Mf? zanup}8nD-4ss<%hQxyQkSB)ke8#0D1fB}OI*W8k7sQ-(mx>A7sy+e9(aTAIMh#1p- z03Zuy;k}HE#Q+GD%x~B1ABZ!wS?0u<8PBJk51+u9VpDeg80s}N0HVy1o~PKvCvVTRV=tN21_yx#J+mP5=jGtQwqk2awx$4}`?-h)NII3%p3kX2? zFyewm-v#b@5-25?{4{W9MLp{e7(?Ei9VCm&< zHbed_%&b7RB+GeNuQm-lc^lj?3iLJ3z-~{&h2aBema91Rg6oY+p;=Xai0g%+gzq z)H!5>ELll6$sfuM%$fjA>2-p3x>X3&g9OcK8rmC8XIcE($Lxck(YyuYCI*#kwF?p_ zaI4e(=2q`s4+xg-?s)A!(2BX5r6^rrqb&1Skl{~40u4oA3gL;2rk*AGRg={z>2N{q z9_*r)tS_|FfSe2bc_wxu}AK&pjPF6On zO*fjXt3)63G?+TTJUcPLE1!KQ&atzODmXMCFWWrxaB;6n@3Nuc@OkJmV znyW_2WC|6yYr=_DQ6G0kd0_-WcFxqOR-si^;{8@zpsO`N(j_?k;;}Q|%_C>CHmazM z+PS|j*(K?Gbe8zV(uvasT7Q7N>N`JNQ=HWb88nb1e6obS5wEA zzND0Wu(NVQ*X}3xqgS)lTvo= zS95ZYF&ZlVt+MV&q2 z$3R^0DMamlvig;k{jBQU6r=JoDj#tx7$9Ar%#rLvW44wTtl zFI37`59~hU;K1In{GLXY=}cdUrZtWSySCKH9AqZv_GlXp!k@3Tbk8;F&PZ9MeMhq_ zRNbUzO-ECpp$RKWJac+xWoeFMCA(XLuE&m*sD<10uafV{_3X``7%p!;x$b7+=>1#W zlk_#?D;te6_s9xV1a=cI_K!!g1>#UwSd{!67MP-Tzb))+T9%3Ep@_K{179E(q!ecH z&RF{;p}ttPjpg+abj`p>;ponf zGwKlaCv|bG`pC8*=*?Pqc^~ZiPWW74_&n2kdDZ@G?5ax-G}i9=q(!II8N6LSAo!yF zY2)|xEVaZN(bpo+TDW<)MP7KQ!weg?4T@|H!$MR(Jz@ux%?Gw(^kUMv(%q zshIj3Xv*Z)(j|a82_>SuxsW|jHmLj9ojGhwh<>~^?>DXJ5jCvhnnD^4%KHag4&gvP zJJn8yaQ=gwB5LtnQ9hJ@W7t;VMs;29($2qy3;lBPV74gg4t`~e1WLE7~{ zr~?Ev@suQIPyqN`sgtnQ@4J|pe&_>G6sWET#2f(T+ANS5yNaiaCc7bbrDgP!q`T#> z=s$Kc*wdgH6}os1usJEIA8NksbAy) zzJdMPLfm5-L&tj9G0qQ*AWK3SgQvTpvq<1OdDX2SF8lqk6;-=8I+~n}<|8#htAej_ z?$EVSM*;ZRfMZ9Lxjze0eib)>u+C~yH8M0Ir>Zm!v=rzR$Y_X`}|dsgnr%sc!Zbw5l1mT%|)u0L{zgoRuT4(lkm zLev+66aN+kvvuA>sK;INyF&d7Dgd*)^s3) zc`1yZzy)=ZL7a9G?TQ9?>Ns?37#;At7F+|%WAp%tjT{~ld~|l_M79gwu6`sl5Vu!Z zBML6JqCeL~nT;QZIoC`o41LK9YjN4CN_pj1|JgUa^IQV%RGfB)garPhnuZ)V->?na-TjLAX*0oGd_TseIh8_D>@bXCtRTuz=w<6;0IAVJ-0XxF_jbSnMY25Ry zIf8MFQobp--q>jYuCd}1d;%btN&}1u8=TnApJfD5rv$IqR11*WTh`n1tE~66d7pBf z;WN=Sp1aJ3&o7zmjs9uTki0g;C{@h5;`9sDRr%u%$Q@=#DWh`193u~Vz-&~0E#Fnr z5co=cqLE3M<6#z9=63RD9UX~iHNzJdXy(Au{#4eU^qKc zQz&?Qxw@%*`xKGviE>fq*?Lncje5;ioTMvo+51+?^Z+f_GBCfqKb!S?-xN(Lsb_wH z8J|)~&a93SG}0JK3yPdzPT)NAGig16L`wiBJ=1}uSHuo|1p-)k^$ON*l?Ejo_2UO^ z+T$91^0l5fB&NFyh7?KvMI)P2tETMx&IL%Tcv>jAz-|~Q6-rMw!=h(J%<<>5nwEzy zOv=`Ivx!Qt&-SM6GIreLGt=+;JS_SlUTaFFegmkWPdvhjxeemk0X?h;fiSfX z{T)mryLc=*jz(_X;SCDp!GvAhFAQd6dbwpGf=7iA&zHf!H!6qb1Dm|k$#DZ2i~o{%hf@Tp`-4|@4y zwd!iS94;}~3hxdHm?=c$XQRG>pxWv?^{!$^3H)?Sd~#At&$BQDN+Z)!TxzeTJ6}k*=czy1)mp}7 z>&1^`SzVP(+?y9GB=-!h#czF$7;B=k_0tqYqIIdl^Dq{?*v>AVt{Z`a#8ubrb85bk z3XTM^S5r*(b&cb-^Lj<3Y@vLG~lV zyWAnt(wLA3;!9mF82i!Z>-99S1w3~*l^*cK7h|eQ$Wrb2MzSckPsKT*#c%GgK%Zt<*+kApG+TVGUmM_Th?T0 zH3$0om3Qahz8rd z9keZxQd0bgrHIGXN6V3P{?BZ@ceJn|8e-y#E-+v= zYtgT|fQnhiua$hteOL&in!RtWvESxIk*|!*bM&2|6@7W-MWzq_|5yPFA@+dOv$PmUFH~osdAeLP53j zkyR#PjD^6kG}yz#xmo5-Y5iJ$&GU?n)0g1c6AO)d3nI>o1nn*!*Nc3wBmT76G{IF> znk7G(HCrB0Gm(WQ?hoHJJ+av9?_ed0j=n^=f{E9$@Skwbsd_Cu|C-|U3I9|%&==eG zyc@4N1>qLCj%kZLm~&{vJI`|#D;fyB0%jt9HFY+XdXYlXAP3^$M(eSf62mX->0ArW zHh(mt*T{O3s1u&s?wy2J*?N5Q%TU>niJ5)2%iiz-fF^&iJ9Nds1leGbkh+ys5c|84 z%t1#`BZiQ?;A5&~UEcAbF~y}%o&eZAbAA8*`0Mi4LuVz^Z@j4fuJ_{Xdc-i?uU}wr z8xWX#`;ta5eM9PWlaka<8*IG-fUmuKK{b*8HuXm)6ZauEZ zQyuoHJ83#6X0=K6YwKgvjN3QKuQ3zlYb>^PC!b0%bFSX%ZQ>K9M?v{Z877FV{$Ijv zD_su(;}ovbwPvacwgEE}Xu5A*Pe zIp-xob#fc;MYdh+yH#PdC_|BMJc>jLdP{vWmTn?6LbOeCI(!iIG_b(DrU8QWR;d1*%htn{qd&J6Od*xTA)RJ%# ziJ3aG#L%up<|qEavc_e}*)9<|I%~H1ejB1QkkkJ(OtV-xk)bd|I0B7sdp31q6|e+8>Xp7VYr*^=s9giN3*_kLcuWg_e>v za6G$LunSP5#;MCc)akGN`P`y)t!<#;(DBI!(@q_yGqDdW23`1m-+KDRzl6o$C|_*P zV6)H9ytdA&t%N(5%zBSGx@^~NK&{JWuIf{Z$1k{uyB!Z+De;--$8G+A;gYJ21#gA1 zI^RJJh;|7)`01Gqlb_>E3JJTg`%#67GwB8EN>CRl8N`KfK??x`<;#RxrHJY| zT~YcV&${Lh#UADJyiZe9E!rZ6Z<)E<-^_H=QQR!A%gBo|Ma#6tSJ_XTgxU&bx|$|E zGm(R(8r7RO8lDDd=wkg5wQG%?qcKw;CVwHQJ}?(I-Q9b_AK5%-JK7Ge6?i&+v+FvJ zcz;WEdgv+lmB)@iX!JoZmoKrAeeppANlHe$C|Uof}>3un0;z}(Hw8w zF6q1Oxk&Zz;7j2a*Md*SJS#@jTjv)~8Zs4{av@oyu=XAQhM2?7!&Nihwi^Xg6PX%q zU=F;jH7+($UGW@`rpWl-5pgfuU)qnhr$+W;77g1`bs)MD5e2`DS5Bo%(BuY$4!~}Z zXfPXGI2dL0HF`PGHqv@Q?NR@!#zN_~9v8p-JDRNvFX(u|SqPl|(knFcv3CN1=c3+* znT_v~4NG8xxRkQh;JVGb1D-)4uIT2)50}2t1lryDDzTezlWa{Lj<2%Is>^^2d>zWu z`>@9A5iXqTN_cjoW$D#3*~GTG#^P|+p&{hC;PD|X2+5kXD}*w$1m+BA+RJu(L+wBHn{xnWo{i+97&C(WcCvur=6$ZUINj3Px zjt)UAe_Cp^*!2cpcaCQjxkFh&2|{Oyim$9f#$W6HqGav$fmAh313}-PA1Xt7Pcs{Q2pcsIdjaRVm#XIZq`8k=4Sch&svJ#2Rxt0=nF=h8K>!Q z&~S0V0cuvKd>;}gOL#^+Bn7!mnV-O=aa<|+B}6alw`oo_&66buc5B8F0u%mW4>kAJ zHu_rr;l?a%@8wz~IS8R726QATT$q-I#KHpp*m|V&PCY`jIyiNQmLy3O!_vjIOS?ja z71Vn2x)3b&fGqCV;DqG>*KS4P!0YlE%R3GSjf3G*hd0jlNG7F^Ssc{@CjX1l09T?; zKv}68!D58SpRox68uBY6P2nY5jgR_drJuezYcm(m#`(4cag89%*>?-70elW&O=e;c z^%83$vOa%zH1-Bed)eAhN|qTKTw~0gTISBP)4iMiMHlnKGwE(1<+n(r7D)7KEJtL; zTZ{gCPr`WnZl(LSPG(EFSt?CZ7H%8`>J}cWm_2@`zdu}6)%eFB%zli%7+l-^NXu_k zLuMb6vKe%D`lhnW>Q?dY_HNG{tU7QG% zNzY%RlxT9nw22|BZAz;=ks5*Y-u}CHfSKABqp8=D3N9jNelq=Hxrum(h(y)_%8#=i z&`Cwm%S8!f_q4@^v{zZpOqc8G^YWoe=B8ivZAq1yJq~7}J|!SG7Hba~eF;R!gps04 zz|dU#yJOtzl5g{E)4!^#*23UoThLtr94+A*B~D$VkbD_G+U?Co*1<29tt5I{KbkUq zoYplscyJ7&7kt!r?~}G)3{}vn_8nZ<+G>9BLBo`9U5)a6t*`Gw&p>|wqAQGqUw||z zCwvTOnJ~5s5f}fWF~CvFR)plNE5+}_ZBl~-;^PN70LZ8!kqei%I^E+Pfw%-zgA||AyqH%(9hXOT68y@LVYbh03H*681C3+Q7Khur2fAsyFHq_G4 zV3z07w;=fZ&@}?qRbu}X)Z+`mF2R~iFr``|^n*JlD0wyNk?_p|vfP}FQM+tS-qVq8 zhP>_-(=^rTVe=`T={Ez?A7mxFT7HRtcm*|0i9~z-Er^3)CkFs>5?3f0@N47;KR-+! zFIYqH_Zx#=M6*i8?_{uZo+o{zqwy~VPM1(Cq%>G;1-&bU6> z#j`^``^>Pu?=-#(FC1g4 zy=w~kS9{l^Ta8LL2-GV-6}I0hkZR*(9HX=N^mbBorpV0CUOtI7P77tA#)6;iV}^h% zV{#dl3aahjz4s}V+qDXJVuojqT(Is!K5d`Ky%xQE@J8vp+r9IGXQOERkShNYO!k3b z!UO(iEFu1{W67(3#u7<1=i@HpUUetVk0w6)Iu<5`tVff5(jLVp{`HfDi_2X4rjJWL zpqlHOg2w-%@g-(g5%2XD@JBKt**1ehVL^t?+)WXymOPV&G#5|JIWHOc$yr-pNz=Vz z_Si8kl;%9b9D0F#Z`E5^_TOU*^xtAj>OW(P2t{~rBH#lQ9 z9}j)}vBKtm9JdU!Bn%!UnrHX!ZG1XzOUSZmD$1w}+6@@2K7us#zXIf1YEY5zo56{z zQ_*+^XDxC+o9bgp6lTT*3nrbQ+13!GRa`JF7+RhMipXvy`$# zb00#W!9!z<#3^OtrRqdz>k!w&cdq09r%NRTE83hElkfiCUijbrhwi`V#{AuXWFX(b zrzZ305PMfkab8K!-i#DAm_XlL#kz+)A}=YUv=Z7#T8IHV0R6HHV7uWbe(`Bfifai0`#5!qG34b`#o~IKNj^%8R2@+B=zNf@IkXvGs$8-yMvVmJ`BF3 z&}Q+FxP;9^(z?fsf@d4g_U>1SrZWGgXTQmNQ!Oxm>sIbR8hV~M)?|d^(oAd@Tngwq zfCPu|BK>w(#+`qB%9@6x4UP;-C6|17Qz90~Q1QnaEVJ;Qz58IlW5QKwQSrx~x(Vmz zo5i{M8K)cVcLEOO-m~k>ozUdFEEYz8Il6|&iJvd8Wxe_1!Mjw`Wg^fo@eA~uS-)`ek-ci@w8(X z6I9;k@mmsT4m5UXDpJxB_8@v9st3sg^ONmK6$*~k&(o=~w$(J0QWLLM%1YD8$e)oc zTYFA!34CeDngfW&fm1cl5iJp`=okbqe5{?37*&!lWs>_N$k5~RXu1#2xyH;k>LdA) zJ1Q8sWYJ5oC4kMTB|N6YePr^GmH849h+x5?x z`3pKMFVJrb=<@D10AMfQ)z@VYQV0vx-4ad*w5Xg+nlz>Lmr_{(!`lOZJ0;NpH& z=Fy!*t`Am^&1D+9#z#C9NxE-+Gjml2)O^43RxaTnNH+Lj`&oQL6~Nm|m`XPUrean# z1q~Ag5=qAXq(k*LbA|IyC8N1=E?A4aW}t=vt>01*H;j%X1iLqRjE=XvN-2^7hA!Bk z^j?s>mCB#;-+6we`T{aD7hBJ3chH=H3c=`c-oV)sBGzo*A&#z2;mo2eTddr#4g+$_ z&#(+>y21huR}gt3=NRw?z_Vuo$AJJ9TLiAQ*9z1Dx6^5dXIu89cscDjgci}R<6@dc#?4e-zx|MkIrha+$oBhIfI z2++yS`>O@f;f3vQSYoSZZLZhs`Z?nNSkSX9aBPRs8{oxj^Np^BQ=$WT_U~ ziHwwo$xx~k(~Gw>S(V=eTRieGtgLyi=!x=k*Bs_7xjW1b9(@@k4tjwG?wHF!Iks-U zbLmwUf(^JkVje75!!(KYA9PFI`JW*@?SEr7bb#=FC|L9H%g9njMAV-W?cmBN zKuv8xdm#K-Z;RsIS7p(a($t(okAUHEj1U;3=xOA(XDh2)f*gX}JCRzEO$FPh62-(` z0V>O4%lo~uL~AG;8B#d!%Fm>vs@<3GR;C>id7{kh=iuxt4B9pk^VbX;l*T$C(CECG^0k5zE|kyly*YW=&TlpT9T8{a{sEst?Ys zs%{?m+VI9nk?r;kV>uB~?=MvIj3O7o1afLotNT0YyVb&Ng4&jYW+5SEdlg|>zJ^(n z5>o!D7C$$i{L%5rxSE!{)9i5w_Sd`s?7;E?Q91Alu@QUHxs*@?GsQ1f7TdaMa!ow_ zQSHC>*<*xx7z;W0t?~Z32|ZtjS_D80liEbhmSLA7+G*V}1tnNS%qd-uBRWMiMkvJ5 zb=OKx-?hi_#VpNw62n&a+IWZL%-h=*RhrgIZc_e4!c3h)lg zwfj(_xPqJ&q7#g8l#Y%Kh z3YL<}6~=u!7CzrZ*>Ij*bCks0o0C3Y2M;UxD#PYKF0K4Zx^cP`_QC16z_QQ(eX-Xx z#Tsm;4*45E->Fci5&#z501VOw)0gzd=z4yU*2;GIamWV@tXwqh&XosBW8)bNcT|jf z;V!{yz&INdJ}?u@$i=Fe9&-Mdd+_=9KFe_Xra`H)^Dpyx4Y(=?tBy{Z6rhA(4u?(o z1|N-7IsvuB(+2nt>RfIand6Yq1<()^z#a%jn0*VbEM9Tpw#-}?e|D_Qo~Y;DsY&}M z+y`f$8cW1m_zo7{9#H`$W*D1htR(58dWLAP1+!;x*BcUHb0!wR|M7*BgwbALdBVY{Rqd&)$4 zOAZIVlpP9CM8|t~af7)9`ZcfNr=#jMlqO6YexRhEUzQf0dEOx*QrCE61#>U1n9cJB zEA$oOKb^zgV7MU6VxsW#&+4Ni)_^iwt6If+j2Qlg_JBW4dbEmX3uK*{3)>yN@xq=f zwD#S{17)$nTpyxMhy$0f_4T@jf-=K?1Kh6!1Lc~7u)Y7q!Fuw~gVo*?UN&SAawrH= zQua3Oe_*ke%xO^-(K%T-yz9$e5eBnKnA$1iMVS^<=?%_*Ha!C3EXk=HE{2dL=ZJ$zOw6M%-x9ErvE zubx9NAHDrl5L|y-p(X!`p%04xldutLq~%S{2{Pk(zll`0czKtTZ`bm(i0+>mj~xa} z_70^&dx84$wZ_+57JeVMhNVOO!S5lM3s9mMPv8D* z&3b89;>v3_P*%I$s1)z~?C5ige&mKN$&E$ zwNuxg%nd9uAeXop-*NQ9p~iN$EIefpdUZ}b*R_Wxzo%z6{!oe=rB(K&_X9k+lGjqb ziax$iH^4wWUYu;Cj-!d!A;24bg{YlQ(G+(F)I5*9cM`qXV7I60gfz(UWry{QP0~rX z>@Ut&uL!`tb6vPCl2AgTh5tk{w6nVcq*xaSMpLRAhh1&YXO1ZeDtjMRrMfklQ&s%~ z9B(gU`2O5GiEd8}LdCWEySY|OkNW+O%A`fZ*}2S#DH&DQiRtPJzKPxu272oSG`1NG zNEbS#0=(L&qwOWmZDd_yaMt9NH=q261-i3+pf>FjYn82kQdsi@8Y{4+QUX-^Ly|t3 z8^;>0c?~{-#?J` zj4c3h#pOTrGSB<Us)G zmHXbOGSzpjBQ|I!OG}+wh7aR8pd7m*ye~c!*GDFZqa1(#e|44j|IPOW{;!B^ffe0O zR02p4_NbkiXk0Y!VHIJ!E68}zm(#Z?xFTY+>}5~qK1+Fz{)GaLE@2;Fdy7=x1M+Eh z7y?IFGH$@hdg9Un?9{b6>-cwKIZ_BFxBTzET>y5PV>Nq+3op`v zV3DE95T$xFh4K5b{`29$TwFHVL+PJ#oHi#WGqj>K@=#`rU33KX(i3Vwv{tMqHLjg^ zx=K?*f3;26=mM6?mYuR~G{Nrl)VVnwen8`$&BpXJ>g6mbMVQX^e5*$>Dj^WK;R($7 z2DMy)C2#+B5d>h`kLYBfS^#D@KVT_!Iy83^LycW&(coA4(A+kS((LytGP(P5&RT3u z-M(#(K=~&kyHM<(h-{ms@HguLf8U>w>goAkH+x}_6`>1Yu3*#yT+j3r#@^k+$0~2A z|6sSOXN2Q>COSr8?^?&TZepd`Wf{R(Fe%l=K%)8fC^^rWBOSU~*?@EU*`k)&bw^LjO} z;_B14ctXtxxdi4QPoAZ;nJlk&G_N?)&WK!XXTqtBS@$)o63e^^&)OPEcK;E1en+q^ z{0d2f`dwI+QtUXn2U9F}QoOOMHQ$$tfx8!fmci<)#mj(T?0MGh8YeTy@wF|`7N{8DzTwRK6 zy|=Ot3Jx-S+8jL{gNk0M-TYoz@6-Ah4a+}-KJgGhgR3mN0YbL)tATTiO6-V|1))}&wxByLC z2n+G#?zoW1&obP?J_a)ctfVkV&=(}h_p7rYd8YsF%I+__^e9bIuQsMCROTyphxW&K z9a)N?qh>vq6S$+i z5){8Y_ZN*!&>J}6M;=qBqlr8pDoHAjE~zB`L!~i%o1!37a@#cfMkM-9s~C{4O;d_m zy-ECb)OkCeaGCwCK(=`!#atsFUtN9K z&KKZce;~49N7>&ayH1fkYP%dgStH82ns4CEAN*pVtMmthJWWX~nTM^mxmX|0n};3R zw+D-ok!C{@D%HaWvzoD9wy`DVre^*I;J_gq7_gUFR>EB(lH?A1&`LDL<*q-h`}xU# z;Mfghnx*&bKzdQ(DUABp@wI9BoUXC_$eSO!N9#@=0U3P9N$J>HE5{UcCFNaIoGBC1*I<{x~bkX-F1U zw_2C}0#dWq_zUi63~feUAS;qUz?(5pm&PKah0hSp+;C;9VzCNR`C;AJxf(}@b9NT$1IM*~f>vtuWYKDu^M8(7Dq^erG?T6B(`AEBD!OYLpVIBQ4 zo?1Jok3|yzrvGOqS<)AcANofo8Mm|eFPWsiPj$lQ5GAzgp1JcP+_+Xq55-i}#(%V? z>UAkEajz<1(|>v~CyC!k3AOeY4YR}U(p)-018Dm?pm>RpJ3rK|K}knTJj55%Jy}+- z0wGVC>#^Uyq)O@r@;&MHt4p4dyai>m*nyI{S*drSwI`G`5X)aQw<`z#E?t0YT{=_a zLtT1M7(+sOn`-YeO(_Vwu1_yv-@{8}g69W>z zd8d96en<@*9`uTSs$NK&4HcUFT(O$ZZ!m;2m?pD+Pmnq>U7n6XJF*fbbfa7SaK#;9 zhAK@?@_pRzXg^f&i$mS^f-sMtH60$-Z`ZzEYn0umnGaF-#4ITxI@N*weeX!1sR-=> znizzf&v{ljNSCMTqF=F=ymdarxZODg!}CVdDfPul!|N9VllK5w2-d6lt_e^>_wOzUa`MR z01EVNJB1l171abZ)E+gbL*Cs8Nmzg8B%x7RRDI^)7kk=JCNEi?sD=fd3#MJw%wJuK zTjY-F%T+APBP8?xUbWV%4(j=qlXX_qHf8AY+|O#(3(Y=!OH)p9B|F#nGpd5yZM~{9 ztg>Y)hh+#;KP(u(70NhbWtxvBzHFemsb@A2OmHTc3h_%R5&dx5t2N|2d0N$|(A4jP zfLJn@7fs;hLBWi{G6rCaq5c#o`JHDcI*~Lsp|#*03VwgtJHoS--WSh3Vb}C?XV+`b z`%<2Sr$gL@uYq837xnX``6I3sU^^c@3kFi7dW$|=6V`;&R~U;37)OyUF}o*-dmcg% zxGXQI>+$UEoAi`RO1FFcmi-1jq_Q01U#ulogq3`6ayL+KNOZ%@e;lH%xmwbB&Ri+xdpACGVH4%P$v9w8?6Rm0za*HR_g=bSt7{pOUU>9T}lpfCE z!JkrycUftR?FkF}YN8evMjA>~YzVk5Q#zaRMI=dBs*=s*@n%yOi;=&%5oK4lm#<5r zF0Y2#0&*Z`Q|UXGAyH`NIs`j)0?nrYIZH(L@L%-+n(8Fxk-|XF-{v$ z81*JSf&3Y@386CJNm|rVI1`aV7uD*3v)03FR{5<6-L5)LOg13Ud#1TA4QeNdvAtn6 z`?lT&_ojCIMRS(QNwy{4A_0zZRpxbW{z(*!RkO0#U|cU|3QxOwhb=?trpi+bOuOvW z(J$ax1STgTvt+=@JPLAEHWV!(px2@m>5pG($HA7xpAP+8$+EkbV@K@t8pw3{PWPFKpV*LaE42>Kw9ii zoLhk;pRVr;l@0in0>Dmocie)tn)Gl^Vwn1CnofS(#8>PWY-d*6J_WHo!&S14(t{la z!mgpzY8ue+MP0=koLes}QK5uCptKB&J#?pr2tkI@3TFjy%(lRTB`h(MO_!kzi^R%1 zlQ#mS5@$<|z^=hw50L8LC%xUs65mjzf63o-7dTl8l zrt9ko3<^H0p}o};_?f9E>77r+ml4TlJ^l`c9Htx(A1?^_X&*E?qXb?wiG`=NpVD?3 z=CVaW^1QRF8Z^&Up_qvXQ{Zy^NnN_=a@vW>*M#u}dIo;Ww^x}8=tTX-EHm8G~!+`wk7hmiIYy6Vx|v1 zt?XC8MtJ3*$H@tmp__CcKFTk)>xqY~R5#)vdXudNCTh=CLlo6!_U<3f^sbHm5{V1C z*A!T-lpm#G1Q#O<;Q{!<89eAApa9^_sD(A+pBN_TB>VYFf3Q$nb$l>%hFzxL>9yyU z1znW!8|Sa@oUI`|R#7HCNmYBK=>+(G>kjgvb8CM>cUQj4L%APn0Ta`ZZ%5EX1kDjR z27EzN5cXsO1}*bwv{R3ydgNapt7sZ$PVY--q*1%%#A4uN8m-~+8$rq|>B z6OS){-e|+OfN`nm9l%YU7soZGz&V5IR?Nz}kZ}cqW7PrsEOxFZ6QiD?Sx=Zf`~;iM zHLOvV1yZH^7OGa4{(~t&|J{_-{%J}r|7uEu$uhlN^t3WNzW0emnUY*v_TnS#CErQ_ zsgdv!?k4L*$aJy!`Ii|b7rTHEJ6f7|1imJYT0lgGf_H35!DJAz0@u=kq}y#5AeMEs zbG6~kBR)RavQVylkP9Ef&F7$}cw`bD-io<)H+lI`h$1OQVrx4!m|=_3C24OYz9zVmNi?1b9_TqQrWdHlxD^3%{xiUCePo! zZmIPb%@dy`8J=?qfMOQ1T@ofq)TrJH0`pJ>o{;Y+tX_)|u+=&E{mtrI^5IRToeyc6 zCIS(5rL=L+5|drWi+~9q>n@zv_-tv(zz<4^hvH0EHS@&U@3gh>=cggS$Up=^EFQ7^ z4rra;#?9#hK~@c)ejg_rPu42B-cm;N*ilxEo^8x|(p6KZ@+4<)cU_W2=b_X=7rF#Y zleIxrDm=*=okC4-!N85iVLmQ)!6>?=l>?b z+4%Par<^Xz#zyKb_KPKA+SfS!h0TxDz47f2w{1zXi{KVhn{fWeTO`RqeYa_#Nd7WZ zwio>}6x0puX|ZVDaBG*HsGma#YatXz(p?|VZ(bO{YFob)ij#}ICRfo_P=DwN2QKQJ z_uKiXqgK$JQ4$yiBMK~gc%QX_Y1d6xE2^nkx8(I)AGCh5Do`zyI@C0J27aP({vL41 z+bF=r#08Sv&P80RhX268vQ@pKTCZG3F;BMC%+J1UtR0|XDj(mmx%^sgub-;{6n6z8 z5t12jJ)=axN_}wBR?SK_dtugcEA!-fuo9l()r~qkB(T;|-T$kEi-f{KbSa5wZxCQl zT$((=9Lto(ZUiThr>n7Da!k=s$ly1@Eggap7D!ha8+@u(M8~8Z?lcU?% zb0qPj$E?>hQ(3!LrQMn|^{es5yYTI~aACsTC-k@PDq!59r4-drP*#S;Q8I3hppQ%4 zt@mDKjpF}{W(WO=OgHT?AtS4PYgO<4&+)N^xulX3d`sN@A#w0Fi@;jf@*5};jf0?O z`mTwo=W|Z8;PN-?NzFjFD$)QUc4Iq091S*kFr_IO z$Ewk7@!GNNy^Z(n9@mu~dEX^nSw0Qsa)^!B{B$%WKH$k$;x3!)tRe}E(%zY~RSxP} z%g;scjJ>dXP0ZK-@_jpaz2P6sHBaT<|1P%j|A4>e{2v@$|DnQ!LAW%XIR)g}x5Le) z3S3Lsf1kFpSQL3?@!S7lZ-awp+W&+J(~S7fxq$con_R#wAQx~W#8x!WgD-TMsxi!; z!*;kcyLBNpL~6%lQFAjDpvxtVphFB6X*@x3gRvy(YAzdH53h}Db^`L(O(pAJFQ{}2 zfd{yyFAPB?hh7l`^XD8@MAraKRvBO;#thS3m)QRyv9Gyrc>Y}YW?&{DI(U>|C4<(+S$)pym*#TmH; z>y`9;)1L`{9@+bpJj1WM#xaE)P!Wt@@C)=0YTjQd;5Mt$`C^{Z=LhZwuF=2xEbYyV93Kq)09w!Fi_Z#N$p6ccuJc=0b$F=k>kFOxMVokU2ugDAAR^eH!P6g zXi3P(_W74Nt~@{@TKF#+g-w_Ll~LIIZyAMFKt`eBzcLC3P5+yW!gCiOfMr0d2F)@X zYAXOBEH_+(k_5C@I^wvWkGjid^}Sn|4GdE;@DXuN`pdMS!Y{^r*oi1~y;A~A2`6O5 zY7_b9qn-hoe;n^@0y2en#ji3igmUBgEon z{qBKKe2ZL~m()1_Jsz?4KgT0xXzY{>7Ca<;;N%YXEr86IxCE;uo(4O-nEqiV91+C% z!gQ5+yBR>T$oGj^n{V+MENz)w6Yl#KXee*Jf4!->jwRdkS4{TDt27rgfo@~JnV^ji z0o#&p1S8KkF(PbcPD52jh3Jw=p>iCeb?QOVNofrM~1iS~Fr$A`{pXuQSYgZh zhWh58(E2r77f4DV>r2fiu4pFi1LaK;(E~@%YBTh}AG9~KK?TV9LAwF|T5dPHpv{$i z()NTYhmN?a_7h=zm2dwTHlAHIgx%8ivcIugYCO}X=N2O8JL}st)OTP1sfoWc{rL!- zgE0mdo7&qBZ$7Wajq1aqxF}8r!+(B8>W&Mj%i<<9hs(qkUZp!!eZqx=Mt<1&E zYa)Te_km3^Aj^d46iu-0HXU_$tgNs8@B){4>e_0^L@0Nt_KVO~)AnA&0fo^K9ZXq$ zQwl`P%&N%65&_^@TajHJhj&43#?))6kfXDOknlb8z&!AN&x_olzRjZRgy0!H>)e`! zKDz=i+0}J{t7aKUB?l(3CtN5|SYu2uHXcdh>`(@gUc=8h1J>#F5~=mW+g8^%g^`fo z^b8y%`@%suToHKsW%je!X~q;yQXiRr!WU`-vZ3T>&*))mJ#x;?4ivf|MRUu&NAhIT zLq7gsZPAP~1rOd2d%rd2oXtoWm|9k()2x7?mIz%P#N8d@)Z zqn~HAH&^m@0x54-UokZ4fEwwQ!D*NvG=~B(eIE`3TL@vPZo=2PvFX`su_qdf$Ils4 zts{F&ba!j5c#p~oiz+kECErVA2{ zr}77DvlR24+>#W`H}b!d%E?6)5!IDby17+jhU&(vNU|{fQolFR~&jc2OX+OcHgG@&0}iGInm2k6G+D%ng~$;aU;7|9JV4Ws_5G(RPB zTY`3hO1=iL%fte}_~jMC*;hVt+^(8ue1G}S&#F$#$)>f5ox-gfSE@x_45lR^y-&f) znc355XX#nZFHvy|Xyw=~xCo7T*nxDm+{NMOUG+#GhqzmI0N$y8NMKRn{f)DMYti%* z5R4%C7CoWq6zv|7b2FxZ64}*sgYr4ICURS`^yR4foiXE4z}WyI^tf0p!9bFh^X1r^ zcEQ&RA1_vLC~26<|Ex=>DpK*Ped=ku>4tC`=+7P<1p9eFPs#c`$u*P_4W2m&A$ZhU zFg`a!fk#_Hj*v@|AYY}YF?cAVEn^EC^DIB6uv0QT>mz5f=Z#+thYj4!_As?m;_15G z3F8G`(*{Z?Fgwc=lXt5w(Q)o`HJ-Nj zb~HtuOMm=Uv~k?8*fjIKrq`3tr}DG+sjpngpNyP6b1ND5N2DL*ky0Zb*FLbXL&9bq zs6ay$cs|tNbMxmKCdvSxw|Xf~&eh=oUyWwjTvvs5H?|b6>?pOavn;>9tJ7i&2!|n7 z9;HyOwZiXx{N|$-hhn z!;Epv=k|xlsqdE$;VgT(!2iEMkJ7lw=mn0C{QD@3$Ry_(XkBExI(*h}By*j0 zTUN%j&0W^7W#>e+vc+Q_(LhA%Wg`t`;Lbphl*vKn@RrJq64zmN~)5-{YOWGle&RqFS|DJ=c}oZSL9VEV?ONWW|JUo3;vZ7 z!#KT7^$)nWZC*>#jo2(v)6CXV96zGfB^QhtR_R;l$BXUqserD$KiIjMU9-~Nwtapk zKo#c{39~5(bK5I58r^x!qIxO$8J@`9uYoQx$jgh9`90vo|N958#*?hajV#NS$*V7J zPzLqdh0Sj@#iX1SfGw*-dSts4C5+ZaV{FR+0)Qq=b1@$I?Vd;q@uN|`aFylP{ye`bd;QlhvE+`>DjA=x*_&bd= z=uwz5BFEWWnb&W}#pJN5vC|Ut()ML@(LYFvIPg8`Qv@);GskQk>OnsE z|F5=2J>s0z9*L9N@($WY^=I3Ne!9_h?VhHiU0+OZo5gf%>r-UC;Qm(WOrXyyyc^Jz zB9?MtKn<(V#%a<8ogncFCbpA;vSgKh9l3PMmo#g4(<#7%uEcAwM)BHH;0)d&MfPT} zX82~q+=27SZAL4zN%dHRF^Q|&cwFtK?6QSjebZ>}ZrqQTEeltt$;hn;b)IIvHLXia zp3%2pH5=1TS_aAUH)GI*YkK;!7#ka@QrW8E8xxI5ho!#ghO~0}O<)O{Uu?%_RiHvO z)F@fxsH(_zD{?V$;aSz_o~7)!w4LCG!-DChAL<@Pj; zuO#4Jw#Z5G+J}br>~R}4@V`du69K)A@AV0vg?jdDb$-hgUda=qbsje6Lq=$1tgxmN z`?WcbI)oVfPxIzS0O_nAy)us06bUHqVDOA81mvV`n@+%NM=ZZTsQ>A_wd6DxE8F27 zB1OblI%b+@`pIq?+>-ARJ5c=QUj_w4RBKZQi31+)@)w^x?0>I0^W?QATOSH4*)rL_ z8|-gvZ9Ox#WaWR5i)ibX3Hp&yd*Ki$yL7+_CJcw@!L4bMudZetF;A_?ZPKZVz}gfx zIC&Ef7De7ly!VYUkQf)Qj<e!Oj8}Fe<;0O}~nLgL&Uh4spio6O} zzUSccG6GFg=LU9#T}O&7ClW^X7^$m>M+*RbmUbbPJW5Ff96<*FD&~bnmu=t=nWv$| zjg%N)=ZKMQiE3x9m!C~)isS{^?S=5slmlQM^wpJdk#dXrjAGq!E*(l&#_sQz_KStt zr(KY|v#iI$ae5Iy+RU?x5{NuwmvTHX`&uYg^e_Oeu(1@KKFnGkx@%LJaQWo0m z+o_V$=7T`+jP5_xHu67LTibuDwza@cP(-QcUTFg|9m~5?aoZFvm?ep;w|Ap0t=$G4 zcIHXzG(DYg+AJFy`~5o0*B4>BTAdPB$$fjd3xa^BS{3#n#?L$JFDs68?CFLG^?b1oUVV)I+U-|N;^7q6YN zMsg3LRZ;Pb93BPOZcLFm)1TIqlOP?z>Y7i83$u>rbpsK(11pM6WYL3!WTeLrdrY&? z*8YGiV^H`GV<)hb&~+tRkN+bJRnmwBYx(AbmrCaY3LO1RdUdk!bT2W<<_;`cmg`B3 z%iuFiZti4SV4NMEzffD%HO>7<(Y+S~8Uxy_KC%d<2T*!mzz+fH6zBAZFh!IrAOh|) zl+#XF=SN9Y#T~1yn_+L7exk+U+Cl65x#&$BFzX}S`^#intDN>_=h>s_lgoCSuW#Je z2rHa&f0_(#x0B~9F*Lh9v5ZkGQY)G?NHYeSRq>Q74HBoHzI&AouUT072l4S){(qCr z_W#wj{%7GEZ^Xh)Z2SIub(3{gn!+%3|0!z8sk1n5ROL2>iU<9WpH7COXaOpc~cCcBBGbjrFz z{I10DYrs-oF}-t0V;ZD{6Ls;tZO+(qoJTm?@VM05>g#f)Vqwa!oY?xm=`sIM1E+$w zB--chliv`HHycTJ+R1xOjmUOPSCp6rsEQ=UaQ~)J!pzq+n2_@2m0O7y)6=Rw7Er7R z$1rav{KhCudgqY6&{oUUf!VM1*1JKK!CPa|On-{2h`Q~__Ykgqo)LzyGx&%w%48*@ zfiXyZ9K8m=f7a}fYYl&%JzOI|G=R}h zHmSZPC~2OL0xDj=;|R#NfGFAQ(dpcQzO4?EY>A z>NC^ak4M;B@wa04zMgfh8)6CI>;|3NfAN*VtkXET{cvbzQ)V9bD2NcJ*NufdW6Xid z3CK-fyy1m5KY`tizTz3hnFIq*w`GD?`fK6cF-!v|7EItIAs6AuQs-vY{hlgu63a~I zX7x|Y8Mm5E_N&Uej2|m6PSCG0^Wr#LHDf`n3H-p>0b)8V`cw5q0%PUx9oLmxV59U)rqs?Q?_(qPIUb2=Ho7lx`j>?1PztFswAXI| zm6?ay{YARwJvlcG)U9V#R>cw2JFQ|l8Ov?wYFpgCaO}1)+A!e@?WmbZe0~@3Mq<@$ zvR%kLeqhPklu`B?PpSNGEpwUk7GF7s0IK^%N-Ht%n!Co;0EpS}mDw=ZsKqP-4& zR~qhBe6!7PmP`V+G45+BO_rBXx&R@ASBw&{z$;3uE}OroGmRN8Pp7H?x+wgBx}Y(J4C(n_Wq-MPMt={XS6XBC`wK`hp^(j8sC44OC?HQ*1V#5=_4&CfEU}` zp&2dEkSRiO`ns-hr8%1CXRzDNNrT#yiQZ6#(75;^wn&&V6V|<%V|)3=x9y>aO$K)-}Y` zcd*NOJtYB1NPTP{cX*QR`=1MN%Em%s8hoi7u*dbJJoKU}&-lI#3wSi$xGobg zOG@R5^ql8q1QLcWaq$&+^xWC^qK$FJu8@_D?x^(2-n6o@y{Wfez3M&LKA2ov9c(oK zKc>ySr@Kj79GYqGvg*oqqv{4=fTN=M<9l&ViV-QkI+;&i_x6e*pR*4J4(V@nfa3(* za}r$;l3ob0M31Fd?Ae#!n*p}KG2oljn%y*`vd(B?Jp+`ne{wysiLM8Q2)R@@!C9T$ z*n+D*PKMc+lg{btQ+k{8K@=(7NQC3)7ZZ5V3CKG%Um(ZQzpH_WH@6?VU6s4&DsQ2P)46&hO7s0?$1})B z(TDLOIJQsy9J?Ig`V+OKJt~+xjmtTE)~(_c;pu*XTr-pW;#uEAnI@+#y1~jzj!3IUjcyXCxH`<0!)hJ zAK&}}8O;k(xa#f+zhjUx+&(c8vvKRcpjmw&u@EhzToIPYszCgO$h33xwXaPc{3 z9U%7m76d#6S57I6<;={iNj#1xH4MMrVZG3M7>2svI^-(a!Dson)G95J9Hg>isORFl zwXgh7QXRgZykpfvmuoHbJK3;G8OXW)Xa_aET^9Od~SeWykyznEiJD0 z=s7;1bEeC{Co?X$Kh^hZxrNic?0g>rW=>sc4`8O{YC0^;KykW+NK$6^VspFZRrV-c z!ul3@H5pw|`R1kGA4yiWS~ivC&)~)&l`n?U>es<2aXxLErYOr2>8sgbeNt09uYscB%@^nPP_97KXQjF3Qqe zN(0VzqSe7#6MK1MTlqg?=#HJ=e*1@aA2t5llePk?=-vba!4un?Q#d3h5s&O(ZQ#Xj zpN9I?*K5syu7T1*Y$rFC#I&` z$mD*8m=yPaFGU}iSM1K--*t^q*H%J68+Q@snwdoL;$?`5{ zUHYw7fS)$F0mh^44Pq*4vFmnbI^Rz6Y_rOU9omh08W!hO&E!wlI!=ry$rLx6jWLcL zc5B0Hb%AyI%LJgQiZB(DdoGn5W?4&Wj%i@Y*DH1vP|D73O7qxs`^z*r;9yX$8gN|c zM8e(PW$&GpO*5(xR1>`&yI&mK=)TZqd!87PezhE@4&S;ZZO&s7bOjHKJ@)TQW~vf- ze02hKU8TtH&y(0}@sP&JBs5jYY7;#?u()2R!|H)ftC_DFBWm3E-fS)Rm+3iVrW>!@ z*31jYS@|g6{PBj+7C)K7^}4gDT%{~u^>>gBS(&r=207a9Z021t`N#7zR8~g2CJ{4< zIM<;e9@CyG!Zr*rL%%^kbr| zvcbw|aD8x+`gYwc5Pt#{QZi9R;~eUh+8_OYP!JOSp)=30bRf{EnEhZ6LJWkB^0dwG zOc4dyp}cN2YgA!G)lvR6t??|-X4d!;GuZh3jhor#m5I^0Il#w32V2j%sJqv`LeD_I zstKE2>zXCJOrt3bQy9^7&nkK-pmWhg&R-x&BYsSE8Z7V!bhlag)Ri3Zpt7639K~fc zAI(T-c{@g!NC(QX(#sq-}+M63rv&rR>kTH2S0*Vht}l?$|%B zbz-A{+D#Z0&$-!tM)h<)t@x*Mia@VXOC_8}Fbm$G@uFQFR$HoNu?q#1l|;cOSn^y; zs+4D9x~Zog4*%IoJqGUw@id(dz;}TvAf2;W`~j8NuJo&wMJ_dUs%zyoYeaA9>fGPe z=gu-aB)++~#l1VUd3_N%0|e<@P{_ECN5-Q$*<8s%f6{!?Rn^7T&(ABTofXl#5(v3r zwi>vo>gRDp^CYp}b+t-Ky_# z_+px7qfoS2>N=;9WGS2hY~mJhes~8!+W;7dowibx?BX?s>WonF*UqmBK>dmDlDh&z zAGWw9veuGe>2;ovH)dtp>D@Qmo_2JdRgSg!;!vZvih0)KZ^h0X;Ujs+-)OFMY|H}~ zd{Ldq*XeOv%}`-PM^OHInil8V2F^t{mGybCsjVw6lcT?#?8NkS4jnMFyrSW+9Ny&D z3&v%?`zEb(#rz!to1o`98zh#3df=#^RHS#0{prd=xF&OxB+Vn;x`qPI?kUlX*el#` ze5gap2l{`%C`Z*9FW%Q!ulcZs@6CCLY0gE7%^7Ug8JIsXppt>_o+uQjiJ9s=YOEo5qQYU2m6Pb)M|dYHGov2?YLLJIh|Y_w=+q{867pTuny=-a4CGqE%IwpN_oL7d}Lm!nP`@DF57b8MQ(;ke$tnl6;Yzo$9FTm zM;j&i{|KP(B!(qp-JN#~4Iv)hscA#G$u*mV*dLWK(SB1-zQ8s*0%HLR+z!2paTNxT zmBKq07b4S=yCV#X=W}UIHdP*O0x37YejdqCij8=zB`k%PWPCv^mWl||lm1Y$vICsD zvv~LaGI7i~Yn&M)>>)X4oJXHo@|i2&$k@0e$seTrOaBearDKr6h1NM{Y-F^C=o*H% z3v$jF3pr!_hhAw~U8%g&S}oyBo-Mu{vUB2ogy4OrYN>u~1G!q0McOR@qf{52uP{3G zV1Xpu{84stdRFjVoIrGvx-w)O?!Zu>hyz^Ng;2oKRJkinty+LLPV{H$gL=PvsZq|o z3CV1o5pC;d7w?d4!H~kNnuV5trt`34l*>3I3qZ+*iw1~xRAa^{K?^1o&=X^qs}rX6 zuSDggdVJa5<&gU=92{7)DM94`IFC?E+IlBYNSXCG1m@ z?4Q@A;S7O|_7w_ZbLA86YO=yoS++RT^tE1RnZsnXl}E6%lbRU4raWx2uLim|Huj4~ z``-L)k^ZLnB`5}R0_KV5oRPyV55>|fiFm_As|khKIpMwOvOUV}6zeBj)~8vRmi|=| zcAPeSsh0wfWHbqma-)|+u@JTZqgFKJJSBo|VC^!gx8U4$D9F->l&W`GVuHHDv_g{w z&|kiosf*?EYZqhYH}p1q`y9*qY)%k;O|u1oodpVFFp?_j%1{imI1ojGU zIhZ{j#OgA-Ub$-3^x?>RT?rtVZ#Yzh45aYel;8NRClq~{^&fn%^Xxk;cy&qx^*W!{ z+)Q%hm!fHG=-ZMTN15CIf>M`00z})s078MT!+yD$t)cdi3KHV5>USp1{ z(w)3ajNdmGwbg`H$udjFFtaeoC%0>+$8X~gKb2I#wl}6r4Eef7@_V42T~@_ae8y;zgEOe=P95ggGmUbAie?;%A? z1Peof_K3oY=LP`SHa7#Rgt>+7Z{wv-&8?*_Y_)^W3Nyuf?JfubpS5!TCbx;CDtBJw zx~2PlUF*&L+Qh4QzI3)>u8!5l&A9ftI5*Ro=$it2X_S41(a?CFO9 zd~Qg-9F3cuyqcyIVJx(4;U-GGWh?}u`k_uyxT#NJKJ;|)M#S5?nNj?Bv|xeN>HKI9 z>2tM~CXxIqqNmUJXGCb2! z>-ai-*7+4Idlhj7rkt~W2T%}{D98wh&CUPTK5-)BtDfjdTV11vE9ek)5|aFfo)5o6 zc}@X!XNqc0qr%8akF{MmKD8dBB|X7k5-!nSa^l_@j4O5(0ZkBm=dKuEUGH_s#n zbdv|>vsi0t5S6VS6*v9u&*}219mP)8w4gBQ`25WonGKroC}`?b-bZXx@+U%NRRnckw={ zck{FN?UzCK`+-*C4h(`*q?{q)vE6TSKLn)gwyz=bI$4hXSnxQn$m25>_4uB7C&&Xa zB=+>$W|xKdCO!=o(#rcGveaT@T+(@~`&Vz=MTlSg`HKb0RmzITy*TYuu$FYRl1ju996MEfW zCRff_4bJoy+nXd2h4i*Fzj@4mSkeoShwIPd*x$~1R~>mmq@0hczkPKj*KH+AB>Otv zG-h8^ni0L6v>0~ww9xrzrXyW)Eo+Vfn=iQzHs!ZKH$bYuhd`9ioWgn-wln^T- zhx&4B%La|@Zp)^InXwRHw(qPN1*sf*zpr_Y!ZUaVY}`}-(qSv zG8)hl$BL1r+6*7Mq{U7SI7wB>4^~*$OWnNLTk=ynI)I7P$pr6&|3Xw%>SEQB-E2W!L5 zkc+gt2SJX-haaX}FZxyYwmj$hP;^R^Vz4DO%e|}4#Jv~UBCKjm{O*dV0!4k*+f)-? zMmV+JjELX0&hnrBE*anuoBgae$ITfl|An8Y$piJ8m++mln<;QN5|KAi&$8nYcIgxa!HXjSsWf-c+Vvia^8Y+u$^iAu~uQg6=*J zJIl$3%E8i0;Ih{9v+L&Mc|L=fdl9VQwzNwDu?TM$>RGV6O1IGjR^vKJ7KPWm;3^_V zV$MlDD($cFm$_)t5+~hn)7#CJbfo#$vAzU80~D4o!?=dkQ;C*d_q2&CXMo$M7S8o!7o#e<-q&Wn$Rl& z7w(N)o0pGi3>-fM$BUmbzHNV@=4egB`~zxWEHt+AOLd;Cg|1=l=6aVqJ;|Y@YQb!V zJEBy;^?QiDM;{Hj5y@a3(a54&1k?a<7x8h1BHrUXqU}OK0I2))>9a@Z7)&F&N4TH7 zZi&3BbZre1y+Aa~(Ae#6{;@!?CcbTz|4cJ0SiPf@?FQu>@bm__JF3s5oo~B+3tQw! zyaeP40|6)=^lF3)Aa52Jv;0BNY zH{xU7w4SSMqGJWS-ed-)7DKa#Q=E)!d#bi-YnutnP}ERf{`wT{JiBoNP-(k4-$Mix zr~5U|6Z1pSPLu9Shi+|p%gIscdCx>|2)~XTZN9j%wT%Q3pP*(X$niw6EDnIS^#jqS z>4med7rrw%YaG9&HMqtY5OTX}#A>d3^VsYMDXhTJmwe{v2&wb&odsQHx4B}i6ZBbU z!F+Qy5@fUFkFD>E4adSIgLSCI9`0#mV4~T$`{BQz?IVEMe!nL1k>=q;P#c8G=hj>b zTOoA=qr%Q+jBb~Fz+Wc3PAR>zxYg-YX5!(wSv$=1c>%XDm9b@(vfr71YLO8@$dU&U ziaV7^GQgs@$?lEcp2!SqiN0N}Phb31Htx_IT)G89x6T=w;hi(}1 zAuJyA=~Ev!VREW=3sU3vEwBhai{Ras``sf!yBdUZAX{vUYlH57J+>*ey-m3~m=%a$ znD!u-QnVI7^)n>LeS}3#s?m{ue%4lvEoYSRCuA%{WEG zd-$zd>dSJJ?Qd7*DM2nxr9W%^2~EG+zHj+SxE7cUGpUpnFD`U7M=w;aAWIn60MU>v zOucM+N!$08?wotUYD>=h>BEl`NeA2kw9L|1MSPNO*V|{%w3~BzX+cHm0WLefHF4wS1q?liI|NJ_(#kUQl z4~%ZYYz$?ZHxH@iYSN}z5jD{6Z0WDazUV`5d^hc4F}a7H-M}i*&KYGZ4I(0c|4iBH zHma;1!`FZCu0vGn3hE_>nZ@_N@mpd$9K#~Ifq*o`DK&LmGaF2CqPg;wnnzys$5QR3 z`^uPCS+|ily9l7CyE$u?r&(>+acW!)V61Z(`sZWVVf$K)E0 z#mbHc)`{0uPtCZD)1`nt&Jia49$bN65+WpoQlkT zqlTW)o~hn&BITGBpwro}JZDqOs?)dWa~*+QxQHZG0H46br;TM}b>KZXquAEjoC@iS3muP^y$C{mn!jRP z6JRe)pMhRT|HikN{3lgDqdN#$19(Iv?Ht}RI?i^J&=m^I4r%@!>h^=G8xFQ@lz+uu61W z*V_~fpDc^mFQ%pFLqWVU?cxx59MBbG5bqYwH@x`c?BAhCQ!+QNmVxyR|5mRusd}4d zno%11;UOxu=?o1@DWz%z91Y20Kv)oq(CqMt`%!ak;WSJ)c@q)rf@wrDSmp3B8OmfW zdQOArBIxXzhAb(;!o_N!`fZ67y=eh(DNis~x0;fCc`oADWADZ>rY~$XPl`N%1mIRS z4+=Mey4%iJQ?KAVth5K;7HH03f9_UMD^eSyl59aUZQd-dP)&n^s_tmAlo&wvpZx>6=S}-nUbN- z+K#t3d@_dpW6YQzGrqsiiRGnnYvPgNFkhZrqUfSWyNqT>xvpgQ)o`qC^r5}vgExYK z9ie_JekuUdz<|LT6(R*_y-MU>9KRsf9=wpEnQW?(#LfJpwM$*9vjHeFCxhut4KJ`U z3vBZNUF_G;57Pt>Hx=py4bpQw-!@r%HRl(Cr9<&@;eVMx3>g|9@gSOZoj7IA82CYI zO2g=&c|US2xKzOYsPzd}g%}U;n;(=w&Q27*E7e!HKKf-&J^%XLJy)xm(}z1bb$fCf zALAbOW%Nkx8Th&>{;w9N`9>3qEoLoCpaE0}QHf^{@i0!%Rp;jN5o0i!r?w)IfUBRT zQ=_r$=kFQBC5&Kl%!vn?kV5!r6g{NQrTns(*f8Zr{oMjEvs{E^03&jH?Wp z2X96SzDtj^yCJn0q=I0NXdo^@DW=c^sd06)ptpE9e# zGqfO802e|#V+x5_Oh=$~+dNKmIg!*-(nLzChiPL&_KvR|vh3n5bl%T&AGB;qk?b0S z7ZKg4n1xD@4ndD-$O*++BqubbXr#15&_coEAUi?%jL`enH{(lcnedm)R%(48y}U4E z;$o=J6-RCm=g%RG?98m?zjz^~lWgST_Oi*)g6;wQfQl5U&anVqay%u5yCGYvn&MHk zR$*9kUh((HXOm;AmiAFS%wI*-wSBUPdI%xlI95XXX;0{rzz{;{L&`jawM!gf;x z@=MViDZlBoADp7(SP&m_Szq3B&{&8XGi>lu4KRP_Ma( zj6I$uhc1-}s`V&wF4zy)-urPPnlgrkbfTgl%rs9&k_7fD+80arHh$IW|B@=iJn?Y# zS9^rcNsHH7+`AU>f?fC*u_;msH;dNv#%Is8_|a;KBBaAC znH{cwv+#6oy@^}kPIW51en;ZGIXAR7Z^WZ!6&}l20PVyhrvEZATH)9KGL5F|16DNN z3P0dOS!nyVPGg#sH5xyX@>qAdGw|60(bAZ5ZMoz8tTCPtU9HZf}o$zv^j1Xf)AzDKM#`?sG`M znBh={;%&uJ57#lHFK&+C=NY=s%1yZgCgaG}J#HelE2~+w^TJ&!pdh) zlrt_)(ZDz|4WP)7(}F++h||F4Rk$DolfoCEIU=+Vkqw)}zGt!(QeJ<|odk z1I42S_Fs#C@V|=xe6RYGs}YRgGm>4Sf7XPaZ>L=2j?e{N#ZYSg169VHGg8XMv0BHt!fSw)5ukD7)*9HUx-jkN zd6TcRFy#rKnX9w!)3%)Z3*PKWmv=0M4xi8b-po3MxS;;XPTYm4y7>7 z^!mR{tMC8GLT#jfQ9zu7Y%ElTXXY1MSX#4`k12GY4=G!DEhwHC_VHwoxTW=&`ZeYi zfF_~JU^|}!yOy;$)C!4$u+u>K0qQW57lqG;++GNT-3v+5snF-Pdh#agb3~v9nuKbR zi@(F!ve9S^9*3R(M(N!lTrn^vtis1UTpuU&U%`963O$GbbmrZZAIS(RcHZF#oHFWKMM%+hDi!QKLo_2axy@*wM(?R-KaDo}~;pi$7ffIf?c6aoH zo^ObPAF=SVR)P*&wnS);$oR3(+QHpGvJeV)usK#bO$o-I$`Hx$EogDS^l&Bm^+>VX zpxsO6kHZr~Zy-WGpwOwHOjH3y^gbzh8S@||Yj&8PH$VPO{F8PUZiacA!|shn@b_jr z8aqxdQnN<6l`~4W8^qb5iB%77ITA{nh_A(NKz`^palbq_SnJl>=5{O!fEZ4nYO
j;)u)0QqT5<8!-V#&5)i)Y~-<$7hNW!Od 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%0D)ZS^Sh*5 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 aem};Zoz2qqi?rz9OIq}I`wRIo{=WbRYiMKu literal 322381 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%0A{Af_z5|!YbPYS?0Gf$$=ow* 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 diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts index c459509c12..7795191da8 100644 --- a/packages/twenty-front/src/generated-metadata/graphql.ts +++ b/packages/twenty-front/src/generated-metadata/graphql.ts @@ -380,6 +380,7 @@ export type ApplicationRegistration = { isFeatured: Scalars['Boolean']; isListed: Scalars['Boolean']; latestAvailableVersion?: Maybe; + logoUrl?: Maybe; name: Scalars['String']; oAuthClientId: Scalars['String']; oAuthRedirectUris: Array; @@ -409,6 +410,7 @@ export type ApplicationRegistrationSummary = { __typename?: 'ApplicationRegistrationSummary'; id: Scalars['UUID']; latestAvailableVersion?: Maybe; + logoUrl?: Maybe; sourceType: ApplicationRegistrationSourceType; }; @@ -6431,7 +6433,7 @@ export type TrackAnalyticsMutationVariables = Exact<{ export type TrackAnalyticsMutation = { __typename?: 'Mutation', trackAnalytics: { __typename?: 'Analytics', success: boolean } }; -export type ApplicationFieldsFragment = { __typename?: 'Application', id: string, name: string, description?: string | null, version?: string | null, universalIdentifier: string, applicationRegistrationId?: string | null, canBeUninstalled: boolean, defaultRoleId?: string | null, settingsCustomTabFrontComponentId?: string | null, availablePackages: any, applicationRegistration?: { __typename?: 'ApplicationRegistrationSummary', id: string, latestAvailableVersion?: string | null, sourceType: ApplicationRegistrationSourceType } | null, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isCustom: boolean, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIReadOnly: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isSystem?: boolean | null, isUIReadOnly?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, logicFunctions: Array<{ __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, sourceHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, cronTriggerSettings?: any | null, databaseEventTriggerSettings?: any | null, httpRouteTriggerSettings?: any | null, applicationId?: string | null, createdAt: string, updatedAt: string }> }; +export type ApplicationFieldsFragment = { __typename?: 'Application', id: string, name: string, description?: string | null, version?: string | null, universalIdentifier: string, applicationRegistrationId?: string | null, canBeUninstalled: boolean, defaultRoleId?: string | null, settingsCustomTabFrontComponentId?: string | null, availablePackages: any, applicationRegistration?: { __typename?: 'ApplicationRegistrationSummary', id: string, latestAvailableVersion?: string | null, sourceType: ApplicationRegistrationSourceType, logoUrl?: string | null } | null, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isCustom: boolean, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIReadOnly: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isSystem?: boolean | null, isUIReadOnly?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, logicFunctions: Array<{ __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, sourceHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, cronTriggerSettings?: any | null, databaseEventTriggerSettings?: any | null, httpRouteTriggerSettings?: any | null, applicationId?: string | null, createdAt: string, updatedAt: string }> }; export type FindManyApplicationsQueryVariables = Exact<{ [key: string]: never; }>; @@ -6443,14 +6445,14 @@ export type FindOneApplicationQueryVariables = Exact<{ }>; -export type FindOneApplicationQuery = { __typename?: 'Query', findOneApplication: { __typename?: 'Application', id: string, name: string, description?: string | null, version?: string | null, universalIdentifier: string, applicationRegistrationId?: string | null, canBeUninstalled: boolean, defaultRoleId?: string | null, settingsCustomTabFrontComponentId?: string | null, availablePackages: any, applicationRegistration?: { __typename?: 'ApplicationRegistrationSummary', id: string, latestAvailableVersion?: string | null, sourceType: ApplicationRegistrationSourceType } | null, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isCustom: boolean, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIReadOnly: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isSystem?: boolean | null, isUIReadOnly?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, logicFunctions: Array<{ __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, sourceHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, cronTriggerSettings?: any | null, databaseEventTriggerSettings?: any | null, httpRouteTriggerSettings?: any | null, applicationId?: string | null, createdAt: string, updatedAt: string }> } }; +export type FindOneApplicationQuery = { __typename?: 'Query', findOneApplication: { __typename?: 'Application', id: string, name: string, description?: string | null, version?: string | null, universalIdentifier: string, applicationRegistrationId?: string | null, canBeUninstalled: boolean, defaultRoleId?: string | null, settingsCustomTabFrontComponentId?: string | null, availablePackages: any, applicationRegistration?: { __typename?: 'ApplicationRegistrationSummary', id: string, latestAvailableVersion?: string | null, sourceType: ApplicationRegistrationSourceType, logoUrl?: string | null } | null, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isCustom: boolean, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIReadOnly: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isSystem?: boolean | null, isUIReadOnly?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, logicFunctions: Array<{ __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, sourceHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, cronTriggerSettings?: any | null, databaseEventTriggerSettings?: any | null, httpRouteTriggerSettings?: any | null, applicationId?: string | null, createdAt: string, updatedAt: string }> } }; export type FindOneApplicationByUniversalIdentifierQueryVariables = Exact<{ universalIdentifier: Scalars['UUID']; }>; -export type FindOneApplicationByUniversalIdentifierQuery = { __typename?: 'Query', findOneApplication: { __typename?: 'Application', id: string, name: string, description?: string | null, version?: string | null, universalIdentifier: string, applicationRegistrationId?: string | null, canBeUninstalled: boolean, defaultRoleId?: string | null, settingsCustomTabFrontComponentId?: string | null, availablePackages: any, applicationRegistration?: { __typename?: 'ApplicationRegistrationSummary', id: string, latestAvailableVersion?: string | null, sourceType: ApplicationRegistrationSourceType } | null, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isCustom: boolean, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIReadOnly: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isSystem?: boolean | null, isUIReadOnly?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, logicFunctions: Array<{ __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, sourceHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, cronTriggerSettings?: any | null, databaseEventTriggerSettings?: any | null, httpRouteTriggerSettings?: any | null, applicationId?: string | null, createdAt: string, updatedAt: string }> } }; +export type FindOneApplicationByUniversalIdentifierQuery = { __typename?: 'Query', findOneApplication: { __typename?: 'Application', id: string, name: string, description?: string | null, version?: string | null, universalIdentifier: string, applicationRegistrationId?: string | null, canBeUninstalled: boolean, defaultRoleId?: string | null, settingsCustomTabFrontComponentId?: string | null, availablePackages: any, applicationRegistration?: { __typename?: 'ApplicationRegistrationSummary', id: string, latestAvailableVersion?: string | null, sourceType: ApplicationRegistrationSourceType, logoUrl?: string | null } | null, applicationVariables: Array<{ __typename?: 'ApplicationVariable', id: string, key: string, value: string, description: string, isSecret: boolean }>, agents: Array<{ __typename?: 'Agent', id: string, name: string, label: string, description?: string | null, icon?: string | null, prompt: string, modelId: string, responseFormat?: any | null, roleId?: string | null, isCustom: boolean, modelConfiguration?: any | null, evaluationInputs: Array, applicationId?: string | null, createdAt: string, updatedAt: string }>, objects: Array<{ __typename?: 'Object', id: string, universalIdentifier: string, nameSingular: string, namePlural: string, labelSingular: string, labelPlural: string, color?: string | null, description?: string | null, icon?: string | null, isCustom: boolean, isRemote: boolean, isActive: boolean, isSystem: boolean, isUIReadOnly: boolean, createdAt: string, updatedAt: string, labelIdentifierFieldMetadataId?: string | null, imageIdentifierFieldMetadataId?: string | null, applicationId: string, shortcut?: string | null, isLabelSyncedWithName: boolean, isSearchable: boolean, duplicateCriteria?: Array> | null, indexMetadataList: Array<{ __typename?: 'Index', id: string, createdAt: string, updatedAt: string, name: string, indexWhereClause?: string | null, indexType: IndexType, isUnique: boolean, isCustom?: boolean | null, indexFieldMetadataList: Array<{ __typename?: 'IndexField', id: string, fieldMetadataId: string, createdAt: string, updatedAt: string, order: number }> }>, fieldsList: Array<{ __typename?: 'Field', id: string, universalIdentifier: string, type: FieldMetadataType, name: string, label: string, description?: string | null, icon?: string | null, isCustom?: boolean | null, isActive?: boolean | null, isSystem?: boolean | null, isUIReadOnly?: boolean | null, isNullable?: boolean | null, isUnique?: boolean | null, createdAt: string, updatedAt: string, defaultValue?: any | null, options?: any | null, settings?: any | null, isLabelSyncedWithName?: boolean | null, morphId?: string | null, applicationId: string, relation?: { __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } } | null, morphRelations?: Array<{ __typename?: 'Relation', type: RelationType, sourceObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, targetObjectMetadata: { __typename?: 'Object', id: string, nameSingular: string, namePlural: string }, sourceFieldMetadata: { __typename?: 'Field', id: string, name: string }, targetFieldMetadata: { __typename?: 'Field', id: string, name: string } }> | null }> }>, logicFunctions: Array<{ __typename?: 'LogicFunction', id: string, name: string, description?: string | null, runtime: string, timeoutSeconds: number, sourceHandlerPath: string, handlerName: string, toolInputSchema?: any | null, isTool: boolean, cronTriggerSettings?: any | null, databaseEventTriggerSettings?: any | null, httpRouteTriggerSettings?: any | null, applicationId?: string | null, createdAt: string, updatedAt: string }> } }; export type AuthTokenFragmentFragment = { __typename?: 'AuthToken', token: string, expiresAt: string }; @@ -8196,7 +8198,7 @@ export const SkillFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind": export const AgentFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode; export const ObjectMetadataFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}}]} as unknown as DocumentNode; export const LogicFunctionFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LogicFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LogicFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHandlerPath"}},{"kind":"Field","name":{"kind":"Name","value":"handlerName"}},{"kind":"Field","name":{"kind":"Name","value":"toolInputSchema"}},{"kind":"Field","name":{"kind":"Name","value":"isTool"}},{"kind":"Field","name":{"kind":"Name","value":"cronTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"databaseEventTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"httpRouteTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode; -export const ApplicationFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApplicationFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Application"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}}]}},{"kind":"Field","name":{"kind":"Name","value":"canBeUninstalled"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRoleId"}},{"kind":"Field","name":{"kind":"Name","value":"settingsCustomTabFrontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"availablePackages"}},{"kind":"Field","name":{"kind":"Name","value":"applicationVariables"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"isSecret"}}]}},{"kind":"Field","name":{"kind":"Name","value":"agents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AgentFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"objects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectMetadataFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logicFunctions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LogicFunctionFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LogicFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LogicFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHandlerPath"}},{"kind":"Field","name":{"kind":"Name","value":"handlerName"}},{"kind":"Field","name":{"kind":"Name","value":"toolInputSchema"}},{"kind":"Field","name":{"kind":"Name","value":"isTool"}},{"kind":"Field","name":{"kind":"Name","value":"cronTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"databaseEventTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"httpRouteTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode; +export const ApplicationFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApplicationFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Application"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}},{"kind":"Field","name":{"kind":"Name","value":"logoUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"canBeUninstalled"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRoleId"}},{"kind":"Field","name":{"kind":"Name","value":"settingsCustomTabFrontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"availablePackages"}},{"kind":"Field","name":{"kind":"Name","value":"applicationVariables"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"isSecret"}}]}},{"kind":"Field","name":{"kind":"Name","value":"agents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AgentFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"objects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectMetadataFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logicFunctions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LogicFunctionFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LogicFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LogicFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHandlerPath"}},{"kind":"Field","name":{"kind":"Name","value":"handlerName"}},{"kind":"Field","name":{"kind":"Name","value":"toolInputSchema"}},{"kind":"Field","name":{"kind":"Name","value":"isTool"}},{"kind":"Field","name":{"kind":"Name","value":"cronTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"databaseEventTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"httpRouteTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]} as unknown as DocumentNode; export const AuthTokenFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AuthTokenFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AuthToken"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"token"}},{"kind":"Field","name":{"kind":"Name","value":"expiresAt"}}]}}]} as unknown as DocumentNode; export const AuthTokenPairFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AuthTokenPairFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AuthTokenPair"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"accessOrWorkspaceAgnosticToken"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AuthTokenFragment"}}]}},{"kind":"Field","name":{"kind":"Name","value":"refreshToken"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AuthTokenFragment"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AuthTokenFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AuthToken"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"token"}},{"kind":"Field","name":{"kind":"Name","value":"expiresAt"}}]}}]} as unknown as DocumentNode; export const AvailableSsoIdentityProvidersFragmentFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AvailableSSOIdentityProvidersFragment"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FindAvailableSSOIDP"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"issuer"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"workspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}}]}}]}}]} as unknown as DocumentNode; @@ -8267,8 +8269,8 @@ export const GetToolInputSchemaDocument = {"kind":"Document","definitions":[{"ki export const OnAgentChatEventDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"OnAgentChatEvent"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"threadId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"onAgentChatEvent"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"threadId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"threadId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"threadId"}},{"kind":"Field","name":{"kind":"Name","value":"event"}}]}}]}}]} as unknown as DocumentNode; export const TrackAnalyticsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"TrackAnalytics"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"type"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"AnalyticsType"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"event"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"name"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"properties"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"JSON"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"trackAnalytics"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"type"},"value":{"kind":"Variable","name":{"kind":"Name","value":"type"}}},{"kind":"Argument","name":{"kind":"Name","value":"event"},"value":{"kind":"Variable","name":{"kind":"Name","value":"event"}}},{"kind":"Argument","name":{"kind":"Name","value":"name"},"value":{"kind":"Variable","name":{"kind":"Name","value":"name"}}},{"kind":"Argument","name":{"kind":"Name","value":"properties"},"value":{"kind":"Variable","name":{"kind":"Name","value":"properties"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"success"}}]}}]}}]} as unknown as DocumentNode; export const FindManyApplicationsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindManyApplications"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findManyApplications"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}}]}}]}}]}}]} as unknown as DocumentNode; -export const FindOneApplicationDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindOneApplication"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findOneApplication"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ApplicationFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LogicFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LogicFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHandlerPath"}},{"kind":"Field","name":{"kind":"Name","value":"handlerName"}},{"kind":"Field","name":{"kind":"Name","value":"toolInputSchema"}},{"kind":"Field","name":{"kind":"Name","value":"isTool"}},{"kind":"Field","name":{"kind":"Name","value":"cronTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"databaseEventTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"httpRouteTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApplicationFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Application"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}}]}},{"kind":"Field","name":{"kind":"Name","value":"canBeUninstalled"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRoleId"}},{"kind":"Field","name":{"kind":"Name","value":"settingsCustomTabFrontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"availablePackages"}},{"kind":"Field","name":{"kind":"Name","value":"applicationVariables"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"isSecret"}}]}},{"kind":"Field","name":{"kind":"Name","value":"agents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AgentFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"objects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectMetadataFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logicFunctions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LogicFunctionFields"}}]}}]}}]} as unknown as DocumentNode; -export const FindOneApplicationByUniversalIdentifierDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindOneApplicationByUniversalIdentifier"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"universalIdentifier"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findOneApplication"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"universalIdentifier"},"value":{"kind":"Variable","name":{"kind":"Name","value":"universalIdentifier"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ApplicationFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LogicFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LogicFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHandlerPath"}},{"kind":"Field","name":{"kind":"Name","value":"handlerName"}},{"kind":"Field","name":{"kind":"Name","value":"toolInputSchema"}},{"kind":"Field","name":{"kind":"Name","value":"isTool"}},{"kind":"Field","name":{"kind":"Name","value":"cronTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"databaseEventTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"httpRouteTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApplicationFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Application"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}}]}},{"kind":"Field","name":{"kind":"Name","value":"canBeUninstalled"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRoleId"}},{"kind":"Field","name":{"kind":"Name","value":"settingsCustomTabFrontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"availablePackages"}},{"kind":"Field","name":{"kind":"Name","value":"applicationVariables"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"isSecret"}}]}},{"kind":"Field","name":{"kind":"Name","value":"agents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AgentFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"objects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectMetadataFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logicFunctions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LogicFunctionFields"}}]}}]}}]} as unknown as DocumentNode; +export const FindOneApplicationDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindOneApplication"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findOneApplication"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ApplicationFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LogicFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LogicFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHandlerPath"}},{"kind":"Field","name":{"kind":"Name","value":"handlerName"}},{"kind":"Field","name":{"kind":"Name","value":"toolInputSchema"}},{"kind":"Field","name":{"kind":"Name","value":"isTool"}},{"kind":"Field","name":{"kind":"Name","value":"cronTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"databaseEventTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"httpRouteTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApplicationFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Application"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}},{"kind":"Field","name":{"kind":"Name","value":"logoUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"canBeUninstalled"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRoleId"}},{"kind":"Field","name":{"kind":"Name","value":"settingsCustomTabFrontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"availablePackages"}},{"kind":"Field","name":{"kind":"Name","value":"applicationVariables"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"isSecret"}}]}},{"kind":"Field","name":{"kind":"Name","value":"agents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AgentFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"objects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectMetadataFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logicFunctions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LogicFunctionFields"}}]}}]}}]} as unknown as DocumentNode; +export const FindOneApplicationByUniversalIdentifierDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FindOneApplicationByUniversalIdentifier"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"universalIdentifier"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"findOneApplication"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"universalIdentifier"},"value":{"kind":"Variable","name":{"kind":"Name","value":"universalIdentifier"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ApplicationFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AgentFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Agent"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"prompt"}},{"kind":"Field","name":{"kind":"Name","value":"modelId"}},{"kind":"Field","name":{"kind":"Name","value":"responseFormat"}},{"kind":"Field","name":{"kind":"Name","value":"roleId"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"modelConfiguration"}},{"kind":"Field","name":{"kind":"Name","value":"evaluationInputs"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ObjectMetadataFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Object"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}},{"kind":"Field","name":{"kind":"Name","value":"labelSingular"}},{"kind":"Field","name":{"kind":"Name","value":"labelPlural"}},{"kind":"Field","name":{"kind":"Name","value":"color"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isRemote"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"labelIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"imageIdentifierFieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"shortcut"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"isSearchable"}},{"kind":"Field","name":{"kind":"Name","value":"duplicateCriteria"}},{"kind":"Field","name":{"kind":"Name","value":"indexMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"indexWhereClause"}},{"kind":"Field","name":{"kind":"Name","value":"indexType"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"indexFieldMetadataList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fieldMetadataId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"order"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"fieldsList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"label"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"icon"}},{"kind":"Field","name":{"kind":"Name","value":"isCustom"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isSystem"}},{"kind":"Field","name":{"kind":"Name","value":"isUIReadOnly"}},{"kind":"Field","name":{"kind":"Name","value":"isNullable"}},{"kind":"Field","name":{"kind":"Name","value":"isUnique"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"defaultValue"}},{"kind":"Field","name":{"kind":"Name","value":"options"}},{"kind":"Field","name":{"kind":"Name","value":"settings"}},{"kind":"Field","name":{"kind":"Name","value":"isLabelSyncedWithName"}},{"kind":"Field","name":{"kind":"Name","value":"morphId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"relation"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"morphRelations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"sourceObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetObjectMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"nameSingular"}},{"kind":"Field","name":{"kind":"Name","value":"namePlural"}}]}},{"kind":"Field","name":{"kind":"Name","value":"sourceFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"targetFieldMetadata"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LogicFunctionFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LogicFunction"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"runtime"}},{"kind":"Field","name":{"kind":"Name","value":"timeoutSeconds"}},{"kind":"Field","name":{"kind":"Name","value":"sourceHandlerPath"}},{"kind":"Field","name":{"kind":"Name","value":"handlerName"}},{"kind":"Field","name":{"kind":"Name","value":"toolInputSchema"}},{"kind":"Field","name":{"kind":"Name","value":"isTool"}},{"kind":"Field","name":{"kind":"Name","value":"cronTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"databaseEventTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"httpRouteTriggerSettings"}},{"kind":"Field","name":{"kind":"Name","value":"applicationId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApplicationFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Application"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"universalIdentifier"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistrationId"}},{"kind":"Field","name":{"kind":"Name","value":"applicationRegistration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"latestAvailableVersion"}},{"kind":"Field","name":{"kind":"Name","value":"sourceType"}},{"kind":"Field","name":{"kind":"Name","value":"logoUrl"}}]}},{"kind":"Field","name":{"kind":"Name","value":"canBeUninstalled"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRoleId"}},{"kind":"Field","name":{"kind":"Name","value":"settingsCustomTabFrontComponentId"}},{"kind":"Field","name":{"kind":"Name","value":"availablePackages"}},{"kind":"Field","name":{"kind":"Name","value":"applicationVariables"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"value"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"isSecret"}}]}},{"kind":"Field","name":{"kind":"Name","value":"agents"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AgentFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"objects"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ObjectMetadataFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"logicFunctions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LogicFunctionFields"}}]}}]}}]} as unknown as DocumentNode; export const AuthorizeAppDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"authorizeApp"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"clientId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"codeChallenge"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"redirectUrl"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"state"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"authorizeApp"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"clientId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"clientId"}}},{"kind":"Argument","name":{"kind":"Name","value":"codeChallenge"},"value":{"kind":"Variable","name":{"kind":"Name","value":"codeChallenge"}}},{"kind":"Argument","name":{"kind":"Name","value":"redirectUrl"},"value":{"kind":"Variable","name":{"kind":"Name","value":"redirectUrl"}}},{"kind":"Argument","name":{"kind":"Name","value":"state"},"value":{"kind":"Variable","name":{"kind":"Name","value":"state"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"redirectUrl"}}]}}]}}]} as unknown as DocumentNode; export const EmailPasswordResetLinkDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"EmailPasswordResetLink"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"email"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"workspaceId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"emailPasswordResetLink"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"email"},"value":{"kind":"Variable","name":{"kind":"Name","value":"email"}}},{"kind":"Argument","name":{"kind":"Name","value":"workspaceId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"workspaceId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"success"}}]}}]}}]} as unknown as DocumentNode; export const GenerateApiKeyTokenDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"GenerateApiKeyToken"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"apiKeyId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"UUID"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"expiresAt"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"generateApiKeyToken"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"apiKeyId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"apiKeyId"}}},{"kind":"Argument","name":{"kind":"Name","value":"expiresAt"},"value":{"kind":"Variable","name":{"kind":"Name","value":"expiresAt"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"token"}}]}}]}}]} as unknown as DocumentNode; diff --git a/packages/twenty-front/src/modules/applications/graphql/fragments/applicationFragment.ts b/packages/twenty-front/src/modules/applications/graphql/fragments/applicationFragment.ts index 126e174c6e..94328c23da 100644 --- a/packages/twenty-front/src/modules/applications/graphql/fragments/applicationFragment.ts +++ b/packages/twenty-front/src/modules/applications/graphql/fragments/applicationFragment.ts @@ -18,6 +18,7 @@ export const APPLICATION_FRAGMENT = gql` id latestAvailableVersion sourceType + logoUrl } canBeUninstalled defaultRoleId diff --git a/packages/twenty-front/src/pages/settings/applications/SettingsApplicationDetails.tsx b/packages/twenty-front/src/pages/settings/applications/SettingsApplicationDetails.tsx index 7cbd177235..8bb79b8768 100644 --- a/packages/twenty-front/src/pages/settings/applications/SettingsApplicationDetails.tsx +++ b/packages/twenty-front/src/pages/settings/applications/SettingsApplicationDetails.tsx @@ -43,6 +43,8 @@ export const SettingsApplicationDetails = () => { const applicationName = application?.name ?? t`Application details`; const applicationDescription = application?.description ?? undefined; + const applicationLogoUrl = + application?.applicationRegistration?.logoUrl ?? undefined; const settingsCustomTabFrontComponentId = application?.settingsCustomTabFrontComponentId; @@ -96,6 +98,7 @@ export const SettingsApplicationDetails = () => { } links={[ diff --git a/packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx b/packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx index f08d28052b..6528a059bf 100644 --- a/packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx +++ b/packages/twenty-front/src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx @@ -135,7 +135,7 @@ export const SettingsApplicationsDeveloperTab = () => { window.open( getDocumentationUrl({ locale: currentWorkspaceMember?.locale, - path: '/developers/extend/capabilities/apps', + path: '/developers/extend/apps/getting-started', }), '_blank', ) diff --git a/packages/twenty-sdk/src/cli/__tests__/apps/fixture-paths.ts b/packages/twenty-sdk/src/cli/__tests__/apps/fixture-paths.ts index 677edd575b..0145883121 100644 --- a/packages/twenty-sdk/src/cli/__tests__/apps/fixture-paths.ts +++ b/packages/twenty-sdk/src/cli/__tests__/apps/fixture-paths.ts @@ -2,7 +2,7 @@ import { resolve } from 'path'; const FIXTURES_ROOT = resolve(__dirname, '../../../../../twenty-apps/fixtures'); -export const POSTCARD_APP_PATH = resolve(FIXTURES_ROOT, 'postcard-app'); +export const RICH_APP_PATH = resolve(FIXTURES_ROOT, 'rich-app'); export const MINIMAL_APP_PATH = resolve(FIXTURES_ROOT, 'minimal-app'); export const INVALID_APP_PATH = resolve(FIXTURES_ROOT, 'invalid-app'); export const FUNCTION_EXECUTE_APP_PATH = resolve( diff --git a/packages/twenty-sdk/src/cli/__tests__/apps/postcard-app/__e2e__/applications-install-delete-reinstall.e2e-spec.ts b/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__e2e__/applications-install-delete-reinstall.e2e-spec.ts similarity index 85% rename from packages/twenty-sdk/src/cli/__tests__/apps/postcard-app/__e2e__/applications-install-delete-reinstall.e2e-spec.ts rename to packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__e2e__/applications-install-delete-reinstall.e2e-spec.ts index b18e8bf4fe..0e2d630bc2 100644 --- a/packages/twenty-sdk/src/cli/__tests__/apps/postcard-app/__e2e__/applications-install-delete-reinstall.e2e-spec.ts +++ b/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__e2e__/applications-install-delete-reinstall.e2e-spec.ts @@ -3,13 +3,13 @@ import { existsSync } from 'fs'; import { join } from 'path'; import { inspect } from 'util'; import { runCliCommand } from '@/cli/__tests__/integration/utils/run-cli-command.util'; -import { POSTCARD_APP_PATH } from '@/cli/__tests__/apps/fixture-paths'; +import { RICH_APP_PATH } from '@/cli/__tests__/apps/fixture-paths'; inspect.defaultOptions.depth = 10; -describe('Application: install delete and reinstall postcard-app', () => { - const applicationName = 'postcard-app'; - const appPath = POSTCARD_APP_PATH; +describe('Application: install delete and reinstall rich-app', () => { + const applicationName = 'rich-app'; + const appPath = RICH_APP_PATH; beforeAll(async () => { expect(existsSync(appPath)).toBe(true); diff --git a/packages/twenty-sdk/src/cli/__tests__/apps/postcard-app/__e2e__/health.e2e-spec.ts b/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__e2e__/health.e2e-spec.ts similarity index 100% rename from packages/twenty-sdk/src/cli/__tests__/apps/postcard-app/__e2e__/health.e2e-spec.ts rename to packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__e2e__/health.e2e-spec.ts diff --git a/packages/twenty-sdk/src/cli/__tests__/apps/postcard-app/__integration__/app-dev/app-dev.integration.spec.ts b/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/app-dev.integration.spec.ts similarity index 67% rename from packages/twenty-sdk/src/cli/__tests__/apps/postcard-app/__integration__/app-dev/app-dev.integration.spec.ts rename to packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/app-dev.integration.spec.ts index 2170c7d370..84ac021755 100644 --- a/packages/twenty-sdk/src/cli/__tests__/apps/postcard-app/__integration__/app-dev/app-dev.integration.spec.ts +++ b/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/app-dev.integration.spec.ts @@ -1,12 +1,12 @@ import { runAppDevInProcess } from '@/cli/__tests__/integration/utils/run-app-dev-in-process.util'; -import { POSTCARD_APP_PATH } from '@/cli/__tests__/apps/fixture-paths'; +import { RICH_APP_PATH } from '@/cli/__tests__/apps/fixture-paths'; import { defineEntitiesTests } from './tests/entities.tests'; import { defineManifestTests } from './tests/manifest.tests'; -describe('postcard-app dev', () => { +describe('rich-app dev', () => { beforeAll(async () => { - const result = await runAppDevInProcess({ appPath: POSTCARD_APP_PATH }); + const result = await runAppDevInProcess({ appPath: RICH_APP_PATH }); if (!result.success) { const diagnostics = JSON.stringify( @@ -21,6 +21,6 @@ describe('postcard-app dev', () => { } }, 60000); - defineManifestTests(POSTCARD_APP_PATH); - defineEntitiesTests(POSTCARD_APP_PATH); + defineManifestTests(RICH_APP_PATH); + defineEntitiesTests(RICH_APP_PATH); }); diff --git a/packages/twenty-sdk/src/cli/__tests__/apps/postcard-app/__integration__/app-dev/expected-manifest.ts b/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/expected-manifest.ts similarity index 100% rename from packages/twenty-sdk/src/cli/__tests__/apps/postcard-app/__integration__/app-dev/expected-manifest.ts rename to packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/expected-manifest.ts diff --git a/packages/twenty-sdk/src/cli/__tests__/apps/postcard-app/__integration__/app-dev/tests/console-output.tests.ts b/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/tests/console-output.tests.ts similarity index 100% rename from packages/twenty-sdk/src/cli/__tests__/apps/postcard-app/__integration__/app-dev/tests/console-output.tests.ts rename to packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/tests/console-output.tests.ts diff --git a/packages/twenty-sdk/src/cli/__tests__/apps/postcard-app/__integration__/app-dev/tests/entities.tests.ts b/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/tests/entities.tests.ts similarity index 100% rename from packages/twenty-sdk/src/cli/__tests__/apps/postcard-app/__integration__/app-dev/tests/entities.tests.ts rename to packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/tests/entities.tests.ts diff --git a/packages/twenty-sdk/src/cli/__tests__/apps/postcard-app/__integration__/app-dev/tests/manifest.tests.ts b/packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/tests/manifest.tests.ts similarity index 100% rename from packages/twenty-sdk/src/cli/__tests__/apps/postcard-app/__integration__/app-dev/tests/manifest.tests.ts rename to packages/twenty-sdk/src/cli/__tests__/apps/rich-app/__integration__/app-dev/tests/manifest.tests.ts diff --git a/packages/twenty-sdk/src/cli/commands/app-command.ts b/packages/twenty-sdk/src/cli/commands/app-command.ts index 66c1ca58ee..216cddb200 100644 --- a/packages/twenty-sdk/src/cli/commands/app-command.ts +++ b/packages/twenty-sdk/src/cli/commands/app-command.ts @@ -33,10 +33,11 @@ export const registerCommands = (program: Command): void => { .command('dev [appPath]') .description('Watch and sync local application changes') .option('-v, --verbose', 'Show detailed logs') + .option('-d, --debug', 'Show detailed logs (alias for --verbose)') .action(async (appPath, options) => { await devCommand.execute({ appPath: formatPath(appPath), - verbose: options.verbose, + verbose: options.verbose || options.debug, }); }); diff --git a/packages/twenty-sdk/src/cli/operations/index.ts b/packages/twenty-sdk/src/cli/operations/index.ts index 5e0fa60cd4..b69fb04af5 100644 --- a/packages/twenty-sdk/src/cli/operations/index.ts +++ b/packages/twenty-sdk/src/cli/operations/index.ts @@ -27,6 +27,9 @@ export { serverStart } from './server-start'; export type { ServerStartOptions, ServerStartResult } from './server-start'; export { detectLocalServer } from '@/cli/utilities/server/detect-local-server'; +// Config +export { ConfigService } from '@/cli/utilities/config/config-service'; + // Shared types and error codes export { APP_ERROR_CODES, diff --git a/packages/twenty-sdk/src/cli/utilities/build/manifest/__tests__/manifest-validate.spec.ts b/packages/twenty-sdk/src/cli/utilities/build/manifest/__tests__/manifest-validate.spec.ts index f62d0a6427..c85c594758 100644 --- a/packages/twenty-sdk/src/cli/utilities/build/manifest/__tests__/manifest-validate.spec.ts +++ b/packages/twenty-sdk/src/cli/utilities/build/manifest/__tests__/manifest-validate.spec.ts @@ -7,7 +7,7 @@ import { FieldMetadataType, RelationType } from 'twenty-shared/types'; import { manifestValidate } from '@/cli/utilities/build/manifest/manifest-validate'; const validApplication: ApplicationManifest = { - universalIdentifier: '4ec0391d-18d5-411c-b2f3-266ddc1c3ef7', + universalIdentifier: '8e8ee827-5a0b-46b0-bb63-c13ccd734ac6', displayName: 'Test App', description: 'Test app for Twenty', defaultRoleUniversalIdentifier: '68bb56f3-8300-4cb5-8cc3-8da9ee66f1b2', diff --git a/packages/twenty-server/src/engine/core-modules/application/application-registration/application-registration.entity.ts b/packages/twenty-server/src/engine/core-modules/application/application-registration/application-registration.entity.ts index aa291d1d83..633bf68876 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-registration/application-registration.entity.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-registration/application-registration.entity.ts @@ -127,6 +127,11 @@ export class ApplicationRegistrationEntity { @Column({ type: 'jsonb', nullable: true }) manifest: Manifest | null; + @Field(() => String, { nullable: true }) + get logoUrl(): string | null { + return this.manifest?.application?.logoUrl ?? null; + } + @OneToMany( () => ApplicationRegistrationVariableEntity, (variable) => variable.applicationRegistration, diff --git a/packages/twenty-server/src/engine/core-modules/application/application-registration/dtos/application-registration-summary.dto.ts b/packages/twenty-server/src/engine/core-modules/application/application-registration/dtos/application-registration-summary.dto.ts index 143146e550..aaea0c3072 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-registration/dtos/application-registration-summary.dto.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-registration/dtos/application-registration-summary.dto.ts @@ -17,4 +17,9 @@ export class ApplicationRegistrationSummaryDTO { @Field(() => ApplicationRegistrationSourceType) sourceType: ApplicationRegistrationSourceType; + + @IsOptional() + @IsString() + @Field(() => String, { nullable: true }) + logoUrl?: string | null; }