Compare commits
13 Commits
4079e4ecfb
...
v0.1.12
| Author | SHA1 | Date | |
|---|---|---|---|
| 8d350bb092 | |||
| 4338028c60 | |||
| ab563a7b37 | |||
| 2cfc1a0047 | |||
| 98e8d971e8 | |||
| 87be06ecea | |||
| 28f6e1ae7c | |||
| 27380290e1 | |||
| 7e44554767 | |||
| 9c3dceef84 | |||
| ba8d8e00a8 | |||
| 8f037b5950 | |||
| 291fa6eaa4 |
@@ -3,4 +3,3 @@
|
||||
Headless WordPress project boilerplate using Nuxt.
|
||||
|
||||
[✨ Release notes](/wp-content/themes/moonshine/CHANGELOG.md)
|
||||
|
||||
1
wp-content/themes/moonshine/.gitignore
vendored
1
wp-content/themes/moonshine/.gitignore
vendored
@@ -25,3 +25,4 @@ logs
|
||||
|
||||
# Wrangler files
|
||||
.wrangler
|
||||
server/types/cloudflare.d.ts
|
||||
|
||||
@@ -1,5 +1,37 @@
|
||||
# Changelog
|
||||
|
||||
## v0.1.12
|
||||
|
||||
[compare changes](https://gitea.websimple.com/wp-sites/wp-headless/compare/v0.1.11...v0.1.12)
|
||||
|
||||
### 🚀 Enhancements
|
||||
|
||||
- ConnexionButton (87be06e)
|
||||
- ShowLabel (98e8d97)
|
||||
- ParseAcfLink (2cfc1a0)
|
||||
- ParseAcfMedia (ab563a7)
|
||||
- Event context type for Cloudflare environment (4338028)
|
||||
|
||||
### 🩹 Fixes
|
||||
|
||||
- UApp in app.vue (28f6e1a)
|
||||
|
||||
## v0.1.11
|
||||
|
||||
[compare changes](https://gitea.websimple.com/wp-sites/wp-headless/compare/v0.1.10...v0.1.11)
|
||||
|
||||
### 🚀 Enhancements
|
||||
|
||||
- MapSocialIcon (6dd13ea)
|
||||
- AcfSocial / parseAcfSocial (3199835)
|
||||
|
||||
### 🩹 Fixes
|
||||
|
||||
- Remove unneeded wrangler main / assets (eea020b)
|
||||
- Cloudflare image provider only in production (291fa6e)
|
||||
- Wrangler project name (8f037b5)
|
||||
- ENABLE_CLOUDFLARE_IMAGE (9c3dcee)
|
||||
|
||||
## v0.1.10
|
||||
|
||||
[compare changes](https://gitea.websimple.com/templates/wp-headless/compare/v0.1.9...v0.1.10)
|
||||
|
||||
@@ -6,7 +6,14 @@ Thème WordPress en headless basé sur Nuxt.
|
||||
|
||||
| Nom | Description | Exemple | Requise |
|
||||
|-----|-------------|---------|---------|
|
||||
| `NUXT_SESSION_PASSWORD` | Clé secrète pour l'authentification | `date \| md5sum` | ✅ |
|
||||
| `NUXT_WP_URL` | URL du backend WordPress | https://wp.exemple.com | ✅ |
|
||||
| `NUXT_SITE_URL` | URL du frontend Nuxt | https://www.example.com | ➖ |
|
||||
| `NUXT_SITE_ENV` | Environnement | staging \| production | ➖ |
|
||||
| `NUXT_SITE_URL` | URL du frontend Nuxt | https://www.example.com | ➖ |
|
||||
| `NUXT_WP_URL` | URL du backend WordPress | https://wp.exemple.com | ✅ |
|
||||
|
||||
## Secrets
|
||||
|
||||
Configurer les secrets nécessaires au projet:
|
||||
|
||||
```sh
|
||||
pnpm wrangler secret put NUXT_SESSION_PASSWORD
|
||||
```
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
<script setup lang="ts">
|
||||
import { fr } from "@nuxt/ui/locale";
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<UApp :locale="fr">
|
||||
<NuxtRouteAnnouncer />
|
||||
<NuxtLoadingIndicator />
|
||||
<NuxtLayout>
|
||||
<NuxtPage />
|
||||
</NuxtLayout>
|
||||
</div>
|
||||
</UApp>
|
||||
</template>
|
||||
|
||||
@@ -4,9 +4,10 @@ import type { ButtonProps } from "@nuxt/ui";
|
||||
|
||||
type AcfLinkButtonProps = & Omit<ButtonProps, "to" | "target" | "href"> & {
|
||||
link?: AcfLinkFragment;
|
||||
showLabel?: boolean;
|
||||
};
|
||||
|
||||
const { link, ...buttonProps } = defineProps<AcfLinkButtonProps>();
|
||||
const { link, showLabel, ...buttonProps } = defineProps<AcfLinkButtonProps>();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -18,6 +19,6 @@ const { link, ...buttonProps } = defineProps<AcfLinkButtonProps>();
|
||||
:external="link.target === '_blank'"
|
||||
:rel="link.target === '_blank' ? 'noopener noreferrer' : undefined"
|
||||
>
|
||||
<slot>{{ link.title }}</slot>
|
||||
<slot>{{ showLabel ? link.title : "" }}</slot>
|
||||
</UButton>
|
||||
</template>
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
fragment AcfMedia on GroupAbstractMedia_Fields {
|
||||
image {
|
||||
node {
|
||||
...AcfImage
|
||||
}
|
||||
}
|
||||
image { node { ... AcfImage } }
|
||||
aspectRatio
|
||||
objectFit
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
<script setup lang="ts">
|
||||
const { isLoggedIn } = useAuth();
|
||||
const attrs = computed(() => {
|
||||
return isLoggedIn.value
|
||||
? {
|
||||
label: "Déconnexion",
|
||||
icon: "i-lucide-log-out",
|
||||
}
|
||||
: {
|
||||
label: "Connexion",
|
||||
icon: "i-lucide-log-in",
|
||||
};
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<AuthState>
|
||||
<UButton to="/connexion" v-bind="attrs" color="neutral" />
|
||||
</AuthState>
|
||||
</template>
|
||||
@@ -34,7 +34,7 @@ const classes = tvSectionHeroSplit({
|
||||
<section :class="classes.base()">
|
||||
<div :class="classes.container()">
|
||||
<UiProse :content="content" :class="classes.content()" />
|
||||
<AcfMedia :media="$props" :class="classes.media()" />
|
||||
<AcfMedia :media="parseAcfMedia(props)" :class="classes.media()" />
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
<script setup lang="ts">
|
||||
const { connexionButton } = useAuthConnexion();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="bg-inverted text-inverted py-1.5">
|
||||
<div class="container flex flex-col sm:flex-row items-center gap-3">
|
||||
<SiteFooterCopyright class="sm:mr-auto" />
|
||||
<AuthConnexionButton color="neutral" variant="link" />
|
||||
<UButton v-bind="connexionButton" color="neutral" variant="link" />
|
||||
<SiteFooterCredits />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -8,8 +8,5 @@
|
||||
<SvgSiteLogo class="h-12 w-auto" />
|
||||
</NuxtLink>
|
||||
</template>
|
||||
<template #right>
|
||||
<AuthConnexionButton />
|
||||
</template>
|
||||
</UHeader>
|
||||
</template>
|
||||
|
||||
@@ -2,5 +2,6 @@ export function useAuth() {
|
||||
const { loggedIn: isLoggedIn, session } = useUserSession();
|
||||
const hasRole = (role: string) => session.value?.user?.roles?.includes(role) || false;
|
||||
const isAdmin = computed(() => hasRole("administrator"));
|
||||
|
||||
return { isLoggedIn, hasRole, isAdmin };
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import type { FormSubmitEvent } from "@nuxt/ui";
|
||||
const isRedirecting = ref(false);
|
||||
|
||||
export function useAuthConnexion() {
|
||||
const { isLoggedIn } = useAuth();
|
||||
const toast = useToast();
|
||||
const { fetch: refreshUserSession } = useUserSession();
|
||||
const routeRedirect = useRoute().query.redirect as string || undefined;
|
||||
@@ -67,5 +68,12 @@ export function useAuthConnexion() {
|
||||
}
|
||||
}
|
||||
|
||||
return { isRedirecting, login, logout };
|
||||
// Dynamic connexion link
|
||||
const connexionButton = computed(() => ({
|
||||
label: isLoggedIn.value ? "Déconnexion" : "Connexion",
|
||||
icon: isLoggedIn.value ? "i-lucide-log-out" : "i-lucide-log-in",
|
||||
to: "/connexion",
|
||||
}));
|
||||
|
||||
return { isRedirecting, login, logout, connexionButton };
|
||||
}
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
<script setup lang="ts">
|
||||
import { fr } from "@nuxt/ui/locale";
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<UApp id="layout-default" :locale="fr">
|
||||
<div id="layout-default">
|
||||
<SiteHeader />
|
||||
<UMain>
|
||||
<slot />
|
||||
</UMain>
|
||||
<SiteFooter />
|
||||
</UApp>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
18
wp-content/themes/moonshine/app/utils/acf-link.ts
Normal file
18
wp-content/themes/moonshine/app/utils/acf-link.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import * as z from "zod";
|
||||
import type { AcfLinkFragment } from "#graphql/operations";
|
||||
|
||||
const acfLinkSchema = z.object({
|
||||
title: z.string(),
|
||||
url: z.string(),
|
||||
target: z.string().optional().default(""),
|
||||
});
|
||||
export type AcfLinkOutput = z.infer<typeof acfLinkSchema>;
|
||||
|
||||
export function parseAcfLink(data?: Partial<AcfLinkFragment>) {
|
||||
try {
|
||||
return acfLinkSchema.parse(data);
|
||||
}
|
||||
catch {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
29
wp-content/themes/moonshine/app/utils/acf-media.ts
Normal file
29
wp-content/themes/moonshine/app/utils/acf-media.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import type { AcfMediaFragment } from "#graphql/operations";
|
||||
import * as z from "zod";
|
||||
|
||||
export const acfImageSchema = z.object({
|
||||
src: z.url(),
|
||||
alt: z.string(),
|
||||
mediaDetails: z.object({
|
||||
width: z.number(),
|
||||
height: z.number(),
|
||||
}),
|
||||
objectPosition: z.string().optional().default("center"),
|
||||
});
|
||||
|
||||
export const acfMediaSchema = z.object({
|
||||
image: z.object({
|
||||
node: acfImageSchema,
|
||||
}),
|
||||
aspectRatio: z.enum(["square", "video", "portrait", "auto"]).optional().default("auto"),
|
||||
objectFit: z.enum(["cover", "contain"]).optional().default("cover"),
|
||||
});
|
||||
|
||||
export function parseAcfMedia(data?: Partial<AcfMediaFragment>) {
|
||||
try {
|
||||
return acfMediaSchema.parse(data);
|
||||
}
|
||||
catch {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
@@ -1,2 +1,29 @@
|
||||
<?php
|
||||
return ['project-id-version'=>'Moonshine','report-msgid-bugs-to'=>'','pot-creation-date'=>'2026-01-13 15:52+0000','po-revision-date'=>'2026-01-29 02:55+0000','last-translator'=>'','language-team'=>'Français du Canada','language'=>'fr_CA','plural-forms'=>'nplurals=2; plural=n > 1;','mime-version'=>'1.0','content-type'=>'text/plain; charset=UTF-8','content-transfer-encoding'=>'8bit','x-generator'=>'Loco https://localise.biz/','x-loco-version'=>'2.8.1; wp-6.9; php-8.3.27','x-domain'=>'moonshine','messages'=>['Heading styles'=>'Styles de titres','Headless WordPress theme based on Nuxt.'=>'Thème Wordpress headless basé sur Nuxt.','https://websimple.com/'=>'https://websimple.com/','Inline styles'=>'Styles de caractères','Link styles'=>'Styles de liens','Main menu'=>'Menu principal','Moonshine'=>'Moonshine','Paragraph styles'=>'Styles de paragraphes','Pascal Martineau '=>'Pascal Martineau ','Semi-bold'=>'Semi-gras']];
|
||||
return array(
|
||||
'project-id-version' => 'Moonshine',
|
||||
'report-msgid-bugs-to' => '',
|
||||
'pot-creation-date' => '2026-01-13 15:52+0000',
|
||||
'po-revision-date' => '2026-01-29 02:55+0000',
|
||||
'last-translator' => '',
|
||||
'language-team' => 'Français du Canada',
|
||||
'language' => 'fr_CA',
|
||||
'plural-forms' => 'nplurals=2; plural=n > 1;',
|
||||
'mime-version' => '1.0',
|
||||
'content-type' => 'text/plain; charset=UTF-8',
|
||||
'content-transfer-encoding' => '8bit',
|
||||
'x-generator' => 'Loco https://localise.biz/',
|
||||
'x-loco-version' => '2.8.1; wp-6.9; php-8.3.27',
|
||||
'x-domain' => 'moonshine',
|
||||
'messages' => array(
|
||||
'Heading styles' => 'Styles de titres',
|
||||
'Headless WordPress theme based on Nuxt.' => 'Thème Wordpress headless basé sur Nuxt.',
|
||||
'https://websimple.com/' => 'https://websimple.com/',
|
||||
'Inline styles' => 'Styles de caractères',
|
||||
'Link styles' => 'Styles de liens',
|
||||
'Main menu' => 'Menu principal',
|
||||
'Moonshine' => 'Moonshine',
|
||||
'Paragraph styles' => 'Styles de paragraphes',
|
||||
'Pascal Martineau ' => 'Pascal Martineau ',
|
||||
'Semi-bold' => 'Semi-gras',
|
||||
),
|
||||
);
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
import { version } from "./package.json";
|
||||
|
||||
const isDev = process.env.NODE_ENV !== "production";
|
||||
|
||||
const siteUrl = process.env.NUXT_SITE_URL;
|
||||
if (!siteUrl) {
|
||||
throw new Error(`NUXT_SITE_URL is not defined. Make sure to set it in your build environment variables.`);
|
||||
@@ -13,6 +11,8 @@ if (!wpUrl) {
|
||||
}
|
||||
const wpDomain = new URL(wpUrl).hostname;
|
||||
|
||||
const enableCloudflareImage = Boolean(process.env.ENABLE_CLOUDFLARE_IMAGE);
|
||||
|
||||
// https://nuxt.com/docs/api/configuration/nuxt-config
|
||||
export default defineNuxtConfig({
|
||||
|
||||
@@ -60,7 +60,7 @@ export default defineNuxtConfig({
|
||||
nodeCompat: true,
|
||||
wrangler: {
|
||||
// Project name
|
||||
name: "moonshine",
|
||||
name: "wp-headless",
|
||||
// Cloudflare Workers settings
|
||||
compatibility_date: "2026-01-27",
|
||||
observability: { enabled: true },
|
||||
@@ -102,7 +102,7 @@ export default defineNuxtConfig({
|
||||
},
|
||||
|
||||
image: {
|
||||
provider: isDev ? "ipx" : "cloudflare",
|
||||
provider: enableCloudflareImage ? "cloudflare" : "none",
|
||||
cloudflare: { baseURL: `${siteUrl}/` },
|
||||
domains: [wpDomain],
|
||||
format: ["avif", "webp"],
|
||||
@@ -119,4 +119,5 @@ export default defineNuxtConfig({
|
||||
componentPrefix: "Svg",
|
||||
defaultImport: "component",
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
@@ -1,18 +1,26 @@
|
||||
{
|
||||
"name": "@lewebsimple/moonshine",
|
||||
"description": "Headless WordPress theme based on Nuxt.",
|
||||
"version": "0.1.10",
|
||||
"version": "0.1.12",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "nuxt build",
|
||||
"editor-style": "pnpx @tailwindcss/cli -i ./app/assets/css/_main.css -o ./editor-style.css --minify",
|
||||
"build": "pnpm --sequential /build:.*/",
|
||||
"build:nuxt": "nuxt build",
|
||||
"dev": "nuxt dev",
|
||||
"lint": "eslint --fix .",
|
||||
"postinstall": "nuxt prepare",
|
||||
"preview": "pnpm run build && wrangler dev --port 3000",
|
||||
"release": "pnpm lint && changelogen --noAuthors --release --push",
|
||||
"typecheck": "nuxt typecheck"
|
||||
"editor-style": "pnpx @tailwindcss/cli -i ./app/assets/css/_main.css -o ./editor-style.css --minify",
|
||||
"lint": "eslint . --fix",
|
||||
"postinstall": "pnpm --sequential /postinstall:.*/",
|
||||
"postinstall:wrangler-types": "pnpm wrangler types ./server/types/cloudflare.d.ts",
|
||||
"postinstall:nuxt": "nuxt prepare",
|
||||
"preview": "pnpm --sequential /preview:.*/",
|
||||
"preview:build": "pnpm run build",
|
||||
"preview:wrangler-dev": "wrangler dev --port 3000",
|
||||
"release": "pnpm --sequential /release:.*/",
|
||||
"release:lint": "eslint .",
|
||||
"release:typecheck": "nuxt typecheck",
|
||||
"release:changelogen": "changelogen --noAuthors --release --push",
|
||||
"wrangler": "wrangler --config .output/server/wrangler.json"
|
||||
},
|
||||
"dependencies": {
|
||||
"@iconify-json/cib": "^1.2.3",
|
||||
|
||||
32
wp-content/themes/moonshine/pnpm-lock.yaml
generated
32
wp-content/themes/moonshine/pnpm-lock.yaml
generated
@@ -839,8 +839,8 @@ packages:
|
||||
resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@eslint/config-helpers@0.5.1':
|
||||
resolution: {integrity: sha512-QN8067dXsXAl9HIvqws7STEviheRFojX3zek5OpC84oBxDGqizW9731ByF/ASxqQihbWrVDdZXS+Ihnsckm9dg==}
|
||||
'@eslint/config-helpers@0.5.2':
|
||||
resolution: {integrity: sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==}
|
||||
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
|
||||
|
||||
'@eslint/config-inspector@1.4.2':
|
||||
@@ -853,8 +853,8 @@ packages:
|
||||
resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@eslint/core@1.0.1':
|
||||
resolution: {integrity: sha512-r18fEAj9uCk+VjzGt2thsbOmychS+4kxI14spVNibUO2vqKX7obOG+ymZljAwuPZl+S3clPGwCwTDtrdqTiY6Q==}
|
||||
'@eslint/core@1.1.0':
|
||||
resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==}
|
||||
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
|
||||
|
||||
'@eslint/eslintrc@3.3.3':
|
||||
@@ -4084,8 +4084,8 @@ packages:
|
||||
resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
get-tsconfig@4.13.0:
|
||||
resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==}
|
||||
get-tsconfig@4.13.1:
|
||||
resolution: {integrity: sha512-EoY1N2xCn44xU6750Sx7OjOIT59FkmstNc3X6y5xpz7D5cBtZRe/3pSlTkDJgqsOk3WwZPkWfonhhUJfttQo3w==}
|
||||
|
||||
giget@2.0.0:
|
||||
resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==}
|
||||
@@ -5225,8 +5225,8 @@ packages:
|
||||
pkg-types@2.3.0:
|
||||
resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
|
||||
|
||||
playwright-core@1.58.0:
|
||||
resolution: {integrity: sha512-aaoB1RWrdNi3//rOeKuMiS65UCcgOVljU46At6eFcOFPFHWtd2weHRRow6z/n+Lec0Lvu0k9ZPKJSjPugikirw==}
|
||||
playwright-core@1.58.1:
|
||||
resolution: {integrity: sha512-bcWzOaTxcW+VOOGBCQgnaKToLJ65d6AqfLVKEWvexyS3AS6rbXl+xdpYRMGSRBClPvyj44njOWoxjNdL/H9UNg==}
|
||||
engines: {node: '>=18'}
|
||||
hasBin: true
|
||||
|
||||
@@ -7117,9 +7117,9 @@ snapshots:
|
||||
dependencies:
|
||||
'@eslint/core': 0.17.0
|
||||
|
||||
'@eslint/config-helpers@0.5.1':
|
||||
'@eslint/config-helpers@0.5.2':
|
||||
dependencies:
|
||||
'@eslint/core': 1.0.1
|
||||
'@eslint/core': 1.1.0
|
||||
|
||||
'@eslint/config-inspector@1.4.2(eslint@9.39.2(jiti@2.6.1))':
|
||||
dependencies:
|
||||
@@ -7140,7 +7140,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@types/json-schema': 7.0.15
|
||||
|
||||
'@eslint/core@1.0.1':
|
||||
'@eslint/core@1.1.0':
|
||||
dependencies:
|
||||
'@types/json-schema': 7.0.15
|
||||
|
||||
@@ -10503,12 +10503,12 @@ snapshots:
|
||||
|
||||
eslint-flat-config-utils@3.0.0:
|
||||
dependencies:
|
||||
'@eslint/config-helpers': 0.5.1
|
||||
'@eslint/config-helpers': 0.5.2
|
||||
pathe: 2.0.3
|
||||
|
||||
eslint-import-context@0.1.9(unrs-resolver@1.11.1):
|
||||
dependencies:
|
||||
get-tsconfig: 4.13.0
|
||||
get-tsconfig: 4.13.1
|
||||
stable-hash-x: 0.2.0
|
||||
optionalDependencies:
|
||||
unrs-resolver: 1.11.1
|
||||
@@ -10919,7 +10919,7 @@ snapshots:
|
||||
'@sec-ant/readable-stream': 0.4.1
|
||||
is-stream: 4.0.1
|
||||
|
||||
get-tsconfig@4.13.0:
|
||||
get-tsconfig@4.13.1:
|
||||
dependencies:
|
||||
resolve-pkg-maps: 1.0.0
|
||||
|
||||
@@ -11916,7 +11916,7 @@ snapshots:
|
||||
ohash: 2.0.11
|
||||
pathe: 2.0.3
|
||||
pkg-types: 2.3.0
|
||||
playwright-core: 1.58.0
|
||||
playwright-core: 1.58.1
|
||||
radix3: 1.1.2
|
||||
satori: 0.18.4
|
||||
satori-html: 0.3.2
|
||||
@@ -12397,7 +12397,7 @@ snapshots:
|
||||
exsolve: 1.0.8
|
||||
pathe: 2.0.3
|
||||
|
||||
playwright-core@1.58.0: {}
|
||||
playwright-core@1.58.1: {}
|
||||
|
||||
pluralize@8.0.0: {}
|
||||
|
||||
|
||||
9
wp-content/themes/moonshine/server/types/h3.d.ts
vendored
Normal file
9
wp-content/themes/moonshine/server/types/h3.d.ts
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
import "h3";
|
||||
|
||||
declare module "h3" {
|
||||
interface H3EventContext {
|
||||
cloudflare: {
|
||||
env: Cloudflare.Env;
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user