mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-01 02:39:29 +08:00
97 lines
2.1 KiB
JavaScript
97 lines
2.1 KiB
JavaScript
import { getContext } from 'svelte';
|
|
import { browser } from './env.js';
|
|
import '../env.js';
|
|
|
|
// TODO remove this (for 1.0? after 1.0?)
|
|
let warned = false;
|
|
function stores() {
|
|
if (!warned) {
|
|
console.error('stores() is deprecated; use getStores() instead');
|
|
warned = true;
|
|
}
|
|
return getStores();
|
|
}
|
|
|
|
/**
|
|
* @type {import('$app/stores').getStores}
|
|
*/
|
|
const getStores = () => {
|
|
const stores = getContext('__svelte__');
|
|
|
|
return {
|
|
page: {
|
|
subscribe: stores.page.subscribe
|
|
},
|
|
navigating: {
|
|
subscribe: stores.navigating.subscribe
|
|
},
|
|
// TODO remove this (for 1.0? after 1.0?)
|
|
// @ts-expect-error - deprecated, not part of type definitions, but still callable
|
|
get preloading() {
|
|
console.error('stores.preloading is deprecated; use stores.navigating instead');
|
|
return {
|
|
subscribe: stores.navigating.subscribe
|
|
};
|
|
},
|
|
session: stores.session,
|
|
updated: stores.updated
|
|
};
|
|
};
|
|
|
|
/** @type {typeof import('$app/stores').page} */
|
|
const page = {
|
|
/** @param {(value: any) => void} fn */
|
|
subscribe(fn) {
|
|
const store = getStores().page;
|
|
return store.subscribe(fn);
|
|
}
|
|
};
|
|
|
|
/** @type {typeof import('$app/stores').navigating} */
|
|
const navigating = {
|
|
subscribe(fn) {
|
|
const store = getStores().navigating;
|
|
return store.subscribe(fn);
|
|
}
|
|
};
|
|
|
|
/** @param {string} verb */
|
|
const throw_error = (verb) => {
|
|
throw new Error(
|
|
browser
|
|
? `Cannot ${verb} session store before subscribing`
|
|
: `Can only ${verb} session store in browser`
|
|
);
|
|
};
|
|
|
|
/** @type {typeof import('$app/stores').session} */
|
|
const session = {
|
|
subscribe(fn) {
|
|
const store = getStores().session;
|
|
|
|
if (browser) {
|
|
session.set = store.set;
|
|
session.update = store.update;
|
|
}
|
|
|
|
return store.subscribe(fn);
|
|
},
|
|
set: () => throw_error('set'),
|
|
update: () => throw_error('update')
|
|
};
|
|
|
|
/** @type {typeof import('$app/stores').updated} */
|
|
const updated = {
|
|
subscribe(fn) {
|
|
const store = getStores().updated;
|
|
|
|
if (browser) {
|
|
updated.check = store.check;
|
|
}
|
|
|
|
return store.subscribe(fn);
|
|
},
|
|
check: () => throw_error('check')
|
|
};
|
|
|
|
export { getStores, navigating, page, session, stores, updated };
|