summaryrefslogtreecommitdiff
path: root/packages/integrations/svelte/client.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/svelte/client.js')
-rw-r--r--packages/integrations/svelte/client.js125
1 files changed, 0 insertions, 125 deletions
diff --git a/packages/integrations/svelte/client.js b/packages/integrations/svelte/client.js
deleted file mode 100644
index 288c7a661..000000000
--- a/packages/integrations/svelte/client.js
+++ /dev/null
@@ -1,125 +0,0 @@
-const noop = () => {};
-
-let originalConsoleWarning;
-let consoleFilterRefs = 0;
-
-const existingApplications = new WeakMap();
-
-export default (element) => {
- return (Component, props, slotted, { client }) => {
- if (!element.hasAttribute('ssr')) return;
- const slots = {};
- for (const [key, value] of Object.entries(slotted)) {
- slots[key] = createSlotDefinition(key, value);
- }
-
- try {
- if (import.meta.env.DEV) useConsoleFilter();
-
- if (existingApplications.has(element)) {
- existingApplications.get(element).$set({ ...props, $$slots: slots, $$scope: { ctx: [] } });
- } else {
- const component = new Component({
- target: element,
- props: {
- ...props,
- $$slots: slots,
- $$scope: { ctx: [] },
- },
- hydrate: client !== 'only',
- $$inline: true,
- });
- existingApplications.set(element, component);
-
- element.addEventListener('astro:unmount', () => component.$destroy(), { once: true });
- }
- } finally {
- if (import.meta.env.DEV) finishUsingConsoleFilter();
- }
- };
-};
-
-function createSlotDefinition(key, children) {
- let parent;
- return [
- () => ({
- // mount
- m(target) {
- parent = target;
- target.insertAdjacentHTML(
- 'beforeend',
- `<astro-slot${key === 'default' ? '' : ` name="${key}"`}>${children}</astro-slot>`,
- );
- },
- // create
- c: noop,
- // hydrate
- l: noop,
- // destroy
- d() {
- if (!parent) return;
- const slot = parent.querySelector(
- `astro-slot${key === 'default' ? ':not([name])' : `[name="${key}"]`}`,
- );
- if (slot) slot.remove();
- },
- }),
- noop,
- noop,
- ];
-}
-
-/**
- * Reduces console noise by filtering known non-problematic warnings.
- *
- * Performs reference counting to allow parallel usage from async code.
- *
- * To stop filtering, please ensure that there always is a matching call
- * to `finishUsingConsoleFilter` afterwards.
- */
-function useConsoleFilter() {
- consoleFilterRefs++;
-
- if (!originalConsoleWarning) {
- originalConsoleWarning = console.warn;
- try {
- console.warn = filteredConsoleWarning;
- } catch {
- // If we're unable to hook `console.warn`, just accept it
- }
- }
-}
-
-/**
- * Indicates that the filter installed by `useConsoleFilter`
- * is no longer needed by the calling code.
- */
-function finishUsingConsoleFilter() {
- consoleFilterRefs--;
-
- // Note: Instead of reverting `console.warning` back to the original
- // when the reference counter reaches 0, we leave our hook installed
- // to prevent potential race conditions once `check` is made async
-}
-
-/**
- * Hook/wrapper function for the global `console.warning` function.
- *
- * Ignores known non-problematic errors while any code is using the console filter.
- * Otherwise, simply forwards all arguments to the original function.
- */
-function filteredConsoleWarning(msg, ...rest) {
- if (consoleFilterRefs > 0 && typeof msg === 'string') {
- // Astro passes `class` and `data-astro-cid` props to the Svelte component, which
- // outputs the following warning, which we can safely filter out.
-
- // NOTE: In practice data-astro-cid props have a hash suffix. Hence the use of a
- // quoted prop name string without a closing quote.
-
- const isKnownSvelteError =
- msg.endsWith("was created with unknown prop 'class'") ||
- msg.includes("was created with unknown prop 'data-astro-cid");
- if (isKnownSvelteError) return;
- }
- originalConsoleWarning(msg, ...rest);
-}