summaryrefslogtreecommitdiff
path: root/packages/astro/src/actions/runtime/virtual/shared.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/astro/src/actions/runtime/virtual/shared.ts')
-rw-r--r--packages/astro/src/actions/runtime/virtual/shared.ts19
1 files changed, 18 insertions, 1 deletions
diff --git a/packages/astro/src/actions/runtime/virtual/shared.ts b/packages/astro/src/actions/runtime/virtual/shared.ts
index 5c18828a6..98f75025a 100644
--- a/packages/astro/src/actions/runtime/virtual/shared.ts
+++ b/packages/astro/src/actions/runtime/virtual/shared.ts
@@ -154,10 +154,27 @@ export async function callSafely<TOutput>(
}
}
+export function getActionQueryString(name: string) {
+ const searchParams = new URLSearchParams({ _astroAction: name });
+ return `?${searchParams.toString()}`;
+}
+
+/**
+ * @deprecated You can now pass action functions
+ * directly to the `action` attribute on a form.
+ *
+ * Example: `<form action={actions.like} />`
+ */
export function getActionProps<T extends (args: FormData) => MaybePromise<unknown>>(action: T) {
+ const params = new URLSearchParams(action.toString());
+ const actionName = params.get('_astroAction');
+ if (!actionName) {
+ // No need for AstroError. `getActionProps()` will be removed for stable.
+ throw new Error('Invalid actions function was passed to getActionProps()');
+ }
return {
type: 'hidden',
name: '_astroAction',
- value: action.toString(),
+ value: actionName,
} as const;
}