Deco
Pt

Utilities do SDK

useScript, signal, clx/cn, encoding, retry, urlUtils, redirects, sitemap e os scripts de codegen.

@decocms/start/sdk/* é a caixa de ferramentas. Esta página é uma referência rápida — cada utility com import , assinatura e quando usar.

useScript & inlineScript

 import { inlineScript } from "@decocms/start/sdk/useScript"; 

Inline um trecho de script no HTML render server-side. Substitui o padrão useScript(fn) do v1.

 <head>
  <inlineScript>
    {`window.dataLayer = window.dataLayer || [];`}
  </inlineScript>
</head> 

Para conteúdo dinâmico (necessidade de prop) prefira componente client-only com "use client" .

signal

 import { signal, computed, effect } from "@decocms/start/sdk/signal"; 

Wrapper baseado em @tanstack/store espelhando a API do @preact/signals que loaders v1 usavam. Migrar useSignal() signal() é geralmente direto.

Não use signals como substituto preguiçoso para state React. Em v2, prefira useState / useReducer para state local de componente, TanStack Query para state de servidor. Reserve signal() para state cross-component que precisa fora do tree React (e.g. drawer do carrinho compartilhado em todo o site).

clx / cn

 import { clx, cn } from "@decocms/start/sdk/clx"; 

Class joiner — equivalente ao clsx mas re-exportado para que sites não precisem instalar à parte. cn é alias para clx .

 <div className={clx("px-4", isActive && "bg-blue-500", className)} /> 

encoding

 import { encodeBase64Url, decodeBase64Url } from "@decocms/start/sdk/encoding"; 

Encoding base64-url-safe. Útil em cookies, URL params, computação de ETag.

retry

 import { retry } from "@decocms/start/sdk/retry";

const result = await retry(() => fetch(...), {
  maxAttempts: 3,
  delayMs: 100,
  backoff: "exponential",
}); 

Retry com backoff exponencial. Use ao redor de chamadas instáveis upstream em loaders. Não embrulhe ações idempotentes — use de forma idempotente.

urlUtils

 import { stableUrl, joinPath, isAbsolute } from "@decocms/start/sdk/urlUtils"; 
  • stableUrl(url, ignoreParams) — produz URL canônica para cache keys.
  • joinPath(...segments) — junta corretamente, lidando com slashes.
  • isAbsolute(url) — detecta se URL é absoluta.

redirects

 import { loadRedirects, matchRedirect } from "@decocms/start/sdk/redirects";

const redirects = loadRedirects(blocks);
const match = matchRedirect("/old-path", redirects); 

Carrega redirects definidos pelo CMS de .deco/blocks/ e casa contra um pathname. Use no proxyHandler do worker entry. Veja Worker entry.

sitemap

 import { generateSitemap } from "@decocms/start/sdk/sitemap"; 

Gera sitemap.xml a partir de uma lista de URLs ou de um loader. Tipicamente conectado em src/routes/sitemap.xml.tsx :

 import { createFileRoute } from "@tanstack/react-router";
import { generateSitemap } from "@decocms/start/sdk/sitemap";

export const Route = createFileRoute("/sitemap.xml")({
  loader: () => generateSitemap({ urls: [...], baseUrl: "https://minha-loja.com" }),
}); 

cookies

 import { parseCookie, serializeCookie } from "@decocms/start/sdk/cookies";

const cookies = parseCookie(request.headers.get("cookie") ?? "");
const setCookie = serializeCookie("session_id", "abc123", { maxAge: 86400 }); 

Helpers leves de cookie. @decocms/apps usa internamente para propagação de cookies VTEX/Shopify.

responseUtils

 import { jsonResponse, htmlResponse, redirectResponse } from "@decocms/start/sdk/responseUtils"; 

Constructors de Response com headers consistentes (Content-Type, charset, cache-control).

headersUtils

 import { mergeHeaders, withCorsHeaders } from "@decocms/start/sdk/headersUtils"; 

Funde headers e aplica CORS. withCorsHeaders honra a whitelist de productionOrigins do createSiteSetup .

cacheHeaders

Coberto em Caching.

cachedLoader

Coberto em Caching.

instrumentedFetch

 import { createInstrumentedFetch } from "@decocms/start/sdk/instrumentedFetch";

const vtexFetch = createInstrumentedFetch("vtex"); 

Embrulha fetch com tracing OpenTelemetry e Server-Timing. Toda chamada vira um span. Use em loaders para qualquer chamada upstream.

requestContext

 import { RequestContext } from "@decocms/start/sdk/requestContext";

const ctx = RequestContext.current;
const env = ctx?.env;
const cookies = ctx?.request.headers.get("cookie"); 

AsyncLocalStorage para state por request. Acessível a partir de qualquer código server-side. Não disponível no client (undefined).

useDevice

 import { detectDevice } from "@decocms/start/sdk/useDevice";

const device = detectDevice(request); 

Sniff de UA pra mobile | tablet | desktop . Server-safe (sem dependência de browser API). Veja também o hook useDevice em Hooks.

abTesting

 import { withABTesting } from "@decocms/start/sdk/abTesting"; 

Embrulhador de A/B no nível do worker, salvando variants no Workers KV. Veja A/B testing e redirects.

workerEntry

 import { createDecoWorkerEntry } from "@decocms/start/sdk/workerEntry"; 

Coberto em Worker entry.

invoke

 import { invoke, createInvoke, setInvokeLoaders } from "@decocms/start/sdk/invoke"; 

Coberto em Invoke.

Scripts de codegen

@decocms/start/scripts expõe scripts CLI Node:

Script Função
generate-blocks.ts .deco/blocks/*.json , escreve blocks.gen.{ts,json}
generate-schema.ts Lê sections, emite meta.gen.json (JSON Schema)
generate-sections.ts Lê sections, emite registro sections.gen.ts
generate-loaders.ts Lê loaders/actions, emite loaders.gen.ts
generate-invoke.ts loaders.gen.ts , emite cliente tipado invoke.gen.ts
tailwind-lint.ts Lint de uso de tokens Tailwind v4
migrate.ts Migração v1 → v2 (binário deco-migrate )
cleanup.ts Limpeza pós-migração (binário deco-post-cleanup )
htmx-analyze.ts Auditoria de uso de HTMX (binário deco-htmx-analyze )

Tipicamente executados via scripts do package.json :

 {
  "scripts": {
    "generate:blocks": "node --experimental-strip-types ./node_modules/@decocms/start/scripts/generate-blocks.ts",
    "generate:schema": "node ... generate-schema.ts",
    "generate:sections": "node ... generate-sections.ts",
    "generate:loaders": "node ... generate-loaders.ts --decofile-dir .deco/blocks",
    "generate:invoke": "node ... generate-invoke.ts"
  }
} 

generate:loaders --decofile-dir .deco/blocks poda o loaders.gen.ts para apenas loaders que o CMS realmente referencia. Recomendado para sites novos.

Tipos

 import type {
  FnContext,
  Section,
  App,
  LoaderProps,
} from "@decocms/start/types";

import type {
  ImageWidget,
  RichText,
  Color,
  ButtonStyle,
} from "@decocms/start/types/widgets"; 

Tipos widget devem vir de @decocms/start/types/widgets , não do barrel. O gerador de schema só pega imports do subpath.

Veja também

Found an error or want to improve this page?

Edit this page