www/docs/cloudflare-migration-diff.md
diff --git a/.github/workflows/algolia-api-indexer.yml b/.github/workflows/algolia-api-indexer.yml new file mode 100644 index 0000000000000..3c639f57f7651 --- /dev/null +++ b/.github/workflows/algolia-api-indexer.yml @@ -0,0 +1,33 @@ +name: Index API Reference to Algolia + +on:
+jobs:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: yarn
- name: Install dependencies
run: yarn install --frozen-lockfile
- name: Run Algolia indexer
working-directory: www/apps/api-reference
run: node scripts/index-algolia.mjs
env:
NEXT_PUBLIC_ALGOLIA_APP_ID: ${{ secrets.NEXT_PUBLIC_ALGOLIA_APP_ID }}
ALGOLIA_WRITE_API_KEY: ${{ secrets.ALGOLIA_WRITE_API_KEY }}
NEXT_PUBLIC_API_ALGOLIA_INDEX_NAME: ${{ secrets.NEXT_PUBLIC_API_ALGOLIA_INDEX_NAME }}
NEXT_PUBLIC_BASE_URL: ${{ secrets.NEXT_PUBLIC_BASE_URL }}
NEXT_PUBLIC_BASE_PATH: /api
diff --git a/.github/workflows/sync-api-reference-specs-to-r2.yml b/.github/workflows/sync-api-reference-specs-to-r2.yml new file mode 100644 index 0000000000000..74dc2c0f4c555 --- /dev/null +++ b/.github/workflows/sync-api-reference-specs-to-r2.yml @@ -0,0 +1,61 @@ +name: Sync API Reference Specs to R2 + +on:
- develop
- "www/apps/api-reference/specs/**"
+jobs:
run:
working-directory: www/apps/api-reference
- uses: actions/checkout@v4
with:
fetch-depth: 2
- uses: actions/setup-node@v4
with:
node-version: "20"
cache: "yarn"
- name: Install dependencies
run: yarn install --immutable
working-directory: .
- name: Get changed spec files
id: changed
uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96
with:
files: "www/apps/api-reference/specs/**"
separator: " "
- name: Upload added/modified specs
if: steps.changed.outputs.any_changed == 'true'
env:
CHANGED_FILES: ${{ steps.changed.outputs.all_changed_files }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_R2_ACCESS_KEY_ID: ${{ secrets.CLOUDFLARE_R2_ACCESS_KEY_ID }}
CLOUDFLARE_R2_SECRET_ACCESS_KEY: ${{ secrets.CLOUDFLARE_R2_SECRET_ACCESS_KEY }}
R2_BUCKET_NAME: ${{ vars.R2_BUCKET_NAME }}
run: |
STRIPPED=$(echo "$CHANGED_FILES" | tr ' ' '\n' | sed 's|^www/apps/api-reference/||' | tr '\n' ' ')
node ./scripts/upload-specs-to-r2.mjs --upload $STRIPPED
- name: Remove deleted specs
if: steps.changed.outputs.any_deleted == 'true'
env:
DELETED_FILES: ${{ steps.changed.outputs.deleted_files }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_R2_ACCESS_KEY_ID: ${{ secrets.CLOUDFLARE_R2_ACCESS_KEY_ID }}
CLOUDFLARE_R2_SECRET_ACCESS_KEY: ${{ secrets.CLOUDFLARE_R2_SECRET_ACCESS_KEY }}
R2_BUCKET_NAME: ${{ vars.R2_BUCKET_NAME }}
run: |
STRIPPED=$(echo "$DELETED_FILES" | tr ' ' '\n' | sed 's|^www/apps/api-reference/||' | tr '\n' ' ')
node ./scripts/upload-specs-to-r2.mjs --remove $STRIPPED
diff --git a/.github/workflows/sync-resources-references-to-r2.yml b/.github/workflows/sync-resources-references-to-r2.yml new file mode 100644 index 0000000000000..218e25a35c7a3 --- /dev/null +++ b/.github/workflows/sync-resources-references-to-r2.yml @@ -0,0 +1,61 @@ +name: Sync Resources References to R2 + +on:
- develop
- "www/apps/resources/references/**"
+jobs:
run:
working-directory: www/apps/resources
- uses: actions/checkout@v4
with:
fetch-depth: 2
- uses: actions/setup-node@v4
with:
node-version: "20"
cache: "yarn"
- name: Install dependencies
run: yarn install --immutable
working-directory: .
- name: Get changed reference files
id: changed
uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96
with:
files: "www/apps/resources/references/**"
separator: " "
- name: Upload added/modified references
if: steps.changed.outputs.any_changed == 'true'
env:
CHANGED_FILES: ${{ steps.changed.outputs.all_changed_files }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_R2_ACCESS_KEY_ID: ${{ secrets.CLOUDFLARE_R2_ACCESS_KEY_ID }}
CLOUDFLARE_R2_SECRET_ACCESS_KEY: ${{ secrets.CLOUDFLARE_R2_SECRET_ACCESS_KEY }}
R2_BUCKET_NAME: ${{ vars.R2_BUCKET_NAME }}
run: |
STRIPPED=$(echo "$CHANGED_FILES" | tr ' ' '\n' | grep '/page\.mdx$' | sed 's|^www/apps/resources/||' | tr '\n' ' ')
[ -n "$STRIPPED" ] && node ./scripts/upload-references-to-r2.mjs --upload $STRIPPED || echo "No page.mdx files to upload."
- name: Remove deleted references
if: steps.changed.outputs.any_deleted == 'true'
env:
DELETED_FILES: ${{ steps.changed.outputs.deleted_files }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_R2_ACCESS_KEY_ID: ${{ secrets.CLOUDFLARE_R2_ACCESS_KEY_ID }}
CLOUDFLARE_R2_SECRET_ACCESS_KEY: ${{ secrets.CLOUDFLARE_R2_SECRET_ACCESS_KEY }}
R2_BUCKET_NAME: ${{ vars.R2_BUCKET_NAME }}
run: |
STRIPPED=$(echo "$DELETED_FILES" | tr ' ' '\n' | grep '/page\.mdx$' | sed 's|^www/apps/resources/||' | tr '\n' ' ')
[ -n "$STRIPPED" ] && node ./scripts/upload-references-to-r2.mjs --remove $STRIPPED || echo "No page.mdx files to remove."
diff --git a/.github/workflows/sync-ui-specs-to-r2.yml b/.github/workflows/sync-ui-specs-to-r2.yml new file mode 100644 index 0000000000000..e14a9873bbc3b --- /dev/null +++ b/.github/workflows/sync-ui-specs-to-r2.yml @@ -0,0 +1,61 @@ +name: Sync UI Specs to R2 + +on:
- develop
- "www/apps/ui/specs/**"
+jobs:
run:
working-directory: www/apps/ui
- uses: actions/checkout@v4
with:
fetch-depth: 2
- uses: actions/setup-node@v4
with:
node-version: "20"
cache: "yarn"
- name: Install dependencies
run: yarn install --immutable
working-directory: .
- name: Get changed spec files
id: changed
uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96
with:
files: "www/apps/ui/specs/**"
separator: " "
- name: Upload added/modified specs
if: steps.changed.outputs.any_changed == 'true'
env:
CHANGED_FILES: ${{ steps.changed.outputs.all_changed_files }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_R2_ACCESS_KEY_ID: ${{ secrets.CLOUDFLARE_R2_ACCESS_KEY_ID }}
CLOUDFLARE_R2_SECRET_ACCESS_KEY: ${{ secrets.CLOUDFLARE_R2_SECRET_ACCESS_KEY }}
R2_BUCKET_NAME: ${{ vars.R2_BUCKET_NAME }}
run: |
STRIPPED=$(echo "$CHANGED_FILES" | tr ' ' '\n' | sed 's|^www/apps/ui/||' | tr '\n' ' ')
node ./scripts/upload-specs-to-r2.mjs --upload $STRIPPED
- name: Remove deleted specs
if: steps.changed.outputs.any_deleted == 'true'
env:
DELETED_FILES: ${{ steps.changed.outputs.deleted_files }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_R2_ACCESS_KEY_ID: ${{ secrets.CLOUDFLARE_R2_ACCESS_KEY_ID }}
CLOUDFLARE_R2_SECRET_ACCESS_KEY: ${{ secrets.CLOUDFLARE_R2_SECRET_ACCESS_KEY }}
R2_BUCKET_NAME: ${{ vars.R2_BUCKET_NAME }}
run: |
STRIPPED=$(echo "$DELETED_FILES" | tr ' ' '\n' | sed 's|^www/apps/ui/||' | tr '\n' ' ')
node ./scripts/upload-specs-to-r2.mjs --remove $STRIPPED
diff --git a/www/apps/api-reference/.env.sample b/www/apps/api-reference/.env.sample index 0a3d68b737971..34bdaa560d046 100644 --- a/www/apps/api-reference/.env.sample +++ b/www/apps/api-reference/.env.sample @@ -25,4 +25,14 @@ NEXT_PUBLIC_INTEGRATION_ID= NEXT_PUBLIC_GA_ID= NEXT_PUBLIC_REO_DEV_CLIENT_ID= NEXT_PUBLIC_POSTHOG_KEY= -NEXT_PUBLIC_POSTHOG_HOST= \ No newline at end of file +NEXT_PUBLIC_POSTHOG_HOST= + +# CLOUDFLARE DEPLOYMENT +# Base URL of the R2 bucket where specs/ are uploaded (e.g. https://pub-xxx.r2.dev/api-reference) +# Required when deploying to Cloudflare; falls back to local filesystem in dev +SPECS_R2_BASE_URL= +# R2 credentials for the upload:r2 script +CLOUDFLARE_ACCOUNT_ID= +CLOUDFLARE_R2_ACCESS_KEY_ID= +CLOUDFLARE_R2_SECRET_ACCESS_KEY= +R2_BUCKET_NAME=docs-assets \ No newline at end of file diff --git a/www/apps/api-reference/.gitignore b/www/apps/api-reference/.gitignore index 1e67bf4da64f7..e9f7719bdd18d 100644 --- a/www/apps/api-reference/.gitignore +++ b/www/apps/api-reference/.gitignore @@ -27,6 +27,7 @@ yarn-error.log*
.env*.local .env.test +.dev.vars
.vercel @@ -40,4 +41,8 @@ specs/admin.oas.json specs/store.oas.json
-analyze \ No newline at end of file +analyze + +# cloudflare +.open-next +.wrangler \ No newline at end of file diff --git a/www/apps/api-reference/README.md b/www/apps/api-reference/README.md index 57127d8bd160d..06d4a2d9f517a 100644 --- a/www/apps/api-reference/README.md +++ b/www/apps/api-reference/README.md @@ -5,3 +5,4 @@ The Medusa API Reference website is built with Next.js 13. You can learn more ab
specs are automatically generated by our OAS CLI tool. So, contributions should be made in the files under packages/medusa/src/api instead of directly making changes to the generated spec files.
+
diff --git a/www/apps/api-reference/app/algolia/route.ts b/www/apps/api-reference/app/algolia/route.ts
deleted file mode 100644
index 17cb03b163b24..0000000000000
--- a/www/apps/api-reference/app/algolia/route.ts
+++ /dev/null
@@ -1,151 +0,0 @@
-import OpenAPIParser from "@readme/openapi-parser"
-import algoliasearch from "algoliasearch"
-import type { OpenAPI } from "types"
-import path from "path"
-import { NextResponse } from "next/server"
-import { JSDOM } from "jsdom"
-import getUrl from "../../utils/get-url"
-import { capitalize } from "docs-ui"
-import { getSectionId } from "docs-utils"-export async function GET() {
version: ["current"],
lang: "en",
_tags: ["api", `${area}-v2`],
if (!header.textContent || !header.nextSibling?.textContent) {
return
}
const normalizedHeaderContent = header.textContent.replaceAll("#", "")
const description = header.nextSibling?.textContent
const objectID = getSectionId([normalizedHeaderContent])
const url = getUrl(area, objectID)
indices.push({
objectID: getObjectId(area, `${objectID}-mdx-section`),
hierarchy: getHierarchy(area, [normalizedHeaderContent]),
type: `content`,
content: description || "",
url,
url_without_variables: url,
url_without_anchor: url,
...defaultIndexData,
})
path.join(process.cwd(), `specs/${area}/openapi.full.yaml`)
const tagName = getSectionId([tag.name])
const url = getUrl(area, tagName)
indices.push({
objectID: getObjectId(area, tagName),
hierarchy: getHierarchy(area, [tag.name]),
type: "lvl1",
content: null,
description: tag.description,
url,
url_without_variables: url,
url_without_anchor: url,
...defaultIndexData,
})
Object.values(path).forEach((op) => {
const operation = op as OpenAPI.Operation
const tag = operation.tags?.[0]
const operationName = getSectionId([tag || "", operation.operationId])
const url = getUrl(area, operationName)
indices.push({
objectID: getObjectId(area, operationName),
hierarchy: getHierarchy(area, [operation.summary]),
type: "content",
content: operation.summary,
content_camel: operation.summary,
url,
url_without_variables: url,
url_without_anchor: url,
...defaultIndexData,
})
// index its description
const operationDescriptionId = getSectionId([
tag || "",
operation.operationId,
operation.description.substring(
0,
Math.min(20, operation.description.length)
),
])
indices.push({
objectID: getObjectId(area, operationDescriptionId),
hierarchy: getHierarchy(area, [
operation.summary,
operation.description,
]),
type: "content",
content: operation.description,
content_camel: operation.description,
url,
url_without_variables: url,
url_without_anchor: url,
...defaultIndexData,
})
})
autoGenerateObjectIDIfNotExist: true,
-function getObjectId(area: string, objectName: string): string {
${area}_${objectName}
-}-function getHierarchy(area: string, levels: string[]): Record<string, string> {
${capitalize(area)} API Reference,lvl${counter}] = level-export const dynamic = "force-dynamic" diff --git a/www/apps/api-reference/app/assets/sitemap.ts b/www/apps/api-reference/app/assets/sitemap.ts index 109b44e6ef919..f58b2d1fe4009 100644 --- a/www/apps/api-reference/app/assets/sitemap.ts +++ b/www/apps/api-reference/app/assets/sitemap.ts @@ -1,58 +1,30 @@ import { MetadataRoute } from "next" -import OpenAPIParser from "@readme/openapi-parser" -import path from "path" -import type { OpenAPI } from "types" import getUrl from "../../utils/get-url" -import getPathsOfTag from "../../utils/get-paths-of-tag" import { config } from "../../config" -import { getSectionId } from "docs-utils" +import { specsSitemapData } from "@/generated/specs-sitemap-data.mjs"
-export default async function sitemap(): Promise<MetadataRoute.Sitemap> { +export default function sitemap(): MetadataRoute.Sitemap { const baseUrl = config.baseUrl
url: `${baseUrl}/api/admin`,
lastModified: new Date(),
url: `${baseUrl}/api/store`,
lastModified: new Date(),
${baseUrl}/api/admin, lastModified: new Date() },${baseUrl}/api/store, lastModified: new Date() },
] path.join(process.cwd(), `specs/${area}/openapi.yaml`)
baseSpecs.tags?.map(async (tag) => {
const tagName = getSectionId([tag.name])
const url = getUrl(area, tagName)
results.push({
url: getUrl(area, tagSectionId),
lastModified: new Date(),
})
for (const opSectionId of operationSectionIds) {
results.push({
url,
url: getUrl(area, opSectionId),
lastModified: new Date(),
})
const paths = await getPathsOfTag(tagName, area)
Object.values(paths.paths).forEach((path) => {
Object.values(path).forEach((op) => {
const operation = op as OpenAPI.Operation
const operationName = getSectionId([
tag.name,
operation.operationId,
])
const url = getUrl(area, operationName)
results.push({
url,
lastModified: new Date(),
})
})
})
}) || []
}
return results diff --git a/www/apps/api-reference/app/base-specs/route.ts b/www/apps/api-reference/app/base-specs/route.ts index b0942e5820293..c9d4b0e46cbd0 100644 --- a/www/apps/api-reference/app/base-specs/route.ts +++ b/www/apps/api-reference/app/base-specs/route.ts @@ -3,6 +3,8 @@ import path from "path" import OpenAPIParser from "@readme/openapi-parser" import getPathsOfTag from "@/utils/get-paths-of-tag" import type { OpenAPI } from "types" +import { workerCompatibleFetch } from "docs-utils" +import { parse as parseYaml } from "yaml"
export async function GET(request: Request) { const { searchParams } = new URL(request.url) @@ -19,9 +21,24 @@ export async function GET(request: Request) { } ) }
const r2Base = process.env.SPECS_R2_BASE_URL
const specPath = r2Base
? ${r2Base}/specs/${area}/openapi.yaml
: path.join(process.cwd(), "specs", area, "openapi.yaml")
const baseSpecs = await workerCompatibleFetch<OpenAPI.ExpandedDocument>({
url: specPath,
responseTransformer: async (res) => {
if (!res.ok) {
throw new Error(`Failed to fetch spec: ${specPath} (${res.status})`)
}
const text = await res.text()
return (await parseYaml(text)) as OpenAPI.ExpandedDocument
},
fallbackAction: async () => {
// In local development, we can read the spec directly from the filesystem
return (await OpenAPIParser.parse(specPath)) as OpenAPI.ExpandedDocument
},
})
if (expand) { const paths = await getPathsOfTag(expand, area) diff --git a/www/apps/api-reference/app/download/[area]/route.ts b/www/apps/api-reference/app/download/[area]/route.ts index 282e0d23812a4..2af5b5057229a 100644 --- a/www/apps/api-reference/app/download/[area]/route.ts +++ b/www/apps/api-reference/app/download/[area]/route.ts @@ -1,6 +1,6 @@ -import { existsSync, readFileSync } from "fs" -import { NextResponse } from "next/server" import path from "path" +import { workerCompatibleFetch } from "docs-utils" +import { getPathForEnv } from "../../../utils/get-path-for-env"
type DownloadParams = { params: Promise<{ @@ -14,32 +14,37 @@ export async function GET(request: Request, props: DownloadParams) { const { searchParams } = new URL(request.url) const version = searchParams.get("version")
process.cwd(),
"specs",
"versions",
version,
area,
"openapi.full.yaml"
)
${r2Base}/specsconst filePath =
versionedPath && existsSync(versionedPath) ? versionedPath : defaultPath
if (!existsSync(filePath)) {
return new NextResponse(null, {
status: 404,
})
}
if (!res.ok) {
throw new Error(`Failed to fetch spec: ${res.status}`)
}
return await res.text()
// In local development, we can read the spec directly from the filesystem
const { readFileSync, existsSync } = await import("fs")
const filePath =
versionedUrl && existsSync(versionedUrl) ? versionedUrl : defaultUrl
if (!existsSync(filePath)) {
throw new Error(`Spec file not found: ${filePath}`)
}
return readFileSync(filePath, "utf-8")
},
})
return new Response(fileContent, { headers: { diff --git a/www/apps/api-reference/app/schema/route.ts b/www/apps/api-reference/app/schema/route.ts index 77ff9027e1875..79c800803f31a 100644 --- a/www/apps/api-reference/app/schema/route.ts +++ b/www/apps/api-reference/app/schema/route.ts @@ -1,7 +1,6 @@ import { NextResponse } from "next/server" -import path from "path" -import { existsSync } from "fs" import getSchemaContent from "../../utils/get-schema-content" +import { getPathForEnv } from "../../utils/get-path-for-env"
export async function GET(request: Request) { const { searchParams } = new URL(request.url) @@ -36,38 +35,40 @@ export async function GET(request: Request) { .replace("#/components/schemas/", "") .replaceAll("./components/schemas/", "")
await getSchemaContent(schemaUrl, baseSchemasUrl)
{
schema: dereferencedDocument.components?.schemas
? Object.values(dereferencedDocument.components?.schemas)[0]
: schema,
},
{
status: 200,
}
message: `Schema ${name} doesn't exist.`,
message: `Failed to fetch schema: ${error}`,
},
{
status: 404,
status: 500,
}
schema: dereferencedDocument.components?.schemas
? Object.values(dereferencedDocument.components?.schemas)[0]
: schema,
status: 200,
export async function GET(request: Request) { @@ -19,9 +18,6 @@ export async function GET(request: Request) { ) }
diff --git a/www/apps/api-reference/generated/generated-admin-sidebar.mjs b/www/apps/api-reference/generated/generated-admin-sidebar.mjs index 7eee4a235fa46..927ea75715a93 100644 --- a/www/apps/api-reference/generated/generated-admin-sidebar.mjs +++ b/www/apps/api-reference/generated/generated-admin-sidebar.mjs @@ -621,6 +621,24 @@ const generatedgeneratedAdminSidebarSidebar = { "loaded": false, "showLoadingIfEmpty": true },
"type": "category",
"title": "Property Labels",
"children": [
{
"type": "link",
"path": "property-labels_propertylabel_schema",
"title": "PropertyLabel Object",
"loaded": true,
"badge": {
"variant": "neutral",
"text": "Schema"
}
}
],
"loaded": false,
"showLoadingIfEmpty": true
"tagSectionId": "api-keys",
"operationSectionIds": [
"api-keys_getapikeys",
"api-keys_postapikeys",
"api-keys_getapikeysid",
"api-keys_postapikeysid",
"api-keys_deleteapikeysid",
"api-keys_postapikeysidrevoke",
"api-keys_postapikeysidsaleschannels"
]
"tagSectionId": "auth",
"operationSectionIds": [
"auth_postsession",
"auth_deletesession",
"auth_postadminauthtokenrefresh",
"auth_postactor_typeauth_provider",
"auth_postactor_typeauth_providercallback",
"auth_postactor_typeauth_provider_register",
"auth_postactor_typeauth_providerresetpassword",
"auth_postactor_typeauth_providerupdate"
]
"tagSectionId": "campaigns",
"operationSectionIds": [
"campaigns_getcampaigns",
"campaigns_postcampaigns",
"campaigns_getcampaignsid",
"campaigns_postcampaignsid",
"campaigns_deletecampaignsid",
"campaigns_postcampaignsidpromotions"
]
"tagSectionId": "claims",
"operationSectionIds": [
"claims_getclaimsid",
"claims_postclaimsidcancel",
"claims_postclaimsidinbounditems",
"claims_getclaims",
"claims_postclaims",
"claims_postclaimsidinboundshippingmethod",
"claims_postclaimsidclaimitemsaction_id",
"claims_deleteclaimsidclaimitemsaction_id",
"claims_postclaimsidclaimitems",
"claims_postclaimsidoutbounditems",
"claims_postclaimsidinbounditemsaction_id",
"claims_deleteclaimsidinbounditemsaction_id",
"claims_postclaimsidinboundshippingmethodaction_id",
"claims_deleteclaimsidinboundshippingmethodaction_id",
"claims_postclaimsidoutbounditemsaction_id",
"claims_deleteclaimsidoutbounditemsaction_id",
"claims_postclaimsidoutboundshippingmethod",
"claims_postclaimsidoutboundshippingmethodaction_id",
"claims_deleteclaimsidoutboundshippingmethodaction_id",
"claims_postclaimsidrequest",
"claims_deleteclaimsidrequest"
]
"tagSectionId": "collections",
"operationSectionIds": [
"collections_getcollections",
"collections_postcollections",
"collections_getcollectionsid",
"collections_postcollectionsid",
"collections_deletecollectionsid",
"collections_postcollectionsidproducts"
]
"tagSectionId": "currencies",
"operationSectionIds": [
"currencies_getcurrenciescode",
"currencies_getcurrencies"
]
"tagSectionId": "customer-groups",
"operationSectionIds": [
"customer-groups_getcustomergroups",
"customer-groups_postcustomergroups",
"customer-groups_getcustomergroupsid",
"customer-groups_postcustomergroupsid",
"customer-groups_deletecustomergroupsid",
"customer-groups_postcustomergroupsidcustomers"
]
"tagSectionId": "customers",
"operationSectionIds": [
"customers_getcustomersid",
"customers_postcustomersid",
"customers_deletecustomersid",
"customers_getcustomers",
"customers_postcustomers",
"customers_getcustomersidaddresses",
"customers_postcustomersidaddresses",
"customers_postcustomersidcustomergroups",
"customers_getcustomersidaddressesaddress_id",
"customers_postcustomersidaddressesaddress_id",
"customers_deletecustomersidaddressesaddress_id"
]
"tagSectionId": "draft-orders",
"operationSectionIds": [
"draft-orders_getdraftorders",
"draft-orders_postdraftorders",
"draft-orders_getdraftordersid",
"draft-orders_postdraftordersid",
"draft-orders_deletedraftordersid",
"draft-orders_postdraftordersidedititemsitemitem_id",
"draft-orders_postdraftordersidedititems",
"draft-orders_postdraftordersidconverttoorder",
"draft-orders_postdraftordersidedit",
"draft-orders_deletedraftordersidedit",
"draft-orders_postdraftordersideditpromotions",
"draft-orders_deletedraftordersideditpromotions",
"draft-orders_postdraftordersideditrequest",
"draft-orders_postdraftordersideditshippingmethodsmethodmethod_id",
"draft-orders_deletedraftordersideditshippingmethodsmethodmethod_id",
"draft-orders_postdraftordersideditshippingmethodsaction_id",
"draft-orders_deletedraftordersideditshippingmethodsaction_id",
"draft-orders_postdraftordersidedititemsaction_id",
"draft-orders_deletedraftordersidedititemsaction_id",
"draft-orders_postdraftordersideditshippingmethods",
"draft-orders_postdraftordersideditconfirm"
]
"tagSectionId": "exchanges",
"operationSectionIds": [
"exchanges_getexchanges",
"exchanges_postexchanges",
"exchanges_getexchangesid",
"exchanges_postexchangesidinbounditems",
"exchanges_postexchangesidcancel",
"exchanges_postexchangesidinbounditemsaction_id",
"exchanges_deleteexchangesidinbounditemsaction_id",
"exchanges_postexchangesidinboundshippingmethodaction_id",
"exchanges_deleteexchangesidinboundshippingmethodaction_id",
"exchanges_postexchangesidoutbounditemsaction_id",
"exchanges_deleteexchangesidoutbounditemsaction_id",
"exchanges_postexchangesidoutbounditems",
"exchanges_postexchangesidrequest",
"exchanges_deleteexchangesidrequest",
"exchanges_postexchangesidoutboundshippingmethod",
"exchanges_postexchangesidinboundshippingmethod",
"exchanges_postexchangesidoutboundshippingmethodaction_id",
"exchanges_deleteexchangesidoutboundshippingmethodaction_id"
]
"tagSectionId": "feature-flags",
"operationSectionIds": [
"feature-flags_getfeatureflags"
]
"tagSectionId": "fulfillment-providers",
"operationSectionIds": [
"fulfillment-providers_getfulfillmentproviders",
"fulfillment-providers_getfulfillmentprovidersidoptions"
]
"tagSectionId": "fulfillment-sets",
"operationSectionIds": [
"fulfillment-sets_deletefulfillmentsetsid",
"fulfillment-sets_postfulfillmentsetsidservicezones",
"fulfillment-sets_getfulfillmentsetsidservicezoneszone_id",
"fulfillment-sets_postfulfillmentsetsidservicezoneszone_id",
"fulfillment-sets_deletefulfillmentsetsidservicezoneszone_id"
]
"tagSectionId": "fulfillments",
"operationSectionIds": [
"fulfillments_postfulfillments",
"fulfillments_postfulfillmentsidcancel",
"fulfillments_postfulfillmentsidshipment"
]
"tagSectionId": "gift-cards",
"operationSectionIds": [
"gift-cards_getgiftcards",
"gift-cards_postgiftcards",
"gift-cards_getgiftcardsid",
"gift-cards_postgiftcardsid",
"gift-cards_getgiftcardsidorders"
]
"tagSectionId": "index",
"operationSectionIds": [
"index_getindexdetails",
"index_postindexsync"
]
"tagSectionId": "inventory-items",
"operationSectionIds": [
"inventory-items_postinventoryitemslocationlevelsbatch",
"inventory-items_getinventoryitems",
"inventory-items_postinventoryitems",
"inventory-items_postinventoryitemsidlocationlevelsbatch",
"inventory-items_getinventoryitemsid",
"inventory-items_postinventoryitemsid",
"inventory-items_deleteinventoryitemsid",
"inventory-items_getinventoryitemsidlocationlevels",
"inventory-items_postinventoryitemsidlocationlevels",
"inventory-items_postinventoryitemsidlocationlevelslocation_id",
"inventory-items_deleteinventoryitemsidlocationlevelslocation_id"
]
"tagSectionId": "invites",
"operationSectionIds": [
"invites_getinvitesid",
"invites_deleteinvitesid",
"invites_postinvitesidresend",
"invites_postinvitesaccept",
"invites_getinvites",
"invites_postinvites"
]
"tagSectionId": "locales",
"operationSectionIds": [
"locales_getlocales",
"locales_getlocalescode"
]
"tagSectionId": "notifications",
"operationSectionIds": [
"notifications_getnotificationsid",
"notifications_getnotifications"
]
"tagSectionId": "order-changes",
"operationSectionIds": [
"order-changes_postorderchangesid"
]
"tagSectionId": "order-edits",
"operationSectionIds": [
"order-edits_postorderedits",
"order-edits_deleteordereditsid",
"order-edits_postordereditsiditems",
"order-edits_postordereditsidconfirm",
"order-edits_postordereditsiditemsitemitem_id",
"order-edits_postordereditsidrequest",
"order-edits_postordereditsidshippingmethodaction_id",
"order-edits_deleteordereditsidshippingmethodaction_id",
"order-edits_postordereditsidshippingmethod",
"order-edits_postordereditsiditemsaction_id",
"order-edits_deleteordereditsiditemsaction_id"
]
"tagSectionId": "orders",
"operationSectionIds": [
"orders_getordersid",
"orders_postordersid",
"orders_postordersidcancel",
"orders_postordersidarchive",
"orders_postordersidcomplete",
"orders_postordersidfulfillmentsfulfillment_idcancel",
"orders_postordersidcreditlines",
"orders_getorders",
"orders_postordersidfulfillmentsfulfillment_idmarkasdelivered",
"orders_getordersidchanges",
"orders_getordersidlineitems",
"orders_getordersidpreview",
"orders_postordersidtransfer",
"orders_postordersidfulfillmentsfulfillment_idshipments",
"orders_getordersidshippingoptions",
"orders_postordersexport",
"orders_postordersidtransfercancel",
"orders_postordersidfulfillments"
]
"tagSectionId": "payment-collections",
"operationSectionIds": [
"payment-collections_deletepaymentcollectionsid",
"payment-collections_postpaymentcollections",
"payment-collections_postpaymentcollectionsidmarkaspaid",
"payment-collections_postpaymentcollectionsidpaymentsessions"
]
"tagSectionId": "payments",
"operationSectionIds": [
"payments_getpaymentspaymentproviders",
"payments_getpaymentsid",
"payments_postpaymentsidcapture",
"payments_postpaymentsidrefund",
"payments_getpayments"
]
"tagSectionId": "plugins",
"operationSectionIds": [
"plugins_getplugins"
]
"tagSectionId": "price-lists",
"operationSectionIds": [
"price-lists_getpricelistsid",
"price-lists_postpricelistsid",
"price-lists_deletepricelistsid",
"price-lists_getpricelists",
"price-lists_postpricelists",
"price-lists_getpricelistsidprices",
"price-lists_postpricelistsidproducts",
"price-lists_postpricelistsidpricesbatch"
]
"tagSectionId": "price-preferences",
"operationSectionIds": [
"price-preferences_getpricepreferencesid",
"price-preferences_postpricepreferencesid",
"price-preferences_deletepricepreferencesid",
"price-preferences_getpricepreferences",
"price-preferences_postpricepreferences"
]
"tagSectionId": "product-categories",
"operationSectionIds": [
"product-categories_postproductcategoriesidproducts",
"product-categories_getproductcategories",
"product-categories_postproductcategories",
"product-categories_getproductcategoriesid",
"product-categories_postproductcategoriesid",
"product-categories_deleteproductcategoriesid"
]
"tagSectionId": "product-tags",
"operationSectionIds": [
"product-tags_getproducttagsid",
"product-tags_postproducttagsid",
"product-tags_deleteproducttagsid",
"product-tags_getproducttags",
"product-tags_postproducttags"
]
"tagSectionId": "product-types",
"operationSectionIds": [
"product-types_getproducttypesid",
"product-types_postproducttypesid",
"product-types_deleteproducttypesid",
"product-types_getproducttypes",
"product-types_postproducttypes"
]
"tagSectionId": "product-variants",
"operationSectionIds": [
"product-variants_getproductvariants"
]
"tagSectionId": "products",
"operationSectionIds": [
"products_postproductsimport",
"products_getproductsid",
"products_postproductsid",
"products_deleteproductsid",
"products_getproducts",
"products_postproducts",
"products_postproductsbatch",
"products_postproductsimportstransaction_idconfirm",
"products_postproductsimports",
"products_postproductsidimagesimage_idvariantsbatch",
"products_getproductsidoptionsoption_id",
"products_postproductsidoptionsoption_id",
"products_deleteproductsidoptionsoption_id",
"products_postproductsexport",
"products_postproductsidvariantsbatch",
"products_getproductsidoptions",
"products_postproductsidoptions",
"products_getproductsidvariantsvariant_id",
"products_postproductsidvariantsvariant_id",
"products_deleteproductsidvariantsvariant_id",
"products_postproductsidvariantsinventoryitemsbatch",
"products_postproductsidvariantsvariant_idinventoryitems",
"products_postproductsidvariantsvariant_idimagesbatch",
"products_postproductsidvariantsvariant_idinventoryitemsinventory_item_id",
"products_deleteproductsidvariantsvariant_idinventoryitemsinventory_item_id",
"products_getproductsidvariants",
"products_postproductsidvariants",
"products_postproductsimporttransaction_idconfirm"
]
"tagSectionId": "promotions",
"operationSectionIds": [
"promotions_getpromotionsruleattributeoptionsrule_type",
"promotions_getpromotionsrulevalueoptionsrule_typerule_attribute_id",
"promotions_postpromotionsidbuyrulesbatch",
"promotions_postpromotionsidtargetrulesbatch",
"promotions_getpromotionsid",
"promotions_postpromotionsid",
"promotions_deletepromotionsid",
"promotions_getpromotionsidrule_type",
"promotions_getpromotions",
"promotions_postpromotions",
"promotions_postpromotionsidrulesbatch"
]
"tagSectionId": "property-labels",
"operationSectionIds": [
"property-labels_getpropertylabelsid",
"property-labels_postpropertylabelsid",
"property-labels_deletepropertylabelsid",
"property-labels_postpropertylabelsbatch",
"property-labels_getpropertylabels",
"property-labels_postpropertylabels"
]
"tagSectionId": "refund-reasons",
"operationSectionIds": [
"refund-reasons_getrefundreasonsid",
"refund-reasons_postrefundreasonsid",
"refund-reasons_deleterefundreasonsid",
"refund-reasons_getrefundreasons",
"refund-reasons_postrefundreasons"
]
"tagSectionId": "regions",
"operationSectionIds": [
"regions_getregions",
"regions_postregions",
"regions_getregionsid",
"regions_postregionsid",
"regions_deleteregionsid"
]
"tagSectionId": "reservations",
"operationSectionIds": [
"reservations_getreservationsid",
"reservations_postreservationsid",
"reservations_deletereservationsid",
"reservations_getreservations",
"reservations_postreservations"
]
"tagSectionId": "return-reasons",
"operationSectionIds": [
"return-reasons_getreturnreasonsid",
"return-reasons_postreturnreasonsid",
"return-reasons_deletereturnreasonsid",
"return-reasons_getreturnreasons",
"return-reasons_postreturnreasons"
]
"tagSectionId": "returns",
"operationSectionIds": [
"returns_getreturnsid",
"returns_postreturnsid",
"returns_postreturnsiddismissitems",
"returns_postreturnsidcancel",
"returns_postreturnsidreceiveitems",
"returns_postreturnsidreceive",
"returns_deletereturnsidreceive",
"returns_postreturnsidreceiveconfirm",
"returns_postreturnsiddismissitemsaction_id",
"returns_deletereturnsiddismissitemsaction_id",
"returns_postreturnsidrequestitems",
"returns_postreturnsidreceiveitemsaction_id",
"returns_deletereturnsidreceiveitemsaction_id",
"returns_postreturnsidshippingmethod",
"returns_postreturnsidrequest",
"returns_deletereturnsidrequest",
"returns_getreturns",
"returns_postreturns",
"returns_postreturnsidrequestitemsaction_id",
"returns_deletereturnsidrequestitemsaction_id",
"returns_postreturnsidshippingmethodaction_id",
"returns_deletereturnsidshippingmethodaction_id"
]
"tagSectionId": "sales-channels",
"operationSectionIds": [
"sales-channels_postsaleschannelsidproducts",
"sales-channels_getsaleschannelsid",
"sales-channels_postsaleschannelsid",
"sales-channels_deletesaleschannelsid",
"sales-channels_getsaleschannels",
"sales-channels_postsaleschannels"
]
"tagSectionId": "shipping-option-types",
"operationSectionIds": [
"shipping-option-types_getshippingoptiontypesid",
"shipping-option-types_postshippingoptiontypesid",
"shipping-option-types_deleteshippingoptiontypesid",
"shipping-option-types_getshippingoptiontypes",
"shipping-option-types_postshippingoptiontypes"
]
"tagSectionId": "shipping-options",
"operationSectionIds": [
"shipping-options_getshippingoptions",
"shipping-options_postshippingoptions",
"shipping-options_postshippingoptionsidrulesbatch",
"shipping-options_getshippingoptionsid",
"shipping-options_postshippingoptionsid",
"shipping-options_deleteshippingoptionsid"
]
"tagSectionId": "shipping-profiles",
"operationSectionIds": [
"shipping-profiles_getshippingprofiles",
"shipping-profiles_postshippingprofiles",
"shipping-profiles_getshippingprofilesid",
"shipping-profiles_postshippingprofilesid",
"shipping-profiles_deleteshippingprofilesid"
]
"tagSectionId": "stock-locations",
"operationSectionIds": [
"stock-locations_getstocklocations",
"stock-locations_poststocklocations",
"stock-locations_getstocklocationsid",
"stock-locations_poststocklocationsid",
"stock-locations_deletestocklocationsid",
"stock-locations_poststocklocationsidfulfillmentproviders",
"stock-locations_poststocklocationsidsaleschannels",
"stock-locations_poststocklocationsidfulfillmentsets"
]
"tagSectionId": "store-credit-accounts",
"operationSectionIds": [
"store-credit-accounts_getstorecreditaccountsid",
"store-credit-accounts_getstorecreditaccounts",
"store-credit-accounts_poststorecreditaccounts",
"store-credit-accounts_poststorecreditaccountsidcredit",
"store-credit-accounts_getstorecreditaccountsidtransactions"
]
"tagSectionId": "stores",
"operationSectionIds": [
"stores_getstoresid",
"stores_poststoresid",
"stores_getstores"
]
"tagSectionId": "tax-providers",
"operationSectionIds": [
"tax-providers_gettaxproviders"
]
"tagSectionId": "tax-rates",
"operationSectionIds": [
"tax-rates_gettaxrates",
"tax-rates_posttaxrates",
"tax-rates_posttaxratesidrules",
"tax-rates_gettaxratesid",
"tax-rates_posttaxratesid",
"tax-rates_deletetaxratesid",
"tax-rates_deletetaxratesidrulesrule_id"
]
"tagSectionId": "tax-regions",
"operationSectionIds": [
"tax-regions_gettaxregions",
"tax-regions_posttaxregions",
"tax-regions_gettaxregionsid",
"tax-regions_posttaxregionsid",
"tax-regions_deletetaxregionsid"
]
"tagSectionId": "translations",
"operationSectionIds": [
"translations_gettranslations",
"translations_gettranslationsentities",
"translations_posttranslationsbatch",
"translations_gettranslationssettings",
"translations_gettranslationsstatistics",
"translations_posttranslationssettingsbatch"
]
"tagSectionId": "uploads",
"operationSectionIds": [
"uploads_postuploads",
"uploads_postuploadspresignedurls",
"uploads_getuploadsid",
"uploads_deleteuploadsid"
]
"tagSectionId": "users",
"operationSectionIds": [
"users_getusersme",
"users_getusersid",
"users_postusersid",
"users_deleteusersid",
"users_getusers"
]
"tagSectionId": "views",
"operationSectionIds": [
"views_getviewsentitycolumns",
"views_getviewsentityconfigurationsactive",
"views_postviewsentityconfigurationsactive",
"views_getviewsentityconfigurationsid",
"views_postviewsentityconfigurationsid",
"views_deleteviewsentityconfigurationsid",
"views_getviewsentities",
"views_getviewsentityconfigurations",
"views_postviewsentityconfigurations"
]
"tagSectionId": "workflows-executions",
"operationSectionIds": [
"workflows-executions_getworkflowsexecutionsid",
"workflows-executions_postworkflowsexecutionsworkflow_idstepsfailure",
"workflows-executions_postworkflowsexecutionsworkflow_idrun",
"workflows-executions_getworkflowsexecutionsworkflow_idsubscribe",
"workflows-executions_postworkflowsexecutionsworkflow_idstepssuccess",
"workflows-executions_getworkflowsexecutions",
"workflows-executions_getworkflowsexecutionsworkflow_idtransaction_id",
"workflows-executions_getworkflowsexecutionsworkflow_idtransaction_idsubscribe"
]
"tagSectionId": "auth",
"operationSectionIds": [
"auth_postactor_typeauth_provider",
"auth_postactor_typeauth_providercallback",
"auth_postactor_typeauth_providerresetpassword",
"auth_postsession",
"auth_deletesession",
"auth_postactor_typeauth_provider_register",
"auth_postadminauthtokenrefresh",
"auth_postactor_typeauth_providerupdate"
]
"tagSectionId": "carts",
"operationSectionIds": [
"carts_postcarts",
"carts_postcartsidgiftcards",
"carts_deletecartsidgiftcards",
"carts_postcartsidcomplete",
"carts_postcartsidlineitems",
"carts_postcartsidpromotions",
"carts_deletecartsidpromotions",
"carts_postcartsidstorecredits",
"carts_postcartsidshippingmethods",
"carts_postcartsidlineitemsline_id",
"carts_deletecartsidlineitemsline_id",
"carts_getcartsid",
"carts_postcartsid",
"carts_postcartsidtaxes",
"carts_postcartsidcustomer"
]
"tagSectionId": "collections",
"operationSectionIds": [
"collections_getcollectionsid",
"collections_getcollections"
]
"tagSectionId": "currencies",
"operationSectionIds": [
"currencies_getcurrencies",
"currencies_getcurrenciescode"
]
"tagSectionId": "customers",
"operationSectionIds": [
"customers_postcustomers",
"customers_getcustomersme",
"customers_postcustomersme",
"customers_getcustomersmeaddresses",
"customers_postcustomersmeaddresses",
"customers_getcustomersmeaddressesaddress_id",
"customers_postcustomersmeaddressesaddress_id",
"customers_deletecustomersmeaddressesaddress_id"
]
"tagSectionId": "gift-cards",
"operationSectionIds": [
"gift-cards_getgiftcardsidorcode"
]
"tagSectionId": "locales",
"operationSectionIds": [
"locales_getlocales"
]
"tagSectionId": "orders",
"operationSectionIds": [
"orders_getordersid",
"orders_getorders",
"orders_postordersidtransferaccept",
"orders_postordersidtransfercancel",
"orders_postordersidtransferdecline",
"orders_postordersidtransferrequest"
]
"tagSectionId": "payment-collections",
"operationSectionIds": [
"payment-collections_postpaymentcollections",
"payment-collections_postpaymentcollectionsidpaymentsessions"
]
"tagSectionId": "payment-providers",
"operationSectionIds": [
"payment-providers_getpaymentproviders"
]
"tagSectionId": "product-categories",
"operationSectionIds": [
"product-categories_getproductcategoriesid",
"product-categories_getproductcategories"
]
"tagSectionId": "product-tags",
"operationSectionIds": [
"product-tags_getproducttagsid",
"product-tags_getproducttags"
]
"tagSectionId": "product-types",
"operationSectionIds": [
"product-types_getproducttypesid",
"product-types_getproducttypes"
]
"tagSectionId": "products",
"operationSectionIds": [
"products_getproducts",
"products_getproductsid"
]
"tagSectionId": "regions",
"operationSectionIds": [
"regions_getregionsid",
"regions_getregions"
]
"tagSectionId": "return-reasons",
"operationSectionIds": [
"return-reasons_getreturnreasonsid",
"return-reasons_getreturnreasons"
]
"tagSectionId": "returns",
"operationSectionIds": [
"returns_postreturns"
]
"tagSectionId": "shipping-options",
"operationSectionIds": [
"shipping-options_postshippingoptionsidcalculate",
"shipping-options_getshippingoptions"
]
"tagSectionId": "store-credit-accounts",
"operationSectionIds": [
"store-credit-accounts_getstorecreditaccountsid",
"store-credit-accounts_getstorecreditaccounts",
"store-credit-accounts_poststorecreditaccountsclaim"
]
"admin_api-keys.yaml",
"admin_api-keys_{id}.yaml",
"admin_api-keys_{id}_revoke.yaml",
"admin_api-keys_{id}_sales-channels.yaml"
"admin_campaigns.yaml",
"admin_campaigns_{id}.yaml",
"admin_campaigns_{id}_promotions.yaml"
"admin_claims_{id}.yaml",
"admin_claims_{id}_cancel.yaml",
"admin_claims_{id}_inbound_items.yaml",
"admin_claims.yaml",
"admin_claims_{id}_inbound_shipping-method.yaml",
"admin_claims_{id}_claim-items_{action_id}.yaml",
"admin_claims_{id}_claim-items.yaml",
"admin_claims_{id}_outbound_items.yaml",
"admin_claims_{id}_inbound_items_{action_id}.yaml",
"admin_claims_{id}_inbound_shipping-method_{action_id}.yaml",
"admin_claims_{id}_outbound_items_{action_id}.yaml",
"admin_claims_{id}_outbound_shipping-method.yaml",
"admin_claims_{id}_outbound_shipping-method_{action_id}.yaml",
"admin_claims_{id}_request.yaml"
"admin_currencies_{code}.yaml",
"admin_currencies.yaml"
"admin_customer-groups.yaml",
"admin_customer-groups_{id}.yaml",
"admin_customer-groups_{id}_customers.yaml"
"admin_collections.yaml",
"admin_collections_{id}.yaml",
"admin_collections_{id}_products.yaml"
"admin_customers_{id}.yaml",
"admin_customers.yaml",
"admin_customers_{id}_addresses.yaml",
"admin_customers_{id}_customer-groups.yaml",
"admin_customers_{id}_addresses_{address_id}.yaml"
"admin_draft-orders.yaml",
"admin_draft-orders_{id}.yaml",
"admin_draft-orders_{id}_edit_items_item_{item_id}.yaml",
"admin_draft-orders_{id}_edit_items.yaml",
"admin_draft-orders_{id}_convert-to-order.yaml",
"admin_draft-orders_{id}_edit.yaml",
"admin_draft-orders_{id}_edit_promotions.yaml",
"admin_draft-orders_{id}_edit_request.yaml",
"admin_draft-orders_{id}_edit_shipping-methods_method_{method_id}.yaml",
"admin_draft-orders_{id}_edit_shipping-methods_{action_id}.yaml",
"admin_draft-orders_{id}_edit_items_{action_id}.yaml",
"admin_draft-orders_{id}_edit_shipping-methods.yaml",
"admin_draft-orders_{id}_edit_confirm.yaml"
"admin_exchanges.yaml",
"admin_exchanges_{id}.yaml",
"admin_exchanges_{id}_inbound_items.yaml",
"admin_exchanges_{id}_cancel.yaml",
"admin_exchanges_{id}_inbound_items_{action_id}.yaml",
"admin_exchanges_{id}_inbound_shipping-method_{action_id}.yaml",
"admin_exchanges_{id}_outbound_items_{action_id}.yaml",
"admin_exchanges_{id}_outbound_items.yaml",
"admin_exchanges_{id}_request.yaml",
"admin_exchanges_{id}_outbound_shipping-method.yaml",
"admin_exchanges_{id}_inbound_shipping-method.yaml",
"admin_exchanges_{id}_outbound_shipping-method_{action_id}.yaml"
"admin_fulfillment-sets_{id}.yaml",
"admin_fulfillment-sets_{id}_service-zones.yaml",
"admin_fulfillment-sets_{id}_service-zones_{zone_id}.yaml"
"admin_fulfillments.yaml",
"admin_fulfillments_{id}_cancel.yaml",
"admin_fulfillments_{id}_shipment.yaml"
"admin_fulfillment-providers.yaml",
"admin_fulfillment-providers_{id}_options.yaml"
"admin_feature-flags.yaml"
"admin_index_details.yaml",
"admin_index_sync.yaml"
"admin_gift-cards.yaml",
"admin_gift-cards_{id}.yaml",
"admin_gift-cards_{id}_orders.yaml"
"admin_inventory-items_location-levels_batch.yaml",
"admin_inventory-items.yaml",
"admin_inventory-items_{id}_location-levels_batch.yaml",
"admin_inventory-items_{id}.yaml",
"admin_inventory-items_{id}_location-levels.yaml",
"admin_inventory-items_{id}_location-levels_{location_id}.yaml"
"admin_invites_{id}.yaml",
"admin_invites_{id}_resend.yaml",
"admin_invites_accept.yaml",
"admin_invites.yaml"
"admin_locales.yaml",
"admin_locales_{code}.yaml"
"admin_notifications_{id}.yaml",
"admin_notifications.yaml"
"admin_order-edits.yaml",
"admin_order-edits_{id}.yaml",
"admin_order-edits_{id}_items.yaml",
"admin_order-edits_{id}_confirm.yaml",
"admin_order-edits_{id}_items_item_{item_id}.yaml",
"admin_order-edits_{id}_request.yaml",
"admin_order-edits_{id}_shipping-method_{action_id}.yaml",
"admin_order-edits_{id}_shipping-method.yaml",
"admin_order-edits_{id}_items_{action_id}.yaml"
"admin_order-changes_{id}.yaml"
"admin_orders_{id}.yaml",
"admin_orders_{id}_cancel.yaml",
"admin_orders_{id}_archive.yaml",
"admin_orders_{id}_complete.yaml",
"admin_orders_{id}_fulfillments_{fulfillment_id}_cancel.yaml",
"admin_orders_{id}_credit-lines.yaml",
"admin_orders.yaml",
"admin_orders_{id}_fulfillments_{fulfillment_id}_mark-as-delivered.yaml",
"admin_orders_{id}_changes.yaml",
"admin_orders_{id}_line-items.yaml",
"admin_orders_{id}_preview.yaml",
"admin_orders_{id}_transfer.yaml",
"admin_orders_{id}_fulfillments_{fulfillment_id}_shipments.yaml",
"admin_orders_{id}_shipping-options.yaml",
"admin_orders_export.yaml",
"admin_orders_{id}_transfer_cancel.yaml",
"admin_orders_{id}_fulfillments.yaml"
"admin_payment-collections_{id}.yaml",
"admin_payment-collections.yaml",
"admin_payment-collections_{id}_mark-as-paid.yaml",
"admin_payment-collections_{id}_payment-sessions.yaml"
"admin_payments_payment-providers.yaml",
"admin_payments_{id}.yaml",
"admin_payments_{id}_capture.yaml",
"admin_payments_{id}_refund.yaml",
"admin_payments.yaml"
"admin_price-lists_{id}.yaml",
"admin_price-lists.yaml",
"admin_price-lists_{id}_prices.yaml",
"admin_price-lists_{id}_products.yaml",
"admin_price-lists_{id}_prices_batch.yaml"
"admin_plugins.yaml"
"admin_price-preferences_{id}.yaml",
"admin_price-preferences.yaml"
"admin_product-tags_{id}.yaml",
"admin_product-tags.yaml"
"admin_product-categories_{id}_products.yaml",
"admin_product-categories.yaml",
"admin_product-categories_{id}.yaml"
"admin_product-types_{id}.yaml",
"admin_product-types.yaml"
"admin_product-variants.yaml"
"admin_products_import.yaml",
"admin_products_{id}.yaml",
"admin_products.yaml",
"admin_products_batch.yaml",
"admin_products_imports_{transaction_id}_confirm.yaml",
"admin_products_imports.yaml",
"admin_products_{id}_images_{image_id}_variants_batch.yaml",
"admin_products_{id}_options_{option_id}.yaml",
"admin_products_export.yaml",
"admin_products_{id}_variants_batch.yaml",
"admin_products_{id}_options.yaml",
"admin_products_{id}_variants_{variant_id}.yaml",
"admin_products_{id}_variants_inventory-items_batch.yaml",
"admin_products_{id}_variants_{variant_id}_inventory-items.yaml",
"admin_products_{id}_variants_{variant_id}_images_batch.yaml",
"admin_products_{id}_variants_{variant_id}_inventory-items_{inventory_item_id}.yaml",
"admin_products_{id}_variants.yaml",
"admin_products_import_{transaction_id}_confirm.yaml"
"admin_promotions_rule-attribute-options_{rule_type}.yaml",
"admin_promotions_rule-value-options_{rule_type}_{rule_attribute_id}.yaml",
"admin_promotions_{id}_buy-rules_batch.yaml",
"admin_promotions_{id}_target-rules_batch.yaml",
"admin_promotions_{id}.yaml",
"admin_promotions_{id}_{rule_type}.yaml",
"admin_promotions.yaml",
"admin_promotions_{id}_rules_batch.yaml"
"admin_property-labels_{id}.yaml",
"admin_property-labels_batch.yaml",
"admin_property-labels.yaml"
"admin_refund-reasons_{id}.yaml",
"admin_refund-reasons.yaml"
"admin_regions.yaml",
"admin_regions_{id}.yaml"
"admin_reservations_{id}.yaml",
"admin_reservations.yaml"
"admin_return-reasons_{id}.yaml",
"admin_return-reasons.yaml"
"admin_returns_{id}.yaml",
"admin_returns_{id}_dismiss-items.yaml",
"admin_returns_{id}_cancel.yaml",
"admin_returns_{id}_receive-items.yaml",
"admin_returns_{id}_receive.yaml",
"admin_returns_{id}_receive_confirm.yaml",
"admin_returns_{id}_dismiss-items_{action_id}.yaml",
"admin_returns_{id}_request-items.yaml",
"admin_returns_{id}_receive-items_{action_id}.yaml",
"admin_returns_{id}_shipping-method.yaml",
"admin_returns_{id}_request.yaml",
"admin_returns.yaml",
"admin_returns_{id}_request-items_{action_id}.yaml",
"admin_returns_{id}_shipping-method_{action_id}.yaml"
"admin_sales-channels_{id}_products.yaml",
"admin_sales-channels_{id}.yaml",
"admin_sales-channels.yaml"
"admin_shipping-options.yaml",
"admin_shipping-options_{id}_rules_batch.yaml",
"admin_shipping-options_{id}.yaml"
"admin_shipping-option-types_{id}.yaml",
"admin_shipping-option-types.yaml"
"admin_shipping-profiles.yaml",
"admin_shipping-profiles_{id}.yaml"
"admin_stock-locations.yaml",
"admin_stock-locations_{id}.yaml",
"admin_stock-locations_{id}_fulfillment-providers.yaml",
"admin_stock-locations_{id}_sales-channels.yaml",
"admin_stock-locations_{id}_fulfillment-sets.yaml"
"admin_store-credit-accounts_{id}.yaml",
"admin_store-credit-accounts.yaml",
"admin_store-credit-accounts_{id}_credit.yaml",
"admin_store-credit-accounts_{id}_transactions.yaml"
"admin_tax-rates.yaml",
"admin_tax-rates_{id}_rules.yaml",
"admin_tax-rates_{id}.yaml",
"admin_tax-rates_{id}_rules_{rule_id}.yaml"
"admin_tax-providers.yaml"
"admin_stores_{id}.yaml",
"admin_stores.yaml"
"admin_tax-regions.yaml",
"admin_tax-regions_{id}.yaml"
"admin_translations.yaml",
"admin_translations_entities.yaml",
"admin_translations_batch.yaml",
"admin_translations_settings.yaml",
"admin_translations_statistics.yaml",
"admin_translations_settings_batch.yaml"
"admin_uploads.yaml",
"admin_uploads_presigned-urls.yaml",
"admin_uploads_{id}.yaml"
"admin_users_me.yaml",
"admin_users_{id}.yaml",
"admin_users.yaml"
"admin_views_{entity}_columns.yaml",
"admin_views_{entity}_configurations_active.yaml",
"admin_views_{entity}_configurations_{id}.yaml",
"admin_views_entities.yaml",
"admin_views_{entity}_configurations.yaml"
"admin_workflows-executions_{id}.yaml",
"admin_workflows-executions_{workflow_id}_steps_failure.yaml",
"admin_workflows-executions_{workflow_id}_run.yaml",
"admin_workflows-executions_{workflow_id}_subscribe.yaml",
"admin_workflows-executions_{workflow_id}_steps_success.yaml",
"admin_workflows-executions.yaml",
"admin_workflows-executions_{workflow_id}_{transaction_id}.yaml",
"admin_workflows-executions_{workflow_id}_{transaction_id}_subscribe.yaml"
"auth_session.yaml",
"auth_token_refresh.yaml",
"auth_user_{auth_provider}.yaml",
"auth_user_{auth_provider}_callback.yaml",
"auth_user_{auth_provider}_register.yaml",
"auth_user_{auth_provider}_reset-password.yaml",
"auth_user_{auth_provider}_update.yaml"
"auth_customer_{auth_provider}.yaml",
"auth_customer_{auth_provider}_callback.yaml",
"auth_customer_{auth_provider}_reset-password.yaml",
"auth_session.yaml",
"auth_customer_{auth_provider}_register.yaml",
"auth_token_refresh.yaml",
"auth_customer_{auth_provider}_update.yaml"
"store_carts.yaml",
"store_carts_{id}_gift-cards.yaml",
"store_carts_{id}_complete.yaml",
"store_carts_{id}_line-items.yaml",
"store_carts_{id}_promotions.yaml",
"store_carts_{id}_store-credits.yaml",
"store_carts_{id}_shipping-methods.yaml",
"store_carts_{id}_line-items_{line_id}.yaml",
"store_carts_{id}.yaml",
"store_carts_{id}_taxes.yaml",
"store_carts_{id}_customer.yaml"
"store_currencies.yaml",
"store_currencies_{code}.yaml"
"store_collections_{id}.yaml",
"store_collections.yaml"
"store_customers.yaml",
"store_customers_me.yaml",
"store_customers_me_addresses.yaml",
"store_customers_me_addresses_{address_id}.yaml"
"store_gift-cards_{idOrCode}.yaml"
"store_orders_{id}.yaml",
"store_orders.yaml",
"store_orders_{id}_transfer_accept.yaml",
"store_orders_{id}_transfer_cancel.yaml",
"store_orders_{id}_transfer_decline.yaml",
"store_orders_{id}_transfer_request.yaml"
"store_locales.yaml"
"store_payment-collections.yaml",
"store_payment-collections_{id}_payment-sessions.yaml"
"store_payment-providers.yaml"
"store_product-tags_{id}.yaml",
"store_product-tags.yaml"
"store_product-categories_{id}.yaml",
"store_product-categories.yaml"
"store_product-types_{id}.yaml",
"store_product-types.yaml"
"store_products.yaml",
"store_products_{id}.yaml"
"store_regions_{id}.yaml",
"store_regions.yaml"
"store_returns.yaml"
"store_return-reasons_{id}.yaml",
"store_return-reasons.yaml"
"store_shipping-options_{id}_calculate.yaml",
"store_shipping-options.yaml"
"store_store-credit-accounts_{id}.yaml",
"store_store-credit-accounts.yaml",
"store_store-credit-accounts_claim.yaml"
pageExtensions to include MDX files
pageExtensions: ["js", "jsx", "mdx", "ts", "tsx"],
basePath: process.env.NEXT_PUBLIC_BASE_PATH || "/api", "../**/.open-next/**",
"../!(api-reference)/.next/**",
@@ -91,7 +98,8 @@ const withMDX = createMDX({ }, useBaseUrl: process.env.NODE_ENV === "production" ||
process.env.VERCEL_ENV === "production",
process.env.VERCEL_ENV === "production" ||
!!process.env.CLOUDFLARE_ENV,
},
],
[
diff --git a/www/apps/api-reference/open-next.config.ts b/www/apps/api-reference/open-next.config.ts new file mode 100644 index 0000000000000..136ed5f038c45 --- /dev/null +++ b/www/apps/api-reference/open-next.config.ts @@ -0,0 +1,3 @@ +import { defineCloudflareConfig } from "@opennextjs/cloudflare" + +export default defineCloudflareConfig() diff --git a/www/apps/api-reference/package.json b/www/apps/api-reference/package.json index 5a68a4ccbc21a..ba76be3b03af1 100644 --- a/www/apps/api-reference/package.json +++ b/www/apps/api-reference/package.json @@ -4,22 +4,29 @@ "private": true, "scripts": { "dev": "NODE_OPTIONS='--inspect' next dev",
+const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const appDir = path.join(__dirname, "..") + +const HTTP_METHODS = [
+export async function generateSpecsPathsManifest() {
const allFiles = await fs.readdir(pathsDir)
files = allFiles.filter((f) => f.endsWith(".yaml"))
// paths dir doesn't exist yet
files.map(async (file) => {
const filePath = path.join(pathsDir, file)
try {
const content = await fs.readFile(filePath, "utf-8")
const parsed = parseYaml(content)
for (const method of HTTP_METHODS) {
const operation = parsed?.[method]
if (!operation?.tags) {
continue
}
for (const tag of operation.tags) {
const sectionId = getSectionId([tag])
if (!tagIndex[area][sectionId]) {
tagIndex[area][sectionId] = []
}
if (!tagIndex[area][sectionId].includes(file)) {
tagIndex[area][sectionId].push(file)
}
if (!operationsByTag[area][tag]) {
operationsByTag[area][tag] = []
}
if (operation.operationId) {
operationsByTag[area][tag].push(operation.operationId)
}
}
}
} catch {
// skip unreadable files
}
})
const specContent = await fs.readFile(specPath, "utf-8")
const spec = parseYaml(specContent)
orderedTags = spec.tags ?? []
// fall back to whatever tags we found in path files
orderedTags = Object.keys(operationsByTag[area]).map((name) => ({ name }))
tagSectionId: getSectionId([tag.name]),
operationSectionIds: (operationsByTag[area][tag.name] ?? []).map((opId) =>
getSectionId([tag.name, opId])
),
export const specsTagIndex = ${JSON.stringify(tagIndex, null, 2)}\nexport const specsSitemapData = ${JSON.stringify(sitemapData, null, 2)}\n+const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const appDir = path.resolve(__dirname, "..") + +const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || "" +const basePath = process.env.NEXT_PUBLIC_BASE_PATH || "/api" + +function getUrl(area, tagName) {
#${tagName} : ""${baseUrl}${basePath}/${area}${anchor}
+}+function getSectionId(parts) {
+function capitalize(str) {
+function getObjectId(area, objectName) {
${area}_${objectName}
+}+function getHierarchy(area, levels) {
${capitalize(area)} API Reference }lvl${i + 1}] = level+async function main() {
version: ["current"],
lang: "en",
_tags: ["api", `${area}-v2`],
Scraping page headers from ${pageUrl}...) const dom = await JSDOM.fromURL(pageUrl)
const headers = dom.window.document.querySelectorAll("h2")
headers.forEach((header) => {
if (!header.textContent || !header.nextSibling?.textContent) {
return
}
const normalizedHeaderContent = header.textContent.replaceAll("#", "")
const description = header.nextSibling?.textContent
const objectID = getSectionId([normalizedHeaderContent])
const url = getUrl(area, objectID)
indices.push({
objectID: getObjectId(area, `${objectID}-mdx-section`),
hierarchy: getHierarchy(area, [normalizedHeaderContent]),
type: "content",
content: description || "",
url,
url_without_variables: url,
url_without_anchor: url,
...defaultIndexData,
})
})
console.warn(`Failed to scrape ${pageUrl}: ${e.message}`)
specs/${area}/openapi.full.yaml)Parsing spec at ${specPath}...) const tagName = getSectionId([tag.name])
const url = getUrl(area, tagName)
indices.push({
objectID: getObjectId(area, tagName),
hierarchy: getHierarchy(area, [tag.name]),
type: "lvl1",
content: null,
description: tag.description,
url,
url_without_variables: url,
url_without_anchor: url,
...defaultIndexData,
})
Object.values(pathItem).forEach((operation) => {
const tag = operation.tags?.[0]
const operationName = getSectionId([tag || "", operation.operationId])
const url = getUrl(area, operationName)
indices.push({
objectID: getObjectId(area, operationName),
hierarchy: getHierarchy(area, [operation.summary]),
type: "content",
content: operation.summary,
content_camel: operation.summary,
url,
url_without_variables: url,
url_without_anchor: url,
...defaultIndexData,
})
if (operation.description) {
const operationDescriptionId = getSectionId([
tag || "",
operation.operationId,
operation.description.substring(
0,
Math.min(20, operation.description.length)
),
])
indices.push({
objectID: getObjectId(area, operationDescriptionId),
hierarchy: getHierarchy(area, [
operation.summary,
operation.description,
]),
type: "content",
content: operation.description,
content_camel: operation.description,
url,
url_without_variables: url,
url_without_anchor: url,
...defaultIndexData,
})
}
})
Saving ${indices.length} records to Algolia...)+main().catch((err) => {
async function main() {
Full upload of specs/ directory.
Upload only the listed files (paths relative to app root).
Remove the listed keys from R2 (paths relative to app root).
+// Load .env if present; silently skip if not (e.g. CI injects vars directly) +try {
+import {
+const accountId = process.env.CLOUDFLARE_ACCOUNT_ID +const accessKeyId = process.env.CLOUDFLARE_R2_ACCESS_KEY_ID +const secretAccessKey = process.env.CLOUDFLARE_R2_SECRET_ACCESS_KEY +const bucket = process.env.R2_BUCKET_NAME || "docs-assets" + +if (!accountId || !accessKeyId || !secretAccessKey) {
+const client = new S3Client({
https://${accountId}.r2.cloudflarestorage.com,+// Parse --upload and --remove CLI flags +const args = process.argv.slice(2) +const filesToUpload = [] +const filesToRemove = [] +let mode = null + +for (const arg of args) {
+const isSelective = filesToUpload.length > 0 || filesToRemove.length > 0 + +async function uploadFile(localPath, r2Key) {
Bucket: bucket,
Key: r2Key,
Body: body,
ContentType: contentType,
uploaded: ${r2Key})
+}+async function removeFile(r2Key) {
removed: ${r2Key})
+}+async function uploadDir(localDir, r2Prefix) {
${r2Prefix}/${entry.name} await uploadDir(localPath, r2Key)
await uploadFile(localPath, r2Key)
+if (isSelective) {
path.join(process.cwd(), relPath),
`api-reference/${relPath}`
api-reference/${relPath})Uploading ${specsDir} → r2://${bucket}/api-reference/specs)+console.log("Done.") diff --git a/www/apps/api-reference/utils/dereference.ts b/www/apps/api-reference/utils/dereference.ts index 5dcef89b1e8d2..a0788482c65d7 100644 --- a/www/apps/api-reference/utils/dereference.ts +++ b/www/apps/api-reference/utils/dereference.ts @@ -1,5 +1,33 @@ import { OpenAPI } from "types" import OpenAPIParser from "@readme/openapi-parser" +import { workerCompatibleFetch } from "docs-utils" + +// @readme/openapi-parser uses Node.js https.get internally, which is not +// available in Cloudflare Workers. Override the HTTP resolver to use +// the global fetch() API instead. +const fetchHttpResolver = {
url: file.url,
responseTransformer: async (res) => {
if (!res.ok) throw new Error(`Failed to fetch ${file.url}: ${res.status}`)
return await res.text()
},
fallbackAction: async () => {
// In local development, we can read the spec directly from the filesystem
const { readFileSync, existsSync } = await import("fs")
if (!existsSync(file.url)) {
throw new Error(`Spec file not found: ${file.url}`)
}
return readFileSync(file.url, "utf-8")
},
type Options = { basePath: string @@ -45,6 +73,9 @@ export default async function dereference({
// resolve references in paths
document = (await OpenAPIParser.dereference(${basePath}/, document, {
http: fetchHttpResolver,
+export function getPathForEnv(...pathSegments: string[]): string {
async function getPathsOfTag_( tagName: string,
${area}/paths) const filePath = getPathForEnv(basePath, file)
const fileContent = (await readSpecDocument(
path.join(basePath, file)
filePath
)) as OpenAPI.OpenAPIV3.PathItemObject<OpenAPI.Operation>
return {
@@ -29,17 +37,6 @@ async function getPathsOfTag_( }) )
if (typeof operation !== "object" || !("tags" in operation)) {
return false
}
return operation.tags?.some((tag) => getSectionId([tag]) === tagName)
const getPathsOfTag = unstable_cache(
-async function getSchemaContent_(schemaPath: string, baseSchemasPath: string) {
const schemaContent = await workerCompatibleFetch<string>({
url: schemaUrl,
responseTransformer: async (res) => {
if (!res.ok) throw new Error(`Failed to fetch schema: ${schemaUrl} (${res.status})`)
return await res.text()
},
fallbackAction: async () => {
// In local development, we can read the schema directly from the filesystem
const { readFileSync, existsSync } = await import("fs")
if (!existsSync(schemaUrl)) {
throw new Error(`Schema file not found: ${schemaUrl}`)
}
return readFileSync(schemaUrl, "utf-8")
},
}) const schema = parseDocument(schemaContent).toJS() as OpenAPI.SchemaObject
// resolve references in schema const dereferencedDocument = await dereference({
@@ -21,8 +36,8 @@ async function getSchemaContent_(schemaPath: string, baseSchemasPath: string) { }
const getSchemaContent = unstable_cache(
diff --git a/www/apps/api-reference/utils/read-spec-document.ts b/www/apps/api-reference/utils/read-spec-document.ts index fbb833ac86955..95921b678a5ac 100644 --- a/www/apps/api-reference/utils/read-spec-document.ts +++ b/www/apps/api-reference/utils/read-spec-document.ts @@ -1,8 +1,23 @@ -import { promises as fs } from "fs" import { OpenAPI } from "types" import { parseDocument } from "yaml" +import { workerCompatibleFetch } from "docs-utils"
export default async function readSpecDocument(filePath: string) {
if (!res.ok) throw new Error(`Failed to fetch spec: ${filePath} (${res.status})`)
return await res.text()
// In local development, we can read the spec directly from the filesystem
const { readFileSync, existsSync } = await import("fs")
if (!existsSync(filePath)) {
throw new Error(`Spec file not found: ${filePath}`)
}
return readFileSync(filePath, "utf-8")
"binding": "WORKER_SELF_REFERENCE",
"service": "medusa-docs-api-reference"
.env*.local +.dev.vars
.vercel @@ -34,3 +35,8 @@ yarn-error.log*
*.tsbuildinfo next-env.d.ts + +# cloudflare +.open-next +.wrangler +public/raw-mdx \ No newline at end of file diff --git a/www/apps/bloom/app/md-content/[[...slug]]/route.ts b/www/apps/bloom/app/md-content/[[...slug]]/route.ts index 3a5591547c311..3bcd89bec18dd 100644 --- a/www/apps/bloom/app/md-content/[[...slug]]/route.ts +++ b/www/apps/bloom/app/md-content/[[...slug]]/route.ts @@ -1,5 +1,4 @@ -import { addExtraToMd, getCleanMd } from "docs-utils" -import { existsSync } from "fs" +import { addExtraToMd, getCleanMd, workerCompatibleFetch } from "docs-utils" import { unstable_cache } from "next/cache" import { notFound } from "next/navigation" import { NextRequest, NextResponse } from "next/server" @@ -13,21 +12,42 @@ import { import type { Plugin } from "unified"
type Params = {
export async function GET(req: NextRequest, { params }: Params) {
${origin}${basePath}/raw-mdx/${[...slug, "page.mdx"].join("/")}, if (!res.ok) {
return null
}
return await res.text()
try {
const { promises: fs } = await import("fs")
return await fs.readFile(
path.join(process.cwd(), "app", ...slug, "page.mdx"),
"utf-8"
)
} catch {
return null
}
process.env.VERCEL_ENV === "production",
process.env.VERCEL_ENV === "production" ||
!!process.env.CLOUDFLARE_ENV,
},
],
[localLinksRehypePlugin],
@@ -106,8 +127,8 @@ export async function GET(req: NextRequest, { params }: Params) { }
const getCleanMd_ = unstable_cache(
process.env.VERCEL_ENV === "production",
process.env.VERCEL_ENV === "production" ||
!!process.env.CLOUDFLARE_ENV,
},
],
[localLinksRehypePlugin],
@@ -128,18 +129,40 @@ const nextConfig = {
transpilePackages: ["docs-ui"], basePath: process.env.NEXT_PUBLIC_BASE_PATH || "",
"node_modules/@medusajs/icons",
"../**/.open-next/**",
"../!(bloom)/.next/**",
{
source: "/prompting/service-integrations-prompting/guides/stripe",
destination: "/features/integrations/guides/stripe",
permanent: true,
},
{
source: "/index.html.md",
destination: "/md-content",
},
{
source: "/index.md",
destination: "/md-content",
},
{
source: "/:path*/index.html.md",
destination: "/md-content/:path*",
@@ -153,7 +176,7 @@ const nextConfig = { destination: "/md-content/:path*", }, {
source: "/:path((?!md-content).+)/",
source: "/:first((?!md-content)[^/]+)/:rest*/",
has: [
{
type: "header",
@@ -161,7 +184,7 @@ const nextConfig = { value: ".(text/markdown|text/plain).", }, ],
destination: "/md-content/:path",
destination: "/md-content/:first/:rest*",
},
{
source: "/",
@@ -175,7 +198,7 @@ const nextConfig = { destination: "/md-content", }, {
source: "/:path((?!md-content).+)",
source: "/:first((?!md-content)[^/]+)/:rest*",
has: [
{
type: "header",
@@ -183,20 +206,11 @@ const nextConfig = { value: ".(text/markdown|text/plain).", }, ],
destination: "/md-content/:path",
destination: "/md-content/:first/:rest*",
},
],
{
source: "/prompting/service-integrations-prompting/guides/stripe",
destination: "/features/integrations/guides/stripe",
permanent: true,
},
const withBundleAnalyzer = bundleAnalyzer({ diff --git a/www/apps/bloom/open-next.config.ts b/www/apps/bloom/open-next.config.ts new file mode 100644 index 0000000000000..136ed5f038c45 --- /dev/null +++ b/www/apps/bloom/open-next.config.ts @@ -0,0 +1,3 @@ +import { defineCloudflareConfig } from "@opennextjs/cloudflare" + +export default defineCloudflareConfig() diff --git a/www/apps/bloom/package.json b/www/apps/bloom/package.json index 75ee88718eaf7..af4ecb6585ada 100644 --- a/www/apps/bloom/package.json +++ b/www/apps/bloom/package.json @@ -5,23 +5,29 @@ "scripts": { "dev": "yarn prep && next dev", "dev:monorepo": "yarn prep && yarn dev -p 3005",
async function main() { await generateSidebar(sidebar) await generateEditedDates()
srcDir: path.join(process.cwd(), "app"),
destDir: path.join(process.cwd(), "public", "raw-mdx"),
void main() diff --git a/www/apps/bloom/vercel.json b/www/apps/bloom/vercel.json deleted file mode 100644 index fbfe88003a577..0000000000000 --- a/www/apps/bloom/vercel.json +++ /dev/null @@ -1,7 +0,0 @@ -{
"binding": "WORKER_SELF_REFERENCE",
"service": "medusa-docs-bloom"
.env*.local +.dev.vars
.vercel @@ -36,4 +37,9 @@ yarn-error.log* *.tsbuildinfo next-env.d.ts
-sidebar.full.mjs \ No newline at end of file +sidebar.full.mjs + +# cloudflare +.open-next +.wrangler +public/raw-mdx \ No newline at end of file diff --git a/www/apps/book/app/md-content/[[...slug]]/route.ts b/www/apps/book/app/md-content/[[...slug]]/route.ts index 448fb9dc49f26..bc66e86278785 100644 --- a/www/apps/book/app/md-content/[[...slug]]/route.ts +++ b/www/apps/book/app/md-content/[[...slug]]/route.ts @@ -1,26 +1,45 @@ -import { addExtraToMd } from "docs-utils" -import { existsSync, readFileSync } from "fs" +import { addExtraToMd, workerCompatibleFetch } from "docs-utils" import { notFound } from "next/navigation" import { NextRequest, NextResponse } from "next/server" import path from "path" import { PostHog } from "posthog-node" import { getCleanMdCached } from "../../../utils/get-clean-md-cached" +import { fetchRawMdx } from "../../../utils/fetch-raw-mdx"
type Params = {
export async function GET(req: NextRequest, { params }: Params) {
path.join(process.cwd(), "public", "homepage.md"),
"utf-8"
if (slug.length === 0) {
const homepageContent = await workerCompatibleFetch<string | null>({
url: `${origin}/homepage.md`,
responseTransformer: async (res) => {
return res.ok ? res.text() : null
},
fallbackAction: async () => {
try {
const { promises: fs } = await import("fs")
return await fs.readFile(
path.join(process.cwd(), "public", "homepage.md"),
"utf-8"
)
} catch {
return null
}
},
})
if (!homepageContent) {
return notFound()
}
return new NextResponse(
addExtraToMd(homepageFile, {
addExtraToMd(homepageContent, {
baseUrl: process.env.NEXT_PUBLIC_BASE_URL || "",
}),
{
@@ -33,23 +52,15 @@ export async function GET(req: NextRequest, { params }: Params) { ) }
_md-content.mdx file overrides the page.mdx file if it exists. ? filePath
: null
const acceptHeader = req.headers.get("accept") || "" diff --git a/www/apps/book/config/index.ts b/www/apps/book/config/index.ts index 3df407a59a57c..38cac88e01d34 100644 --- a/www/apps/book/config/index.ts +++ b/www/apps/book/config/index.ts @@ -11,7 +11,7 @@ export const config: DocsConfig = { description: "Explore and learn how to use Medusa. Learn how to get started, the fundamental concepts, how to customize Medusa, and more.", baseUrl,
basePath: process.env.NEXT_PUBLIC_BASE_PATH || "", sidebars: generatedSidebars as Sidebar.Sidebar[], project: { title: "Documentation", diff --git a/www/apps/book/middleware.ts b/www/apps/book/middleware.ts index 1778f628cdddd..03bf4ad1dd654 100644 --- a/www/apps/book/middleware.ts +++ b/www/apps/book/middleware.ts @@ -56,9 +56,7 @@ export async function middleware(request: NextRequest) {
const response = variant === "ai"
? NextResponse.rewrite(
new URL(AB_TEST_PAGES[pathname], request.url)
)
? NextResponse.rewrite(new URL(AB_TEST_PAGES[pathname], request.url))
: NextResponse.next()
// Set cookies if needed diff --git a/www/apps/book/next.config.mjs b/www/apps/book/next.config.mjs index d6076d530f37e..67e5a023e1bf1 100644 --- a/www/apps/book/next.config.mjs +++ b/www/apps/book/next.config.mjs @@ -75,7 +75,8 @@ const withMDX = mdx({ }, useBaseUrl: process.env.NODE_ENV === "production" ||
process.env.VERCEL_ENV === "production",
process.env.VERCEL_ENV === "production" ||
!!process.env.CLOUDFLARE_ENV,
},
],
[localLinksRehypePlugin],
@@ -125,20 +126,28 @@ const nextConfig = { return { beforeFiles: [ {
source:
"/:path((?!resources|api|ui|user-guide|cloud).*)index.html.md",
source: "/index.html.md",
destination: "/md-content",
},
{
source: "/index.md",
destination: "/md-content",
},
{
source: "/:path*/index.html.md",
destination: "/md-content/:path*",
},
{
source: "/:path((?!resources|api|ui|user-guide|cloud).*)index.md",
source: "/:path*/index.md",
destination: "/md-content/:path*",
},
{
source: "/:path((?!resources|api|ui|user-guide|cloud).*).md",
source: "/:path*.md",
destination: "/md-content/:path*",
},
{
source: "/:path((?!resources|api|ui|user-guide|cloud|md-content).+)/",
source:
"/:first((?!resources|api|ui|user-guide|cloud|md-content)[^/]+)/:rest*/",
has: [
{
type: "header",
@@ -146,7 +155,7 @@ const nextConfig = { value: ".(text/markdown|text/plain).", }, ],
destination: "/md-content/:path",
destination: "/md-content/:first/:rest*",
},
{
source: "/",
@@ -160,7 +169,8 @@ const nextConfig = { destination: "/md-content", }, {
source: "/:path((?!resources|api|ui|user-guide|cloud|md-content).+)",
source:
"/:first((?!resources|api|ui|user-guide|cloud|md-content)[^/]+)/:rest*",
has: [
{
type: "header",
@@ -168,7 +178,7 @@ const nextConfig = { value: ".(text/markdown|text/plain).", }, ],
destination: "/md-content/:path",
destination: "/md-content/:first/:rest*",
},
],
fallback: [
@@ -334,11 +344,16 @@ const nextConfig = {
return catchBadRedirects(result)
},
"node_modules/@medusajs/icons",
"../**/.open-next/**",
"../!(book)/.next/**",
+export default defineCloudflareConfig() diff --git a/www/apps/book/package.json b/www/apps/book/package.json index 33518e78f24f3..4b38c0258e6ec 100644 --- a/www/apps/book/package.json +++ b/www/apps/book/package.json @@ -5,26 +5,32 @@ "scripts": { "dev": "next dev", "dev:monorepo": "yarn dev -p 3001",
srcDir: path.join(process.cwd(), "app"),
destDir: path.join(process.cwd(), "public", "raw-mdx"),
+export async function fetchRawMdx(
_md-content.mdx file overrides page.mdx if it exists.${origin}/raw-mdx/${[...slug, "_md-content.mdx"].join("/")}, return res.ok ? res.text() : null
try {
const { promises: fs } = await import("fs")
return await fs.readFile(
path.join(process.cwd(), "app", ...slug, "_md-content.mdx"),
"utf-8"
)
} catch {
return null
}
${origin}/raw-mdx/${[...slug, "page.mdx"].join("/")}, return res.ok ? res.text() : null
try {
const { promises: fs } = await import("fs")
return await fs.readFile(
path.join(process.cwd(), "app", ...slug, "page.mdx"),
"utf-8"
)
} catch {
return null
}
+// slug is used as the cache key; content is the MDX source fetched from /raw-mdx/ export const getCleanMdCached = unstable_cache(
file: filePath,
file: content,
type: "content",
plugins: {
before: [
[
@@ -38,7 +40,8 @@ export const getCleanMdCached = unstable_cache( }, useBaseUrl: process.env.NODE_ENV === "production" ||
process.env.VERCEL_ENV === "production",
process.env.VERCEL_ENV === "production" ||
!!process.env.CLOUDFLARE_ENV,
},
],
[localLinksRehypePlugin],
diff --git a/www/apps/book/vercel.json b/www/apps/book/vercel.json deleted file mode 100644 index 4f0cfed39eb8f..0000000000000 --- a/www/apps/book/vercel.json +++ /dev/null @@ -1,7 +0,0 @@ -{
"binding": "WORKER_SELF_REFERENCE",
"service": "medusa-docs-book"
.env*.local +.dev.vars
.vercel @@ -34,3 +35,10 @@ yarn-error.log*
*.tsbuildinfo next-env.d.ts + +sidebar.full.mjs + +# cloudflare +.open-next +.wrangler +public/raw-mdx \ No newline at end of file diff --git a/www/apps/cloud/app/md-content/[[...slug]]/route.ts b/www/apps/cloud/app/md-content/[[...slug]]/route.ts index dd48000275ff7..fc07d84d2d360 100644 --- a/www/apps/cloud/app/md-content/[[...slug]]/route.ts +++ b/www/apps/cloud/app/md-content/[[...slug]]/route.ts @@ -1,5 +1,4 @@ -import { addExtraToMd, getCleanMd } from "docs-utils" -import { existsSync } from "fs" +import { addExtraToMd, getCleanMd, workerCompatibleFetch } from "docs-utils" import { unstable_cache } from "next/cache" import { notFound } from "next/navigation" import { NextRequest, NextResponse } from "next/server" @@ -13,21 +12,45 @@ import { import type { Plugin } from "unified"
type Params = {
export async function GET(req: NextRequest, { params }: Params) {
${origin}${basePath}/raw-mdx/${[...slug, "page.mdx"].join("/")}, return res.ok ? res.text() : null
try {
const { promises: fs } = await import("fs")
// eslint-disable-next-line no-console
console.log(
"Attempting to read file from filesystem for slug:",
path.join(process.cwd(), "app", ...slug, "page.mdx")
)
return await fs.readFile(
path.join(process.cwd(), "app", ...slug, "page.mdx"),
"utf-8"
)
} catch {
return null
}
process.env.VERCEL_ENV === "production",
process.env.VERCEL_ENV === "production" ||
isCloudflare,
},
],
[localLinksRehypePlugin],
@@ -103,8 +127,8 @@ export async function GET(req: NextRequest, { params }: Params) { }
const getCleanMd_ = unstable_cache(
diff --git a/www/apps/cloud/generated/edit-dates.mjs b/www/apps/cloud/generated/edit-dates.mjs index 0725591d3c8be..b0a2943fe9841 100644 --- a/www/apps/cloud/generated/edit-dates.mjs +++ b/www/apps/cloud/generated/edit-dates.mjs @@ -55,5 +55,61 @@ export const generatedEditDates = { "app/cli/commands/whoami/page.mdx": "2026-04-29T08:27:22.781Z", "app/access-keys/page.mdx": "2026-04-29T09:09:42.629Z", "app/cli/agents/page.mdx": "2026-05-05T10:47:21.287Z",
process.env.VERCEL_ENV === "production",
process.env.VERCEL_ENV === "production" ||
!!process.env.CLOUDFLARE_ENV,
},
],
[localLinksRehypePlugin],
@@ -128,11 +129,16 @@ const nextConfig = {
transpilePackages: ["docs-ui"], basePath: process.env.NEXT_PUBLIC_BASE_PATH || "/cloud",
"node_modules/@medusajs/icons",
"../**/.open-next/**",
"../!(cloud)/.next/**",
{
source: "/index.html.md",
destination: "/md-content",
},
{
source: "/index.md",
destination: "/md-content",
},
{
source: "/:path*/index.html.md",
destination: "/md-content/:path*",
@@ -182,7 +196,7 @@ const nextConfig = { destination: "/md-content/:path*", }, {
source: "/:path((?!md-content).+)/",
source: "/:first((?!md-content)[^/]+)/:rest*/",
has: [
{
type: "header",
@@ -190,7 +204,7 @@ const nextConfig = { value: ".(text/markdown|text/plain).", }, ],
destination: "/md-content/:path",
destination: "/md-content/:first/:rest*",
},
{
source: "/",
@@ -204,7 +218,7 @@ const nextConfig = { destination: "/md-content", }, {
source: "/:path((?!md-content).+)",
source: "/:first((?!md-content)[^/]+)/:rest*",
has: [
{
type: "header",
@@ -212,7 +226,7 @@ const nextConfig = { value: ".(text/markdown|text/plain).", }, ],
destination: "/md-content/:path",
destination: "/md-content/:first/:rest*",
},
],
+export default defineCloudflareConfig() diff --git a/www/apps/cloud/package.json b/www/apps/cloud/package.json index d2584a7f62958..160976ba3bec9 100644 --- a/www/apps/cloud/package.json +++ b/www/apps/cloud/package.json @@ -5,24 +5,30 @@ "scripts": { "dev": "yarn prep && next dev", "dev:monorepo": "yarn prep && yarn dev -p 3005",
async function main() { await generateSidebar(sidebar) await generateEditedDates()
srcDir: path.join(process.cwd(), "app"),
destDir: path.join(process.cwd(), "public", "raw-mdx"),
void main() diff --git a/www/apps/cloud/vercel.json b/www/apps/cloud/vercel.json deleted file mode 100644 index 2e7064bbe6999..0000000000000 --- a/www/apps/cloud/vercel.json +++ /dev/null @@ -1,7 +0,0 @@ -{
"binding": "WORKER_SELF_REFERENCE",
"service": "medusa-docs-cloud"
+# CLOUDFLARE DEPLOYMENT +# Base URL of the R2 bucket where references/ are uploaded (e.g. https://pub-xxx.r2.dev/resources) +# Required when deploying to Cloudflare; falls back to local filesystem in dev +REFERENCES_R2_BASE_URL= +# R2 credentials for the upload:r2 script +CLOUDFLARE_ACCOUNT_ID= +CLOUDFLARE_R2_ACCESS_KEY_ID= +CLOUDFLARE_R2_SECRET_ACCESS_KEY= +R2_BUCKET_NAME=docs-assets \ No newline at end of file diff --git a/www/apps/resources/.gitignore b/www/apps/resources/.gitignore index d2d32a8843102..11443eb07ea6c 100644 --- a/www/apps/resources/.gitignore +++ b/www/apps/resources/.gitignore @@ -28,6 +28,7 @@ yarn-error.log*
.env*.local +.dev.vars
.vercel @@ -35,3 +36,10 @@ yarn-error.log*
*.tsbuildinfo next-env.d.ts + +sidebar.full.mjs + +# cloudflare +.open-next +.wrangler +public/raw-mdx \ No newline at end of file diff --git a/www/apps/resources/app/api/references/[...slug]/route.ts b/www/apps/resources/app/api/references/[...slug]/route.ts index 75873e3625158..939f584871940 100644 --- a/www/apps/resources/app/api/references/[...slug]/route.ts +++ b/www/apps/resources/app/api/references/[...slug]/route.ts @@ -1,6 +1,4 @@ import { unstable_cache } from "next/cache" -import path from "path" -import fs from "fs/promises" import mdxOptions from "@/mdx-options.mjs" import { typeListLinkFixerPlugin, @@ -10,6 +8,8 @@ import { recmaInjectMdxDataPlugin, } from "remark-rehype-plugins" import { serialize } from "next-mdx-remote-client/serialize" +import path from "path" +import { workerCompatibleFetch } from "docs-utils"
type GetRouteProps = { params: Promise<{ @@ -47,7 +47,7 @@ export async function GET(request: Request, { params }: GetRouteProps) { }
const loadReferencesFile = unstable_cache(async (slug: string[]) => {
const r2Base = process.env.NEXT_PUBLIC_REFERENCES_R2_BASE_URL const monoRepoPath = path.resolve("..", "..", "..")
const pathname = /references/${slug.join("/")}
@@ -59,14 +59,48 @@ const loadReferencesFile = unstable_cache(async (slug: string[]) => {
if (!fileDetails) {
return undefined
}
const fullPath = path.join(monoRepoPath, fileDetails.filePath)
const fileContent = await fs.readFile(fullPath, "utf-8")
${r2Base}/references/${relPath} return res.ok ? res.text() : null
try {
const { promises: fs } = await import("fs")
return await fs.readFile(localPath, "utf-8")
} catch (e) {
console.error(e)
return null
}
filePath: fileDetails.filePath,
basePath: "/www/apps/resources",
r2BaseUrl: process.env.NEXT_PUBLIC_REFERENCES_R2_BASE_URL,
}
filePath: localPath,
basePath: process.cwd(),
}
diff --git a/www/apps/resources/app/md-content/[[...slug]]/route.ts b/www/apps/resources/app/md-content/[[...slug]]/route.ts index 0e47afa0cd081..e4d16c584361b 100644 --- a/www/apps/resources/app/md-content/[[...slug]]/route.ts +++ b/www/apps/resources/app/md-content/[[...slug]]/route.ts @@ -1,9 +1,7 @@ import { addExtraToMd, getCleanMd } from "docs-utils" -import { existsSync } from "fs" import { unstable_cache } from "next/cache" import { notFound } from "next/navigation" import { NextRequest, NextResponse } from "next/server" -import path from "path" import { addUrlToRelativeLink, crossProjectLinksPlugin, @@ -13,32 +11,33 @@ import type { Plugin } from "unified" import { filesMap } from "../../../generated/files-map.mjs" import { slugChanges } from "../../../generated/slug-changes.mjs" import { PostHog } from "posthog-node" +import { fetchMdxContent } from "../../../utils/fetch-mdx-content"
type Params = {
export async function GET(req: NextRequest, { params }: Params) {
/${slug.join("/")})const filePathFromMap = await getFileFromMaps(
/${slug.join("/")}.replace("//", "/")
) if (!filePathFromMap) { return notFound() }
const filePath = path.join(process.cwd(), "..", "..", "..", filePathFromMap)
if (!existsSync(filePath)) {
${origin}${basePath}, process.env.VERCEL_ENV === "production",
process.env.VERCEL_ENV === "production" ||
!!process.env.CLOUDFLARE_ENV,
},
],
[localLinksRehypePlugin],
@@ -111,8 +111,8 @@ export async function GET(req: NextRequest, { params }: Params) { }
const getCleanMd_ = unstable_cache(
type PageProps = { params: Promise<{ @@ -45,12 +44,10 @@ export async function generateMetadata({
export type LoadedReferenceFile = { content: string
const loadReferencesFile = cache( async (slug: string[]): Promise<LoadedReferenceFile | undefined> => {
path.join(process.cwd(), "references") const monoRepoPath = path.resolve("..", "..", "..")
const pathname = /references/${slug.join("/")}
@@ -63,13 +60,34 @@ const loadReferencesFile = cache(
if (!fileDetails) {
return undefined
}
const fullPath = path.join(monoRepoPath, fileDetails.filePath)
const fileContent = await fs.readFile(fullPath, "utf-8")
const r2Base = process.env.NEXT_PUBLIC_REFERENCES_R2_BASE_URL
const fileContent = await workerCompatibleFetch<string | null>({
url: `${r2Base}/references/${fileDetails.filePath.replace(
/^.*\/references\//,
""
)}`,
responseTransformer: async (res) => {
return res.ok ? res.text() : null
},
fallbackAction: async () => {
try {
const { promises: fs } = await import("fs")
const fullPath = path.join(monoRepoPath, fileDetails.filePath)
return await fs.readFile(fullPath, "utf-8")
} catch {
return null
}
},
useRemote: !!r2Base,
})
if (!fileContent) {
return undefined
}
return { content: fileContent,
path: fullPath,
process.env.VERCEL_ENV === "production",
process.env.VERCEL_ENV === "production" ||
!!process.env.CLOUDFLARE_ENV,
},
],
[
diff --git a/www/apps/resources/next.config.mjs b/www/apps/resources/next.config.mjs index a32359d3dd833..4d8d80e2717a2 100644 --- a/www/apps/resources/next.config.mjs +++ b/www/apps/resources/next.config.mjs @@ -281,8 +281,13 @@ const nextConfig = { }, ]) },
"node_modules/@medusajs/icons",
"../**/.open-next/**",
"../!(resources)/.next/**",
{
source: "/index.html.md",
destination: "/md-content",
},
{
source: "/index.md",
destination: "/md-content",
},
{
source: "/:path*/index.html.md",
destination: "/md-content/:path*",
@@ -307,7 +320,7 @@ const nextConfig = { destination: "/md-content/:path*", }, {
source: "/:path((?!md-content).+)/",
source: "/:first((?!md-content)[^/]+)/:rest*/",
has: [
{
type: "header",
@@ -315,7 +328,7 @@ const nextConfig = { value: ".(text/markdown|text/plain).", }, ],
destination: "/md-content/:path",
destination: "/md-content/:first/:rest*",
},
{
source: "/",
@@ -329,7 +342,7 @@ const nextConfig = { destination: "/md-content", }, {
source: "/:path((?!md-content).+)",
source: "/:first((?!md-content)[^/]+)/:rest*",
has: [
{
type: "header",
@@ -337,7 +350,7 @@ const nextConfig = { value: ".(text/markdown|text/plain).", }, ],
destination: "/md-content/:path",
destination: "/md-content/:first/:rest*",
},
],
+export default defineCloudflareConfig() diff --git a/www/apps/resources/package.json b/www/apps/resources/package.json index 3236af41acecb..1972e584f0e42 100644 --- a/www/apps/resources/package.json +++ b/www/apps/resources/package.json @@ -5,23 +5,30 @@ "scripts": { "dev": "next dev", "dev:monorepo": "yarn dev -p 3003",
async function main() { await generateSplitSidebars({ @@ -10,6 +15,12 @@ async function main() { await generateSlugChanges() await generateFilesMap() await generateEditedDates()
srcDir: path.join(process.cwd(), "app"),
destDir: path.join(process.cwd(), "public", "raw-mdx"),
void main() diff --git a/www/apps/resources/scripts/upload-references-to-r2.mjs b/www/apps/resources/scripts/upload-references-to-r2.mjs new file mode 100644 index 0000000000000..3d68d68b02c6e --- /dev/null +++ b/www/apps/resources/scripts/upload-references-to-r2.mjs @@ -0,0 +1,149 @@ +/* eslint-disable no-console / +/*
Full upload of references/ directory.
Upload only the listed files (paths relative to app root).
Remove the listed keys from R2 (paths relative to app root).
+// Load .env if present; silently skip if not (e.g. CI injects vars directly) +try {
+import {
+const accountId = process.env.CLOUDFLARE_ACCOUNT_ID +const accessKeyId = process.env.CLOUDFLARE_R2_ACCESS_KEY_ID +const secretAccessKey = process.env.CLOUDFLARE_R2_SECRET_ACCESS_KEY +const bucket = process.env.R2_BUCKET_NAME || "docs-assets" + +if (!accountId || !accessKeyId || !secretAccessKey) {
+const client = new S3Client({
https://${accountId}.r2.cloudflarestorage.com,+// Parse --upload and --remove CLI flags +const args = process.argv.slice(2) +const filesToUpload = [] +const filesToRemove = [] +let mode = null + +for (const arg of args) {
+const isSelective = filesToUpload.length > 0 || filesToRemove.length > 0 + +// --- helpers --- + +async function uploadFile(localPath, r2Key) {
Bucket: bucket,
Key: r2Key,
Body: body,
ContentType: contentType,
uploaded: ${r2Key})
+}+async function removeFile(r2Key) {
removed: ${r2Key})
+}+async function uploadDir(localDir, r2Prefix) {
continue
${r2Prefix}/${entry.name} await uploadDir(localPath, r2Key)
await uploadFile(localPath, r2Key)
+// --- main --- + +if (isSelective) {
console.log(` skipped (not page.mdx): ${relPath}`)
continue
resources/${relPath}) console.log(` skipped (not page.mdx): ${relPath}`)
continue
resources/${relPath})Uploading ${referencesDir} → r2://${bucket}/resources/references+console.log("Done.") diff --git a/www/apps/resources/utils/fetch-mdx-content.ts b/www/apps/resources/utils/fetch-mdx-content.ts new file mode 100644 index 0000000000000..51833bc79375f --- /dev/null +++ b/www/apps/resources/utils/fetch-mdx-content.ts @@ -0,0 +1,54 @@ +import { workerCompatibleFetch } from "docs-utils" +import path from "path" + +export async function fetchMdxContent(
url: `${r2Base}/references/${relPath}`,
responseTransformer: async (res) => {
return res.ok ? res.text() : null
},
fallbackAction: async () => {
try {
const { promises: fs } = await import("fs")
const relPath = filePathFromMap.replace(/^.*\/references\//, "")
return await fs.readFile(
path.join(process.cwd(), "references", relPath),
"utf-8"
)
} catch {
return null
}
},
useRemote: isCloudflare,
${baseUrl}/raw-mdx/${relPath}, return res.ok ? res.text() : null
try {
const { promises: fs } = await import("fs")
return await fs.readFile(
path.join(process.cwd(), "app", relPath),
"utf-8"
)
} catch {
return null
}
"binding": "WORKER_SELF_REFERENCE",
"service": "medusa-docs-resources"
+# CLOUDFLARE DEPLOYMENT +# Base URL of the R2 bucket where specs/ are uploaded (e.g. https://pub-xxx.r2.dev/ui) +# Required when deploying to Cloudflare; falls back to local filesystem in dev +UI_SPECS_R2_BASE_URL= +# R2 credentials for the upload:r2 script +CLOUDFLARE_ACCOUNT_ID= +CLOUDFLARE_R2_ACCESS_KEY_ID= +CLOUDFLARE_R2_SECRET_ACCESS_KEY= +R2_BUCKET_NAME=docs-assets \ No newline at end of file diff --git a/www/apps/ui/.gitignore b/www/apps/ui/.gitignore index fd3dbb571a12a..6927538c1efb6 100644 --- a/www/apps/ui/.gitignore +++ b/www/apps/ui/.gitignore @@ -27,6 +27,7 @@ yarn-error.log*
.env*.local +.dev.vars
.vercel @@ -34,3 +35,10 @@ yarn-error.log*
*.tsbuildinfo next-env.d.ts + +sidebar.full.mjs + +# cloudflare +.open-next +.wrangler +public/raw-mdx \ No newline at end of file diff --git a/www/apps/ui/app/md-content/[[...slug]]/route.ts b/www/apps/ui/app/md-content/[[...slug]]/route.ts index 5c98b3c896e94..725f1eb4db444 100644 --- a/www/apps/ui/app/md-content/[[...slug]]/route.ts +++ b/www/apps/ui/app/md-content/[[...slug]]/route.ts @@ -1,5 +1,4 @@ -import { addExtraToMd, getCleanMd } from "docs-utils" -import { existsSync } from "fs" +import { addExtraToMd, getCleanMd, workerCompatibleFetch } from "docs-utils" import { unstable_cache } from "next/cache" import { notFound } from "next/navigation" import { NextRequest, NextResponse } from "next/server" @@ -12,25 +11,51 @@ import { colors as allColors } from "@/config/colors" import { PostHog } from "posthog-node"
type Params = {
export async function GET(req: NextRequest, { params }: Params) {
const fileContent = await workerCompatibleFetch<string | null>({
url: ${origin}${basePath}/raw-mdx/${[...slug, "page.mdx"].join("/")},
responseTransformer: async (res) => {
return res.ok ? res.text() : null
},
fallbackAction: async () => {
try {
const { promises: fs } = await import("fs")
return await fs.readFile(
path.join(process.cwd(), "app", ...slug, "page.mdx"),
"utf-8"
)
} catch {
return null
}
},
useRemote: !!process.env.CLOUDFLARE_ENV,
})
if (!fileContent) { return notFound() }
const specsR2Base = process.env.UI_SPECS_R2_BASE_URL
const cleanMdContent = await getCleanMd_(
examplesPath: specsR2Base
? `${specsR2Base}/specs/examples`
: path.join(process.cwd(), "specs", "examples"),
specsPath: specsR2Base
? `${specsR2Base}/specs/components`
: path.join(process.cwd(), "specs", "components"),
const getCleanMd_ = unstable_cache( async (
content: string, parserOptions: { examplesPath: string specsPath: string @@ -89,7 +114,8 @@ const getCleanMd_ = unstable_cache( const iconNames = Object.keys(Icons).filter((name) => name !== "default")
return getCleanMd({
file: filePath,
file: content,
type: "content",
plugins,
parserOptions: {
ComponentExample: {
diff --git a/www/apps/ui/generated/components-index.mjs b/www/apps/ui/generated/components-index.mjs new file mode 100644 index 0000000000000..5b4dcd45eb784 --- /dev/null +++ b/www/apps/ui/generated/components-index.mjs @@ -0,0 +1,83 @@ +/**
const withMDX = mdx({ extension: /.mdx?$/, @@ -78,7 +79,8 @@ const withMDX = mdx({ }, useBaseUrl: process.env.NODE_ENV === "production" ||
process.env.VERCEL_ENV === "production",
process.env.VERCEL_ENV === "production" ||
!!process.env.CLOUDFLARE_ENV,
},
],
[localLinksRehypePlugin],
@@ -115,6 +117,8 @@ const withMDX = mdx({ uiRehypePlugin, { exampleRegistry: ExampleRegistry,
specsIndex: ComponentSpecsIndex,
specsBaseUrl: process.env.UI_SPECS_R2_BASE_URL,
},
],
], @@ -136,6 +140,7 @@ const nextConfig = {
transpilePackages: ["docs-ui"], basePath: process.env.NEXT_PUBLIC_BASE_PATH || "/ui",
outputFileTracingRoot: new URL("../../", import.meta.url).pathname, outputFileTracingIncludes: { "/md\-content/\[\[\.\.\.slug\]\]": [ "./app/**/*.mdx", @@ -144,7 +149,11 @@ const nextConfig = { ], }, outputFileTracingExcludes: {
"node_modules/@medusajs/icons",
"../**/.open-next/**",
"../!(ui)/.next/**",
{
source: "/index.html.md",
destination: "/md-content",
},
{
source: "/index.md",
destination: "/md-content",
},
{
source: "/:path*/index.html.md",
destination: "/md-content/:path*",
@@ -165,7 +182,7 @@ const nextConfig = { destination: "/md-content/:path*", }, {
source: "/:path((?!md-content).+)/",
source: "/:first((?!md-content)[^/]+)/:rest*/",
has: [
{
type: "header",
@@ -173,7 +190,7 @@ const nextConfig = { value: ".(text/markdown|text/plain).", }, ],
destination: "/md-content/:path",
destination: "/md-content/:first/:rest*",
},
{
source: "/",
@@ -187,7 +204,7 @@ const nextConfig = { destination: "/md-content", }, {
source: "/:path((?!md-content).+)",
source: "/:first((?!md-content)[^/]+)/:rest*",
has: [
{
type: "header",
@@ -195,7 +212,7 @@ const nextConfig = { value: ".(text/markdown|text/plain).", }, ],
destination: "/md-content/:path",
destination: "/md-content/:first/:rest*",
},
],
+export default defineCloudflareConfig() diff --git a/www/apps/ui/package.json b/www/apps/ui/package.json index 413865d3b4d08..90694e9041aa0 100644 --- a/www/apps/ui/package.json +++ b/www/apps/ui/package.json @@ -6,12 +6,19 @@ "dev": "next dev", "dev:monorepo": "yarn prep && yarn dev -p 3005", "build": "yarn prep && next build",
+const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const specsDir = path.resolve(__dirname, "../specs/components") +const outputPath = path.resolve(__dirname, "../generated/components-index.mjs") + +export function generateSpecsIndex() {
f.endsWith(".json")
const filesStr = files.map((f) => `"${f}"`).join(", ")
return ` "${component}": [${filesStr}]`
Generated specs index at ${outputPath})
+}
diff --git a/www/apps/ui/scripts/prepare.mjs b/www/apps/ui/scripts/prepare.mjs
index acb2a475157b1..c453238ce6c03 100644
--- a/www/apps/ui/scripts/prepare.mjs
+++ b/www/apps/ui/scripts/prepare.mjs
@@ -1,14 +1,26 @@
/* eslint-disable no-console */
-import { generateEditedDates, generateSidebar } from "build-scripts"
+import {async function main() {
generateSpecsIndex() await generateSidebar(sidebar) await generateEditedDates()
if (process.env.CLOUDFLARE_ENV) {
await copyMdxToPublic({
srcDir: path.join(process.cwd(), "app"),
destDir: path.join(process.cwd(), "public", "raw-mdx"),
})
}
// copy colors from the @medusajs/ui-preset package
const resolvedURL = import.meta.resolve("@medusajs/ui-preset")
diff --git a/www/apps/ui/scripts/upload-specs-to-r2.mjs b/www/apps/ui/scripts/upload-specs-to-r2.mjs
new file mode 100644
index 0000000000000..43cf68375fa0a
--- /dev/null
+++ b/www/apps/ui/scripts/upload-specs-to-r2.mjs
@@ -0,0 +1,137 @@
+/* eslint-disable no-console /
+/*
Full upload of specs/ directory.
Upload only the listed files (paths relative to app root).
Remove the listed keys from R2 (paths relative to app root).
*/
+// Load .env if present; silently skip if not (e.g. CI injects vars directly) +try {
+import {
+const accountId = process.env.CLOUDFLARE_ACCOUNT_ID +const accessKeyId = process.env.CLOUDFLARE_R2_ACCESS_KEY_ID +const secretAccessKey = process.env.CLOUDFLARE_R2_SECRET_ACCESS_KEY +const bucket = process.env.R2_BUCKET_NAME || "docs-assets" + +if (!accountId || !accessKeyId || !secretAccessKey) {
+const client = new S3Client({
https://${accountId}.r2.cloudflarestorage.com,+// Parse --upload and --remove CLI flags +const args = process.argv.slice(2) +const filesToUpload = [] +const filesToRemove = [] +let mode = null + +for (const arg of args) {
+const isSelective = filesToUpload.length > 0 || filesToRemove.length > 0 + +// --- helpers --- + +async function uploadFile(localPath, r2Key) {
Bucket: bucket,
Key: r2Key,
Body: body,
ContentType: contentType,
uploaded: ${r2Key})
+}+async function removeFile(r2Key) {
removed: ${r2Key})
+}+async function uploadDir(localDir, r2Prefix) {
${r2Prefix}/${entry.name} await uploadDir(localPath, r2Key)
await uploadFile(localPath, r2Key)
+// --- main --- + +if (isSelective) {
ui/${relPath})ui/${relPath})Uploading ${specsDir} → r2://${bucket}/ui/specs)+console.log("Done.") diff --git a/www/apps/ui/vercel.json b/www/apps/ui/vercel.json deleted file mode 100644 index be3b478f40742..0000000000000 --- a/www/apps/ui/vercel.json +++ /dev/null @@ -1,7 +0,0 @@ -{
"binding": "WORKER_SELF_REFERENCE",
"service": "medusa-docs-ui"
.env*.local +.dev.vars
.vercel @@ -34,3 +35,10 @@ yarn-error.log*
*.tsbuildinfo next-env.d.ts + +sidebar.full.mjs + +# cloudflare +.open-next +.wrangler +public/raw-mdx \ No newline at end of file diff --git a/www/apps/user-guide/app/md-content/[[...slug]]/route.ts b/www/apps/user-guide/app/md-content/[[...slug]]/route.ts index 99e9090b7732e..6d2583745cadf 100644 --- a/www/apps/user-guide/app/md-content/[[...slug]]/route.ts +++ b/www/apps/user-guide/app/md-content/[[...slug]]/route.ts @@ -1,5 +1,4 @@ -import { addExtraToMd, getCleanMd } from "docs-utils" -import { existsSync } from "fs" +import { addExtraToMd, getCleanMd, workerCompatibleFetch } from "docs-utils" import { unstable_cache } from "next/cache" import { notFound } from "next/navigation" import { NextRequest, NextResponse } from "next/server" @@ -13,21 +12,39 @@ import { import type { Plugin } from "unified"
type Params = {
export async function GET(req: NextRequest, { params }: Params) {
${origin}${basePath}/raw-mdx/${[...slug, "page.mdx"].join("/")}, return res.ok ? res.text() : null
try {
const { promises: fs } = await import("fs")
return await fs.readFile(
path.join(process.cwd(), "app", ...slug, "page.mdx"),
"utf-8"
)
} catch {
return null
}
process.env.VERCEL_ENV === "production",
process.env.VERCEL_ENV === "production" ||
!!process.env.CLOUDFLARE_ENV,
},
],
[localLinksRehypePlugin],
@@ -100,8 +118,8 @@ export async function GET(req: NextRequest, { params }: Params) { }
const getCleanMd_ = unstable_cache(
process.env.VERCEL_ENV === "production",
process.env.VERCEL_ENV === "production" ||
!!process.env.CLOUDFLARE_ENV,
},
],
[localLinksRehypePlugin],
@@ -128,11 +129,16 @@ const nextConfig = {
transpilePackages: ["docs-ui"], basePath: process.env.NEXT_PUBLIC_BASE_PATH || "/user-guide",
"node_modules/@medusajs/icons",
"../**/.open-next/**",
"../!(user-guide)/.next/**",
{
source: "/index.html.md",
destination: "/md-content",
},
{
source: "/index.md",
destination: "/md-content",
},
{
source: "/:path*/index.html.md",
destination: "/md-content/:path*",
@@ -153,7 +167,7 @@ const nextConfig = { destination: "/md-content/:path*", }, {
source: "/:path((?!md-content).+)/",
source: "/:first((?!md-content)[^/]+)/:rest*/",
has: [
{
type: "header",
@@ -161,7 +175,7 @@ const nextConfig = { value: ".(text/markdown|text/plain).", }, ],
destination: "/md-content/:path",
destination: "/md-content/:first/:rest*",
},
{
source: "/",
@@ -175,7 +189,7 @@ const nextConfig = { destination: "/md-content", }, {
source: "/:path((?!md-content).+)",
source: "/:first((?!md-content)[^/]+)/:rest*",
has: [
{
type: "header",
@@ -183,7 +197,7 @@ const nextConfig = { value: ".(text/markdown|text/plain).", }, ],
destination: "/md-content/:path",
destination: "/md-content/:first/:rest*",
},
],
+export default defineCloudflareConfig() diff --git a/www/apps/user-guide/package.json b/www/apps/user-guide/package.json index 24cf86dd68f36..3e48f6d257cca 100644 --- a/www/apps/user-guide/package.json +++ b/www/apps/user-guide/package.json @@ -6,22 +6,28 @@ "dev": "yarn prep && next dev", "dev:monorepo": "yarn prep && yarn dev -p 3004", "build": "yarn prep && next build",
async function main() { await generateSidebar(sidebar) await generateEditedDates()
srcDir: path.join(process.cwd(), "app"),
destDir: path.join(process.cwd(), "public", "raw-mdx"),
void main() diff --git a/www/apps/user-guide/vercel.json b/www/apps/user-guide/vercel.json deleted file mode 100644 index 52ce477a25042..0000000000000 --- a/www/apps/user-guide/vercel.json +++ /dev/null @@ -1,7 +0,0 @@ -{
"binding": "WORKER_SELF_REFERENCE",
"service": "medusa-docs-user-guide"
-if [[ "$1" == "docs-old" ]]; then
-# Check for production build condition before preview checks -if [[ "$VERCEL_ENV" == "production" && $diffResult -eq 1 ]] ; then
-# Exit early if the PR branch doesn't start with 'docs/' -if [[ ! "$VERCEL_GIT_COMMIT_REF" =~ ^docs/ ]]; then
-# For preview environments, check project-specific directories -if [[ "$VERCEL_ENV" == "preview" && -n "$PROJECT_NAME" ]]; then
-# Don't build -echo "🛑 - Build cancelled: Conditions don't match" -exit 0; \ No newline at end of file diff --git a/www/package.json b/www/package.json index 72088f0b837c8..09136bc972513 100644 --- a/www/package.json +++ b/www/package.json @@ -20,7 +20,21 @@ "watch": "turbo run watch", "prep": "turbo run prep", "test": "turbo run test -- run",
+type Options = {
+async function copyDir(src: string, dest: string): Promise<void> {
await copyDir(srcPath, destPath)
entry.isFile() &&
(entry.name === "page.mdx" || entry.name === "_md-content.mdx")
await fs.copyFile(srcPath, destPath)
+export async function copyMdxToPublic({ srcDir, destDir }: Options): Promise<void> {
${baseUrl}${basePath}${pathname}.replace(//$/, "")const pageUrl = ${baseUrl}${basePath || ""}${pathname}.replace(//$/, "")
const handleAiAssistantClick = () => { if (loading) { diff --git a/www/packages/docs-utils/src/get-clean-md.ts b/www/packages/docs-utils/src/get-clean-md.ts index 139d7ec8354ca..b892883c991f3 100644 --- a/www/packages/docs-utils/src/get-clean-md.ts +++ b/www/packages/docs-utils/src/get-clean-md.ts @@ -3,7 +3,7 @@ import remarkParse from "remark-parse" import remarkStringify from "remark-stringify" import { FrontMatter, UnistNode, UnistNodeWithData, UnistTree } from "types" import { Plugin, Transformer, unified } from "unified" -import { SKIP } from "unist-util-visit" +import { SKIP, VisitorResult } from "unist-util-visit" import type { VFile } from "vfile" import { ComponentParser, @@ -52,6 +52,8 @@ const parsers: Record<string, ComponentParser> = { EventHeader: parseEventHeader, }
+const asyncParserNames = new Set(["ComponentExample", "ComponentReference"]) + const isComponentAllowed = (nodeName: string): boolean => { return Object.keys(parsers).includes(nodeName) } @@ -66,6 +68,13 @@ const parseComponentsPlugin = (options: ParserPluginOptions): Transformer => {
let pageTitle = ""
type AsyncParserTask = {
node: UnistNodeWithData
parent: UnistTree
parserName: string
}
const asyncTasks: AsyncParserTask[] = []
visit( tree as UnistTree, ["mdxJsxFlowElement", "element", "mdxjsEsm", "heading"], @@ -119,13 +128,40 @@ const parseComponentsPlugin = (options: ParserPluginOptions): Transformer => { return }
if (asyncParserNames.has(node.name)) {
asyncTasks.push({
node: node as UnistNodeWithData,
parent: parent as UnistTree,
parserName: node.name,
})
return
}
const parser = parsers[node.name]
if (parser) {
const parserOptions = options[node.name] || {}
return parser(node as UnistNodeWithData, index, parent, parserOptions)
return parser(
node as UnistNodeWithData,
index,
parent,
parserOptions
) as VisitorResult
}
}
const currentIndex = (parent as UnistTree).children.indexOf(
node as UnistNode
)
if (currentIndex === -1) {
continue
}
const parser = parsers[parserName]
if (parser) {
await parser(node, currentIndex, parent, options[parserName] || {})
}
diff --git a/www/packages/docs-utils/src/index.ts b/www/packages/docs-utils/src/index.ts index bd8c3f9c5e721..e546a5b34758e 100644 --- a/www/packages/docs-utils/src/index.ts +++ b/www/packages/docs-utils/src/index.ts @@ -8,3 +8,4 @@ export * from "./get-file-slug.js" export * from "./get-front-matter.js" export * from "./oas-file-to-path.js" export * from "./sidebar-utils.js" +export * from "./worker-compatible-fetch.js" diff --git a/www/packages/docs-utils/src/utils/parsers.ts b/www/packages/docs-utils/src/utils/parsers.ts index 652da5a69ae10..75c2c27a91754 100644 --- a/www/packages/docs-utils/src/utils/parsers.ts +++ b/www/packages/docs-utils/src/utils/parsers.ts @@ -8,13 +8,14 @@ import { import path from "path" import { readFileSync } from "fs" import type { Documentation } from "react-docgen" +import { workerCompatibleFetch } from "../worker-compatible-fetch.js"
export type ComponentParser<TOptions = any> = ( node: UnistNodeWithData, index: number, parent: UnistTree, options?: TOptions -) => VisitorResult +) => VisitorResult | Promise<VisitorResult>
export const parseCard: ComponentParser = ( node: UnistNodeWithData, @@ -573,12 +574,12 @@ export const parseWorkflowDiagram: ComponentParser = (
export const parseComponentExample: ComponentParser<{ examplesBasePath: string -}> = ( +}> = async ( node: UnistNodeWithData, index: number, parent: UnistTree, options -): VisitorResult => { +): Promise<VisitorResult> => { if (!options?.examplesBasePath) { return } @@ -588,10 +589,27 @@ export const parseComponentExample: ComponentParser<{ return }
${exampleName.value as string}.tsx),const name = exampleName.value as string
const fileContent = await workerCompatibleFetch<string | null>({
url: ${options.examplesBasePath}/${name}.tsx,
responseTransformer: async (res) => {
return res.ok ? res.text() : null
},
fallbackAction: async () => {
try {
return readFileSync(
path.join(options.examplesBasePath, `${name}.tsx`),
"utf-8"
)
} catch {
return null
}
},
})
if (!fileContent) {
return
}
parent.children?.splice(index, 1, { type: "code", @@ -601,12 +619,14 @@ export const parseComponentExample: ComponentParser<{ return [SKIP, index] }
-export const parseComponentReference: ComponentParser<{ specsPath: string }> = ( +export const parseComponentReference: ComponentParser<{
options.specsPath,
mainComponent,
`${componentName}.json`
url: `${options.specsPath}/${mainComponent}/${componentName}.json`,
responseTransformer: async (res) => {
return res.ok ? ((await res.json()) as Documentation) : null
},
fallbackAction: async () => {
try {
const componentSpecsFile = path.join(
options.specsPath,
mainComponent,
`${componentName}.json`
)
return JSON.parse(
readFileSync(componentSpecsFile, "utf-8")
) as Documentation
} catch {
return null
}
},
readFileSync(componentSpecsFile, "utf-8")
if (!componentSpecs) {
return []
}
const componentNodes: UnistNode[] = [ { @@ -716,11 +753,8 @@ export const parseComponentReference: ComponentParser<{ specsPath: string }> = ( return componentNodes }
export const parsePackageInstall: ComponentParser = ( diff --git a/www/packages/docs-utils/src/worker-compatible-fetch.ts b/www/packages/docs-utils/src/worker-compatible-fetch.ts new file mode 100644 index 0000000000000..86c05851b8885 --- /dev/null +++ b/www/packages/docs-utils/src/worker-compatible-fetch.ts @@ -0,0 +1,37 @@ +type Options<T> = {
!!process.env.CLOUDFLARE_ENV for routes that always receive+/**
fetch() when url starts with http(s), otherwisefallbackAction (e.g. read from the local filesystem).useRemote to override the default check — useful when the URL isexport function localLinksRehypePlugin(options: LocalLinkOptions): Transformer {
if (!node.properties?.href?.match(/page\.mdx?/)) {
return
if (node.properties?.href?.match(/page\.mdx?/)) {
nodesToProcess.push({ node, type: "a" })
}
} else if (node.type === "link") {
if (node.url?.match(/page\.mdx?/)) {
nodesToProcess.push({ node, type: "link" })
}
}
node.properties.href = fixLinkUtil({
if (type === "a") {
node.properties!.href = await fixLinkUtil({
currentPageFilePath,
linkedPath: node.properties.href,
linkedPath: node.properties!.href,
appsPath,
r2BaseUrl,
})
} else if (node.type === "link") {
if (!node.url?.match(/page\.mdx?/)) {
return
}
node.url = fixLinkUtil({
} else {
node.url = await fixLinkUtil({
currentPageFilePath,
linkedPath: node.url,
linkedPath: node.url!,
appsPath,
r2BaseUrl,
})
}
type Options = { exampleRegistry: ExampleRegistry
-export function uiRehypePlugin({ exampleRegistry }: Options) { +export function uiRehypePlugin({
const name = getNodeAttributeByName(node, "name")?.value as string
exampleNodes.push(node)
} else if (node.name === "ComponentReference") {
referenceNodes.push(node)
}
const name = getNodeAttributeByName(node, "name")?.value as string
if (!name) {
continue
}
try {
const component = exampleRegistry[name]
const src = component.file
if (!name) {
return null
let source = await workerCompatibleFetch<string | null>({
url: `${specsBaseUrl}/${src}`,
responseTransformer: async (res) => {
return res.ok ? res.text() : null
},
fallbackAction: async () => {
const filePath = path.join(process.cwd(), src)
return fs.promises.readFile(filePath, "utf8")
},
useRemote: !!specsBaseUrl,
})
if (!source) {
continue
}
source = source.replaceAll("export default", "export")
// Trim newline at the end of file. It's correct, but it makes source display look off
if (source.endsWith("\n")) {
source = source.substring(0, source.length - 1)
}
node.children?.push(
u("element", {
tagName: "span",
properties: {
__src__: src,
codeLinesJSON: JSON.stringify(source.split("\n")),
},
})
)
} catch (error) {
console.error(error)
}
}
for (const node of referenceNodes) {
const mainComponent = getNodeAttributeByName(node, "mainComponent")
?.value as string
if (!mainComponent) {
continue
}
const specs: Documentation[] = []
const specFiles = specsIndex[mainComponent] ?? []
if (specsBaseUrl) {
try {
const component = exampleRegistry[name]
const src = component.file
const filePath = path.join(process.cwd(), src)
let source = fs.readFileSync(filePath, "utf8")
source = source.replaceAll("export default", "export")
// Trim newline at the end of file. It's correct, but it makes source display look off
if (source.endsWith("\n")) {
source = source.substring(0, source.length - 1)
}
node.children?.push(
u("element", {
tagName: "span",
properties: {
__src__: src,
codeLinesJSON: JSON.stringify(source.split("\n")),
},
const specResults = await Promise.all(
specFiles.map(async (fileName) => {
const r = await fetch(
`${specsBaseUrl}/specs/components/${mainComponent}/${fileName}`
)
return r.ok ? ((await r.json()) as Documentation) : null
})
)
specs.push(...(specResults.filter(Boolean) as Documentation[]))
} catch (error) {
console.error(error)
}
} else if (node.name === "ComponentReference") {
const mainComponent = getNodeAttributeByName(node, "mainComponent")
?.value as string
if (!mainComponent) {
return null
}
const mainSpecsDir = path.join(process.cwd(), "specs", "components")
const componentSpecsDir = path.join(mainSpecsDir, mainComponent)
const specs: Documentation[] = []
const specFiles = fs.readdirSync(componentSpecsDir)
specFiles.map((specFileName) => {
// read spec file
} else {
const componentSpecsDir = path.join(
process.cwd(),
"specs",
"components",
mainComponent
)
specFiles.forEach((specFileName) => {
const specFile = fs.readFileSync(
path.join(componentSpecsDir, specFileName),
"utf-8"
)
specs.push(JSON.parse(specFile) as Documentation)
})
node.attributes?.push({
name: "specsSrc",
value: JSON.stringify(specs),
type: "mdxJsxAttribute",
})
}
node.attributes?.push({
name: "specsSrc",
value: JSON.stringify(specs),
type: "mdxJsxAttribute",
})
diff --git a/www/packages/remark-rehype-plugins/src/utils/component-link-fixer.ts b/www/packages/remark-rehype-plugins/src/utils/component-link-fixer.ts index f8b773805c62a..5e53fb2e8c2a0 100644 --- a/www/packages/remark-rehype-plugins/src/utils/component-link-fixer.ts +++ b/www/packages/remark-rehype-plugins/src/utils/component-link-fixer.ts @@ -1,6 +1,11 @@ import path from "path" import { Transformer } from "unified" -import { UnistNodeWithData, UnistTree, ComponentLinkFixerOptions } from "types" +import {
const VALUE_LINK_REGEX = /^(![a-z]+!|.)/gm
-function matchMdLinks( +async function matchMdLinks( str: string, linkOptions: Omit<FixLinkOptions, "linkedPath"> ) { @@ -21,7 +26,7 @@ function matchMdLinks( return }
-function matchValueLink( +async function matchValueLink( str: string, linkOptions: Omit<FixLinkOptions, "linkedPath"> ) { @@ -55,7 +60,7 @@ export function componentLinkFixer( attributeName: string, options?: ComponentLinkFixerOptions ): Transformer {
if (node.name !== componentName) {
return
if (node.name === componentName) {
nodesToProcess.push(node)
}
})
const linkOptions = {
currentPageFilePath,
appsPath,
r2BaseUrl,
}
for (const node of nodesToProcess) { const attribute = getAttribute(node, attributeName)
if (!attribute) {
return
}
const linkOptions = {
currentPageFilePath,
appsPath,
continue
}
if (typeof attribute.value === "string") {
attribute.value =
linkFn(attribute.value, linkOptions) || attribute.value
return
(await linkFn(attribute.value, linkOptions)) || attribute.value
continue
}
if (!attribute.value.data?.estree) {
return
continue
}
const itemJsVar = estreeToJs(attribute.value.data.estree)
if (!itemJsVar || "name" in itemJsVar) {
return
if (
!itemJsVar ||
("name" in itemJsVar &&
typeof (itemJsVar as Record<string, unknown>).name === "string")
) {
continue
}
const literals: ExpressionJsVarLiteral[] = []
performActionOnLiteral(itemJsVar, (item) => {
item.original.value = linkFn(item.original.value as string, linkOptions)
item.original.raw = JSON.stringify(item.original.value)
literals.push(item)
})
for (const item of literals) {
const newValue = await linkFn(
item.original.value as string,
linkOptions
)
if (newValue !== undefined) {
item.original.value = newValue
item.original.raw = JSON.stringify(newValue)
}
}
export type FixLinkOptions = { currentPageFilePath: string linkedPath: string appsPath: string
-export function fixLinkUtil({ +export async function fixLinkUtil({ currentPageFilePath, linkedPath, appsPath: basePath,
let linkedFileSlug: string | undefined
try {
if (r2BaseUrl) {
const res = await fetch(`${r2BaseUrl}${linkedFilePath}`)
if (res.ok) {
linkedFileSlug = (await getFrontMatterFromString(await res.text()))?.slug
}
} else {
linkedFileSlug = getFileSlugSync(fullLinkedFilePath)
}
} catch {
// fetch failed — fall back to path-based URL
}
const newLink = linkedFileSlug || diff --git a/www/packages/remark-rehype-plugins/src/utils/perform-action-on-literal.ts b/www/packages/remark-rehype-plugins/src/utils/perform-action-on-literal.ts index 5fee7746ad017..4449be738b37d 100644 --- a/www/packages/remark-rehype-plugins/src/utils/perform-action-on-literal.ts +++ b/www/packages/remark-rehype-plugins/src/utils/perform-action-on-literal.ts @@ -2,7 +2,12 @@ import { ExpressionJsVar, ExpressionJsVarLiteral } from "types" import { isExpressionJsVarLiteral, isExpressionJsVarObj } from "docs-utils"
export const performActionOnLiteral = (
export declare type LocalLinkOptions = { filePath?: string basePath?: string
export type ExpressionJsVarItem = { diff --git a/www/yarn.lock b/www/yarn.lock index 979dce2aba19f..61cef07b58dbe 100644 --- a/www/yarn.lock +++ b/www/yarn.lock @@ -352,2423 +352,4373 @@ __metadata: languageName: node linkType: hard
-"@babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.27.1":
-"@babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.23.5":
-"@babel/code-frame@npm:^7.22.5":
-"@babel/compat-data@npm:^7.23.5":
-"@babel/compat-data@npm:^7.27.2":
-"@babel/core@npm:^7.18.9":
-"@babel/core@npm:^7.28.0":
-"@babel/eslint-parser@npm:^7.25.9":
-"@babel/generator@npm:^7.23.6":
+"@ast-grep/napi@npm:^0.40.5":
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
-"@babel/generator@npm:^7.28.5":
-"@babel/helper-compilation-targets@npm:^7.23.6":
-"@babel/helper-compilation-targets@npm:^7.27.2":
-"@babel/helper-environment-visitor@npm:^7.22.20":
-"@babel/helper-function-name@npm:^7.23.0":
-"@babel/helper-globals@npm:^7.28.0":
-"@babel/helper-hoist-variables@npm:^7.22.5":
+"@aws-sdk/client-cloudfront@npm:3.984.0":
+"@aws-sdk/client-dynamodb@npm:3.984.0":
+"@aws-sdk/client-lambda@npm:3.984.0":
+"@aws-sdk/client-s3@npm:3.984.0":
+"@aws-sdk/client-s3@npm:^3":
+"@aws-sdk/client-sqs@npm:3.984.0":
+"@aws-sdk/core@npm:^3.973.6, @aws-sdk/core@npm:^3.974.8":
-"@babel/helper-module-imports@npm:^7.22.15":
-"@babel/helper-module-imports@npm:^7.27.1":
-"@babel/helper-module-transforms@npm:^7.23.3":
+"@aws-sdk/credential-provider-ini@npm:^3.972.38":
-"@babel/helper-module-transforms@npm:^7.28.3":
-"@babel/helper-plugin-utils@npm:^7.27.1":
-"@babel/helper-simple-access@npm:^7.22.5":
-"@babel/helper-split-export-declaration@npm:^7.22.6":
-"@babel/helper-string-parser@npm:^7.23.4":
-"@babel/helper-string-parser@npm:^7.27.1":
-"@babel/helper-validator-identifier@npm:^7.22.20":
-"@babel/helper-validator-identifier@npm:^7.25.9":
-"@babel/helper-validator-identifier@npm:^7.27.1":
-"@babel/helper-validator-identifier@npm:^7.28.5":
+"@aws-sdk/middleware-flexible-checksums@npm:^3.972.4, @aws-sdk/middleware-flexible-checksums@npm:^3.974.16":
-"@babel/helper-validator-option@npm:^7.23.5":
-"@babel/helper-validator-option@npm:^7.27.1":
-"@babel/helpers@npm:^7.23.9":
-"@babel/helpers@npm:^7.28.4":
+"@aws-sdk/middleware-sdk-s3@npm:^3.972.37, @aws-sdk/middleware-sdk-s3@npm:^3.972.6":
-"@babel/highlight@npm:^7.23.4":
-"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9":
-"@babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.5":
+"@aws-sdk/nested-clients@npm:^3.997.6":
-"@babel/plugin-transform-react-jsx-self@npm:^7.27.1":
-"@babel/plugin-transform-react-jsx-source@npm:^7.27.1":
-"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.7, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7":
-"@babel/runtime@npm:^7.12.5":
-"@babel/runtime@npm:^7.17.9":
-"@babel/runtime@npm:^7.22.5":
-"@babel/template@npm:^7.22.15, @babel/template@npm:^7.23.9":
-"@babel/template@npm:^7.27.2":
-"@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.23.9":
-"@babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.3, @babel/traverse@npm:^7.28.5":
-"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.23.9, @babel/types@npm:^7.8.3":
optional: true
-"@babel/types@npm:^7.27.1, @babel/types@npm:^7.28.4, @babel/types@npm:^7.28.5":
-"@braintree/sanitize-url@npm:^6.0.1":
-"@cloudinary/transformation-builder-sdk@npm:^1.12.1":
-"@cloudinary/url-gen@npm:^1.17.0, @cloudinary/url-gen@npm:^1.7.0":
-"@cspotcode/source-map-support@npm:^0.8.0":
-"@csstools/color-helpers@npm:^5.1.0":
-"@csstools/css-calc@npm:^2.1.3, @csstools/css-calc@npm:^2.1.4":
-"@csstools/css-color-parser@npm:^3.0.9, @csstools/css-color-parser@npm:^3.1.0":
-"@csstools/css-parser-algorithms@npm:^3.0.4, @csstools/css-parser-algorithms@npm:^3.0.5":
-"@csstools/css-syntax-patches-for-csstree@npm:^1.0.14":
-"@csstools/css-tokenizer@npm:^3.0.3, @csstools/css-tokenizer@npm:^3.0.4":
-"@discoveryjs/json-ext@npm:0.5.7":
-"@dnd-kit/accessibility@npm:^3.1.1":
-"@dnd-kit/core@npm:^6.1.0":
-"@dnd-kit/sortable@npm:^8.0.0":
-"@dnd-kit/utilities@npm:^3.2.2":
-"@emnapi/runtime@npm:^1.4.0":
-"@emotion/is-prop-valid@npm:^1.3.1":
-"@emotion/memoize@npm:^0.9.0":
-"@esbuild/aix-ppc64@npm:0.21.5":
-"@esbuild/android-arm64@npm:0.21.5":
-"@esbuild/android-arm@npm:0.21.5":
-"@esbuild/android-x64@npm:0.21.5":
-"@esbuild/darwin-arm64@npm:0.21.5":
-"@esbuild/darwin-x64@npm:0.21.5":
-"@esbuild/freebsd-arm64@npm:0.21.5":
-"@esbuild/freebsd-x64@npm:0.21.5":
-"@esbuild/linux-arm64@npm:0.21.5":
-"@esbuild/linux-arm@npm:0.21.5":
-"@esbuild/linux-ia32@npm:0.21.5":
-"@esbuild/linux-loong64@npm:0.14.54":
-"@esbuild/linux-loong64@npm:0.21.5":
-"@esbuild/linux-mips64el@npm:0.21.5":
-"@esbuild/linux-ppc64@npm:0.21.5":
-"@esbuild/linux-riscv64@npm:0.21.5":
-"@esbuild/linux-s390x@npm:0.21.5":
-"@esbuild/linux-x64@npm:0.21.5":
-"@esbuild/netbsd-x64@npm:0.21.5":
-"@esbuild/openbsd-x64@npm:0.21.5":
-"@esbuild/sunos-x64@npm:0.21.5":
-"@esbuild/win32-arm64@npm:0.21.5":
-"@esbuild/win32-ia32@npm:0.21.5":
-"@esbuild/win32-x64@npm:0.21.5":
-"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0":
-"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.11.0":
-"@eslint/config-array@npm:^0.18.0":
-"@eslint/core@npm:^0.7.0":
-"@eslint/eslintrc@npm:^3.1.0":
-"@eslint/js@npm:9.13.0":
-"@eslint/object-schema@npm:^2.1.4":
-"@eslint/plugin-kit@npm:^0.2.0":
-"@fingerprintjs/fingerprintjs-pro-react@npm:^2.7.0":
-"@fingerprintjs/fingerprintjs-pro-spa@npm:^1.3.3":
-"@fingerprintjs/fingerprintjs-pro@npm:^3.12.0":
-"@floating-ui/core@npm:^1.0.0":
optional: true
-"@floating-ui/dom@npm:^1.6.1":
-"@floating-ui/react-dom@npm:^2.0.0":
-"@floating-ui/utils@npm:^0.2.0, @floating-ui/utils@npm:^0.2.1":
-"@formatjs/ecma402-abstract@npm:1.18.2":
-"@formatjs/fast-memoize@npm:2.2.0":
-"@formatjs/icu-messageformat-parser@npm:2.7.6":
-"@formatjs/icu-skeleton-parser@npm:1.8.0":
-"@formatjs/intl-localematcher@npm:0.5.4":
-"@hcaptcha/loader@npm:^2.0.0":
-"@hcaptcha/react-hcaptcha@npm:^1.12.0":
+"@csstools/css-color-parser@npm:^3.0.9, @csstools/css-color-parser@npm:^3.1.0":
-"@humanfs/core@npm:^0.19.0":
-"@humanfs/node@npm:^0.16.5":
-"@humanwhocodes/module-importer@npm:^1.0.1":
-"@humanwhocodes/momoa@npm:^2.0.3":
-"@humanwhocodes/retry@npm:^0.3.0, @humanwhocodes/retry@npm:^0.3.1":
-"@img/sharp-darwin-arm64@npm:0.34.1":
optional: true
-"@img/sharp-darwin-x64@npm:0.34.1":
optional: true
-"@img/sharp-libvips-darwin-arm64@npm:1.1.0":
-"@img/sharp-libvips-darwin-x64@npm:1.1.0":
-"@img/sharp-libvips-linux-arm64@npm:1.1.0":
-"@img/sharp-libvips-linux-arm@npm:1.1.0":
-"@img/sharp-libvips-linux-ppc64@npm:1.1.0":
-"@img/sharp-libvips-linux-s390x@npm:1.1.0":
-"@img/sharp-libvips-linux-x64@npm:1.1.0":
-"@img/sharp-libvips-linuxmusl-arm64@npm:1.1.0":
-"@img/sharp-libvips-linuxmusl-x64@npm:1.1.0":
-"@img/sharp-linux-arm64@npm:0.34.1":
optional: true
-"@img/sharp-linux-arm@npm:0.34.1":
optional: true
-"@img/sharp-linux-s390x@npm:0.34.1":
optional: true
-"@img/sharp-linux-x64@npm:0.34.1":
optional: true
-"@img/sharp-linuxmusl-arm64@npm:0.34.1":
optional: true
-"@img/sharp-linuxmusl-x64@npm:0.34.1":
optional: true
-"@img/sharp-wasm32@npm:0.34.1":
-"@img/sharp-win32-ia32@npm:0.34.1":
-"@img/sharp-win32-x64@npm:0.34.1":
-"@internationalized/date@npm:^3.5.6":
-"@internationalized/message@npm:^3.1.5":
-"@internationalized/number@npm:^3.5.4":
-"@internationalized/string@npm:^3.2.4":
-"@isaacs/cliui@npm:^8.0.2":
-"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2":
-"@jridgewell/gen-mapping@npm:^0.3.12, @jridgewell/gen-mapping@npm:^0.3.5":
-"@jridgewell/remapping@npm:^2.3.5":
-"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0":
-"@jridgewell/set-array@npm:^1.0.1":
-"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14":
-"@jridgewell/sourcemap-codec@npm:^1.5.0, @jridgewell/sourcemap-codec@npm:^1.5.5":
-"@jridgewell/trace-mapping@npm:0.3.9":
-"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9":
-"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.28":
+"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0":
-"@jsdevtools/ono@npm:^7.1.3":
-"@juggle/resize-observer@npm:^3.3.1":
-"@kapaai/react-sdk@npm:^0.9.0":
+"@eslint/eslintrc@npm:^3.1.0":
-"@lukeed/csprng@npm:^1.1.0":
-"@lukeed/uuid@npm:^2.0.0":
+"@eslint/plugin-kit@npm:^0.2.0":
-"@mdx-js/loader@npm:^3.1.0":
optional: true
-"@mdx-js/mdx@npm:^3.0.0":
-"@mdx-js/mdx@npm:^3.0.1, @mdx-js/mdx@npm:^3.1.0":
-"@mdx-js/mdx@npm:^3.1.1":
-"@mdx-js/react@npm:^3.0.1":
-"@mdx-js/react@npm:^3.1.0":
-"@mdx-js/react@npm:^3.1.1":
-"@medusajs/icons@npm:2.15.1":
-"@medusajs/ui-preset@npm:2.15.1":
-"@medusajs/ui@npm:4.1.11":
-"@mixmark-io/domino@npm:^2.2.0":
-"@next/bundle-analyzer@npm:15.3.9":
-"@next/env@npm:15.3.9":
-"@next/eslint-plugin-next@npm:15.3.6":
-"@next/mdx@npm:15.3.9":
optional: true
optional: true
-"@next/swc-darwin-arm64@npm:15.3.5":
-"@next/swc-darwin-x64@npm:15.3.5":
-"@next/swc-linux-arm64-gnu@npm:15.3.5":
-"@next/swc-linux-arm64-musl@npm:15.3.5":
-"@next/swc-linux-x64-gnu@npm:15.3.5":
-"@next/swc-linux-x64-musl@npm:15.3.5":
-"@next/swc-win32-arm64-msvc@npm:15.3.5":
optional: true
-"@next/swc-win32-x64-msvc@npm:15.3.5":
optional: true
-"@next/third-parties@npm:15.3.9":
optional: true
-"@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1":
optional: true
-"@nodelib/fs.scandir@npm:2.1.5":
-"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2":
-"@nodelib/fs.walk@npm:^1.2.3":
-"@npmcli/agent@npm:^2.0.0":
-"@npmcli/fs@npm:^3.1.0":
-"@pkgjs/parseargs@npm:^0.11.0":
-"@pkgr/core@npm:^0.1.0":
-"@polka/url@npm:^1.0.0-next.24":
-"@posthog/core@npm:1.25.0":
-"@posthog/core@npm:1.6.0":
-"@radix-ui/number@npm:1.1.0": +"@img/sharp-libvips-linux-riscv64@npm:1.2.4":
+"@img/sharp-libvips-linux-s390x@npm:1.1.0": version: 1.1.0
-"@radix-ui/primitive@npm:1.1.1":
-"@radix-ui/react-accessible-icon@npm:1.1.1":
optional: true
optional: true
-"@radix-ui/react-accordion@npm:1.2.2":
optional: true
optional: true
-"@radix-ui/react-alert-dialog@npm:1.1.5":
optional: true
optional: true
-"@radix-ui/react-arrow@npm:1.1.1":
+"@img/sharp-libvips-linuxmusl-x64@npm:1.1.0":
+"@img/sharp-libvips-linuxmusl-x64@npm:1.2.4":
+"@img/sharp-linux-arm64@npm:0.34.1":
optional: true
-"@radix-ui/react-aspect-ratio@npm:1.1.1":
optional: true
-"@radix-ui/react-avatar@npm:1.1.2":
optional: true
-"@radix-ui/react-checkbox@npm:1.1.3":
optional: true
-"@radix-ui/react-collapsible@npm:1.1.2":
optional: true
-"@radix-ui/react-collection@npm:1.1.1":
optional: true
-"@radix-ui/react-compose-refs@npm:1.1.1":
-"@radix-ui/react-context-menu@npm:2.2.5":
+"@img/sharp-linux-x64@npm:0.34.1":
-"@radix-ui/react-context@npm:1.1.1":
-"@radix-ui/react-dialog@npm:1.1.4":
+"@img/sharp-linuxmusl-arm64@npm:0.34.5":
-"@radix-ui/react-dialog@npm:1.1.5":
optional: true
-"@radix-ui/react-direction@npm:1.1.0":
-"@radix-ui/react-dismissable-layer@npm:1.1.3":
optional: true
optional: true
-"@radix-ui/react-dismissable-layer@npm:1.1.4":
optional: true
optional: true
-"@radix-ui/react-dropdown-menu@npm:2.1.5":
optional: true
optional: true
-"@radix-ui/react-focus-guards@npm:1.1.1":
optional: true
-"@radix-ui/react-focus-scope@npm:1.1.1":
optional: true
optional: true
-"@radix-ui/react-form@npm:0.1.1":
+"@img/sharp-win32-x64@npm:0.34.5":
+"@internationalized/date@npm:^3.5.6":
optional: true
optional: true
-"@radix-ui/react-hover-card@npm:1.1.5":
optional: true
optional: true
-"@radix-ui/react-id@npm:1.1.0":
optional: true
-"@radix-ui/react-label@npm:2.1.1":
optional: true
optional: true
-"@radix-ui/react-menu@npm:2.1.5":
+"@isaacs/cliui@npm:^9.0.0":
+"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2":
+"@jridgewell/gen-mapping@npm:^0.3.12, @jridgewell/gen-mapping@npm:^0.3.5":
+"@jridgewell/remapping@npm:^2.3.5":
+"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0":
+"@jridgewell/set-array@npm:^1.0.1":
+"@jridgewell/source-map@npm:^0.3.2":
+"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14":
+"@jridgewell/sourcemap-codec@npm:^1.5.0, @jridgewell/sourcemap-codec@npm:^1.5.5":
+"@jridgewell/trace-mapping@npm:0.3.9":
+"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9":
+"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28":
+"@jsdevtools/ono@npm:^7.1.3":
+"@juggle/resize-observer@npm:^3.3.1":
+"@kapaai/react-sdk@npm:^0.9.0":
+"@lukeed/csprng@npm:^1.1.0":
+"@lukeed/uuid@npm:^2.0.0":
+"@mdx-js/loader@npm:^3.1.0":
optional: true
+"@mdx-js/mdx@npm:^3.0.0":
+"@mdx-js/mdx@npm:^3.0.1, @mdx-js/mdx@npm:^3.1.0":
+"@mdx-js/mdx@npm:^3.1.1":
+"@mdx-js/react@npm:^3.0.1":
+"@mdx-js/react@npm:^3.1.0":
+"@mdx-js/react@npm:^3.1.1":
+"@medusajs/icons@npm:2.15.1":
+"@medusajs/ui-preset@npm:2.15.1":
+"@medusajs/ui@npm:4.1.11":
+"@mixmark-io/domino@npm:^2.2.0":
+"@next/bundle-analyzer@npm:15.5.18":
+"@next/env@npm:15.3.9":
+"@next/env@npm:15.5.18":
+"@next/eslint-plugin-next@npm:15.3.6":
+"@next/mdx@npm:15.5.18":
optional: true
optional: true
+"@next/swc-darwin-arm64@npm:15.3.5":
+"@next/swc-darwin-arm64@npm:15.5.18":
+"@next/swc-darwin-x64@npm:15.3.5":
+"@next/swc-darwin-x64@npm:15.5.18":
+"@next/swc-linux-arm64-gnu@npm:15.3.5":
+"@next/swc-linux-arm64-gnu@npm:15.5.18":
+"@next/swc-linux-arm64-musl@npm:15.3.5":
+"@next/swc-linux-arm64-musl@npm:15.5.18":
+"@next/swc-linux-x64-gnu@npm:15.3.5":
+"@next/swc-linux-x64-gnu@npm:15.5.18":
+"@next/swc-linux-x64-musl@npm:15.3.5":
+"@next/swc-linux-x64-musl@npm:15.5.18":
+"@next/swc-win32-arm64-msvc@npm:15.3.5":
+"@next/swc-win32-arm64-msvc@npm:15.5.18":
+"@next/swc-win32-x64-msvc@npm:15.3.5":
+"@next/swc-win32-x64-msvc@npm:15.5.18":
+"@next/third-parties@npm:15.5.18":
+"@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1":
+"@noble/ciphers@npm:^1.3.0":
+"@noble/curves@npm:^1.9.7":
+"@noble/hashes@npm:1.8.0, @noble/hashes@npm:^1.8.0":
+"@nodable/entities@npm:2.1.0, @nodable/entities@npm:^2.1.0":
+"@node-minify/core@npm:^8.0.6":
+"@node-minify/terser@npm:^8.0.6":
+"@node-minify/utils@npm:8.0.6":
+"@nodelib/fs.scandir@npm:2.1.5":
+"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2":
+"@nodelib/fs.walk@npm:^1.2.3":
+"@npmcli/agent@npm:^2.0.0":
+"@npmcli/fs@npm:^3.1.0":
+"@opennextjs/aws@npm:4.0.2":
+"@opennextjs/cloudflare@npm:1.19.9, @opennextjs/cloudflare@npm:^1.19.9":
+"@pkgjs/parseargs@npm:^0.11.0":
+"@pkgr/core@npm:^0.1.0":
+"@polka/url@npm:^1.0.0-next.24":
+"@poppinss/colors@npm:^4.1.5":
+"@poppinss/dumper@npm:^0.6.4":
+"@poppinss/exception@npm:^1.2.2":
+"@posthog/core@npm:1.25.0":
+"@posthog/core@npm:1.6.0":
+"@radix-ui/number@npm:1.1.0":
+"@radix-ui/primitive@npm:1.1.1":
+"@radix-ui/react-accessible-icon@npm:1.1.1":
optional: true
optional: true
+"@radix-ui/react-accordion@npm:1.2.2":
optional: true
optional: true
+"@radix-ui/react-alert-dialog@npm:1.1.5":
optional: true
optional: true
+"@radix-ui/react-arrow@npm:1.1.1":
optional: true
optional: true
+"@radix-ui/react-aspect-ratio@npm:1.1.1":
optional: true
optional: true
+"@radix-ui/react-avatar@npm:1.1.2":
optional: true
optional: true
+"@radix-ui/react-checkbox@npm:1.1.3":
optional: true
optional: true
+"@radix-ui/react-collapsible@npm:1.1.2":
optional: true
optional: true
+"@radix-ui/react-collection@npm:1.1.1":
optional: true
optional: true
+"@radix-ui/react-compose-refs@npm:1.1.1":
optional: true
+"@radix-ui/react-context-menu@npm:2.2.5":
optional: true
optional: true
+"@radix-ui/react-context@npm:1.1.1":
optional: true
+"@radix-ui/react-dialog@npm:1.1.4":
optional: true
optional: true
+"@radix-ui/react-dialog@npm:1.1.5":
optional: true
optional: true
+"@radix-ui/react-direction@npm:1.1.0":
optional: true
+"@radix-ui/react-dismissable-layer@npm:1.1.3":
optional: true
optional: true
+"@radix-ui/react-dismissable-layer@npm:1.1.4":
optional: true
optional: true
+"@radix-ui/react-dropdown-menu@npm:2.1.5":
optional: true
optional: true
+"@radix-ui/react-focus-guards@npm:1.1.1":
optional: true
+"@radix-ui/react-focus-scope@npm:1.1.1":
optional: true
optional: true
+"@radix-ui/react-form@npm:0.1.1":
optional: true
optional: true
+"@radix-ui/react-hover-card@npm:1.1.5":
optional: true
optional: true
+"@radix-ui/react-id@npm:1.1.0":
optional: true
+"@radix-ui/react-label@npm:2.1.1":
optional: true
optional: true
+"@radix-ui/react-menu@npm:2.1.5":
optional: true
optional: true
+"@radix-ui/react-menubar@npm:1.1.5":
optional: true
optional: true
+"@radix-ui/react-navigation-menu@npm:1.2.4":
optional: true
optional: true
+"@radix-ui/react-popover@npm:1.1.5":
optional: true
optional: true
+"@radix-ui/react-popper@npm:1.2.1":
optional: true
optional: true
+"@radix-ui/react-portal@npm:1.1.3":
optional: true
optional: true
+"@radix-ui/react-presence@npm:1.1.2":
optional: true
optional: true
+"@radix-ui/react-primitive@npm:2.0.1":
optional: true
optional: true
+"@radix-ui/react-progress@npm:1.1.1":
optional: true
optional: true
+"@radix-ui/react-radio-group@npm:1.2.2":
optional: true
optional: true
+"@radix-ui/react-roving-focus@npm:1.1.1":
optional: true
optional: true
+"@radix-ui/react-scroll-area@npm:1.2.2":
optional: true
optional: true
+"@radix-ui/react-select@npm:2.1.5":
-"@radix-ui/react-menubar@npm:1.1.5":
optional: true
optional: true
+"@radix-ui/react-slider@npm:1.2.2":
-"@radix-ui/react-navigation-menu@npm:1.2.4":
optional: true
+"@radix-ui/react-switch@npm:1.1.2":
-"@radix-ui/react-popover@npm:1.1.5":
-"@radix-ui/react-popper@npm:1.2.1":
-"@radix-ui/react-portal@npm:1.1.3":
-"@radix-ui/react-presence@npm:1.1.2":
-"@radix-ui/react-primitive@npm:2.0.1":
-"@radix-ui/react-progress@npm:1.1.1":
optional: true
optional: true
+"@radix-ui/react-use-callback-ref@npm:1.1.0":
optional: true
+"@radix-ui/react-use-controllable-state@npm:1.1.0":
optional: true
+"@radix-ui/react-use-escape-keydown@npm:1.1.0":
optional: true
+"@radix-ui/react-use-layout-effect@npm:1.1.0":
optional: true
+"@radix-ui/react-use-previous@npm:1.1.0":
optional: true
+"@radix-ui/react-use-rect@npm:1.1.0":
optional: true
-"@radix-ui/react-radio-group@npm:1.2.2":
optional: true
-"@radix-ui/react-roving-focus@npm:1.1.1": +"@radix-ui/react-visually-hidden@npm:1.1.1": version: 1.1.1
-"@radix-ui/react-scroll-area@npm:1.2.2":
+"@react-aria/breadcrumbs@npm:^3.5.18":
optional: true
optional: true
-"@radix-ui/react-select@npm:2.1.5":
+"@react-aria/calendar@npm:^3.5.13":
+"@react-aria/checkbox@npm:^3.14.8":
+"@react-aria/color@npm:^3.0.1":
+"@react-aria/combobox@npm:^3.10.5":
+"@react-aria/datepicker@npm:^3.11.4":
+"@react-aria/dialog@npm:^3.5.19":
+"@react-aria/dnd@npm:^3.7.4":
optional: true
optional: true
-"@radix-ui/react-separator@npm:1.1.1":
optional: true
optional: true
-"@radix-ui/react-slider@npm:1.2.2":
optional: true
optional: true
-"@radix-ui/react-slot@npm:1.1.1":
optional: true
-"@radix-ui/react-switch@npm:1.1.2":
optional: true
optional: true
-"@radix-ui/react-tabs@npm:1.1.2":
optional: true
optional: true
-"@radix-ui/react-toast@npm:1.2.5":
optional: true
optional: true
-"@radix-ui/react-toggle-group@npm:1.1.1":
optional: true
optional: true
-"@radix-ui/react-toggle@npm:1.1.1":
optional: true
optional: true
-"@radix-ui/react-toolbar@npm:1.1.1":
optional: true
optional: true
-"@radix-ui/react-tooltip@npm:1.1.7":
optional: true
optional: true
-"@radix-ui/react-use-callback-ref@npm:1.1.0":
optional: true
-"@radix-ui/react-use-controllable-state@npm:1.1.0":
optional: true
-"@radix-ui/react-use-escape-keydown@npm:1.1.0":
optional: true
-"@radix-ui/react-use-layout-effect@npm:1.1.0":
optional: true
-"@radix-ui/react-use-previous@npm:1.1.0":
optional: true
-"@radix-ui/react-use-rect@npm:1.1.0":
optional: true
-"@radix-ui/react-use-size@npm:1.1.0":
optional: true
-"@radix-ui/react-visually-hidden@npm:1.1.1":
optional: true
optional: true
-"@radix-ui/rect@npm:1.1.0":
-"@react-aria/breadcrumbs@npm:^3.5.18":
-"@react-aria/button@npm:^3.10.1":
-"@react-aria/calendar@npm:^3.5.13":
-"@react-aria/checkbox@npm:^3.14.8":
+"@react-aria/switch@npm:^3.6.9":
-"@react-aria/color@npm:^3.0.1":
-"@react-aria/combobox@npm:^3.10.5":
-"@react-aria/datepicker@npm:^3.11.4":
-"@react-aria/dialog@npm:^3.5.19":
-"@react-aria/dnd@npm:^3.7.4":
-"@react-aria/focus@npm:^3.18.4":
+"@react-aria/utils@npm:^3.25.3":
-"@react-aria/form@npm:^3.0.10":
-"@react-aria/grid@npm:^3.10.5":
+"@react-hook/passive-layout-effect@npm:^1.2.0":
+"@react-hook/resize-observer@npm:^1.2.6":
-"@react-aria/gridlist@npm:^3.9.5":
-"@react-aria/i18n@npm:^3.12.3":
-"@react-aria/interactions@npm:^3.22.4":
-"@react-aria/label@npm:^3.7.12":
-"@react-aria/link@npm:^3.7.6":
-"@react-aria/listbox@npm:^3.13.5":
-"@react-aria/live-announcer@npm:^3.4.0":
-"@react-aria/menu@npm:^3.15.5":
-"@react-aria/meter@npm:^3.4.17":
-"@react-aria/numberfield@npm:^3.11.8":
-"@react-aria/overlays@npm:^3.23.4":
-"@react-aria/progress@npm:^3.4.17":
-"@react-aria/radio@npm:^3.10.9":
-"@react-aria/searchfield@npm:^3.7.10":
-"@react-aria/select@npm:^3.14.11":
-"@react-aria/selection@npm:^3.20.1":
-"@react-aria/separator@npm:^3.4.3":
-"@react-aria/slider@npm:^3.7.13":
-"@react-aria/spinbutton@npm:^3.6.9":
-"@react-aria/ssr@npm:^3.9.6":
-"@react-aria/switch@npm:^3.6.9":
-"@react-aria/table@npm:^3.15.5":
-"@react-aria/tabs@npm:^3.9.7":
-"@react-aria/tag@npm:^3.4.7":
-"@react-aria/textfield@npm:^3.14.10":
-"@react-aria/toggle@npm:^3.10.9":
-"@react-aria/tooltip@npm:^3.7.9":
+"@react-types/breadcrumbs@npm:^3.7.8":
-"@react-aria/utils@npm:^3.25.3":
-"@react-aria/visually-hidden@npm:^3.8.17":
-"@react-hook/latest@npm:^1.0.2":
-"@react-hook/passive-layout-effect@npm:^1.2.0":
-"@react-hook/resize-observer@npm:^1.2.6":
-"@react-hook/resize-observer@npm:^2.0.2":
-"@react-stately/calendar@npm:^3.5.5":
-"@react-stately/checkbox@npm:^3.6.9":
-"@react-stately/collections@npm:^3.11.0":
-"@react-stately/color@npm:^3.8.0":
-"@react-stately/combobox@npm:^3.10.0":
-"@react-stately/data@npm:^3.11.7":
-"@react-stately/datepicker@npm:^3.10.3":
-"@react-stately/dnd@npm:^3.4.3":
-"@react-stately/flags@npm:^3.0.4":
-"@react-stately/form@npm:^3.0.6":
-"@react-stately/grid@npm:^3.9.3":
-"@react-stately/list@npm:^3.11.0":
-"@react-stately/menu@npm:^3.8.3":
-"@react-stately/numberfield@npm:^3.9.7":
-"@react-stately/overlays@npm:^3.6.11":
-"@react-stately/radio@npm:^3.10.8":
-"@react-stately/searchfield@npm:^3.5.7":
-"@react-stately/select@npm:^3.6.8":
-"@react-stately/selection@npm:^3.17.0":
-"@react-stately/slider@npm:^3.5.8":
-"@react-stately/table@npm:^3.12.3":
-"@react-stately/tabs@npm:^3.6.10":
-"@react-stately/toggle@npm:^3.7.8":
+"@readme/openapi-parser@npm:^2.5.0":
-"@react-stately/tooltip@npm:^3.4.13":
+"@readme/openapi-schemas@npm:^3.1.0":
+"@rolldown/pluginutils@npm:1.0.0-beta.27":
+"@rollup/rollup-android-arm-eabi@npm:4.54.0":
+"@rollup/rollup-android-arm64@npm:4.54.0":
+"@rollup/rollup-darwin-arm64@npm:4.54.0":
+"@rollup/rollup-darwin-x64@npm:4.54.0":
+"@rollup/rollup-freebsd-arm64@npm:4.54.0":
+"@rollup/rollup-freebsd-x64@npm:4.54.0":
+"@rollup/rollup-linux-arm-gnueabihf@npm:4.54.0":
+"@rollup/rollup-linux-arm-musleabihf@npm:4.54.0":
+"@rollup/rollup-linux-arm64-gnu@npm:4.54.0":
+"@rollup/rollup-linux-arm64-musl@npm:4.54.0":
+"@rollup/rollup-linux-loong64-gnu@npm:4.54.0":
-"@react-stately/tree@npm:^3.8.5":
-"@react-stately/utils@npm:^3.10.4":
-"@react-types/breadcrumbs@npm:^3.7.8":
-"@react-types/button@npm:^3.10.0":
-"@react-types/calendar@npm:^3.4.10":
-"@react-types/checkbox@npm:^3.8.4":
-"@react-types/color@npm:^3.0.0":
-"@react-types/combobox@npm:^3.13.0":
-"@react-types/datepicker@npm:^3.8.3":
-"@react-types/dialog@npm:^3.5.13":
-"@react-types/grid@npm:^3.2.9":
-"@react-types/link@npm:^3.5.8":
-"@react-types/listbox@npm:^3.5.2":
-"@react-types/menu@npm:^3.9.12":
-"@react-types/meter@npm:^3.4.4":
-"@react-types/numberfield@npm:^3.8.6":
-"@react-types/overlays@npm:^3.8.10":
-"@react-types/progress@npm:^3.5.7":
-"@react-types/radio@npm:^3.8.4":
-"@react-types/searchfield@npm:^3.5.9":
-"@react-types/select@npm:^3.9.7":
-"@react-types/shared@npm:^3.25.0":
-"@react-types/slider@npm:^3.7.6":
-"@react-types/switch@npm:^3.5.6":
-"@react-types/table@npm:^3.10.2":
-"@react-types/tabs@npm:^3.3.10":
-"@react-types/textfield@npm:^3.9.7":
-"@react-types/tooltip@npm:^3.4.12":
-"@readme/better-ajv-errors@npm:^1.6.0":
-"@readme/better-ajv-errors@npm:^2.3.2":
-"@readme/json-schema-ref-parser@npm:^1.2.0":
-"@readme/openapi-parser@npm:^2.5.0":
-"@readme/openapi-parser@npm:^3.0.1":
-"@readme/openapi-schemas@npm:^3.1.0":
-"@rolldown/pluginutils@npm:1.0.0-beta.27":
-"@rollup/rollup-android-arm-eabi@npm:4.54.0":
-"@rollup/rollup-android-arm64@npm:4.54.0":
-"@rollup/rollup-darwin-arm64@npm:4.54.0":
-"@rollup/rollup-darwin-x64@npm:4.54.0":
-"@rollup/rollup-freebsd-arm64@npm:4.54.0":
-"@rollup/rollup-freebsd-x64@npm:4.54.0":
-"@rollup/rollup-linux-arm-gnueabihf@npm:4.54.0":
-"@rollup/rollup-linux-arm-musleabihf@npm:4.54.0":
-"@rollup/rollup-linux-arm64-gnu@npm:4.54.0":
-"@rollup/rollup-linux-arm64-musl@npm:4.54.0":
-"@rollup/rollup-linux-loong64-gnu@npm:4.54.0":
-"@rollup/rollup-linux-ppc64-gnu@npm:4.54.0":
-"@rollup/rollup-linux-riscv64-gnu@npm:4.54.0":
-"@rollup/rollup-linux-riscv64-musl@npm:4.54.0":
-"@rollup/rollup-linux-s390x-gnu@npm:4.54.0":
-"@rollup/rollup-linux-x64-gnu@npm:4.54.0":
-"@rollup/rollup-linux-x64-musl@npm:4.54.0":
-"@rollup/rollup-openharmony-arm64@npm:4.54.0":
-"@rollup/rollup-win32-arm64-msvc@npm:4.54.0":
-"@rollup/rollup-win32-ia32-msvc@npm:4.54.0":
-"@rollup/rollup-win32-x64-gnu@npm:4.54.0":
-"@rollup/rollup-win32-x64-msvc@npm:4.54.0":
-"@rtsao/scc@npm:^1.1.0":
-"@rushstack/eslint-patch@npm:^1.10.3":
-"@sanity/client@npm:^7.11.0":
-"@sanity/eventsource@npm:^5.0.2":
-"@segment/analytics-core@npm:1.8.0":
-"@segment/analytics-generic-utils@npm:1.2.0":
-"@segment/analytics-next@npm:^1.75.0":
-"@segment/analytics.js-video-plugins@npm:^0.2.1":
-"@segment/facade@npm:^3.4.9":
-"@segment/isodate-traverse@npm:^1.1.1":
-"@segment/isodate@npm:1.0.3, @segment/isodate@npm:^1.0.3":
@@ -5473,6 +7550,13 @@ __metadata: languageName: node linkType: hard
+"@tsconfig/node18@npm:^1.0.3":
"@types/acorn@npm:^4.0.0": version: 4.0.6 resolution: "@types/acorn@npm:4.0.6" @@ -5763,6 +7847,16 @@ __metadata: languageName: node linkType: hard
+"@types/node-fetch@npm:^2.6.4":
"@types/node@npm:*, @types/node@npm:^20": version: 20.11.20 resolution: "@types/node@npm:20.11.20" @@ -5779,6 +7873,15 @@ __metadata: languageName: node linkType: hard
+"@types/node@npm:^18.11.18":
"@types/node@npm:^20.11.20": version: 20.11.27 resolution: "@types/node@npm:20.11.27" @@ -6099,6 +8202,25 @@ __metadata: languageName: node linkType: hard
+"abort-controller@npm:^3.0.0":
+"accepts@npm:^2.0.0":
"acorn-jsx@npm:^5.0.0, acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -6133,6 +8255,15 @@ __metadata: languageName: node linkType: hard
+"acorn@npm:^8.5.0":
"afdocs@npm:latest": version: 0.9.2 resolution: "afdocs@npm:0.9.2" @@ -6164,6 +8295,15 @@ __metadata: languageName: node linkType: hard
+"agentkeepalive@npm:^4.2.1":
"aggregate-error@npm:^3.0.0": version: 3.1.0 resolution: "aggregate-error@npm:3.1.0" @@ -6270,6 +8410,13 @@ __metadata: languageName: node linkType: hard
+"ansi-colors@npm:^4.1.1":
"ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -6284,6 +8431,13 @@ __metadata: languageName: node linkType: hard
+"ansi-regex@npm:^6.2.2":
"ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" @@ -6316,6 +8470,13 @@ __metadata: languageName: node linkType: hard
+"ansi-styles@npm:^6.2.1":
"any-promise@npm:^1.0.0": version: 1.3.0 resolution: "any-promise@npm:1.3.0" @@ -6337,12 +8498,14 @@ __metadata: version: 0.0.0-use.local resolution: "api-reference@workspace:apps/api-reference" dependencies:
+"array-timsort@npm:^1.0.3":
"array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" @@ -6690,6 +8862,13 @@ __metadata: languageName: node linkType: hard
+"aws4fetch@npm:^1.0.20":
"axe-core@npm:^4.10.0": version: 4.10.2 resolution: "axe-core@npm:4.10.2" @@ -6718,6 +8897,13 @@ __metadata: languageName: node linkType: hard
+"balanced-match@npm:^4.0.2":
"baseline-browser-mapping@npm:^2.9.0": version: 2.9.11 resolution: "baseline-browser-mapping@npm:2.9.11" @@ -6743,6 +8929,13 @@ __metadata: languageName: node linkType: hard
+"blake3-wasm@npm:2.1.5":
"bloom@workspace:apps/bloom": version: 0.0.0-use.local resolution: "bloom@workspace:apps/bloom" @@ -6750,7 +8943,8 @@ __metadata: "@mdx-js/loader": ^3.1.0 "@mdx-js/react": ^3.1.0 "@medusajs/icons": 2.15.1
+"body-parser@npm:^2.2.1":
"book@workspace:apps/book": version: 0.0.0-use.local resolution: "book@workspace:apps/book" @@ -6790,7 +9002,8 @@ __metadata: "@mdx-js/loader": ^3.1.0 "@mdx-js/react": ^3.1.0 "@medusajs/icons": 2.15.1
@@ -6832,6 +9046,13 @@ __metadata: languageName: node linkType: hard
+"bowser@npm:^2.11.0":
"brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -6851,6 +9072,15 @@ __metadata: languageName: node linkType: hard
+"brace-expansion@npm:^5.0.5":
"braces@npm:^3.0.2, braces@npm:~3.0.2": version: 3.0.2 resolution: "braces@npm:3.0.2" @@ -6889,6 +9119,13 @@ __metadata: languageName: node linkType: hard
+"buffer-from@npm:^1.0.0":
"build-scripts@*, build-scripts@workspace:packages/build-scripts": version: 0.0.0-use.local resolution: "build-scripts@workspace:packages/build-scripts" @@ -6911,17 +9148,6 @@ __metadata: languageName: unknown linkType: soft
-"bundle-require@npm:^3.0.2":
"busboy@npm:1.6.0": version: 1.6.0 resolution: "busboy@npm:1.6.0" @@ -6931,7 +9157,14 @@ __metadata: languageName: node linkType: hard
-"cac@npm:^6.7.12, cac@npm:^6.7.14": +"bytes@npm:^3.1.2, bytes@npm:~3.1.2":
+"cac@npm:^6.7.14": version: 6.7.14 resolution: "cac@npm:6.7.14" checksum: 4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 @@ -7079,7 +9312,7 @@ __metadata: languageName: node linkType: hard
-"chalk@npm:^5.4.1": +"chalk@npm:^5.4.1, chalk@npm:^5.6.2": version: 5.6.2 resolution: "chalk@npm:5.6.2" checksum: 99a4b0f0e7991796b1e7e3f52dceb9137cae2a9dfc8fc0784a550dc4c558e15ab32ed70b14b21b52beb2679b4892b41a0aa44249bcb996f01e125d58477c6976 @@ -7142,7 +9375,7 @@ __metadata: languageName: node linkType: hard
-"chokidar@npm:^3.5.1, chokidar@npm:^3.5.3": +"chokidar@npm:^3.5.3": version: 3.6.0 resolution: "chokidar@npm:3.6.0" dependencies: @@ -7168,6 +9401,13 @@ __metadata: languageName: node linkType: hard
+"ci-info@npm:^4.2.0":
"classnames@npm:^2.3.0": version: 2.5.1 resolution: "classnames@npm:2.5.1" @@ -7198,6 +9438,17 @@ __metadata: languageName: node linkType: hard
+"cliui@npm:^9.0.1":
"cloud@workspace:apps/cloud": version: 0.0.0-use.local resolution: "cloud@workspace:apps/cloud" @@ -7205,7 +9456,8 @@ __metadata: "@mdx-js/loader": ^3.1.0 "@mdx-js/react": ^3.1.0 "@medusajs/icons": 2.15.1
+"cloudflare@npm:^4.4.1":
"clsx@npm:2.0.0": version: 2.0.0 resolution: "clsx@npm:2.0.0" @@ -7349,6 +9617,13 @@ __metadata: languageName: node linkType: hard
+"commander@npm:^11.1.0":
"commander@npm:^13.1.0": version: 13.1.0 resolution: "commander@npm:13.1.0" @@ -7356,6 +9631,13 @@ __metadata: languageName: node linkType: hard
+"commander@npm:^2.20.0":
"commander@npm:^4.0.0": version: 4.1.1 resolution: "commander@npm:4.1.1" @@ -7377,6 +9659,16 @@ __metadata: languageName: node linkType: hard
+"comment-json@npm:^4.5.1":
"concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -7384,6 +9676,20 @@ __metadata: languageName: node linkType: hard
+"content-disposition@npm:^1.0.0":
+"content-type@npm:^1.0.5":
"convert-source-map@npm:^2.0.0": version: 2.0.0 resolution: "convert-source-map@npm:2.0.0" @@ -7391,6 +9697,27 @@ __metadata: languageName: node linkType: hard
+"cookie-signature@npm:^1.2.1":
+"cookie@npm:^0.7.1":
+"cookie@npm:^1.0.2":
"copy-to-clipboard@npm:^3.3.3": version: 3.3.3 resolution: "copy-to-clipboard@npm:3.3.3" @@ -8091,7 +10418,7 @@ __metadata: languageName: node linkType: hard
-"debug@npm:^4.1.1, debug@npm:^4.3.7": +"debug@npm:^4.1.1, debug@npm:^4.3.7, debug@npm:^4.4.0, debug@npm:^4.4.3": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -8180,6 +10507,13 @@ __metadata: languageName: node linkType: hard
+"depd@npm:^2.0.0, depd@npm:~2.0.0":
"dequal@npm:^2.0.0, dequal@npm:^2.0.3": version: 2.0.3 resolution: "dequal@npm:2.0.3" @@ -8194,6 +10528,13 @@ __metadata: languageName: node linkType: hard
+"detect-libc@npm:^2.1.2":
"detect-node-es@npm:^1.1.0": version: 1.1.0 resolution: "detect-node-es@npm:1.1.0" @@ -8286,7 +10627,7 @@ __metadata: "@kapaai/react-sdk": ^0.9.0 "@medusajs/icons": 2.15.1 "@medusajs/ui": 4.1.11
+"dotenv@npm:^16.4.5":
"dset@npm:^3.1.4": version: 3.1.4 resolution: "dset@npm:3.1.4" @@ -8483,6 +10830,25 @@ __metadata: languageName: node linkType: hard
+"eciesjs@npm:^0.4.10":
+"ee-first@npm:1.1.1":
"electron-to-chromium@npm:^1.4.668": version: 1.4.681 resolution: "electron-to-chromium@npm:1.4.681" @@ -8504,6 +10870,13 @@ __metadata: languageName: node linkType: hard
+"emoji-regex@npm:^10.3.0":
"emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -8518,6 +10891,13 @@ __metadata: languageName: node linkType: hard
+"encodeurl@npm:^2.0.0":
"encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -8537,6 +10917,16 @@ __metadata: languageName: node linkType: hard
+"enquirer@npm:^2.4.1":
"entities@npm:^4.2.0, entities@npm:^4.4.0": version: 4.5.0 resolution: "entities@npm:4.5.0" @@ -8565,6 +10955,13 @@ __metadata: languageName: node linkType: hard
+"error-stack-parser-es@npm:^1.0.5":
"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3": version: 1.23.3 resolution: "es-abstract@npm:1.23.3" @@ -8899,247 +11296,36 @@ __metadata: languageName: node linkType: hard
-"esbuild-android-64@npm:0.14.54":
-"esbuild-android-arm64@npm:0.14.54":
-"esbuild-darwin-64@npm:0.14.54":
-"esbuild-darwin-arm64@npm:0.14.54":
-"esbuild-freebsd-64@npm:0.14.54":
-"esbuild-freebsd-arm64@npm:0.14.54":
-"esbuild-linux-32@npm:0.14.54":
-"esbuild-linux-64@npm:0.14.54":
-"esbuild-linux-arm64@npm:0.14.54":
-"esbuild-linux-arm@npm:0.14.54":
-"esbuild-linux-mips64le@npm:0.14.54":
-"esbuild-linux-ppc64le@npm:0.14.54":
-"esbuild-linux-riscv64@npm:0.14.54":
-"esbuild-linux-s390x@npm:0.14.54":
-"esbuild-netbsd-64@npm:0.14.54":
-"esbuild-openbsd-64@npm:0.14.54":
-"esbuild-sunos-64@npm:0.14.54":
-"esbuild-windows-32@npm:0.14.54":
-"esbuild-windows-64@npm:0.14.54":
-"esbuild-windows-arm64@npm:0.14.54":
-"esbuild@npm:^0.14.25":
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
-"esbuild@npm:^0.21.3":
optional: true
optional: true
optional: true
@@ -9207,6 +11399,13 @@ __metadata: languageName: node linkType: hard
+"escape-html@npm:^1.0.3":
"escape-string-regexp@npm:5.0.0, escape-string-regexp@npm:^5.0.0": version: 5.0.0 resolution: "escape-string-regexp@npm:5.0.0" @@ -9591,6 +11790,16 @@ __metadata: languageName: node linkType: hard
+"esprima@npm:^4.0.1":
"esquery@npm:^1.5.0": version: 1.6.0 resolution: "esquery@npm:1.6.0" @@ -9716,6 +11925,13 @@ __metadata: languageName: node linkType: hard
+"etag@npm:^1.8.1":
"event-source-polyfill@npm:1.0.31": version: 1.0.31 resolution: "event-source-polyfill@npm:1.0.31" @@ -9723,6 +11939,13 @@ __metadata: languageName: node linkType: hard
+"event-target-shim@npm:^5.0.0":
"eventsource@npm:2.0.2": version: 2.0.2 resolution: "eventsource@npm:2.0.2" @@ -9730,7 +11953,7 @@ __metadata: languageName: node linkType: hard
-"execa@npm:^5.0.0": +"execa@npm:^5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: @@ -9761,6 +11984,42 @@ __metadata: languageName: node linkType: hard
+"express@npm:^5.1.0":
"extend@npm:^3.0.0": version: 3.0.2 resolution: "extend@npm:3.0.2" @@ -9822,6 +12081,30 @@ __metadata: languageName: node linkType: hard
+"fast-xml-builder@npm:^1.1.5":
+"fast-xml-parser@npm:5.7.2":
"fastq@npm:^1.6.0": version: 1.17.1 resolution: "fastq@npm:1.17.1" @@ -9840,6 +12123,18 @@ __metadata: languageName: node linkType: hard
+"fdir@npm:^6.2.0":
optional: true
"fdir@npm:^6.4.3": version: 6.4.3 resolution: "fdir@npm:6.4.3" @@ -9877,6 +12172,20 @@ __metadata: languageName: node linkType: hard
+"finalhandler@npm:^2.1.0":
"find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" @@ -9949,7 +12258,24 @@ __metadata: languageName: node linkType: hard
-"form-data@npm:^4.0.0": +"foreground-child@npm:^3.3.1":
+"form-data-encoder@npm:1.7.2":
+"form-data@npm:^4.0.0, form-data@npm:^4.0.4": version: 4.0.5 resolution: "form-data@npm:4.0.5" dependencies: @@ -9962,10 +12288,27 @@ __metadata: languageName: node linkType: hard
-"format@npm:^0.2.0":
+"formdata-node@npm:^4.3.2":
+"forwarded@npm:0.2.0":
@@ -10018,6 +12361,13 @@ __metadata: languageName: node linkType: hard
+"fresh@npm:^2.0.0":
"fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -10036,6 +12386,13 @@ __metadata: languageName: node linkType: hard
+"fs.realpath@npm:^1.0.0":
"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" @@ -10102,6 +12459,20 @@ __metadata: languageName: node linkType: hard
+"get-caller-file@npm:^2.0.5":
+"get-east-asian-width@npm:^1.0.0":
"get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": version: 1.2.4 resolution: "get-intrinsic@npm:1.2.4" @@ -10227,6 +12598,18 @@ __metadata: languageName: node linkType: hard
+"glob@npm:9.3.5":
"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": version: 10.3.10 resolution: "glob@npm:10.3.10" @@ -10242,6 +12625,22 @@ __metadata: languageName: node linkType: hard
+"glob@npm:^12.0.0":
"globals@npm:^11.1.0": version: 11.12.0 resolution: "globals@npm:11.12.0" @@ -10275,7 +12674,7 @@ __metadata: languageName: node linkType: hard
-"globby@npm:^11.0.3, globby@npm:^11.0.4": +"globby@npm:^11.0.4": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -10346,7 +12745,7 @@ __metadata: languageName: node linkType: hard
-"gzip-size@npm:^6.0.0": +"gzip-size@npm:6.0.0, gzip-size@npm:^6.0.0": version: 6.0.0 resolution: "gzip-size@npm:6.0.0" dependencies: @@ -10606,6 +13005,19 @@ __metadata: languageName: node linkType: hard
+"http-errors@npm:^2.0.0, http-errors@npm:^2.0.1, http-errors@npm:~2.0.1":
"http-proxy-agent@npm:^7.0.0, http-proxy-agent@npm:^7.0.2": version: 7.0.2 resolution: "http-proxy-agent@npm:7.0.2" @@ -10643,6 +13055,15 @@ __metadata: languageName: node linkType: hard
+"humanize-ms@npm:^1.2.1":
"iconv-lite@npm:0.6, iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" @@ -10652,6 +13073,15 @@ __metadata: languageName: node linkType: hard
+"iconv-lite@npm:^0.7.0, iconv-lite@npm:~0.7.0":
"ignore@npm:^5.2.0, ignore@npm:^5.2.4": version: 5.3.1 resolution: "ignore@npm:5.3.1" @@ -10659,7 +13089,7 @@ __metadata: languageName: node linkType: hard
-"ignore@npm:^5.3.1": +"ignore@npm:^5.3.0, ignore@npm:^5.3.1": version: 5.3.2 resolution: "ignore@npm:5.3.2" checksum: f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 @@ -10697,7 +13127,7 @@ __metadata: languageName: node linkType: hard
-"inherits@npm:^2.0.3, inherits@npm:^2.0.4": +"inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 @@ -10814,6 +13244,13 @@ __metadata: languageName: node linkType: hard
+"ipaddr.js@npm:1.9.1":
"is-alphabetical@npm:^1.0.0": version: 1.0.4 resolution: "is-alphabetical@npm:1.0.4" @@ -11156,6 +13593,13 @@ __metadata: languageName: node linkType: hard
+"is-promise@npm:^4.0.0":
"is-reference@npm:^3.0.0": version: 3.0.2 resolution: "is-reference@npm:3.0.2" @@ -11403,6 +13847,15 @@ __metadata: languageName: node linkType: hard
+"jackspeak@npm:^4.1.1":
"jiti@npm:^1.18.2, jiti@npm:^1.19.1": version: 1.21.0 resolution: "jiti@npm:1.21.0" @@ -11412,13 +13865,6 @@ __metadata: languageName: node linkType: hard
-"joycon@npm:^3.0.1":
"js-cookie@npm:3.0.1": version: 3.0.1 resolution: "js-cookie@npm:3.0.1" @@ -11677,7 +14123,7 @@ __metadata: languageName: node linkType: hard
-"kleur@npm:^4.0.3": +"kleur@npm:^4.0.3, kleur@npm:^4.1.5": version: 4.1.5 resolution: "kleur@npm:4.1.5" checksum: e9de6cb49657b6fa70ba2d1448fd3d691a5c4370d8f7bbf1c2f64c24d461270f2117e1b0afe8cb3114f13bbd8e51de158c2a224953960331904e636a5e4c0f2a @@ -11724,7 +14170,7 @@ __metadata: languageName: node linkType: hard
-"lilconfig@npm:^2.0.5, lilconfig@npm:^2.1.0": +"lilconfig@npm:^2.1.0": version: 2.1.0 resolution: "lilconfig@npm:2.1.0" checksum: 64645641aa8d274c99338e130554abd6a0190533c0d9eb2ce7ebfaf2e05c7d9961f3ffe2bfa39efd3b60c521ba3dd24fa236fe2775fc38501bf82bf49d4678b8 @@ -11745,13 +14191,6 @@ __metadata: languageName: node linkType: hard
-"load-tsconfig@npm:^0.2.0":
"locate-path@npm:^6.0.0": version: 6.0.0 resolution: "locate-path@npm:6.0.0" @@ -11782,13 +14221,6 @@ __metadata: languageName: node linkType: hard
-"lodash.sortby@npm:^4.7.0":
"lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" @@ -11835,13 +14267,20 @@ __metadata: languageName: node linkType: hard
-"lru-cache@npm:^10.4.3": +"lru-cache@npm:^10.2.0, lru-cache@npm:^10.4.3": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" checksum: ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb languageName: node linkType: hard
+"lru-cache@npm:^11.0.0":
"lru-cache@npm:^11.2.1, lru-cache@npm:^11.2.2": version: 11.2.2 resolution: "lru-cache@npm:11.2.2" @@ -12145,6 +14584,13 @@ __metadata: languageName: node linkType: hard
+"media-typer@npm:^1.1.0":
"meow@npm:^12.0.1": version: 12.1.1 resolution: "meow@npm:12.1.1" @@ -12152,6 +14598,13 @@ __metadata: languageName: node linkType: hard
+"merge-descriptors@npm:^2.0.0":
"merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -12828,6 +15281,13 @@ __metadata: languageName: node linkType: hard
+"mime-db@npm:^1.54.0":
"mime-types@npm:^2.1.12": version: 2.1.35 resolution: "mime-types@npm:2.1.35" @@ -12837,6 +15297,15 @@ __metadata: languageName: node linkType: hard
+"mime-types@npm:^3, mime-types@npm:^3.0.0, mime-types@npm:^3.0.2":
"mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -12867,6 +15336,31 @@ __metadata: languageName: node linkType: hard
+"miniflare@npm:4.20260507.1":
+"minimatch@npm:^10.1.1":
"minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -12876,6 +15370,15 @@ __metadata: languageName: node linkType: hard
+"minimatch@npm:^8.0.2":
"minimatch@npm:^9.0.1": version: 9.0.3 resolution: "minimatch@npm:9.0.3" @@ -12961,6 +15464,13 @@ __metadata: languageName: node linkType: hard
+"minipass@npm:^4.2.4":
"minipass@npm:^5.0.0": version: 5.0.0 resolution: "minipass@npm:5.0.0" @@ -12975,6 +15485,13 @@ __metadata: languageName: node linkType: hard
+"minipass@npm:^7.1.2":
"minisearch@npm:^7.1.1": version: 7.1.1 resolution: "minisearch@npm:7.1.1" @@ -12999,7 +15516,7 @@ __metadata: languageName: node linkType: hard
-"mkdirp@npm:^1.0.3": +"mkdirp@npm:1.0.4, mkdirp@npm:^1.0.3": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" bin: @@ -13008,6 +15525,15 @@ __metadata: languageName: node linkType: hard
+"mnemonist@npm:0.38.3":
"motion-dom@npm:^12.29.2": version: 12.29.2 resolution: "motion-dom@npm:12.29.2" @@ -13066,7 +15592,7 @@ __metadata: languageName: node linkType: hard
-"ms@npm:^2.1.1, ms@npm:^2.1.3": +"ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 @@ -13123,6 +15649,13 @@ __metadata: languageName: node linkType: hard
+"negotiator@npm:^1.0.0":
"nested-error-stacks@npm:^2.1.1": version: 2.1.1 resolution: "nested-error-stacks@npm:2.1.1" @@ -13234,6 +15767,72 @@ __metadata: languageName: node linkType: hard
+"next@npm:15.5.18":
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
+"node-domexception@npm:1.0.0":
"node-fetch@npm:^2.6.7": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" @@ -13409,6 +16008,13 @@ __metadata: languageName: node linkType: hard
+"object-treeify@npm:1.1.33":
"object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": version: 4.1.5 resolution: "object.assign@npm:4.1.5" @@ -13515,6 +16121,31 @@ __metadata: languageName: node linkType: hard
+"obliterator@npm:^1.6.1":
+"on-finished@npm:^2.4.1":
+"once@npm:^1.4.0":
"onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" @@ -13643,6 +16274,13 @@ __metadata: languageName: node linkType: hard
+"package-json-from-dist@npm:^1.0.0":
"parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -13709,6 +16347,13 @@ __metadata: languageName: node linkType: hard
+"parseurl@npm:^1.3.3":
"path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -13716,6 +16361,13 @@ __metadata: languageName: node linkType: hard
+"path-expression-matcher@npm:^1.5.0":
"path-key@npm:^3.0.0, path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" @@ -13740,6 +16392,40 @@ __metadata: languageName: node linkType: hard
+"path-scurry@npm:^1.6.1":
+"path-scurry@npm:^2.0.0":
+"path-to-regexp@npm:6.3.0, path-to-regexp@npm:^6.3.0":
+"path-to-regexp@npm:^8.0.0":
"path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -13754,6 +16440,13 @@ __metadata: languageName: node linkType: hard
+"pathe@npm:^2.0.3":
"pathval@npm:^2.0.0": version: 2.0.1 resolution: "pathval@npm:2.0.1" @@ -13793,6 +16486,13 @@ __metadata: languageName: node linkType: hard
+"picomatch@npm:^4.0.2":
"pify@npm:^2.3.0": version: 2.3.0 resolution: "pify@npm:2.3.0" @@ -13854,24 +16554,6 @@ __metadata: languageName: node linkType: hard
-"postcss-load-config@npm:^3.0.1":
optional: true
optional: true
"postcss-load-config@npm:^4.0.1": version: 4.0.2 resolution: "postcss-load-config@npm:4.0.2" @@ -14105,6 +16787,16 @@ __metadata: languageName: node linkType: hard
+"proxy-addr@npm:^2.0.7":
"punycode@npm:^2.1.0, punycode@npm:^2.3.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" @@ -14112,6 +16804,15 @@ __metadata: languageName: node linkType: hard
+"qs@npm:^6.14.0, qs@npm:^6.14.1":
"qs@npm:^6.5.1 < 6.10": version: 6.9.7 resolution: "qs@npm:6.9.7" @@ -14201,6 +16902,25 @@ __metadata: languageName: node linkType: hard
+"range-parser@npm:^1.2.1":
+"raw-body@npm:^3.0.1":
"react-aria@npm:^3.33.1": version: 3.35.1 resolution: "react-aria@npm:3.35.1" @@ -14867,13 +17587,6 @@ __metadata: languageName: node linkType: hard
-"resolve-from@npm:^5.0.0":
"resolve-pkg-maps@npm:^1.0.0": version: 1.0.0 resolution: "resolve-pkg-maps@npm:1.0.0" @@ -14937,11 +17650,13 @@ __metadata: version: 0.0.0-use.local resolution: "resources@workspace:apps/resources" dependencies:
@@ -15009,20 +17726,6 @@ __metadata: languageName: node linkType: hard
-"rollup@npm:^2.74.1":
optional: true
"rollup@npm:^4.20.0": version: 4.54.0 resolution: "rollup@npm:4.54.0" @@ -15104,6 +17807,19 @@ __metadata: languageName: node linkType: hard
+"router@npm:^2.2.0":
"rrweb-cssom@npm:^0.7.1": version: 0.7.1 resolution: "rrweb-cssom@npm:0.7.1" @@ -15303,6 +18019,34 @@ __metadata: languageName: node linkType: hard
+"semver@npm:^7.7.3":
+"send@npm:^1.1.0, send@npm:^1.2.0":
"serialize-error@npm:^12.0.0": version: 12.0.0 resolution: "serialize-error@npm:12.0.0" @@ -15312,6 +18056,18 @@ __metadata: languageName: node linkType: hard
+"serve-static@npm:^2.2.0":
"set-function-length@npm:^1.2.1": version: 1.2.1 resolution: "set-function-length@npm:1.2.1" @@ -15363,6 +18119,13 @@ __metadata: languageName: node linkType: hard
+"setprototypeof@npm:~1.2.0":
"sharp@npm:^0.34.1": version: 0.34.1 resolution: "sharp@npm:0.34.1" @@ -15435,6 +18198,90 @@ __metadata: languageName: node linkType: hard
+"sharp@npm:^0.34.3, sharp@npm:^0.34.5":
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
optional: true
"shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -15637,12 +18484,20 @@ __metadata: languageName: node linkType: hard
-"source-map@npm:0.8.0-beta.0":
+"source-map@npm:^0.6.0":
@@ -15683,6 +18538,13 @@ __metadata: languageName: node linkType: hard
+"statuses@npm:^2.0.1, statuses@npm:^2.0.2, statuses@npm:~2.0.2":
"std-env@npm:^3.8.0": version: 3.10.0 resolution: "std-env@npm:3.10.0" @@ -15719,6 +18581,17 @@ __metadata: languageName: node linkType: hard
+"string-width@npm:^7.0.0, string-width@npm:^7.2.0":
"string.prototype.includes@npm:^2.0.1": version: 2.0.1 resolution: "string.prototype.includes@npm:2.0.1" @@ -15912,6 +18785,15 @@ __metadata: languageName: node linkType: hard
+"strip-ansi@npm:^7.1.0":
"strip-bom@npm:^3.0.0": version: 3.0.0 resolution: "strip-bom@npm:3.0.0" @@ -15951,6 +18833,13 @@ __metadata: languageName: node linkType: hard
+"strnum@npm:^2.2.3":
"style-to-js@npm:^1.0.0": version: 1.1.16 resolution: "style-to-js@npm:1.1.16" @@ -16010,7 +18899,7 @@ __metadata: languageName: node linkType: hard
-"sucrase@npm:^3.20.3, sucrase@npm:^3.32.0": +"sucrase@npm:^3.32.0": version: 3.35.0 resolution: "sucrase@npm:3.35.0" dependencies: @@ -16028,6 +18917,13 @@ __metadata: languageName: node linkType: hard
+"supports-color@npm:^10.0.0":
"supports-color@npm:^5.3.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -16224,6 +19120,20 @@ __metadata: languageName: node linkType: hard
+"terser@npm:5.16.9":
"text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -16386,6 +19296,13 @@ __metadata: languageName: node linkType: hard
+"toidentifier@npm:~1.0.1":
"totalist@npm:^3.0.0": version: 3.0.1 resolution: "totalist@npm:3.0.1" @@ -16411,15 +19328,6 @@ __metadata: languageName: node linkType: hard
-"tr46@npm:^1.0.1":
"tr46@npm:^5.1.0": version: 5.1.1 resolution: "tr46@npm:5.1.1" @@ -16445,15 +19353,6 @@ __metadata: languageName: node linkType: hard
-"tree-kill@npm:^1.2.2":
"trim-lines@npm:^3.0.0": version: 3.0.1 resolution: "trim-lines@npm:3.0.1" @@ -16529,6 +19428,13 @@ __metadata: languageName: node linkType: hard
+"ts-tqdm@npm:^0.8.6":
"tsc-alias@npm:^1.8.7": version: 1.8.8 resolution: "tsc-alias@npm:1.8.8" @@ -16598,42 +19504,6 @@ __metadata: languageName: node linkType: hard
-"tsup@npm:^5.10.1":
optional: true
optional: true
optional: true
"tunnel-agent@npm:^0.6.0": version: 0.6.0 resolution: "tunnel-agent@npm:0.6.0" @@ -16739,6 +19609,17 @@ turbo@latest: languageName: node linkType: hard
+"type-is@npm:^2.0.1":
"typed-array-buffer@npm:^1.0.1, typed-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "typed-array-buffer@npm:1.0.2" @@ -16949,12 +19830,14 @@ turbo@latest: version: 0.0.0-use.local resolution: "ui@workspace:apps/ui" dependencies:
@@ -17018,6 +19903,22 @@ turbo@latest: languageName: node linkType: hard
+"undici@npm:7.24.8":
+"unenv@npm:2.0.0-rc.24":
"unfetch@npm:^3.1.1": version: 3.1.2 resolution: "unfetch@npm:3.1.2" @@ -17226,6 +20127,13 @@ turbo@latest: languageName: node linkType: hard
+"unpipe@npm:~1.0.0":
"update-browserslist-db@npm:^1.0.13": version: 1.0.13 resolution: "update-browserslist-db@npm:1.0.13" @@ -17263,6 +20171,13 @@ turbo@latest: languageName: node linkType: hard
+"urlpattern-polyfill@npm:^10.1.0":
"use-callback-ref@npm:^1.3.3": version: 1.3.3 resolution: "use-callback-ref@npm:1.3.3" @@ -17319,7 +20234,8 @@ turbo@latest: "@mdx-js/loader": ^3.1.0 "@mdx-js/react": ^3.1.0 "@medusajs/icons": 2.15.1
@@ -17388,6 +20305,13 @@ turbo@latest: languageName: node linkType: hard
+"vary@npm:^1.1.2":
"vfile-matter@npm:^5.0.0": version: 5.0.0 resolution: "vfile-matter@npm:5.0.0" @@ -17594,6 +20518,13 @@ turbo@latest: languageName: node linkType: hard
+"web-streams-polyfill@npm:4.0.0-beta.3":
"web-vitals@npm:^4.2.4": version: 4.2.4 resolution: "web-vitals@npm:4.2.4" @@ -17615,13 +20546,6 @@ turbo@latest: languageName: node linkType: hard
-"webidl-conversions@npm:^4.0.2":
"webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -17705,17 +20629,6 @@ turbo@latest: languageName: node linkType: hard
-"whatwg-url@npm:^7.0.0":
"which-boxed-primitive@npm:^1.0.2": version: 1.0.2 resolution: "which-boxed-primitive@npm:1.0.2" @@ -17882,6 +20795,60 @@ turbo@latest: languageName: node linkType: hard
+"workerd@npm:1.20260507.1":
optional: true
optional: true
optional: true
optional: true
optional: true
+"wrangler@npm:^4.90.0":
optional: true
optional: true
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" @@ -17904,6 +20871,39 @@ turbo@latest: languageName: node linkType: hard
+"wrap-ansi@npm:^9.0.0":
+"wrappy@npm:1":
+"ws@npm:8.18.0":
optional: true
optional: true
"ws@npm:^7.3.1": version: 7.5.9 resolution: "ws@npm:7.5.9" @@ -17941,6 +20941,13 @@ turbo@latest: languageName: node linkType: hard
+"xml-naming@npm:^0.1.0":
"xmlchars@npm:^2.2.0": version: 2.2.0 resolution: "xmlchars@npm:2.2.0" @@ -17948,6 +20955,13 @@ turbo@latest: languageName: node linkType: hard
+"y18n@npm:^5.0.5":
"yallist@npm:^3.0.2": version: 3.1.1 resolution: "yallist@npm:3.1.1" @@ -17962,13 +20976,6 @@ turbo@latest: languageName: node linkType: hard
-"yaml@npm:^1.10.2":
"yaml@npm:^2.0.0, yaml@npm:^2.3.1, yaml@npm:^2.3.4": version: 2.4.0 resolution: "yaml@npm:2.4.0" @@ -17987,6 +20994,36 @@ turbo@latest: languageName: node linkType: hard
+"yaml@npm:^2.8.1":
+"yargs-parser@npm:^22.0.0":
+"yargs@npm:^18.0.0":
"yn@npm:3.1.1": version: 3.1.1 resolution: "yn@npm:3.1.1" @@ -18001,6 +21038,29 @@ turbo@latest: languageName: node linkType: hard
+"youch-core@npm:^0.3.3":
+"youch@npm:4.1.0-beta.10":
"zwitch@npm:^2.0.0": version: 2.0.4 resolution: "zwitch@npm:2.0.4"