chore: replace custom `window` management with `globalThis`

Co-authored-by: Copilot <copilot@github.com>
svelte-custom-renderer-single-type-argument
paoloricciuti 4 months ago
parent 4b4a134113
commit 2af595b31e

@ -148,7 +148,7 @@ export interface CompileOptions extends ModuleCompileOptions {
*/ */
runes?: boolean | undefined | ((options: { filename: string }) => boolean | undefined); runes?: boolean | undefined | ((options: { filename: string }) => boolean | undefined);
/** /**
* If `true`, exposes the Svelte major version in the browser by adding it to a `Set` stored in the global `window.__svelte.v`. * If `true`, exposes the Svelte major version in the browser by adding it to a `Set` stored in the global `globalThis.__svelte.v`.
* *
* @default true * @default true
*/ */

@ -7,9 +7,6 @@
*/ */
export let current_renderer = null; export let current_renderer = null;
// allow for a "window" for each custom renderer...to use with `$props.id`
export let custom_renderer_window_map = new WeakMap();
/** /**
* @param {Renderer<any, any, any, any> | null} value * @param {Renderer<any, any, any, any> | null} value
*/ */

@ -13,7 +13,7 @@ import {
} from '#client/constants'; } from '#client/constants';
import { eager_block_effects } from '../reactivity/batch.js'; import { eager_block_effects } from '../reactivity/batch.js';
import { NAMESPACE_HTML } from '../../../constants.js'; import { NAMESPACE_HTML } from '../../../constants.js';
import { custom_renderer_window_map, current_renderer } from '../custom-renderer/state.js'; import { current_renderer } from '../custom-renderer/state.js';
// export these for reference in the compiled code, making global name deduplication unnecessary // export these for reference in the compiled code, making global name deduplication unnecessary
/** @type {Window} */ /** @type {Window} */
@ -794,15 +794,3 @@ export function class_list_toggle(element, name, force) {
} }
element.classList.toggle(name, force); element.classList.toggle(name, force);
} }
export function get_window() {
if (current_renderer) {
var custom_renderer_window = custom_renderer_window_map.get(current_renderer);
if (!custom_renderer_window) {
custom_renderer_window = {};
custom_renderer_window_map.set(current_renderer, custom_renderer_window);
}
return custom_renderer_window;
}
return window;
}

@ -1,30 +1,12 @@
/** @import { Effect, EffectNodes, TemplateNode } from '#client' */ /** @import { Effect, EffectNodes, TemplateNode } from '#client' */
/** @import { TemplateStructure } from './types' */ /** @import { TemplateStructure } from './types' */
import { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from './hydration.js';
import { import {
create_text, COMMENT_NODE,
get_first_child, DOCUMENT_FRAGMENT_NODE,
get_next_sibling, IS_XHTML,
is_firefox, REACTION_RAN,
create_element, TEXT_NODE
create_fragment, } from '#client/constants';
create_comment,
set_attribute,
merge_text_nodes,
get_last_child,
import_node,
clone_node,
append_child,
insert_before,
set_text_content,
replace_with,
node_type,
get_node_value,
node_name,
get_window
} from './operations.js';
import { create_fragment_from_html } from './reconciler.js';
import { active_effect } from '../runtime.js';
import { import {
NAMESPACE_MATHML, NAMESPACE_MATHML,
NAMESPACE_SVG, NAMESPACE_SVG,
@ -33,14 +15,30 @@ import {
TEMPLATE_USE_MATHML, TEMPLATE_USE_MATHML,
TEMPLATE_USE_SVG TEMPLATE_USE_SVG
} from '../../../constants.js'; } from '../../../constants.js';
import {
COMMENT_NODE,
DOCUMENT_FRAGMENT_NODE,
IS_XHTML,
REACTION_RAN,
TEXT_NODE
} from '#client/constants';
import { current_renderer } from '../custom-renderer/state.js'; import { current_renderer } from '../custom-renderer/state.js';
import { active_effect } from '../runtime.js';
import { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from './hydration.js';
import {
append_child,
clone_node,
create_comment,
create_element,
create_fragment,
create_text,
get_first_child,
get_last_child,
get_node_value,
import_node,
insert_before,
is_firefox,
merge_text_nodes,
node_name,
node_type,
replace_with,
set_attribute,
set_text_content
} from './operations.js';
import { create_fragment_from_html } from './reconciler.js';
const TEMPLATE_TAG = IS_XHTML ? 'template' : 'TEMPLATE'; const TEMPLATE_TAG = IS_XHTML ? 'template' : 'TEMPLATE';
const SCRIPT_TAG = IS_XHTML ? 'script' : 'SCRIPT'; const SCRIPT_TAG = IS_XHTML ? 'script' : 'SCRIPT';
@ -418,10 +416,7 @@ export function props_id() {
return id; return id;
} }
let window = get_window(); /**@type {*}*/ (globalThis.__svelte ??= {}).uid ??= 1;
// This way we ensure the id is unique even across Svelte runtimes
(window.__svelte ??= {}).uid ??= 1;
return `c${window.__svelte.uid++}`; return `c${/**@type {*}*/ (globalThis.__svelte).uid++}`;
} }

@ -2,5 +2,5 @@ import { PUBLIC_VERSION } from '../version.js';
if (typeof window !== 'undefined') { if (typeof window !== 'undefined') {
// @ts-expect-error // @ts-expect-error
((window.__svelte ??= {}).v ??= new Set()).add(PUBLIC_VERSION); ((globalThis.__svelte ??= {}).v ??= new Set()).add(PUBLIC_VERSION);
} }

@ -1105,7 +1105,7 @@ declare module 'svelte/compiler' {
*/ */
runes?: boolean | undefined | ((options: { filename: string }) => boolean | undefined); runes?: boolean | undefined | ((options: { filename: string }) => boolean | undefined);
/** /**
* If `true`, exposes the Svelte major version in the browser by adding it to a `Set` stored in the global `window.__svelte.v`. * If `true`, exposes the Svelte major version in the browser by adding it to a `Set` stored in the global `globalThis.__svelte.v`.
* *
* @default true * @default true
*/ */
@ -3398,7 +3398,7 @@ declare module 'svelte/types/compiler/interfaces' {
*/ */
runes?: boolean | undefined | ((options: { filename: string }) => boolean | undefined); runes?: boolean | undefined | ((options: { filename: string }) => boolean | undefined);
/** /**
* If `true`, exposes the Svelte major version in the browser by adding it to a `Set` stored in the global `window.__svelte.v`. * If `true`, exposes the Svelte major version in the browser by adding it to a `Set` stored in the global `globalThis.__svelte.v`.
* *
* @default true * @default true
*/ */

Loading…
Cancel
Save