diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml index afa9407..a016242 100644 --- a/.github/workflows/pr-checks.yml +++ b/.github/workflows/pr-checks.yml @@ -34,6 +34,9 @@ jobs: - name: Format check run: pnpm fmt + - name: Build + run: pnpm build + typo-check: runs-on: ubuntu-latest steps: diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 8655f25..75b5cf9 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -13,7 +13,10 @@ export default withMermaid( description: "Platform Documentation", base: "/", srcDir: "docs", - ignoreDeadLinks: true, + ignoreDeadLinks: [ + // Ignore localhost URLs used in examples + /^http:\/\/localhost/, + ], head: [["link", { rel: "icon", href: "/favicon.png" }]], diff --git a/docs/app-shell/api/define-i18n-labels.md b/docs/app-shell/api/define-i18n-labels.md index b1f1e47..699de89 100644 --- a/docs/app-shell/api/define-i18n-labels.md +++ b/docs/app-shell/api/define-i18n-labels.md @@ -138,5 +138,4 @@ labels.t("invalid"); // ❌ Type error ## Related -- [Internationalization Guide](../guides/internationalization) - Complete i18n guide - [defineModule](define-module) - Use labels in modules diff --git a/docs/app-shell/api/guards/overview.md b/docs/app-shell/api/guards/overview.md index f18bdac..5645934 100644 --- a/docs/app-shell/api/guards/overview.md +++ b/docs/app-shell/api/guards/overview.md @@ -350,4 +350,3 @@ const checkPermission: Guard = async ({ context }) => { - [hidden()](hidden) - Hide/deny access guard function - [redirectTo()](redirect-to) - Redirect guard function - [WithGuard Component](../../components/with-guard) - Component-level guards -- [Guards & Permissions Guide](../../guides/guards-permissions) - Detailed tutorial diff --git a/docs/app-shell/components/app-shell.md b/docs/app-shell/components/app-shell.md index 7bd7737..1ad61da 100644 --- a/docs/app-shell/components/app-shell.md +++ b/docs/app-shell/components/app-shell.md @@ -170,8 +170,6 @@ Settings appear in a dropdown menu in the sidebar header, accessible via the set Supported locales: `en`, `ja` -[Learn more about Internationalization →](../guides/internationalization) - ### errorBoundary - **Type:** `ErrorBoundaryComponent` (optional) diff --git a/docs/app-shell/components/command-palette.md b/docs/app-shell/components/command-palette.md index 194bbc0..5fe8aac 100644 --- a/docs/app-shell/components/command-palette.md +++ b/docs/app-shell/components/command-palette.md @@ -277,7 +277,6 @@ The CommandPalette follows these design principles: - [Modules and Resources](../concepts/modules-and-resources) - Define routes that appear in CommandPalette - [Routing and Navigation](../concepts/routing-navigation) - Navigation system -- [Guards and Permissions](../guides/guards-permissions) - Control route visibility ## Troubleshooting diff --git a/docs/app-shell/components/sidebar-group.md b/docs/app-shell/components/sidebar-group.md index 39ad856..a1c2c2d 100644 --- a/docs/app-shell/components/sidebar-group.md +++ b/docs/app-shell/components/sidebar-group.md @@ -455,7 +455,6 @@ Without `to`, only the chevron is clickable (for expand/collapse). ## Related Concepts - [Sidebar Navigation](../concepts/sidebar-navigation) - Sidebar customization guide -- [Internationalization](../guides/internationalization) - Multi-language support ## API Reference diff --git a/docs/app-shell/components/with-guard.md b/docs/app-shell/components/with-guard.md index dd64a05..67f432a 100644 --- a/docs/app-shell/components/with-guard.md +++ b/docs/app-shell/components/with-guard.md @@ -424,7 +424,6 @@ const checkPermission: Guard = async ({ context }) => { ## Related Concepts -- [Guards and Permissions](../guides/guards-permissions) - Comprehensive guard guide - [Modules and Resources](../concepts/modules-and-resources) - Route-level guards ## API Reference diff --git a/docs/app-shell/concepts/authentication.md b/docs/app-shell/concepts/authentication.md index 08a8331..8823b37 100644 --- a/docs/app-shell/concepts/authentication.md +++ b/docs/app-shell/concepts/authentication.md @@ -49,7 +49,7 @@ The above code will: - Show the `guardComponent` while loading or when unauthenticated - Handle token management and session persistence automatically -See the [API](api.md#authprovider) for more details. +See the [useAuth](../api/use-auth) for more details. ## Authentication Hook @@ -89,7 +89,7 @@ The `authState` object contains: | `isAuthenticated` | `boolean` | Whether user is authenticated | | `user` | `User \| null` | Current user object (null if not authenticated) | -See the [API](api.md#useauth) for more details. +See the [useAuth API](../api/use-auth) for more details. ## Extending User Type @@ -244,7 +244,7 @@ function App() { | `getAppUri()` | `() => string` | Returns the `appUri` used to create this client | | `fetch` | `typeof fetch` | Authenticated fetch with built-in DPoP proof generation and token refresh | -See the [API](api.md#createauthclient) for more details. +See the [useAuth API](../api/use-auth) for more details. ## Integration with AppShell diff --git a/docs/app-shell/concepts/modules-and-resources.md b/docs/app-shell/concepts/modules-and-resources.md index b8f0f59..4cdb062 100644 --- a/docs/app-shell/concepts/modules-and-resources.md +++ b/docs/app-shell/concepts/modules-and-resources.md @@ -107,7 +107,7 @@ The same applies to resources: a `defineResource()` call without a `component` m Guards on component-less modules and resources execute correctly. For example, a `redirectTo()` guard will fire as expected. If all guards return `pass()`, the route falls back to a 404 (since there is no component to render). -> Read more about [client-side navigation](routing-and-navigation) in AppShell apps +> Read more about [client-side navigation](routing-navigation) in AppShell apps ## Route Guards @@ -117,7 +117,7 @@ Both modules and resources support `guards` - an array of functions that control - Reusability: Share common guards across routes - Semantic constraints: Clear `pass()`, `hidden()`, or `redirectTo()` results -See the [Route Guards documentation](api.md#route-guards) in the API reference for full details. +See the [Route Guards documentation](../api/guards/overview) in the API reference for full details. ### Guard Examples diff --git a/docs/getting-started/core-concepts/services.md b/docs/getting-started/core-concepts/services.md index cd68727..edeb145 100644 --- a/docs/getting-started/core-concepts/services.md +++ b/docs/getting-started/core-concepts/services.md @@ -67,7 +67,7 @@ Job orchestration service (Preview): - **Conditional branching** - **Retry and error handling** -[Learn more about Workflow →](/guides/workflow) +[Learn more about Workflow →](/guides/workflow/) ### Secret Manager diff --git a/docs/guides/executor/overview.md b/docs/guides/executor/overview.md index 05968f9..3484436 100644 --- a/docs/guides/executor/overview.md +++ b/docs/guides/executor/overview.md @@ -125,4 +125,4 @@ You can view the number of attempts for each job created for an executor in the For more details on the number of attempts, refer to the [Verify the trigger](/tutorials/setup-executor/event-based-trigger#5verifythetrigger) section of the event-based trigger tutorial. -Additionally, executor operations are subject to a recursive call depth limit of 10 levels when triggering other platform services. See [Platform Limits](/reference/platform-limits#recursive-call-detection) for more details. +Additionally, executor operations are subject to a recursive call depth limit of 10 levels when triggering other platform services. See [Platform Limits](/reference/platform/platform-limits#recursive-call-detection) for more details. diff --git a/docs/guides/executor/workflow-operation.md b/docs/guides/executor/workflow-operation.md index 7b4769e..a772799 100644 --- a/docs/guides/executor/workflow-operation.md +++ b/docs/guides/executor/workflow-operation.md @@ -6,7 +6,7 @@ doc_type: guide The Workflow operation enables triggering workflows from the Executor service. This operation type is ideal for automatically starting workflows in response to events, webhooks, or scheduled tasks. -For more details on workflows, refer to the [Workflow Service](/guides/workflow) documentation. +For more details on workflows, refer to the [Workflow Service](/guides/workflow/) documentation. ## Configuration Example @@ -105,7 +105,7 @@ Workflow operations are ideal for: ## Related Documentation -- [Workflow Service Overview](/guides/workflow) +- [Workflow Service Overview](/guides/workflow/) - [Creating Workflows](/guides/workflow/creating-workflows) - [Triggering Workflows](/guides/workflow/triggering-workflow) - [Monitoring Executions](/guides/workflow/monitoring-executions) diff --git a/docs/guides/function/overview.md b/docs/guides/function/overview.md index a9eeafd..dcc5da8 100644 --- a/docs/guides/function/overview.md +++ b/docs/guides/function/overview.md @@ -131,7 +131,7 @@ query { } ``` -Function operations are subject to a recursive call depth limit of 10 levels when calling other platform services. See [Platform Limits](/reference/platform-limits#recursive-call-detection) for more details. +Function operations are subject to a recursive call depth limit of 10 levels when calling other platform services. See [Platform Limits](/reference/platform/platform-limits#recursive-call-detection) for more details. ## Using the "user" variable diff --git a/docs/guides/index.md b/docs/guides/index.md index 1556bc6..3cf3aa8 100644 --- a/docs/guides/index.md +++ b/docs/guides/index.md @@ -9,16 +9,16 @@ Comprehensive guides for building applications on Tailor Platform. ## Core Platform Guides - [Application](application.md) - Create application manifests and API endpoints for your services -- [Pipeline](pipeline.md) - Build custom GraphQL resolvers with business logic and data transformations +- [Resolver](resolver.md) - Build custom GraphQL resolvers with business logic and data transformations - [Events](events.md) - Event types and payloads for building dynamic workflows and automations - [Secret Manager](secretmanager.md) - Securely manage API keys, tokens, and credentials with versioning - [Static Website Hosting](static-website-hosting.md) - Deploy single-page applications with CDN caching and access control ## Service-Specific Guides -- [TailorDB](tailordb/) - Database schema, fields, relationships, permissions, hooks, and auto-generated APIs -- [Auth](auth/) - Authentication setup, app login, auth connections, and identity provider integrations -- [Executor](executor/) - Event-based, webhook, and scheduled triggers with various operations -- [Function](function/) - Custom function development, TailorDB access, debugging, and examples +- [TailorDB](tailordb/overview) - Database schema, fields, relationships, permissions, hooks, and auto-generated APIs +- [Auth](auth/overview) - Authentication setup, app login, auth connections, and identity provider integrations +- [Executor](executor/overview) - Event-based, webhook, and scheduled triggers with various operations +- [Function](function/overview) - Custom function development, TailorDB access, debugging, and examples - [Workflow](workflow/) - Creating workflows, monitoring executions, and triggering mechanisms -- [Integration](integration/) - Third-party integrations including Shopify, QuickBooks, ShipStation, and more +- [Integration](integration/overview) - Third-party integrations including Shopify, QuickBooks, ShipStation, and more diff --git a/docs/guides/tailordb/hooks.md b/docs/guides/tailordb/hooks.md index 14e2735..3453ea0 100644 --- a/docs/guides/tailordb/hooks.md +++ b/docs/guides/tailordb/hooks.md @@ -16,7 +16,7 @@ You can perform calculations using other fields within the same record. For exam 2. Adding user context: Hooks allow the addition of current user context to the record. For instance, a field like `createdById` can be populated with the `user.id`.\ -Additionally, you can utilize user attributes, an array of UUIDs configured in the `AttributesFields` in the Auth service. A typical use case for `user.attributes` involves validation. Refer to this [example](/guides/tailordb/validations/#exampledemonstratinghowtouseuserattributes). +Additionally, you can utilize user attributes, an array of UUIDs configured in the `AttributesFields` in the Auth service. A typical use case for `user.attributes` involves validation. Refer to this [example](/guides/tailordb/validations#exampledemonstratinghowtouseuserattributes). Furthermore, the field updates itself whenever a new record is created or an existing one is updated.\ This ensures data consistency without manual recalculations, similar to calculated fields in a database, and helps you avoid writing complex logic in [Pipeline](/guides/resolver). diff --git a/docs/sdk/index.md b/docs/sdk/index.md index cc2c888..6489621 100644 --- a/docs/sdk/index.md +++ b/docs/sdk/index.md @@ -13,6 +13,9 @@ Learn how to build apps with the Tailor Platform SDK. ### Service Guides -- [Services](services/) - Core platform services including Auth, Resolver, TailorDB, Workflow, and more -- [CLI](cli/) - Command-line interface tools for managing applications, auth, secrets, users, and workflows +- [Auth](services/auth) - Authentication service configuration +- [TailorDB](services/tailordb) - Database service configuration +- [Resolver](services/resolver) - Custom GraphQL resolver service +- [Executor](services/executor) - Event-driven automation service +- [Workflow](services/workflow) - Job orchestration service - [Generator](generator/) - Code generation tools for builtin and custom generators diff --git a/docs/sdk/services/resolver.md b/docs/sdk/services/resolver.md index cdc4c36..d08c11b 100644 --- a/docs/sdk/services/resolver.md +++ b/docs/sdk/services/resolver.md @@ -13,7 +13,7 @@ Resolvers provide: ## Comparison with Tailor Platform Pipeline Resolver -The SDK's Resolver is a simplified version of Tailor Platform's [Pipeline Resolver](/guides/pipeline). +The SDK's Resolver is a simplified version of Tailor Platform's [Pipeline Resolver](/guides/resolver). | Pipeline Resolver | SDK Resolver | | ---------------------------------------- | --------------------------------- | diff --git a/docs/sdk/services/workflow.md b/docs/sdk/services/workflow.md index 35a2dec..683d0b6 100644 --- a/docs/sdk/services/workflow.md +++ b/docs/sdk/services/workflow.md @@ -12,7 +12,7 @@ Workflows provide: - Access to TailorDB via Kysely query builder - Job triggering to compose multi-step logic -For the official Tailor Platform documentation, see [Workflow Guide](/guides/workflow). +For the official Tailor Platform documentation, see [Workflow Guide](/guides/workflow/). ## Workflow Rules diff --git a/docs/tutorials/develop-from-scratch/index.md b/docs/tutorials/develop-from-scratch/index.md index eaa650d..4e8a5ec 100644 --- a/docs/tutorials/develop-from-scratch/index.md +++ b/docs/tutorials/develop-from-scratch/index.md @@ -21,10 +21,10 @@ Learn how to build a complete application on the Tailor Platform from the ground After completing a develop-from-scratch tutorial, explore: -- [Data Schema Management](../manage-data-schema/) - Advanced schema patterns -- [Setup Authentication](../setup-auth/) - Identity providers and OAuth2 +- [Data Schema Management](../manage-data-schema/overview) - Advanced schema patterns +- [Setup Authentication](../setup-auth/overview) - Identity providers and OAuth2 - [Resolvers](../resolver) - Custom business logic -- [Executors](../setup-executor/) - Event-driven automation +- [Executors](../setup-executor/overview) - Event-driven automation - [Application Endpoints](../app-endpoint) - Expose your services ## Need Help? diff --git a/docs/tutorials/manage-data-schema/create-data-schema.md b/docs/tutorials/manage-data-schema/create-data-schema.md index 9d7462a..b9356f1 100644 --- a/docs/tutorials/manage-data-schema/create-data-schema.md +++ b/docs/tutorials/manage-data-schema/create-data-schema.md @@ -4,7 +4,7 @@ With Tailor Platform's TailorDB, you can easily add new types (data models) to y This tutorial demonstrates how to create a new data schema using the SDK. -- See [Core Concepts](/getting-started/core-concepts) to get an overview of Workspace, Organization, Application and Service. +- See [Core Concepts](/getting-started/core-concepts/) to get an overview of Workspace, Organization, Application and Service. - To follow along with this tutorial, first complete the [SDK Quickstart](../../sdk/quickstart) and the [Data Schema Basics](data-schema-basics) tutorial. ## Tutorial Steps diff --git a/docs/tutorials/manage-data-schema/modify-data-schema.md b/docs/tutorials/manage-data-schema/modify-data-schema.md index 929acf7..1a0d11c 100644 --- a/docs/tutorials/manage-data-schema/modify-data-schema.md +++ b/docs/tutorials/manage-data-schema/modify-data-schema.md @@ -4,7 +4,7 @@ Tailor Platform makes it easy to modify data schemas. With TailorDB, you can mod This tutorial demonstrates how to add a new field to an existing data type using the SDK. -- See [Core Concepts](/getting-started/core-concepts) to get an overview of Workspace, Organization, Application and Service. +- See [Core Concepts](/getting-started/core-concepts/) to get an overview of Workspace, Organization, Application and Service. - To follow along with this tutorial, first complete the [SDK Quickstart](../../sdk/quickstart) and the [Data Schema Basics](data-schema-basics) tutorial. ## TailorDB diff --git a/docs/tutorials/manage-data-schema/validate-field-data.md b/docs/tutorials/manage-data-schema/validate-field-data.md index 464711e..58de100 100644 --- a/docs/tutorials/manage-data-schema/validate-field-data.md +++ b/docs/tutorials/manage-data-schema/validate-field-data.md @@ -4,7 +4,7 @@ Accurate and valid data is essential to ensure the success of any application. T This tutorial demonstrates how to apply data validation rules to your fields using the SDK. -- See [Core Concepts](/getting-started/core-concepts) to get an overview of Workspace, Organization, Application and Service. +- See [Core Concepts](/getting-started/core-concepts/) to get an overview of Workspace, Organization, Application and Service. - To follow along with this tutorial, first complete the [SDK Quickstart](../../sdk/quickstart) and the [Data Schema Basics](data-schema-basics) tutorial. ## Tutorial Steps diff --git a/docs/tutorials/setup-auth/setup-identity-provider.md b/docs/tutorials/setup-auth/setup-identity-provider.md index 8c784c1..d058e0c 100644 --- a/docs/tutorials/setup-auth/setup-identity-provider.md +++ b/docs/tutorials/setup-auth/setup-identity-provider.md @@ -5,7 +5,7 @@ The [Auth service](/guides/auth/overview) works with an identity provider (IdP) ## Prerequisite - Complete [Quickstart](/getting-started/quickstart) -- See [Core concepts](/getting-started/core-concepts) to get an overview of Workspace, Organization, Application and Service. +- See [Core concepts](/getting-started/core-concepts/) to get an overview of Workspace, Organization, Application and Service. Before configuring the Auth service for authentication, you need to set up an identity provider.