···11-import { wait, Signal } from "/js/utils.js";
11+import { wait } from "/js/utils.js";
22+import { Signal } from "/js/signals.js";
2334const POLLING_INTERVAL_SECONDS = 10;
45
···11-import { wait, Signal } from "/js/utils.js";
11+import { wait } from "/js/utils.js";
22+import { Signal } from "/js/signals.js";
2334const POLLING_INTERVAL_SECONDS = 10;
45
···11import { html, render } from "/js/lib/lit-html.js";
22import { Component } from "/js/components/component.js";
33import { postFeedTemplate } from "/js/templates/postFeed.template.js";
44-import { Signal, effect } from "/js/utils.js";
44+import { Signal, effect } from "/js/signals.js";
5566class PluginPostsFeed extends Component {
77 static get observedAttributes() {
···1919 emptyMessage: new Signal.State(this.getAttribute("empty-message")),
2020 };
2121 this.state = {
2222- currentUser: this.dataLayer.signals.$currentUser,
2222+ currentUser: this.dataLayer.derived.$currentUser,
2323 loaded: new Signal.State(false),
2424 posts: new Signal.Computed(() => {
2525 if (!this.state.loaded.get()) return null;
2626 const uris = this.attribs.uris.get();
2727 if (!uris) return null;
2828 return uris
2929- .map((uri) => this.dataLayer.signals.$hydratedPosts.get(uri).get())
2929+ .map((uri) => this.dataLayer.derived.$hydratedPosts.get(uri).get())
3030 .filter(Boolean);
3131 }),
3232 error: new Signal.State(null),
+2-2
src/js/components/plugin-profiles-list.js
···11import { html, render } from "/js/lib/lit-html.js";
22import { Component } from "/js/components/component.js";
33import { profileFeedTemplate } from "/js/templates/profileFeed.template.js";
44-import { Signal, effect } from "/js/utils.js";
44+import { Signal, effect } from "/js/signals.js";
5566class PluginProfilesList extends Component {
77 static get observedAttributes() {
···2121 if (!this.state.loaded.get()) return null;
2222 const dids = this.attribs.dids.get();
2323 return dids
2424- .map((did) => this.dataLayer.signals.$hydratedProfiles.get(did).get())
2424+ .map((did) => this.dataLayer.derived.$hydratedProfiles.get(did).get())
2525 .filter(Boolean);
2626 }),
2727 error: new Signal.State(null),
+1-1
src/js/components/plugin-slot.js
···11import { Component } from "/js/components/component.js";
22-import { effect } from "/js/utils.js";
22+import { effect } from "/js/signals.js";
3344const CONTEXT_PREFIX = "context-";
55
+3-3
src/js/dataLayer/dataLayer.js
···33import { Mutations } from "/js/dataLayer/mutations.js";
44import { Requests } from "/js/dataLayer/requests.js";
55import { Declarative } from "/js/dataLayer/declarative.js";
66-import { Signals } from "/js/dataLayer/signals.js";
66+import { Derived } from "/js/dataLayer/derived.js";
7788export class DataLayer {
99 constructor(api, pluginService, preferencesProvider) {
···3939 this.patchStore,
4040 this.preferencesProvider,
4141 );
4242- this.signals = new Signals(
4242+ this.derived = new Derived(
4343 this.dataStore,
4444 this.patchStore,
4545 this.preferencesProvider,
4646 this.pluginService,
4747 this.isAuthenticated,
4848 );
4949- this.declarative = new Declarative(this.signals, this.requests);
4949+ this.declarative = new Declarative(this.derived, this.requests);
5050 this.subscribers = [];
5151 }
5252
+1-1
src/js/dataLayer/dataStore.js
···11-import { Signal, SignalMap, ReactiveStore } from "/js/utils.js";
11+import { Signal, SignalMap, ReactiveStore } from "/js/signals.js";
22import { getQuotedPost, embedViewRecordToPostView } from "/js/dataHelpers.js";
3344// The store saves canonical data from the server. Patches are layered on top of this.
+21-21
src/js/dataLayer/declarative.js
···11export class Declarative {
22- constructor(signals, requests) {
33- this.signals = signals;
22+ constructor(derived, requests) {
33+ this.derived = derived;
44 this.requests = requests;
55 }
66 async ensureCurrentUser() {
77- let currentUser = this.signals.$currentUser.get();
77+ let currentUser = this.derived.$currentUser.get();
88 if (!currentUser) {
99 await this.requests.loadCurrentUser();
1010- currentUser = this.signals.$currentUser.get();
1010+ currentUser = this.derived.$currentUser.get();
1111 }
1212 if (!currentUser) {
1313 throw new Error("Current user not found");
···1616 }
17171818 async ensureProfile(profileDid) {
1919- const getProfile = (did) => this.signals.$hydratedProfiles.get(did).get();
1919+ const getProfile = (did) => this.derived.$hydratedProfiles.get(did).get();
2020 let profile = getProfile(profileDid);
2121 if (!profile) {
2222 await this.requests.loadProfile(profileDid);
···2929 }
30303131 async ensureProfiles(profileDids) {
3232- const getProfile = (did) => this.signals.$hydratedProfiles.get(did).get();
3232+ const getProfile = (did) => this.derived.$hydratedProfiles.get(did).get();
3333 const missing = profileDids.filter((did) => !getProfile(did));
3434 if (missing.length > 0) {
3535 await this.requests.loadProfiles(missing);
···3838 }
39394040 async ensurePostThread(postURI, { labelers = [] } = {}) {
4141- let postThread = this.signals.$hydratedPostThreads.get(postURI).get();
4141+ let postThread = this.derived.$hydratedPostThreads.get(postURI).get();
4242 if (!postThread) {
4343 await this.requests.loadPostThread(postURI, { labelers });
4444- postThread = this.signals.$hydratedPostThreads.get(postURI).get();
4444+ postThread = this.derived.$hydratedPostThreads.get(postURI).get();
4545 }
4646 if (!postThread) {
4747 throw new Error("Post thread not found");
···5050 }
51515252 async ensurePost(postURI) {
5353- let post = this.signals.$hydratedPosts.get(postURI).get();
5353+ let post = this.derived.$hydratedPosts.get(postURI).get();
5454 if (!post) {
5555 await this.requests.loadPost(postURI);
5656- post = this.signals.$hydratedPosts.get(postURI).get();
5656+ post = this.derived.$hydratedPosts.get(postURI).get();
5757 }
5858 if (!post) {
5959 throw new Error("Post not found");
···6262 }
63636464 async ensurePosts(postURIs) {
6565- const getPost = (uri) => this.signals.$hydratedPosts.get(uri).get();
6565+ const getPost = (uri) => this.derived.$hydratedPosts.get(uri).get();
6666 const missing = postURIs.filter((uri) => !getPost(uri));
6767 if (missing.length > 0) {
6868 await this.requests.loadPosts(missing);
···7171 }
72727373 async ensureFeedGenerator(feedUri) {
7474- let feedGenerator = this.signals.$feedGenerators.get(feedUri).get();
7474+ let feedGenerator = this.derived.$feedGenerators.get(feedUri).get();
7575 if (!feedGenerator) {
7676 await this.requests.loadFeedGenerator(feedUri);
7777- feedGenerator = this.signals.$feedGenerators.get(feedUri).get();
7777+ feedGenerator = this.derived.$feedGenerators.get(feedUri).get();
7878 }
7979 if (!feedGenerator) {
8080 throw new Error("Feed generator not found");
···8383 }
84848585 async ensurePinnedFeedGenerators() {
8686- let pinnedFeedGenerators = this.signals.$hydratedPinnedFeedGenerators.get();
8686+ let pinnedFeedGenerators = this.derived.$hydratedPinnedFeedGenerators.get();
8787 if (!pinnedFeedGenerators) {
8888 await this.requests.loadPinnedFeedGenerators();
8989- pinnedFeedGenerators = this.signals.$hydratedPinnedFeedGenerators.get();
8989+ pinnedFeedGenerators = this.derived.$hydratedPinnedFeedGenerators.get();
9090 }
9191 if (!pinnedFeedGenerators) {
9292 throw new Error("Pinned feed generators not found");
···9595 }
96969797 async ensureConvoList() {
9898- let convoList = this.signals.$convoList.get();
9898+ let convoList = this.derived.$convoList.get();
9999 if (!convoList) {
100100 await this.requests.loadConvoList();
101101- convoList = this.signals.$convoList.get();
101101+ convoList = this.derived.$convoList.get();
102102 }
103103 if (!convoList) {
104104 throw new Error("Conversation list not found");
···107107 }
108108109109 async ensureConvo(convoId) {
110110- let convo = this.signals.$convos.get(convoId).get();
110110+ let convo = this.derived.$convos.get(convoId).get();
111111 if (!convo) {
112112 await this.requests.loadConvo(convoId);
113113- convo = this.signals.$convos.get(convoId).get();
113113+ convo = this.derived.$convos.get(convoId).get();
114114 }
115115 if (!convo) {
116116 throw new Error("Conversation not found");
···119119 }
120120121121 async ensureConvoForProfile(profileDid) {
122122- let convo = this.signals.$convoForProfile.get(profileDid).get();
122122+ let convo = this.derived.$convoForProfile.get(profileDid).get();
123123 if (!convo) {
124124 await this.requests.loadConvoForProfile(profileDid);
125125- convo = this.signals.$convoForProfile.get(profileDid).get();
125125+ convo = this.derived.$convoForProfile.get(profileDid).get();
126126 }
127127 if (!convo) {
128128 throw new Error("Conversation not found");
···11import { deepClone, SimpleUUID } from "/js/utils.js";
22import { pinPostInFeed, unpinPostInFeed } from "/js/dataHelpers.js";
33-import { Signal, SignalMap, ComputedMap, ReactiveStore } from "/js/utils.js";
33+import { Signal, SignalMap, ComputedMap, ReactiveStore } from "/js/signals.js";
4455// The store saves patch data for optimistic updates.
66export class PatchStore extends ReactiveStore {
+1-1
src/js/dataLayer/preferencesProvider.js
···11import { Preferences } from "/js/preferences.js";
22-import { Signal } from "/js/utils.js";
22+import { Signal } from "/js/signals.js";
3344export class PreferencesProvider {
55 constructor(api) {
+2-1
src/js/dataLayer/requests.js
···1111 parseUri,
1212} from "/js/dataHelpers.js";
1313import { Constellation } from "/js/constellation.js";
1414-import { unique, SignalMap, ComputedMap, ReactiveStore } from "/js/utils.js";
1414+import { unique } from "/js/utils.js";
1515+import { SignalMap, ComputedMap, ReactiveStore } from "/js/signals.js";
1516import { ApiError } from "/js/api.js";
16171718// Get URIs of blocked quotes from posts where the author has not blocked the viewer
···11-import { Signal } from "/js/utils.js";
11+import { Signal } from "/js/signals.js";
2233// Handles persisting plugin settings in user preferences
44export class PluginPreferencesManager {