From b871b10b187f86473da0d4f9b1ce620c0f71ff3c Mon Sep 17 00:00:00 2001 From: Shahed Nasser Date: Tue, 26 Nov 2024 18:42:17 +0200 Subject: [PATCH 1/3] docs: fix links in examples guide (#10296) --- www/apps/resources/app/examples/page.mdx | 186 +++++++++--------- .../src/cross-project-links.ts | 4 +- 2 files changed, 95 insertions(+), 95 deletions(-) diff --git a/www/apps/resources/app/examples/page.mdx b/www/apps/resources/app/examples/page.mdx index 0c342195a3863..6d5e36777afc8 100644 --- a/www/apps/resources/app/examples/page.mdx +++ b/www/apps/resources/app/examples/page.mdx @@ -36,7 +36,7 @@ export const GET = ( This creates a `GET` API route at `/hello-world`. -Learn more in [this documentation](!docs!/basics/api-routes). +Learn more in [this documentation](!docs!/learn/basics/api-routes). ### Resolve Resources in API Route @@ -65,7 +65,7 @@ export const GET = async ( This resolves the Product Module's main service. -Learn more in [this documentation](!docs!/basics/medusa-container). +Learn more in [this documentation](!docs!/learn/basics/medusa-container). ### Use Path Parameters @@ -93,7 +93,7 @@ export const GET = async ( } ``` -Learn more about path parameters in [this documentation](!docs!/advanced-development/api-routes/parameters#path-parameters). +Learn more about path parameters in [this documentation](!docs!/learn/advanced-development/api-routes/parameters#path-parameters). ### Use Query Parameters @@ -119,7 +119,7 @@ export const GET = async ( } ``` -Learn more about query parameters in [this documentation](!docs!/advanced-development/api-routes/parameters#query-parameters). +Learn more about query parameters in [this documentation](!docs!/learn/advanced-development/api-routes/parameters#query-parameters). ### Use Body Parameters @@ -150,7 +150,7 @@ export const POST = async ( } ``` -Learn more about request body parameters in [this documentation](!docs!/advanced-development/api-routes/parameters#request-body-parameters). +Learn more about request body parameters in [this documentation](!docs!/learn/advanced-development/api-routes/parameters#request-body-parameters). ### Set Response Code @@ -169,7 +169,7 @@ export const GET = async ( } ``` -Learn more about setting the response code in [this documentation](!docs!/advanced-development/api-routes/responses#set-response-status-code). +Learn more about setting the response code in [this documentation](!docs!/learn/advanced-development/api-routes/responses#set-response-status-code). ### Execute a Workflow in an API Route @@ -197,7 +197,7 @@ export async function GET( } ``` -Learn more in [this documentation](!docs!/basics/workflows#3-execute-the-workflow). +Learn more in [this documentation](!docs!/learn/basics/workflows#3-execute-the-workflow). ### Change Response Content Type @@ -235,7 +235,7 @@ export const GET = async ( This changes the response type to return an event stream. -Learn more in [this documentation](!docs!/advanced-development/api-routes/responses#change-response-content-type). +Learn more in [this documentation](!docs!/learn/advanced-development/api-routes/responses#change-response-content-type). ### Create Middleware @@ -285,7 +285,7 @@ export default defineMiddlewares({ }) ``` -Learn more about middlewares in [this documentation](!docs!/advanced-development/api-routes/middlewares). +Learn more about middlewares in [this documentation](!docs!/learn/advanced-development/api-routes/middlewares). ### Restrict HTTP Methods in Middleware @@ -370,7 +370,7 @@ export const POST = async ( } ``` -Learn more about request body validation in [this documentation](!docs!/advanced-development/api-routes/validation). +Learn more about request body validation in [this documentation](!docs!/learn/advanced-development/api-routes/validation). ### Pass Additional Data to API Route @@ -378,7 +378,7 @@ In this example, you'll pass additional data to the Create Product API route, th -Find this example in details in [this documentation](!docs!/customization/extend-models/extend-create-product). +Find this example in details in [this documentation](!docs!/learn/customization/extend-models/extend-create-product). @@ -403,7 +403,7 @@ export default defineMiddlewares({ -Learn more about additional data in [this documentation](!docs!/advanced-development/api-routes/additional-data). +Learn more about additional data in [this documentation](!docs!/learn/advanced-development/api-routes/additional-data). @@ -430,7 +430,7 @@ createProductsWorkflow.hooks.productsCreated( -Learn more about workflow hooks in [this documentation](!docs!/advanced-development/workflows/workflow-hooks). +Learn more about workflow hooks in [this documentation](!docs!/learn/advanced-development/workflows/workflow-hooks). @@ -461,7 +461,7 @@ export default defineMiddlewares({ }) ``` -Learn more in [this documentation](!docs!/advanced-development/api-routes/protected-routes). +Learn more in [this documentation](!docs!/learn/advanced-development/api-routes/protected-routes). ### Restrict an API Route to Logged-In Customers @@ -487,7 +487,7 @@ export default defineMiddlewares({ }) ``` -Learn more in [this documentation](!docs!/advanced-development/api-routes/protected-routes). +Learn more in [this documentation](!docs!/learn/advanced-development/api-routes/protected-routes). ### Retrieve Logged-In Admin User @@ -522,7 +522,7 @@ export const GET = async ( } ``` -Learn more in [this documentation](!docs!/advanced-development/api-routes/protected-routes#retrieve-logged-in-admin-users-details). +Learn more in [this documentation](!docs!/learn/advanced-development/api-routes/protected-routes#retrieve-logged-in-admin-users-details). ### Retrieve Logged-In Customer @@ -560,7 +560,7 @@ export const GET = async ( } ``` -Learn more in [this documentation](!docs!/advanced-development/api-routes/protected-routes#retrieve-logged-in-customers-details). +Learn more in [this documentation](!docs!/learn/advanced-development/api-routes/protected-routes#retrieve-logged-in-customers-details). ### Throw Errors in API Route @@ -585,7 +585,7 @@ export const GET = async ( } ``` -Learn more in [this documentation](!docs!/advanced-development/api-routes/errors). +Learn more in [this documentation](!docs!/learn/advanced-development/api-routes/errors). ### Override Error Handler of API Routes @@ -614,7 +614,7 @@ export default defineMiddlewares({ }) ``` -Learn more in [this documentation](!docs!/advanced-development/api-routes/errors#override-error-handler), +Learn more in [this documentation](!docs!/learn/advanced-development/api-routes/errors#override-error-handler), ### Setting up CORS for Custom API Routes @@ -707,7 +707,7 @@ A module is a package of reusable commerce or architectural functionalities. The -Find this example explained in details in [this documentation](!docs!/basics/modules). +Find this example explained in details in [this documentation](!docs!/learn/basics/modules). @@ -843,7 +843,7 @@ class HelloModuleService extends MedusaService({ export default HelloModuleService ``` -Learn more in [this documentation](!docs!/advanced-development/modules/multiple-services). +Learn more in [this documentation](!docs!/learn/advanced-development/modules/multiple-services). ### Accept Module Options @@ -895,7 +895,7 @@ export default class HelloModuleService extends MedusaService({ } ``` -Learn more in [this documentation](!docs!/advanced-development/modules/options). +Learn more in [this documentation](!docs!/learn/advanced-development/modules/options). ### Integrate Third-Party System in Module @@ -936,7 +936,7 @@ export class BrandClient { } ``` -Find a longer example of integrating a third-party service in [this documentation](!docs!/customization/integrate-systems/service). +Find a longer example of integrating a third-party service in [this documentation](!docs!/learn/customization/integrate-systems/service). --- @@ -974,7 +974,7 @@ npx medusa db:generate helloModuleService npx medusa db:migrate ``` -Learn more in [this documentation](!docs!/basics/modules#1-create-data-model). +Learn more in [this documentation](!docs!/learn/basics/modules#1-create-data-model). ### Data Model Property Types @@ -1061,7 +1061,7 @@ const MyCustom = model.define("my_custom", { }) ``` -Learn more in [this documentation](!docs!/advanced-development/data-models/property-types). +Learn more in [this documentation](!docs!/learn/advanced-development/data-models/property-types). ### Set Primary Key @@ -1104,7 +1104,7 @@ const MyCustom = model.define("my_custom", { export default MyCustom ``` -Learn more in [this documentation](!docs!/advanced-development/data-models/primary-key). +Learn more in [this documentation](!docs!/learn/advanced-development/data-models/primary-key). ### Default Property Value @@ -1126,7 +1126,7 @@ const MyCustom = model.define("my_custom", { export default MyCustom ``` -Learn more in [this documentation](!docs!/advanced-development/data-models/configure-properties). +Learn more in [this documentation](!docs!/learn/advanced-development/data-models/configure-properties). ### Nullable Property @@ -1143,7 +1143,7 @@ const MyCustom = model.define("my_custom", { export default MyCustom ``` -Learn more in [this documentation](!docs!/advanced-development/data-models/configure-properties#nullable-property). +Learn more in [this documentation](!docs!/learn/advanced-development/data-models/configure-properties#nullable-property). ### Unique Property @@ -1160,7 +1160,7 @@ const User = model.define("user", { export default User ``` -Learn more in [this documentation](!docs!/advanced-development/data-models/configure-properties#unique-property). +Learn more in [this documentation](!docs!/learn/advanced-development/data-models/configure-properties#unique-property). ### Define Database Index on Property @@ -1179,7 +1179,7 @@ const MyCustom = model.define("my_custom", { export default MyCustom ``` -Learn more in [this documentation](!docs!/advanced-development/data-models/index#define-database-index-on-property). +Learn more in [this documentation](!docs!/learn/advanced-development/data-models/index#define-database-index-on-property). ### Define Composite Index on Data Model @@ -1206,7 +1206,7 @@ const MyCustom = model.define("my_custom", { export default MyCustom ``` -Learn more in [this documentation](!docs!/advanced-development/data-models/index#define-database-index-on-data-model). +Learn more in [this documentation](!docs!/learn/advanced-development/data-models/index#define-database-index-on-data-model). ### Make a Property Searchable @@ -1237,7 +1237,7 @@ const myCustoms = await helloModuleService.listMyCustoms({ }) ``` -Learn more in [this documentation](!docs!/advanced-development/data-models/searchable-property). +Learn more in [this documentation](!docs!/learn/advanced-development/data-models/searchable-property). ### Create One-to-One Relationship @@ -1259,7 +1259,7 @@ const Email = model.define("email", { }) ``` -Learn more in [this documentation](!docs!/advanced-development/data-models/relationships#one-to-one-relationship). +Learn more in [this documentation](!docs!/learn/advanced-development/data-models/relationships#one-to-one-relationship). ### Create One-to-Many Relationship @@ -1281,7 +1281,7 @@ const Product = model.define("product", { }) ``` -Learn more in [this documentation](!docs!/advanced-development/data-models/relationships#one-to-many-relationship). +Learn more in [this documentation](!docs!/learn/advanced-development/data-models/relationships#one-to-many-relationship). ### Create Many-to-Many Relationship @@ -1305,7 +1305,7 @@ const Product = model.define("product", { }) ``` -Learn more in [this documentation](!docs!/advanced-development/data-models/relationships#many-to-many-relationship). +Learn more in [this documentation](!docs!/learn/advanced-development/data-models/relationships#many-to-many-relationship). ### Configure Cascades of Data Model @@ -1326,7 +1326,7 @@ const Store = model.define("store", { This configures the delete cascade on the `Store` data model so that, when a store is delete, its products are also deleted. -Learn more in [this documentation](!docs!/advanced-development/data-models/relationships#cascades). +Learn more in [this documentation](!docs!/learn/advanced-development/data-models/relationships#cascades). ### Manage One-to-One Relationship @@ -1373,7 +1373,7 @@ const user = await helloModuleService.updateUsers({ }) ``` -Learn more in [this documentation](!docs!/advanced-development/data-models/manage-relationships#manage-one-to-one-relationship). +Learn more in [this documentation](!docs!/learn/advanced-development/data-models/manage-relationships#manage-one-to-one-relationship). ### Manage One-to-Many Relationship @@ -1402,7 +1402,7 @@ const product = await helloModuleService.updateProducts({ }) ``` -Learn more in [this documentation](!docs!/advanced-development/data-models/manage-relationships#manage-one-to-many-relationship) +Learn more in [this documentation](!docs!/learn/advanced-development/data-models/manage-relationships#manage-one-to-many-relationship) ### Manage Many-to-Many Relationship @@ -1443,7 +1443,7 @@ const updatedProduct = await helloModuleService.updateProducts({ }) ``` -Learn more in [this documentation](!docs!/advanced-development/data-models/manage-relationships#manage-many-to-many-relationship). +Learn more in [this documentation](!docs!/learn/advanced-development/data-models/manage-relationships#manage-many-to-many-relationship). ### Retrieve Related Records @@ -1464,7 +1464,7 @@ const product = await helloModuleService.retrieveProducts( ) ``` -Learn more in [this documentation](!docs!/advanced-development/data-models/manage-relationships#retrieve-records-of-relation). +Learn more in [this documentation](!docs!/learn/advanced-development/data-models/manage-relationships#retrieve-records-of-relation). --- @@ -1495,7 +1495,7 @@ The `HelloModuleService` will now have data-management methods for `MyCustom`. Refer to [this reference](../service-factory-reference/page.mdx) for details on the generated methods. -Learn more about the service factory in [this documentation](!docs!/advanced-development/modules/service-factory). +Learn more about the service factory in [this documentation](!docs!/learn/advanced-development/modules/service-factory). ### Resolve Resources in the Service @@ -1557,7 +1557,7 @@ export default class HelloModuleService { -Learn more in [this documentation](!docs!/advanced-development/modules/container). +Learn more in [this documentation](!docs!/learn/advanced-development/modules/container). ### Access Module Options in Service @@ -1589,7 +1589,7 @@ export default class HelloModuleService extends MedusaService({ } ``` -Learn more in [this documentation](!docs!/advanced-development/modules/options). +Learn more in [this documentation](!docs!/learn/advanced-development/modules/options). ### Run Database Query in Service @@ -1625,7 +1625,7 @@ class HelloModuleService { } ``` -Learn more in [this documentation](!docs!/advanced-development/modules/db-operations#run-queries) +Learn more in [this documentation](!docs!/learn/advanced-development/modules/db-operations#run-queries) ### Execute Database Operations in Transactions @@ -1682,7 +1682,7 @@ class HelloModuleService { } ``` -Learn more in [this documentation](!docs!/advanced-development/modules/db-operations#execute-operations-in-transactions). +Learn more in [this documentation](!docs!/learn/advanced-development/modules/db-operations#execute-operations-in-transactions). --- @@ -1713,7 +1713,7 @@ export default defineLink( npx medusa db:migrate ``` -Learn more in [this documentation](!docs!/advanced-development/module-links). +Learn more in [this documentation](!docs!/learn/advanced-development/module-links). ### Define a List Link @@ -1733,7 +1733,7 @@ export default defineLink( ) ``` -Learn more about list links in [this documentation](!docs!/advanced-development/module-links#define-a-list-link). +Learn more about list links in [this documentation](!docs!/learn/advanced-development/module-links#define-a-list-link). ### Set Delete Cascade on Link Definition @@ -1753,7 +1753,7 @@ export default defineLink( ) ``` -Learn more in [this documentation](!docs!/advanced-development/module-links#define-a-list-link). +Learn more in [this documentation](!docs!/learn/advanced-development/module-links#define-a-list-link). ### Add Custom Columns to Module Link @@ -1813,7 +1813,7 @@ const { data } = await query.graph({ }) ``` -Learn more in [this documentation](!docs!/advanced-development/module-links/custom-columns). +Learn more in [this documentation](!docs!/learn/advanced-development/module-links/custom-columns). ### Create Link Between Records @@ -1835,7 +1835,7 @@ await remoteLink.create({ }) ``` -Learn more in [this documentation](!docs!/advanced-development/module-links/remote-link#create-link). +Learn more in [this documentation](!docs!/learn/advanced-development/module-links/remote-link#create-link). ### Dismiss Link Between Records @@ -1857,7 +1857,7 @@ await remoteLink.dismiss({ }) ``` -Learn more in [this documentation](!docs!/advanced-development/module-links/remote-link#dismiss-link). +Learn more in [this documentation](!docs!/learn/advanced-development/module-links/remote-link#dismiss-link). ### Cascade Delete Linked Records @@ -1877,7 +1877,7 @@ await remoteLink.delete({ }) ``` -Learn more in [this documentation](!docs!/advanced-development/module-links/remote-link#cascade-delete-linked-records). +Learn more in [this documentation](!docs!/learn/advanced-development/module-links/remote-link#cascade-delete-linked-records). ### Restore Linked Records @@ -1897,7 +1897,7 @@ await remoteLink.restore({ }) ``` -Learn more in [this documentation](!docs!/advanced-development/module-links/remote-link#restore-linked-records). +Learn more in [this documentation](!docs!/learn/advanced-development/module-links/remote-link#restore-linked-records). --- @@ -1933,7 +1933,7 @@ export const GET = async ( } ``` -Learn more in [this documentation](!docs!/advanced-development/module-links/query). +Learn more in [this documentation](!docs!/learn/advanced-development/module-links/query). ### Retrieve Linked Records of Data Model @@ -1967,7 +1967,7 @@ export const GET = async ( } ``` -Learn more in [this documentation](!docs!/advanced-development/module-links/query#retrieve-linked-records). +Learn more in [this documentation](!docs!/learn/advanced-development/module-links/query#retrieve-linked-records). ### Apply Filters to Retrieved Records @@ -2003,7 +2003,7 @@ export const GET = async ( } ``` -Learn more in [this documentation](!docs!/advanced-development/module-links/query#apply-filters). +Learn more in [this documentation](!docs!/learn/advanced-development/module-links/query#apply-filters). ### Apply Pagination and Sort Records @@ -2048,7 +2048,7 @@ export const GET = async ( } ``` -Learn more in [this documentation](!docs!/advanced-development/module-links/query#sort-records). +Learn more in [this documentation](!docs!/learn/advanced-development/module-links/query#sort-records). --- @@ -2115,7 +2115,7 @@ const myWorkflow = createWorkflow( export default myWorkflow ``` -Learn more in [this documentation](!docs!/basics/workflows). +Learn more in [this documentation](!docs!/learn/basics/workflows). ### Execute a Workflow @@ -2211,7 +2211,7 @@ Learn more in [this documentation](!docs!/basics/workflows). -Learn more in [this documentation](!docs!/basics/workflows#3-execute-the-workflow). +Learn more in [this documentation](!docs!/learn/basics/workflows#3-execute-the-workflow). ### Step with a Compensation Function @@ -2238,7 +2238,7 @@ const step1 = createStep( ) ``` -Learn more in [this documentation](!docs!/advanced-development/workflows/compensation-function). +Learn more in [this documentation](!docs!/learn/advanced-development/workflows/compensation-function). ### Manipulate Variables in Workflow @@ -2268,7 +2268,7 @@ const myWorkflow = createWorkflow( ) ``` -Learn more in [this documentation](!docs!/advanced-development/workflows/variable-manipulation) +Learn more in [this documentation](!docs!/learn/advanced-development/workflows/variable-manipulation) ### Using Conditions in Workflow @@ -2336,7 +2336,7 @@ const workflow = createWorkflow( ) ``` -Learn more in [this documentation](!docs!/advanced-development/workflows/execute-another-workflow). +Learn more in [this documentation](!docs!/learn/advanced-development/workflows/execute-another-workflow). ### Consume a Workflow Hook @@ -2357,7 +2357,7 @@ createProductsWorkflow.hooks.productsCreated( This executes a custom step at the hook's designated point in the workflow. -Learn more in [this documentation](!docs!/advanced-development/workflows/workflow-hooks). +Learn more in [this documentation](!docs!/learn/advanced-development/workflows/workflow-hooks). ### Expose a Hook @@ -2412,7 +2412,7 @@ export const step1 = createStep( ) ``` -Learn more in [this documentation](!docs!/advanced-development/workflows/retry-failed-steps). +Learn more in [this documentation](!docs!/learn/advanced-development/workflows/retry-failed-steps). ### Run Steps in Parallel @@ -2453,7 +2453,7 @@ const myWorkflow = createWorkflow( ) ``` -Learn more in [this documentation](!docs!/advanced-development/workflows/parallel-steps). +Learn more in [this documentation](!docs!/learn/advanced-development/workflows/parallel-steps). ### Configure Workflow Timeout @@ -2481,7 +2481,7 @@ const myWorkflow = createWorkflow({ export default myWorkflow ``` -Learn more in [this documentation](!docs!/advanced-development/workflows/workflow-timeout). +Learn more in [this documentation](!docs!/learn/advanced-development/workflows/workflow-timeout). ### Configure Step Timeout @@ -2499,7 +2499,7 @@ const step1 = createStep( ) ``` -Learn more in [this documentation](!docs!/advanced-development/workflows/workflow-timeout#configure-step-timeout). +Learn more in [this documentation](!docs!/learn/advanced-development/workflows/workflow-timeout#configure-step-timeout). ### Long-Running Workflow @@ -2519,7 +2519,7 @@ const step2 = createStep( ) ``` -Learn more in [this documentation](!docs!/advanced-development/workflows/long-running-workflow). +Learn more in [this documentation](!docs!/learn/advanced-development/workflows/long-running-workflow). ### Change Step Status in Long-Running Workflow @@ -2588,7 +2588,7 @@ await workflowEngineService.setStepFailure({ }) ``` -Learn more in [this documentation](!docs!/advanced-development/workflows/long-running-workflow). +Learn more in [this documentation](!docs!/learn/advanced-development/workflows/long-running-workflow). ### Access Long-Running Workflow's Result @@ -2634,7 +2634,7 @@ export async function GET(req: MedusaRequest, res: MedusaResponse) { } ``` -Learn more in [this documentation](!docs!/advanced-development/workflows/long-running-workflow#access-long-running-workflow-status-and-result). +Learn more in [this documentation](!docs!/learn/advanced-development/workflows/long-running-workflow#access-long-running-workflow-status-and-result). --- @@ -2664,7 +2664,7 @@ export const config: SubscriberConfig = { } ``` -Learn more in [this documentation](!docs!/basics/events-and-subscribers). +Learn more in [this documentation](!docs!/learn/basics/events-and-subscribers). ### Resolve Resources in Subscriber @@ -2694,7 +2694,7 @@ export const config: SubscriberConfig = { } ``` -Learn more in [this documentation](!docs!/basics/events-and-subscribers#resolve-resources). +Learn more in [this documentation](!docs!/learn/basics/events-and-subscribers#resolve-resources). ### Send a Notification to Reset Password @@ -2779,7 +2779,7 @@ export const config: SubscriberConfig = { } ``` -Learn more in [this documentation](!docs!/basics/workflows#3-execute-the-workflow) +Learn more in [this documentation](!docs!/learn/basics/workflows#3-execute-the-workflow) --- @@ -2805,7 +2805,7 @@ export const config = { } ``` -Learn more in [this documentation](!docs!/basics/scheduled-jobs). +Learn more in [this documentation](!docs!/learn/basics/scheduled-jobs). ### Resolve Resources in Scheduled Job @@ -2834,7 +2834,7 @@ export const config = { } ``` -Learn more in [this documentation](!docs!/basics/scheduled-jobs#resolve-resources) +Learn more in [this documentation](!docs!/learn/basics/scheduled-jobs#resolve-resources) ### Specify a Job's Execution Number @@ -2853,7 +2853,7 @@ export const config = { } ``` -Learn more in [this documentation](!docs!/advanced-development/scheduled-jobs/execution-number). +Learn more in [this documentation](!docs!/learn/advanced-development/scheduled-jobs/execution-number). ### Execute a Workflow in a Scheduled Job @@ -2882,7 +2882,7 @@ export const config = { } ``` -Learn more in [this documentation](!docs!/basics/workflows#3-execute-the-workflow) +Learn more in [this documentation](!docs!/learn/basics/workflows#3-execute-the-workflow) --- @@ -2904,7 +2904,7 @@ export default async function helloWorldLoader() { } ``` -Learn more in [this documentation](!docs!/basics/loaders). +Learn more in [this documentation](!docs!/learn/basics/loaders). ### Resolve Resources in Loader @@ -2927,7 +2927,7 @@ export default async function helloWorldLoader({ } ``` -Learn more in [this documentation](!docs!/advanced-development/modules/container). +Learn more in [this documentation](!docs!/learn/advanced-development/modules/container). ### Access Module Options @@ -2954,7 +2954,7 @@ export default async function helloWorldLoader({ } ``` -Learn more in [this documentation](!docs!/advanced-development/modules/options). +Learn more in [this documentation](!docs!/learn/advanced-development/modules/options). ### Register Resources in the Module's Container @@ -3019,7 +3019,7 @@ export const config = defineWidgetConfig({ export default ProductWidget ``` -Learn more about widgets in [this documentation](!docs!/advanced-development/admin/widgets). +Learn more about widgets in [this documentation](!docs!/learn/advanced-development/admin/widgets). ### Receive Details Props in Widgets @@ -3056,7 +3056,7 @@ export const config = defineWidgetConfig({ export default ProductWidget ``` -Learn more in [this documentation](!docs!/advanced-development/admin/widgets#detail-widget-props). +Learn more in [this documentation](!docs!/learn/advanced-development/admin/widgets#detail-widget-props). ### Create a UI Route @@ -3089,7 +3089,7 @@ export default CustomPage This adds a new page at `localhost:9000/app/custom`. -Learn more in [this documentation](!docs!/advanced-development/admin/ui-routes). +Learn more in [this documentation](!docs!/learn/advanced-development/admin/ui-routes). ### Create Settings Page @@ -3120,7 +3120,7 @@ export default CustomSettingPage This adds a setting page at `localhost:9000/app/settings/custom`. -Learn more in [this documentation](!docs!/advanced-development/admin/ui-routes#create-settings-page) +Learn more in [this documentation](!docs!/learn/advanced-development/admin/ui-routes#create-settings-page) ### Accept Path Parameters in UI Routes @@ -3149,7 +3149,7 @@ export default CustomPage This creates a UI route at `localhost:9000/app/custom/:id`, where `:id` is a path parameter. -Learn more in [this documentation](!docs!/advanced-development/admin/ui-routes#path-parameters) +Learn more in [this documentation](!docs!/learn/advanced-development/admin/ui-routes#path-parameters) ### Send Request to API Route @@ -3196,7 +3196,7 @@ export const config = defineWidgetConfig({ export default ProductWidget ``` -Learn more in [this documentation](!docs!/advanced-development/admin/tips#send-requests-to-api-routes) +Learn more in [this documentation](!docs!/learn/advanced-development/admin/tips#send-requests-to-api-routes) ### Add Link to Another Page @@ -3224,7 +3224,7 @@ export const config = defineWidgetConfig({ export default ProductWidget ``` -Learn more in [this documentation](!docs!/advanced-development/admin/tips#routing-functionalities). +Learn more in [this documentation](!docs!/learn/advanced-development/admin/tips#routing-functionalities). --- @@ -3234,7 +3234,7 @@ Medusa provides a `@medusajs/test-utils` package with utility tools to create in -For details on setting up your project for integration tests, refer to [this documentation](!docs!/debugging-and-testing/testing-tools). +For details on setting up your project for integration tests, refer to [this documentation](!docs!/learn/debugging-and-testing/testing-tools). @@ -3270,7 +3270,7 @@ Then, run the test with the following command: npm run test:integration ``` -Learn more in [this documentation](!docs!/debugging-and-testing/testing-tools/integration-tests/api-routes). +Learn more in [this documentation](!docs!/learn/debugging-and-testing/testing-tools/integration-tests/api-routes). ### Test Workflow @@ -3300,7 +3300,7 @@ Then, run the test with the following command: npm run test:integration ``` -Learn more in [this documentation](!docs!/debugging-and-testing/testing-tools/integration-tests/workflows). +Learn more in [this documentation](!docs!/learn/debugging-and-testing/testing-tools/integration-tests/workflows). ### Test Module's Service @@ -3750,7 +3750,7 @@ Learn more in [this documentation](../commerce-modules/payment/payment-flow/page ### Get Variant's Prices for Region and Currency -To get prices of a product variant for a region and currency using [Query](!docs!/advanced-development/module-links/query): +To get prices of a product variant for a region and currency using [Query](!docs!/learn/advanced-development/module-links/query): ```ts import { QueryContext } from "@medusajs/framework/utils" @@ -3782,7 +3782,7 @@ Learn more in [this documentation](../commerce-modules/product/guides/price/page ### Get All Variant's Prices -To get all prices of a product variant using [Query](!docs!/advanced-development/module-links/query): +To get all prices of a product variant using [Query](!docs!/learn/advanced-development/module-links/query): ```ts const { data: products } = await query.graph({ @@ -3804,7 +3804,7 @@ Learn more in [this documentation](../commerce-modules/product/guides/price/page ### Get Variant Prices with Taxes -To get a variant's prices with taxes using [Query](!docs!/advanced-development/module-links/query) and the [Tax Module](../commerce-modules/tax/page.mdx) +To get a variant's prices with taxes using [Query](!docs!/learn/advanced-development/module-links/query) and the [Tax Module](../commerce-modules/tax/page.mdx) ```ts import { diff --git a/www/packages/remark-rehype-plugins/src/cross-project-links.ts b/www/packages/remark-rehype-plugins/src/cross-project-links.ts index 0f56619f2faa0..407dda58fcff0 100644 --- a/www/packages/remark-rehype-plugins/src/cross-project-links.ts +++ b/www/packages/remark-rehype-plugins/src/cross-project-links.ts @@ -40,9 +40,9 @@ function matchAndFixLinks( Object.hasOwn(projectUrls, projectArea.groups.area) && projectUrls[projectArea.groups.area]?.path !== undefined ? projectUrls[projectArea.groups.area].path - : projectArea.groups.area + : `/${projectArea.groups.area}` - return `${base}/${path}${actualUrl}` + return `${base}${path}${actualUrl}` } function linkElmFixer(node: UnistNode, options: CrossProjectLinksOptions) { From a7a7541b9b0d250cbafd67e7b1206f5f04122527 Mon Sep 17 00:00:00 2001 From: Jesus Escalona Date: Tue, 26 Nov 2024 11:43:15 -0500 Subject: [PATCH 2/3] docs: Update Redis connection string instructions for Railway (#10246) * Update Railway's Redis and Database URL connection string instructions - Clarified instructions for enabling IPv6 by adding the ?family=0 suffix due to lack of IPv4 private networking support * Update www/apps/resources/app/deployment/medusa-application/railway/page.mdx Co-authored-by: Shahed Nasser * add similar explanation in worker mode * whitespace --------- Co-authored-by: Shahed Nasser --- .../app/deployment/medusa-application/railway/page.mdx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/www/apps/resources/app/deployment/medusa-application/railway/page.mdx b/www/apps/resources/app/deployment/medusa-application/railway/page.mdx index 16e6c220ccdad..96009185f279d 100644 --- a/www/apps/resources/app/deployment/medusa-application/railway/page.mdx +++ b/www/apps/resources/app/deployment/medusa-application/railway/page.mdx @@ -229,8 +229,8 @@ AUTH_CORS= # STOREFRONT AND ADMIN URLS, SEPARATED BY COMMAS DISABLE_MEDUSA_ADMIN=true MEDUSA_WORKER_MODE=server PORT=9000 -DATABASE_URL=${{Postgres.DATABASE_PUBLIC_URL}} -REDIS_URL=${{Redis.REDIS_PUBLIC_URL}} +DATABASE_URL=${{Postgres.RAILWAY_PRIVATE_DOMAIN}} +REDIS_URL=${{Redis.REDIS_URL}}?family=0 ``` Where: @@ -240,6 +240,7 @@ Where: - `ADMIN_CORS`'s value is the URL of the admin dashboard. If you don’t have it yet, or you’re deploying the admin with the Medusa application, you can skip adding it for now. - `AUTH_CORS`'s value is the URLs of any application authenticating users, customers, or other actor types, such as the storefront and admin URLs. The URLs are separated by commas. If you don’t have the URLs yet, you can set its value later. - Change `DISABLE_MEDUSA_ADMIN` to `false` if you’re hosting the admin with the Medusa application. +- `REDIS_URL`'s value is automatically generated using Railway’s template syntax. You add the `?family=0` to the connection string to support both IPv6 and IPv4 connections. Feel free to add any other relevant environment variables. Once you’re done, click the Update Variables button. @@ -337,14 +338,15 @@ JWT_SECRET=supersecret # TODO GENERATE SECURE SECRET DISABLE_MEDUSA_ADMIN=true MEDUSA_WORKER_MODE=worker PORT=9000 -DATABASE_URL=${{Postgres.DATABASE_PUBLIC_URL}} -REDIS_URL=${{Redis.REDIS_PUBLIC_URL}} +DATABASE_URL=${{Postgres.RAILWAY_PRIVATE_DOMAIN}} +REDIS_URL=${{Redis.REDIS_URL}}?family=0 ``` Where: - The value of `COOKIE_SECRET` and `JWT_SECRET` must be a randomly generated secret. - Keep `DISABLE_MEDUSA_ADMIN`'s value set to `true`, even if you’re hosting the admin with the Medusa application. +- `REDIS_URL`'s value is automatically generated using Railway’s template syntax. You add the `?family=0` to the connection string to support both IPv6 and IPv4 connections. Feel free to add any other relevant environment variables. Once you’re done, click the Update Variables button. From 41e125dadd77d28148c39cb06c2f0ed95fea0a2a Mon Sep 17 00:00:00 2001 From: Shahed Nasser Date: Tue, 26 Nov 2024 18:53:28 +0200 Subject: [PATCH 3/3] docs: revise workflows docs (#10294) --- .../book/app/learn/basics/workflows/page.mdx | 148 +++++---- www/apps/book/generated/edit-dates.mjs | 280 ++++++++++++------ 2 files changed, 270 insertions(+), 158 deletions(-) diff --git a/www/apps/book/app/learn/basics/workflows/page.mdx b/www/apps/book/app/learn/basics/workflows/page.mdx index f988a50ac0aba..66912e11db321 100644 --- a/www/apps/book/app/learn/basics/workflows/page.mdx +++ b/www/apps/book/app/learn/basics/workflows/page.mdx @@ -10,11 +10,17 @@ In this chapter, you’ll learn about workflows and how to define and execute th ## What is a Workflow? -A workflow is a series of queries and actions that complete a task. +In other commerce platforms, it's difficult to implement commerce features where a single task performs operations on core and custom data models, or connects to third-party systems. It's also almost impossible to maintain their execution, handle errors gracefully, and have more control over how these tasks are executed. -You construct a workflow similar to how you create a JavaScript function, but unlike regular functions, a workflow creates an internal representation of your steps. +Medusa solves this major pain point with workflows. A workflow is a series of queries and actions, called steps, that complete a task. You construct a workflow similar to how you create a JavaScript function. -By using a workflow, you can track its execution's progress, provide roll-back logic for each step to mitigate data inconsistency when errors occur, automatically retry failing steps, and do much more, as explained in later chapters. +However, unlike regular functions, workflows: + +- Create an internal representation of your steps, allowing you to track them and their progress. +- Support defining roll-back logic for each step, so that you can handle errors gracefully and your data remain consistent across systems. +- Perform long actions asynchronously, giving you control over when a step starts and finishes. + +You implement all custom flows within workflows, then execute them from [API routes](../api-routes/page.mdx), [subscribers](../events-and-subscribers/page.mdx), and [scheduled jobs](../scheduled-jobs/page.mdx). --- @@ -26,35 +32,58 @@ A workflow is made of a series of steps. A step is created using the `createStep Create the file `src/workflows/hello-world.ts` with the following content: -```ts title="src/workflows/hello-world.ts" +export const step1Highlights = [ + ["4", `"step-1"`, "The step's unique name."], + ["6", "`Hello from step one!`", "The step's returned data."] +] + +```ts title="src/workflows/hello-world.ts" highlights={step1Highlights} import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk" -const step1 = createStep("step-1", async () => { - return new StepResponse(`Hello from step one!`) -}) +const step1 = createStep( + "step-1", + async () => { + return new StepResponse(`Hello from step one!`) + } +) ``` -This creates one step that returns a hello message. +The `createStep` function accepts the step's unique name as a first parameter, and the step's function as a second parameter. -Steps can accept input parameters. +Steps must return an instance of `StepResponse`, whose parameter is the data to return to the workflow executing the step. -For example, add the following to `src/workflows/hello-world.ts`: +Steps can accept input parameters. For example, add the following to `src/workflows/hello-world.ts`: + +export const step2Highlights = [ + ["7", "name", "Recieve step input as a parameter."] +] -```ts title="src/workflows/hello-world.ts" +```ts title="src/workflows/hello-world.ts" highlights={step2Highlights} type WorkflowInput = { name: string } -const step2 = createStep("step-2", async ({ name }: WorkflowInput) => { - return new StepResponse(`Hello ${name} from step two!`) -}) +const step2 = createStep( + "step-2", + async ({ name }: WorkflowInput) => { + return new StepResponse(`Hello ${name} from step two!`) + } +) ``` +This adds another step whose function accepts as a parameter an object with a `name` property. + ### 2. Create a Workflow Next, add the following to the same file to create the workflow using the `createWorkflow` function: -```ts title="src/workflows/hello-world.ts" +export const workflowHighlights = [ + ["10", `"hello-world"`, "The workflow's unique name."], + ["11", "input", "The workflow's input is passed as a parameter."], + ["16", "WorkflowResponse", "The workflow returns an instance of WorkflowResponse."] +] + +```ts title="src/workflows/hello-world.ts" highlights={workflowHighlights} import { // other imports... createWorkflow, @@ -71,7 +100,7 @@ const myWorkflow = createWorkflow( const str2 = step2(input) return new WorkflowResponse({ - message: str1, + message: str2, }) } ) @@ -79,19 +108,19 @@ const myWorkflow = createWorkflow( export default myWorkflow ``` -This creates a `hello-world` workflow. When you create a workflow, it’s constructed but not executed yet. +The `createWorkflow` function accepts the workflow's unique name as a first parameter, and the workflow's function as a second parameter. The workflow can accept input which is passed as a parameter to the function. -The workflow must return an instance of `WorkflowResponse`, whose first parameter is returned to workflow executors. +The workflow must return an instance of `WorkflowResponse`, whose parameter is returned to workflow executors. ### 3. Execute the Workflow -You can execute a workflow from different resources within Medusa. +You can execute a workflow from different customizations: -- Use API routes to execute the workflow in response to an API request or a webhook. -- Use subscribers to execute a workflow when an event is triggered. -- Use scheduled jobs to execute a workflow on a regular schedule. +- Execute in an API route to expose the workflow's functionalities to clients. +- Execute in a subscriber to use the workflow's functionalities when a commerce operation is performed. +- Execute in a scheduled job to run the workflow's functionalities automatically at a specified repeated interval. -To execute the workflow, invoke it passing the Medusa container as a parameter. Then, use its `run` method: +To execute the workflow, invoke it passing the [Medusa container](../medusa-container/page.mdx) as a parameter. Then, use its `run` method: @@ -110,7 +139,7 @@ To execute the workflow, invoke it passing the Medusa container as a parameter. const { result } = await myWorkflow(req.scope) .run({ input: { - name: req.query.name as string, + name: "John", }, }) @@ -121,30 +150,21 @@ To execute the workflow, invoke it passing the Medusa container as a parameter. - ```ts title="src/subscribers/customer-created.ts" highlights={[["20"], ["21"], ["22"], ["23"], ["24"], ["25"]]} collapsibleLines="1-9" expandButtonLabel="Show Imports" + ```ts title="src/subscribers/customer-created.ts" highlights={[["11"], ["12"], ["13"], ["14"], ["15"], ["16"]]} collapsibleLines="1-6" expandButtonLabel="Show Imports" import { type SubscriberConfig, type SubscriberArgs, } from "@medusajs/framework" import myWorkflow from "../workflows/hello-world" - import { Modules } from "@medusajs/framework/utils" - import { IUserModuleService } from "@medusajs/framework/types" export default async function handleCustomerCreate({ event: { data }, container, }: SubscriberArgs<{ id: string }>) { - const userId = data.id - const userModuleService: IUserModuleService = container.resolve( - Modules.USER - ) - - const user = await userModuleService.retrieveUser(userId) - const { result } = await myWorkflow(container) .run({ input: { - name: user.first_name, + name: "John", }, }) @@ -152,7 +172,7 @@ To execute the workflow, invoke it passing the Medusa container as a parameter. } export const config: SubscriberConfig = { - event: "user.created", + event: "order.placed", } ``` @@ -193,39 +213,30 @@ To test out your workflow, start your Medusa application: npm run dev ``` -Then, send a `GET` request to `/workflow`: +Then, if you added the API route above, send a `GET` request to `/workflow`: ```bash -curl http://localhost:9000/workflow?name=john +curl http://localhost:9000/workflow ``` You’ll receive the following response: -```json +```json title="Example Response" { - "message": "Hello from step one!" + "message": "Hello John from step two!" } ``` --- -## When to Use Workflows - - - -You're implementing a custom feature exposed by an API route, or used in subscribers or scheduled jobs. - - - ---- - -## Resolve Resources +## Access Medusa Container in Workflow Steps -Each step in the workflow receives as a second parameter a `context` object. The object holds a `container` property which is the Medusa container. Use it to resolve other resources, such as services, of your Medusa application. +A step receives an object as a second parameter with configurations and context-related properties. One of these properties is the `container` property, which is the [Medusa container](../medusa-container/page.mdx) to allow you to resolve framework and commerce tools in your application. -For example: +For example, consider you want to implement a workflow that returns the total products in your application. Create the file `src/workflows/product-count.ts` with the following content: export const highlights = [ + ["11", "container", "Receive the Medusa container as a parameter"], ["12", "resolve", "Resolve the Product Module's main service."], [ "12", @@ -241,22 +252,23 @@ import { createWorkflow, WorkflowResponse, } from "@medusajs/framework/workflows-sdk" -import { IProductModuleService } from "@medusajs/framework/types" import { Modules } from "@medusajs/framework/utils" -const step1 = createStep("step-1", async (_, context) => { - const productModuleService: IProductModuleService = - context.container.resolve(Modules.PRODUCT) +const getProductCountStep = createStep( + "get-product-count", + async (_, { container }) => { + const productModuleService = container.resolve(Modules.PRODUCT) - const [, count] = await productModuleService.listAndCountProducts() + const [, count] = await productModuleService.listAndCountProducts() - return new StepResponse(count) -}) + return new StepResponse(count) + } +) -const myWorkflow = createWorkflow( +const productCountWorkflow = createWorkflow( "product-count", function () { - const count = step1() + const count = getProductCountStep() return new WorkflowResponse({ count, @@ -264,7 +276,15 @@ const myWorkflow = createWorkflow( } ) -export default myWorkflow +export default productCountWorkflow ``` -In `step1`, you resolve the Product Module's main service and use it to retrieve the product count. +In `getProductCountStep`, you use the `container` to resolve the Product Module's main service. Then, you use its `listAndCountProducts` method to retrieve the total count of products and return it in the step's response. You then execute this step in the `productCountWorkflow`. + +You can now execute this workflow in a custom API route, scheduled job, or subscriber to get the total count of products. + + + +Find a full list of the registered resources in the Medusa container and their registration key in [this reference](!resources!/resources/medusa-container-resources). You can use these resources in your custom workflows. + + \ No newline at end of file diff --git a/www/apps/book/generated/edit-dates.mjs b/www/apps/book/generated/edit-dates.mjs index 7f72f7f20c6bd..607cdf065fdaf 100644 --- a/www/apps/book/generated/edit-dates.mjs +++ b/www/apps/book/generated/edit-dates.mjs @@ -1,120 +1,212 @@ export const generatedEditDates = { "app/learn/basics/scheduled-jobs/page.mdx": "2024-11-26T11:50:10.302Z", - "app/learn/basics/workflows/page.mdx": "2024-09-30T08:43:53.132Z", + "app/learn/basics/workflows/page.mdx": "2024-11-26T14:12:10.031Z", "app/learn/deployment/page.mdx": "2024-11-25T14:32:44.949Z", "app/learn/page.mdx": "2024-09-03T07:09:09.034Z", "app/learn/basics/commerce-modules/page.mdx": "2024-11-21T16:24:19.136Z", - "app/learn/advanced-development/workflows/retry-failed-steps/page.mdx": "2024-09-30T08:43:53.130Z", - "app/learn/advanced-development/workflows/workflow-hooks/page.mdx": "2024-09-30T08:43:53.131Z", + "app/learn/advanced-development/workflows/retry-failed-steps/page.mdx": + "2024-09-30T08:43:53.130Z", + "app/learn/advanced-development/workflows/workflow-hooks/page.mdx": + "2024-09-30T08:43:53.131Z", "app/learn/cheatsheet/page.mdx": "2024-07-11T13:53:40+03:00", - "app/learn/debugging-and-testing/logging/page.mdx": "2024-09-30T08:43:53.135Z", + "app/learn/debugging-and-testing/logging/page.mdx": + "2024-09-30T08:43:53.135Z", "app/learn/more-resources/page.mdx": "2024-07-04T17:26:03+03:00", "app/learn/storefront-development/page.mdx": "2024-09-11T10:58:59.290Z", - "app/learn/storefront-development/nextjs-starter/page.mdx": "2024-07-04T17:26:03+03:00", + "app/learn/storefront-development/nextjs-starter/page.mdx": + "2024-07-04T17:26:03+03:00", "app/learn/basics/page.mdx": "2024-09-03T07:11:06.879Z", "app/learn/basics/admin-customizations/page.mdx": "2024-10-07T12:41:39.218Z", - "app/learn/advanced-development/workflows/workflow-timeout/page.mdx": "2024-09-30T08:43:53.131Z", - "app/learn/advanced-development/workflows/parallel-steps/page.mdx": "2024-09-30T08:43:53.130Z", + "app/learn/advanced-development/workflows/workflow-timeout/page.mdx": + "2024-09-30T08:43:53.131Z", + "app/learn/advanced-development/workflows/parallel-steps/page.mdx": + "2024-09-30T08:43:53.130Z", "app/learn/advanced-development/page.mdx": "2024-07-04T17:26:03+03:00", "app/learn/first-customizations/page.mdx": "2024-09-11T10:48:42.374Z", "app/learn/debugging-and-testing/page.mdx": "2024-05-03T17:36:38+03:00", "app/learn/basics/medusa-container/page.mdx": "2024-11-21T08:53:18.181Z", - "app/learn/basics/project-directories-files/page.mdx": "2024-10-03T12:46:52.762Z", + "app/learn/basics/project-directories-files/page.mdx": + "2024-10-03T12:46:52.762Z", "app/learn/basics/api-routes/page.mdx": "2024-09-11T10:48:31.777Z", - "app/learn/basics/modules-directory-structure/page.mdx": "2024-10-03T13:03:35.957Z", - "app/learn/advanced-development/workflows/access-workflow-errors/page.mdx": "2024-09-18T12:54:04.695Z", - "app/learn/basics/events-and-subscribers/page.mdx": "2024-11-22T12:19:32.916Z", - "app/learn/advanced-development/modules/container/page.mdx": "2024-11-21T08:59:18.707Z", - "app/learn/advanced-development/workflows/execute-another-workflow/page.mdx": "2024-09-30T08:43:53.129Z", + "app/learn/basics/modules-directory-structure/page.mdx": + "2024-10-03T13:03:35.957Z", + "app/learn/advanced-development/workflows/access-workflow-errors/page.mdx": + "2024-09-18T12:54:04.695Z", + "app/learn/basics/events-and-subscribers/page.mdx": + "2024-11-22T12:19:32.916Z", + "app/learn/advanced-development/modules/container/page.mdx": + "2024-11-21T08:59:18.707Z", + "app/learn/advanced-development/workflows/execute-another-workflow/page.mdx": + "2024-09-30T08:43:53.129Z", "app/learn/basics/loaders/page.mdx": "2024-11-22T10:51:32.931Z", - "app/learn/advanced-development/admin/widgets/page.mdx": "2024-10-07T12:51:09.969Z", - "app/learn/advanced-development/data-models/page.mdx": "2024-09-19T07:26:43.535Z", - "app/learn/advanced-development/modules/remote-link/page.mdx": "2024-09-30T08:43:53.127Z", - "app/learn/advanced-development/api-routes/protected-routes/page.mdx": "2024-09-30T08:43:53.121Z", - "app/learn/advanced-development/workflows/add-workflow-hook/page.mdx": "2024-09-30T08:43:53.128Z", - "app/learn/advanced-development/events-and-subscribers/data-payload/page.mdx": "2024-07-16T17:12:05+01:00", - "app/learn/advanced-development/data-models/default-properties/page.mdx": "2024-09-19T07:32:06.118Z", - "app/learn/advanced-development/workflows/advanced-example/page.mdx": "2024-09-11T10:46:59.975Z", - "app/learn/advanced-development/events-and-subscribers/emit-event/page.mdx": "2024-11-11T15:17:58.045Z", - "app/learn/advanced-development/workflows/conditions/page.mdx": "2024-09-30T08:43:53.128Z", - "app/learn/advanced-development/modules/module-link-directions/page.mdx": "2024-07-24T09:16:01+02:00", + "app/learn/advanced-development/admin/widgets/page.mdx": + "2024-10-07T12:51:09.969Z", + "app/learn/advanced-development/data-models/page.mdx": + "2024-09-19T07:26:43.535Z", + "app/learn/advanced-development/modules/remote-link/page.mdx": + "2024-09-30T08:43:53.127Z", + "app/learn/advanced-development/api-routes/protected-routes/page.mdx": + "2024-09-30T08:43:53.121Z", + "app/learn/advanced-development/workflows/add-workflow-hook/page.mdx": + "2024-09-30T08:43:53.128Z", + "app/learn/advanced-development/events-and-subscribers/data-payload/page.mdx": + "2024-07-16T17:12:05+01:00", + "app/learn/advanced-development/data-models/default-properties/page.mdx": + "2024-09-19T07:32:06.118Z", + "app/learn/advanced-development/workflows/advanced-example/page.mdx": + "2024-09-11T10:46:59.975Z", + "app/learn/advanced-development/events-and-subscribers/emit-event/page.mdx": + "2024-11-11T15:17:58.045Z", + "app/learn/advanced-development/workflows/conditions/page.mdx": + "2024-09-30T08:43:53.128Z", + "app/learn/advanced-development/modules/module-link-directions/page.mdx": + "2024-07-24T09:16:01+02:00", "app/learn/advanced-development/admin/page.mdx": "2024-10-07T12:39:13.178Z", - "app/learn/advanced-development/workflows/long-running-workflow/page.mdx": "2024-09-30T08:43:53.129Z", - "app/learn/advanced-development/workflows/constructor-constraints/page.mdx": "2024-11-14T16:13:19.234Z", - "app/learn/advanced-development/data-models/write-migration/page.mdx": "2024-07-15T17:46:10+02:00", - "app/learn/advanced-development/data-models/manage-relationships/page.mdx": "2024-09-10T11:39:51.167Z", - "app/learn/advanced-development/modules/remote-query/page.mdx": "2024-07-21T21:20:24+02:00", - "app/learn/advanced-development/modules/options/page.mdx": "2024-10-16T08:49:27.162Z", - "app/learn/advanced-development/data-models/relationships/page.mdx": "2024-09-30T08:43:53.125Z", - "app/learn/advanced-development/workflows/compensation-function/page.mdx": "2024-09-30T08:43:53.128Z", - "app/learn/advanced-development/modules/service-factory/page.mdx": "2024-09-30T08:43:53.127Z", - "app/learn/advanced-development/data-models/primary-key/page.mdx": "2024-09-30T08:43:53.123Z", - "app/learn/advanced-development/modules/module-links/page.mdx": "2024-09-30T08:43:53.126Z", - "app/learn/advanced-development/data-models/searchable-property/page.mdx": "2024-09-30T08:43:53.125Z", - "app/learn/advanced-development/scheduled-jobs/execution-number/page.mdx": "2024-07-02T09:41:15+00:00", - "app/learn/advanced-development/api-routes/parameters/page.mdx": "2024-11-12T13:35:09.393Z", - "app/learn/advanced-development/api-routes/http-methods/page.mdx": "2024-09-11T10:43:33.169Z", - "app/learn/advanced-development/admin/tips/page.mdx": "2024-10-07T12:50:36.335Z", - "app/learn/advanced-development/api-routes/cors/page.mdx": "2024-09-30T08:43:53.121Z", - "app/learn/advanced-development/admin/ui-routes/page.mdx": "2024-11-14T15:29:22.901Z", - "app/learn/advanced-development/api-routes/middlewares/page.mdx": "2024-09-11T10:45:31.861Z", - "app/learn/advanced-development/modules/isolation/page.mdx": "2024-07-04T17:26:03+03:00", - "app/learn/advanced-development/data-models/configure-properties/page.mdx": "2024-09-30T08:43:53.122Z", - "app/learn/advanced-development/data-models/index/page.mdx": "2024-09-30T08:43:53.122Z", - "app/learn/advanced-development/custom-cli-scripts/page.mdx": "2024-09-30T08:43:53.122Z", - "app/learn/advanced-development/data-models/property-types/page.mdx": "2024-09-30T08:43:53.124Z", - "app/learn/debugging-and-testing/testing-tools/integration-tests/api-routes/page.mdx": "2024-09-30T08:43:53.136Z", - "app/learn/debugging-and-testing/testing-tools/integration-tests/page.mdx": "2024-09-10T11:39:51.170Z", - "app/learn/debugging-and-testing/testing-tools/integration-tests/workflows/page.mdx": "2024-09-30T08:43:53.139Z", - "app/learn/debugging-and-testing/testing-tools/page.mdx": "2024-09-30T08:43:53.139Z", - "app/learn/debugging-and-testing/testing-tools/unit-tests/module-example/page.mdx": "2024-09-02T11:04:27.232Z", - "app/learn/debugging-and-testing/testing-tools/unit-tests/page.mdx": "2024-09-02T11:03:26.997Z", - "app/learn/advanced-development/modules/service-constraints/page.mdx": "2024-09-30T08:43:53.127Z", - "app/learn/advanced-development/api-routes/page.mdx": "2024-09-04T09:36:33.961Z", - "app/learn/advanced-development/api-routes/responses/page.mdx": "2024-09-11T10:44:37.016Z", - "app/learn/advanced-development/api-routes/validation/page.mdx": "2024-11-12T13:32:32.484Z", - "app/learn/advanced-development/api-routes/errors/page.mdx": "2024-09-30T08:43:53.121Z", - "app/learn/advanced-development/admin/constraints/page.mdx": "2024-09-10T11:39:51.165Z", - "app/learn/debugging-and-testing/testing-tools/modules-tests/module-example/page.mdx": "2024-10-16T08:50:03.061Z", - "app/learn/debugging-and-testing/testing-tools/modules-tests/page.mdx": "2024-10-16T08:50:23.232Z", - "app/learn/advanced-development/module-links/custom-columns/page.mdx": "2024-11-19T15:05:59.471Z", - "app/learn/advanced-development/module-links/directions/page.mdx": "2024-09-16T15:37:51.441Z", - "app/learn/advanced-development/module-links/page.mdx": "2024-09-16T15:36:48.190Z", - "app/learn/advanced-development/module-links/query/page.mdx": "2024-11-19T15:25:01.149Z", - "app/learn/advanced-development/module-links/remote-link/page.mdx": "2024-09-16T12:42:27.581Z", - "app/learn/advanced-development/modules/db-operations/page.mdx": "2024-09-16T14:38:29.150Z", - "app/learn/advanced-development/modules/multiple-services/page.mdx": "2024-09-16T14:41:32.975Z", + "app/learn/advanced-development/workflows/long-running-workflow/page.mdx": + "2024-09-30T08:43:53.129Z", + "app/learn/advanced-development/workflows/constructor-constraints/page.mdx": + "2024-11-14T16:13:19.234Z", + "app/learn/advanced-development/data-models/write-migration/page.mdx": + "2024-07-15T17:46:10+02:00", + "app/learn/advanced-development/data-models/manage-relationships/page.mdx": + "2024-09-10T11:39:51.167Z", + "app/learn/advanced-development/modules/remote-query/page.mdx": + "2024-07-21T21:20:24+02:00", + "app/learn/advanced-development/modules/options/page.mdx": + "2024-10-16T08:49:27.162Z", + "app/learn/advanced-development/data-models/relationships/page.mdx": + "2024-09-30T08:43:53.125Z", + "app/learn/advanced-development/workflows/compensation-function/page.mdx": + "2024-09-30T08:43:53.128Z", + "app/learn/advanced-development/modules/service-factory/page.mdx": + "2024-09-30T08:43:53.127Z", + "app/learn/advanced-development/data-models/primary-key/page.mdx": + "2024-09-30T08:43:53.123Z", + "app/learn/advanced-development/modules/module-links/page.mdx": + "2024-09-30T08:43:53.126Z", + "app/learn/advanced-development/data-models/searchable-property/page.mdx": + "2024-09-30T08:43:53.125Z", + "app/learn/advanced-development/scheduled-jobs/execution-number/page.mdx": + "2024-07-02T09:41:15+00:00", + "app/learn/advanced-development/api-routes/parameters/page.mdx": + "2024-11-12T13:35:09.393Z", + "app/learn/advanced-development/api-routes/http-methods/page.mdx": + "2024-09-11T10:43:33.169Z", + "app/learn/advanced-development/admin/tips/page.mdx": + "2024-10-07T12:50:36.335Z", + "app/learn/advanced-development/api-routes/cors/page.mdx": + "2024-09-30T08:43:53.121Z", + "app/learn/advanced-development/admin/ui-routes/page.mdx": + "2024-11-14T15:29:22.901Z", + "app/learn/advanced-development/api-routes/middlewares/page.mdx": + "2024-09-11T10:45:31.861Z", + "app/learn/advanced-development/modules/isolation/page.mdx": + "2024-07-04T17:26:03+03:00", + "app/learn/advanced-development/data-models/configure-properties/page.mdx": + "2024-09-30T08:43:53.122Z", + "app/learn/advanced-development/data-models/index/page.mdx": + "2024-09-30T08:43:53.122Z", + "app/learn/advanced-development/custom-cli-scripts/page.mdx": + "2024-09-30T08:43:53.122Z", + "app/learn/advanced-development/data-models/property-types/page.mdx": + "2024-09-30T08:43:53.124Z", + "app/learn/debugging-and-testing/testing-tools/integration-tests/api-routes/page.mdx": + "2024-09-30T08:43:53.136Z", + "app/learn/debugging-and-testing/testing-tools/integration-tests/page.mdx": + "2024-09-10T11:39:51.170Z", + "app/learn/debugging-and-testing/testing-tools/integration-tests/workflows/page.mdx": + "2024-09-30T08:43:53.139Z", + "app/learn/debugging-and-testing/testing-tools/page.mdx": + "2024-09-30T08:43:53.139Z", + "app/learn/debugging-and-testing/testing-tools/unit-tests/module-example/page.mdx": + "2024-09-02T11:04:27.232Z", + "app/learn/debugging-and-testing/testing-tools/unit-tests/page.mdx": + "2024-09-02T11:03:26.997Z", + "app/learn/advanced-development/modules/service-constraints/page.mdx": + "2024-09-30T08:43:53.127Z", + "app/learn/advanced-development/api-routes/page.mdx": + "2024-09-04T09:36:33.961Z", + "app/learn/advanced-development/api-routes/responses/page.mdx": + "2024-09-11T10:44:37.016Z", + "app/learn/advanced-development/api-routes/validation/page.mdx": + "2024-11-12T13:32:32.484Z", + "app/learn/advanced-development/api-routes/errors/page.mdx": + "2024-09-30T08:43:53.121Z", + "app/learn/advanced-development/admin/constraints/page.mdx": + "2024-09-10T11:39:51.165Z", + "app/learn/debugging-and-testing/testing-tools/modules-tests/module-example/page.mdx": + "2024-10-16T08:50:03.061Z", + "app/learn/debugging-and-testing/testing-tools/modules-tests/page.mdx": + "2024-10-16T08:50:23.232Z", + "app/learn/advanced-development/module-links/custom-columns/page.mdx": + "2024-11-19T15:05:59.471Z", + "app/learn/advanced-development/module-links/directions/page.mdx": + "2024-09-16T15:37:51.441Z", + "app/learn/advanced-development/module-links/page.mdx": + "2024-09-16T15:36:48.190Z", + "app/learn/advanced-development/module-links/query/page.mdx": + "2024-11-19T15:25:01.149Z", + "app/learn/advanced-development/module-links/remote-link/page.mdx": + "2024-09-16T12:42:27.581Z", + "app/learn/advanced-development/modules/db-operations/page.mdx": + "2024-09-16T14:38:29.150Z", + "app/learn/advanced-development/modules/multiple-services/page.mdx": + "2024-09-16T14:41:32.975Z", "app/learn/advanced-development/modules/page.mdx": "2024-09-16T14:33:48.217Z", - "app/learn/debugging-and-testing/instrumentation/page.mdx": "2024-09-17T08:53:15.910Z", - "app/learn/advanced-development/api-routes/additional-data/page.mdx": "2024-09-30T08:43:53.120Z", - "app/learn/advanced-development/workflows/page.mdx": "2024-09-18T08:00:57.364Z", - "app/learn/advanced-development/workflows/variable-manipulation/page.mdx": "2024-11-14T16:11:24.538Z", - "app/learn/customization/custom-features/api-route/page.mdx": "2024-09-12T12:42:34.201Z", - "app/learn/customization/custom-features/module/page.mdx": "2024-10-16T08:49:44.676Z", - "app/learn/customization/custom-features/workflow/page.mdx": "2024-09-30T08:43:53.133Z", - "app/learn/customization/extend-models/create-links/page.mdx": "2024-09-30T08:43:53.133Z", - "app/learn/customization/extend-models/extend-create-product/page.mdx": "2024-09-30T08:43:53.134Z", - "app/learn/customization/custom-features/page.mdx": "2024-09-12T11:18:13.271Z", - "app/learn/customization/customize-admin/page.mdx": "2024-09-12T12:25:29.853Z", - "app/learn/customization/customize-admin/route/page.mdx": "2024-10-07T12:43:11.335Z", - "app/learn/customization/customize-admin/widget/page.mdx": "2024-10-07T12:44:24.538Z", - "app/learn/customization/extend-models/define-link/page.mdx": "2024-09-30T08:43:53.134Z", + "app/learn/debugging-and-testing/instrumentation/page.mdx": + "2024-09-17T08:53:15.910Z", + "app/learn/advanced-development/api-routes/additional-data/page.mdx": + "2024-09-30T08:43:53.120Z", + "app/learn/advanced-development/workflows/page.mdx": + "2024-09-18T08:00:57.364Z", + "app/learn/advanced-development/workflows/variable-manipulation/page.mdx": + "2024-11-14T16:11:24.538Z", + "app/learn/customization/custom-features/api-route/page.mdx": + "2024-09-12T12:42:34.201Z", + "app/learn/customization/custom-features/module/page.mdx": + "2024-10-16T08:49:44.676Z", + "app/learn/customization/custom-features/workflow/page.mdx": + "2024-09-30T08:43:53.133Z", + "app/learn/customization/extend-models/create-links/page.mdx": + "2024-09-30T08:43:53.133Z", + "app/learn/customization/extend-models/extend-create-product/page.mdx": + "2024-09-30T08:43:53.134Z", + "app/learn/customization/custom-features/page.mdx": + "2024-09-12T11:18:13.271Z", + "app/learn/customization/customize-admin/page.mdx": + "2024-09-12T12:25:29.853Z", + "app/learn/customization/customize-admin/route/page.mdx": + "2024-10-07T12:43:11.335Z", + "app/learn/customization/customize-admin/widget/page.mdx": + "2024-10-07T12:44:24.538Z", + "app/learn/customization/extend-models/define-link/page.mdx": + "2024-09-30T08:43:53.134Z", "app/learn/customization/extend-models/page.mdx": "2024-09-12T12:38:57.394Z", - "app/learn/customization/extend-models/query-linked-records/page.mdx": "2024-09-30T08:43:53.134Z", - "app/learn/customization/integrate-systems/handle-event/page.mdx": "2024-09-30T08:43:53.135Z", - "app/learn/customization/integrate-systems/page.mdx": "2024-09-12T12:33:29.827Z", - "app/learn/customization/integrate-systems/schedule-task/page.mdx": "2024-09-30T08:43:53.135Z", - "app/learn/customization/integrate-systems/service/page.mdx": "2024-10-16T08:49:50.899Z", + "app/learn/customization/extend-models/query-linked-records/page.mdx": + "2024-09-30T08:43:53.134Z", + "app/learn/customization/integrate-systems/handle-event/page.mdx": + "2024-09-30T08:43:53.135Z", + "app/learn/customization/integrate-systems/page.mdx": + "2024-09-12T12:33:29.827Z", + "app/learn/customization/integrate-systems/schedule-task/page.mdx": + "2024-09-30T08:43:53.135Z", + "app/learn/customization/integrate-systems/service/page.mdx": + "2024-10-16T08:49:50.899Z", "app/learn/customization/next-steps/page.mdx": "2024-09-12T10:50:04.873Z", "app/learn/customization/page.mdx": "2024-09-12T11:16:18.504Z", "app/learn/more-resources/cheatsheet/page.mdx": "2024-07-11T16:11:26.480Z", - "app/learn/architecture/architectural-modules/page.mdx": "2024-09-23T12:51:04.520Z", + "app/learn/architecture/architectural-modules/page.mdx": + "2024-09-23T12:51:04.520Z", "app/learn/architecture/overview/page.mdx": "2024-09-23T12:55:01.339Z", - "app/learn/advanced-development/data-models/infer-type/page.mdx": "2024-09-30T08:43:53.123Z", - "app/learn/advanced-development/custom-cli-scripts/seed-data/page.mdx": "2024-10-03T11:11:07.181Z", + "app/learn/advanced-development/data-models/infer-type/page.mdx": + "2024-09-30T08:43:53.123Z", + "app/learn/advanced-development/custom-cli-scripts/seed-data/page.mdx": + "2024-10-03T11:11:07.181Z", "app/learn/basics/modules/page.mdx": "2024-11-21T14:09:42.197Z", - "app/learn/advanced-development/environment-variables/page.mdx": "2024-10-25T14:59:07.831Z", + "app/learn/advanced-development/environment-variables/page.mdx": + "2024-10-25T14:59:07.831Z", "app/learn/build/page.mdx": "2024-11-11T11:08:41.832Z", "app/learn/deployment/general/page.mdx": "2024-11-25T14:33:50.439Z", - "app/learn/advanced-development/workflows/multiple-step-usage/page.mdx": "2024-11-12T11:11:49.191Z" -} \ No newline at end of file + "app/learn/advanced-development/workflows/multiple-step-usage/page.mdx": + "2024-11-12T11:11:49.191Z", +}