@arpsw/astro-cms 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -61,7 +61,17 @@ function arpCms(options) {
61
61
  // initPublicFiles strip the leading slash from cached filenames and
62
62
  // 404 every `public/` asset in dev. Pass it explicitly (no trailing
63
63
  // slash) to bypass the cached path.
64
- publicDir: fileURLToPath(config.publicDir)
64
+ publicDir: fileURLToPath(config.publicDir),
65
+ // Our runtime (`runtime.ts`/`config.ts`) imports `virtual:arp-cms`,
66
+ // resolved by virtualConfigPlugin below. Vite auto-skips esbuild
67
+ // pre-bundling and SSR externalization for *linked* deps, so this
68
+ // "just works" with a local symlink — but a registry install would
69
+ // (a) be pre-bundled, where esbuild can't resolve the virtual id,
70
+ // and (b) be externalized in the SSR build, leaving the import
71
+ // unresolved at runtime. Opt out of both so installed consumers
72
+ // behave like linked ones.
73
+ optimizeDeps: { exclude: ["@arpsw/astro-cms"] },
74
+ ssr: { noExternal: ["@arpsw/astro-cms"] }
65
75
  }
66
76
  });
67
77
  logger.info(
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/integration.ts","../src/options.ts"],"sourcesContent":["import { fileURLToPath } from 'node:url';\nimport type { AstroIntegration } from 'astro';\nimport type { Plugin } from 'vite';\nimport { resolveOptions, type ArpCmsOptions, type ResolvedArpCmsConfig } from './options';\n\nconst VIRTUAL_ID = 'virtual:arp-cms';\nconst RESOLVED_VIRTUAL_ID = '\\0' + VIRTUAL_ID;\n\n/**\n * The ARP CMS Astro integration.\n *\n * Wires the boilerplate every ARP CMS site repeats: it configures Astro's i18n\n * routing from `locales`/`defaultLocale`, applies the `publicDir` dev workaround,\n * and publishes the resolved connection/locale/cache config to runtime code\n * through the `virtual:arp-cms` module (consumed by `@arpsw/astro-cms`'s client\n * and i18n helpers).\n */\nexport function arpCms(options: ArpCmsOptions): AstroIntegration {\n const resolved = resolveOptions(options);\n\n return {\n name: '@arpsw/astro-cms',\n hooks: {\n 'astro:config:setup': ({ config, updateConfig, logger }) => {\n updateConfig({\n i18n: {\n locales: [...resolved.locales],\n defaultLocale: resolved.defaultLocale,\n // Full object: `astro:config:setup`'s updateConfig uses the resolved\n // (strict) config type, unlike the shorthand defineConfig accepts.\n // Default-locale pages live at the root; `redirectToDefaultLocale`\n // must be false when `prefixDefaultLocale` is false (Astro rejects\n // true here — it would risk redirect loops).\n routing: {\n prefixDefaultLocale: false,\n redirectToDefaultLocale: false,\n fallbackType: 'redirect',\n },\n },\n vite: {\n plugins: [virtualConfigPlugin(resolved)],\n // Astro passes `publicDir` with a trailing slash, which makes Vite's\n // initPublicFiles strip the leading slash from cached filenames and\n // 404 every `public/` asset in dev. Pass it explicitly (no trailing\n // slash) to bypass the cached path.\n publicDir: fileURLToPath(config.publicDir),\n },\n });\n\n logger.info(\n `serving CMS site \"${resolved.cms.site}\" · locales [${resolved.locales.join(\n ', ',\n )}] · default \"${resolved.defaultLocale}\"`,\n );\n },\n },\n };\n}\n\n/** Serves the resolved config as the `virtual:arp-cms` module to runtime code. */\nfunction virtualConfigPlugin(resolved: ResolvedArpCmsConfig): Plugin {\n return {\n name: 'arp-cms:virtual-config',\n resolveId(id) {\n if (id === VIRTUAL_ID) {\n return RESOLVED_VIRTUAL_ID;\n }\n return undefined;\n },\n load(id) {\n if (id === RESOLVED_VIRTUAL_ID) {\n return `export const config = ${JSON.stringify(resolved)};\\nexport default config;`;\n }\n return undefined;\n },\n };\n}\n","/**\n * Public options for the `arpCms()` integration, and the resolved, serializable\n * config shape that gets exposed to runtime code via `virtual:arp-cms`.\n *\n * The integration runs in the consumer's `astro.config` (Node, before Vite), so\n * the site passes config explicitly here — typically wired from its own `.env`.\n */\n\n/** Per-locale display metadata for the language switcher + `<html dir>`. */\nexport interface LocaleMeta {\n /** Short uppercase code shown in the picker (EN, SL). */\n code: string;\n /** Endonym — the language's name in its own language. */\n native: string;\n /** Exonym in English (optional). */\n english?: string;\n /** Text direction; defaults to 'ltr'. */\n dir?: 'ltr' | 'rtl';\n}\n\n/** Edge (Cloudflare) `Cache-Control` headers set by the SSR routes. */\nexport interface CacheConfig {\n /** Successful page/post responses. */\n page: string;\n /** 404 responses (shorter TTL so new CMS content becomes reachable quickly). */\n notFound: string;\n /** Upstream/CMS errors — never cache. */\n error: string;\n /** Preview routes — never cache, never index. */\n preview: string;\n}\n\nexport interface ArpCmsOptions {\n /** Base URL of the Laravel CMS API (trailing slashes are trimmed). */\n baseUrl: string;\n /** Multi-site CMS site this deployment serves (slug preferred, id accepted). */\n site: string;\n /** Locale codes this site publishes. The first is the fallback default. */\n locales: readonly string[];\n /** Effective default locale; must be one of `locales`. Defaults to `locales[0]`. */\n defaultLocale?: string;\n /** Navigation menu slug fetched for the site nav. Defaults to `\"main\"`. */\n menuSlug?: string;\n /** Bearer token for the `preview/*` endpoints; omit to disable preview. */\n previewToken?: string;\n /** Per-locale `Cache-Control` overrides; sensible defaults are applied. */\n cache?: Partial<CacheConfig>;\n /** Per-locale canonical site URLs (no trailing slash); unset → path-prefix routing. */\n websiteUrls?: Record<string, string | undefined>;\n /**\n * Per-content-type, per-locale URL prefixes (e.g. `{ post: { en: 'blog' } }`),\n * mirroring the CMS `/config` `content_type_paths`. Page has no prefix (it\n * lives at the site root). Consumed by {@link contentTypePath}.\n */\n contentTypePaths?: Record<string, Record<string, string | undefined>>;\n /** Per-locale display metadata for the language switcher + RTL handling. */\n localeMeta?: Record<string, LocaleMeta>;\n}\n\n/** Resolved config — serialized into the `virtual:arp-cms` module at build time. */\nexport interface ResolvedArpCmsConfig {\n cms: {\n baseUrl: string;\n site: string;\n previewToken?: string;\n menuSlug: string;\n };\n cache: CacheConfig;\n websiteUrls: Record<string, string | undefined>;\n contentTypePaths: Record<string, Record<string, string | undefined>>;\n localeMeta: Record<string, LocaleMeta>;\n locales: readonly string[];\n defaultLocale: string;\n}\n\nconst DEFAULT_CACHE: CacheConfig = {\n page: 'public, max-age=0, s-maxage=3600, stale-while-revalidate=86400',\n notFound: 'public, max-age=0, s-maxage=60',\n error: 'no-store',\n preview: 'no-store, no-cache, must-revalidate',\n};\n\nconst trimTrailingSlashes = (value: string): string => value.replace(/\\/+$/, '');\n\nexport function resolveOptions(options: ArpCmsOptions): ResolvedArpCmsConfig {\n if (!options.locales?.length) {\n throw new Error('[@arpsw/astro-cms] `locales` must list at least one locale.');\n }\n\n const fallback = options.locales[0]!;\n const defaultLocale =\n options.defaultLocale && options.locales.includes(options.defaultLocale)\n ? options.defaultLocale\n : fallback;\n\n return {\n cms: {\n baseUrl: trimTrailingSlashes(options.baseUrl),\n site: options.site.trim(),\n previewToken: options.previewToken || undefined,\n menuSlug: (options.menuSlug ?? 'main').trim(),\n },\n cache: { ...DEFAULT_CACHE, ...options.cache },\n websiteUrls: options.websiteUrls ?? {},\n contentTypePaths: options.contentTypePaths ?? {},\n localeMeta: options.localeMeta ?? {},\n locales: [...options.locales],\n defaultLocale,\n };\n}\n"],"mappings":";AAAA,SAAS,qBAAqB;;;AC2E9B,IAAM,gBAA6B;AAAA,EACjC,MAAM;AAAA,EACN,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AACX;AAEA,IAAM,sBAAsB,CAAC,UAA0B,MAAM,QAAQ,QAAQ,EAAE;AAExE,SAAS,eAAe,SAA8C;AAC3E,MAAI,CAAC,QAAQ,SAAS,QAAQ;AAC5B,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AAEA,QAAM,WAAW,QAAQ,QAAQ,CAAC;AAClC,QAAM,gBACJ,QAAQ,iBAAiB,QAAQ,QAAQ,SAAS,QAAQ,aAAa,IACnE,QAAQ,gBACR;AAEN,SAAO;AAAA,IACL,KAAK;AAAA,MACH,SAAS,oBAAoB,QAAQ,OAAO;AAAA,MAC5C,MAAM,QAAQ,KAAK,KAAK;AAAA,MACxB,cAAc,QAAQ,gBAAgB;AAAA,MACtC,WAAW,QAAQ,YAAY,QAAQ,KAAK;AAAA,IAC9C;AAAA,IACA,OAAO,EAAE,GAAG,eAAe,GAAG,QAAQ,MAAM;AAAA,IAC5C,aAAa,QAAQ,eAAe,CAAC;AAAA,IACrC,kBAAkB,QAAQ,oBAAoB,CAAC;AAAA,IAC/C,YAAY,QAAQ,cAAc,CAAC;AAAA,IACnC,SAAS,CAAC,GAAG,QAAQ,OAAO;AAAA,IAC5B;AAAA,EACF;AACF;;;ADxGA,IAAM,aAAa;AACnB,IAAM,sBAAsB,OAAO;AAW5B,SAAS,OAAO,SAA0C;AAC/D,QAAM,WAAW,eAAe,OAAO;AAEvC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,MACL,sBAAsB,CAAC,EAAE,QAAQ,cAAc,OAAO,MAAM;AAC1D,qBAAa;AAAA,UACX,MAAM;AAAA,YACJ,SAAS,CAAC,GAAG,SAAS,OAAO;AAAA,YAC7B,eAAe,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMxB,SAAS;AAAA,cACP,qBAAqB;AAAA,cACrB,yBAAyB;AAAA,cACzB,cAAc;AAAA,YAChB;AAAA,UACF;AAAA,UACA,MAAM;AAAA,YACJ,SAAS,CAAC,oBAAoB,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,YAKvC,WAAW,cAAc,OAAO,SAAS;AAAA,UAC3C;AAAA,QACF,CAAC;AAED,eAAO;AAAA,UACL,qBAAqB,SAAS,IAAI,IAAI,mBAAgB,SAAS,QAAQ;AAAA,YACrE;AAAA,UACF,CAAC,mBAAgB,SAAS,aAAa;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,SAAS,oBAAoB,UAAwC;AACnE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU,IAAI;AACZ,UAAI,OAAO,YAAY;AACrB,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,IACA,KAAK,IAAI;AACP,UAAI,OAAO,qBAAqB;AAC9B,eAAO,yBAAyB,KAAK,UAAU,QAAQ,CAAC;AAAA;AAAA,MAC1D;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/integration.ts","../src/options.ts"],"sourcesContent":["import { fileURLToPath } from 'node:url';\nimport type { AstroIntegration } from 'astro';\nimport type { Plugin } from 'vite';\nimport { resolveOptions, type ArpCmsOptions, type ResolvedArpCmsConfig } from './options';\n\nconst VIRTUAL_ID = 'virtual:arp-cms';\nconst RESOLVED_VIRTUAL_ID = '\\0' + VIRTUAL_ID;\n\n/**\n * The ARP CMS Astro integration.\n *\n * Wires the boilerplate every ARP CMS site repeats: it configures Astro's i18n\n * routing from `locales`/`defaultLocale`, applies the `publicDir` dev workaround,\n * and publishes the resolved connection/locale/cache config to runtime code\n * through the `virtual:arp-cms` module (consumed by `@arpsw/astro-cms`'s client\n * and i18n helpers).\n */\nexport function arpCms(options: ArpCmsOptions): AstroIntegration {\n const resolved = resolveOptions(options);\n\n return {\n name: '@arpsw/astro-cms',\n hooks: {\n 'astro:config:setup': ({ config, updateConfig, logger }) => {\n updateConfig({\n i18n: {\n locales: [...resolved.locales],\n defaultLocale: resolved.defaultLocale,\n // Full object: `astro:config:setup`'s updateConfig uses the resolved\n // (strict) config type, unlike the shorthand defineConfig accepts.\n // Default-locale pages live at the root; `redirectToDefaultLocale`\n // must be false when `prefixDefaultLocale` is false (Astro rejects\n // true here — it would risk redirect loops).\n routing: {\n prefixDefaultLocale: false,\n redirectToDefaultLocale: false,\n fallbackType: 'redirect',\n },\n },\n vite: {\n plugins: [virtualConfigPlugin(resolved)],\n // Astro passes `publicDir` with a trailing slash, which makes Vite's\n // initPublicFiles strip the leading slash from cached filenames and\n // 404 every `public/` asset in dev. Pass it explicitly (no trailing\n // slash) to bypass the cached path.\n publicDir: fileURLToPath(config.publicDir),\n // Our runtime (`runtime.ts`/`config.ts`) imports `virtual:arp-cms`,\n // resolved by virtualConfigPlugin below. Vite auto-skips esbuild\n // pre-bundling and SSR externalization for *linked* deps, so this\n // \"just works\" with a local symlink — but a registry install would\n // (a) be pre-bundled, where esbuild can't resolve the virtual id,\n // and (b) be externalized in the SSR build, leaving the import\n // unresolved at runtime. Opt out of both so installed consumers\n // behave like linked ones.\n optimizeDeps: { exclude: ['@arpsw/astro-cms'] },\n ssr: { noExternal: ['@arpsw/astro-cms'] },\n },\n });\n\n logger.info(\n `serving CMS site \"${resolved.cms.site}\" · locales [${resolved.locales.join(\n ', ',\n )}] · default \"${resolved.defaultLocale}\"`,\n );\n },\n },\n };\n}\n\n/** Serves the resolved config as the `virtual:arp-cms` module to runtime code. */\nfunction virtualConfigPlugin(resolved: ResolvedArpCmsConfig): Plugin {\n return {\n name: 'arp-cms:virtual-config',\n resolveId(id) {\n if (id === VIRTUAL_ID) {\n return RESOLVED_VIRTUAL_ID;\n }\n return undefined;\n },\n load(id) {\n if (id === RESOLVED_VIRTUAL_ID) {\n return `export const config = ${JSON.stringify(resolved)};\\nexport default config;`;\n }\n return undefined;\n },\n };\n}\n","/**\n * Public options for the `arpCms()` integration, and the resolved, serializable\n * config shape that gets exposed to runtime code via `virtual:arp-cms`.\n *\n * The integration runs in the consumer's `astro.config` (Node, before Vite), so\n * the site passes config explicitly here — typically wired from its own `.env`.\n */\n\n/** Per-locale display metadata for the language switcher + `<html dir>`. */\nexport interface LocaleMeta {\n /** Short uppercase code shown in the picker (EN, SL). */\n code: string;\n /** Endonym — the language's name in its own language. */\n native: string;\n /** Exonym in English (optional). */\n english?: string;\n /** Text direction; defaults to 'ltr'. */\n dir?: 'ltr' | 'rtl';\n}\n\n/** Edge (Cloudflare) `Cache-Control` headers set by the SSR routes. */\nexport interface CacheConfig {\n /** Successful page/post responses. */\n page: string;\n /** 404 responses (shorter TTL so new CMS content becomes reachable quickly). */\n notFound: string;\n /** Upstream/CMS errors — never cache. */\n error: string;\n /** Preview routes — never cache, never index. */\n preview: string;\n}\n\nexport interface ArpCmsOptions {\n /** Base URL of the Laravel CMS API (trailing slashes are trimmed). */\n baseUrl: string;\n /** Multi-site CMS site this deployment serves (slug preferred, id accepted). */\n site: string;\n /** Locale codes this site publishes. The first is the fallback default. */\n locales: readonly string[];\n /** Effective default locale; must be one of `locales`. Defaults to `locales[0]`. */\n defaultLocale?: string;\n /** Navigation menu slug fetched for the site nav. Defaults to `\"main\"`. */\n menuSlug?: string;\n /** Bearer token for the `preview/*` endpoints; omit to disable preview. */\n previewToken?: string;\n /** Per-locale `Cache-Control` overrides; sensible defaults are applied. */\n cache?: Partial<CacheConfig>;\n /** Per-locale canonical site URLs (no trailing slash); unset → path-prefix routing. */\n websiteUrls?: Record<string, string | undefined>;\n /**\n * Per-content-type, per-locale URL prefixes (e.g. `{ post: { en: 'blog' } }`),\n * mirroring the CMS `/config` `content_type_paths`. Page has no prefix (it\n * lives at the site root). Consumed by {@link contentTypePath}.\n */\n contentTypePaths?: Record<string, Record<string, string | undefined>>;\n /** Per-locale display metadata for the language switcher + RTL handling. */\n localeMeta?: Record<string, LocaleMeta>;\n}\n\n/** Resolved config — serialized into the `virtual:arp-cms` module at build time. */\nexport interface ResolvedArpCmsConfig {\n cms: {\n baseUrl: string;\n site: string;\n previewToken?: string;\n menuSlug: string;\n };\n cache: CacheConfig;\n websiteUrls: Record<string, string | undefined>;\n contentTypePaths: Record<string, Record<string, string | undefined>>;\n localeMeta: Record<string, LocaleMeta>;\n locales: readonly string[];\n defaultLocale: string;\n}\n\nconst DEFAULT_CACHE: CacheConfig = {\n page: 'public, max-age=0, s-maxage=3600, stale-while-revalidate=86400',\n notFound: 'public, max-age=0, s-maxage=60',\n error: 'no-store',\n preview: 'no-store, no-cache, must-revalidate',\n};\n\nconst trimTrailingSlashes = (value: string): string => value.replace(/\\/+$/, '');\n\nexport function resolveOptions(options: ArpCmsOptions): ResolvedArpCmsConfig {\n if (!options.locales?.length) {\n throw new Error('[@arpsw/astro-cms] `locales` must list at least one locale.');\n }\n\n const fallback = options.locales[0]!;\n const defaultLocale =\n options.defaultLocale && options.locales.includes(options.defaultLocale)\n ? options.defaultLocale\n : fallback;\n\n return {\n cms: {\n baseUrl: trimTrailingSlashes(options.baseUrl),\n site: options.site.trim(),\n previewToken: options.previewToken || undefined,\n menuSlug: (options.menuSlug ?? 'main').trim(),\n },\n cache: { ...DEFAULT_CACHE, ...options.cache },\n websiteUrls: options.websiteUrls ?? {},\n contentTypePaths: options.contentTypePaths ?? {},\n localeMeta: options.localeMeta ?? {},\n locales: [...options.locales],\n defaultLocale,\n };\n}\n"],"mappings":";AAAA,SAAS,qBAAqB;;;AC2E9B,IAAM,gBAA6B;AAAA,EACjC,MAAM;AAAA,EACN,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AACX;AAEA,IAAM,sBAAsB,CAAC,UAA0B,MAAM,QAAQ,QAAQ,EAAE;AAExE,SAAS,eAAe,SAA8C;AAC3E,MAAI,CAAC,QAAQ,SAAS,QAAQ;AAC5B,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AAEA,QAAM,WAAW,QAAQ,QAAQ,CAAC;AAClC,QAAM,gBACJ,QAAQ,iBAAiB,QAAQ,QAAQ,SAAS,QAAQ,aAAa,IACnE,QAAQ,gBACR;AAEN,SAAO;AAAA,IACL,KAAK;AAAA,MACH,SAAS,oBAAoB,QAAQ,OAAO;AAAA,MAC5C,MAAM,QAAQ,KAAK,KAAK;AAAA,MACxB,cAAc,QAAQ,gBAAgB;AAAA,MACtC,WAAW,QAAQ,YAAY,QAAQ,KAAK;AAAA,IAC9C;AAAA,IACA,OAAO,EAAE,GAAG,eAAe,GAAG,QAAQ,MAAM;AAAA,IAC5C,aAAa,QAAQ,eAAe,CAAC;AAAA,IACrC,kBAAkB,QAAQ,oBAAoB,CAAC;AAAA,IAC/C,YAAY,QAAQ,cAAc,CAAC;AAAA,IACnC,SAAS,CAAC,GAAG,QAAQ,OAAO;AAAA,IAC5B;AAAA,EACF;AACF;;;ADxGA,IAAM,aAAa;AACnB,IAAM,sBAAsB,OAAO;AAW5B,SAAS,OAAO,SAA0C;AAC/D,QAAM,WAAW,eAAe,OAAO;AAEvC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,MACL,sBAAsB,CAAC,EAAE,QAAQ,cAAc,OAAO,MAAM;AAC1D,qBAAa;AAAA,UACX,MAAM;AAAA,YACJ,SAAS,CAAC,GAAG,SAAS,OAAO;AAAA,YAC7B,eAAe,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMxB,SAAS;AAAA,cACP,qBAAqB;AAAA,cACrB,yBAAyB;AAAA,cACzB,cAAc;AAAA,YAChB;AAAA,UACF;AAAA,UACA,MAAM;AAAA,YACJ,SAAS,CAAC,oBAAoB,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,YAKvC,WAAW,cAAc,OAAO,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YASzC,cAAc,EAAE,SAAS,CAAC,kBAAkB,EAAE;AAAA,YAC9C,KAAK,EAAE,YAAY,CAAC,kBAAkB,EAAE;AAAA,UAC1C;AAAA,QACF,CAAC;AAED,eAAO;AAAA,UACL,qBAAqB,SAAS,IAAI,IAAI,mBAAgB,SAAS,QAAQ;AAAA,YACrE;AAAA,UACF,CAAC,mBAAgB,SAAS,aAAa;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,SAAS,oBAAoB,UAAwC;AACnE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU,IAAI;AACZ,UAAI,OAAO,YAAY;AACrB,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,IACA,KAAK,IAAI;AACP,UAAI,OAAO,qBAAqB;AAC9B,eAAO,yBAAyB,KAAK,UAAU,QAAQ,CAAC;AAAA;AAAA,MAC1D;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arpsw/astro-cms",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "Astro integration for the ARP (Laravel) CMS — shared API client, i18n/path resolution, and config wiring for ARP CMS sites.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",