mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-10-30 16:47:54 +09:00
Fixes https://github.com/webstudio-is/webstudio/issues/5491 ## Description - When pasting an instance with tokens, we can compare the name and the contents. If they are identical, we can choose the existing one and avoid having any conflicts. - When pasting a token and the name is already used, add a numeric suffix to it. - find duplicate tokens command that will go based on content even if name is different ## Steps for reproduction 1. click button 2. expect xyz ## Code Review - [ ] hi @kof, I need you to do - conceptual review (architecture, feature-correctness) - detailed review (read every line) - test it on preview ## Before requesting a review - [ ] made a self-review - [ ] added inline comments where things may be not obvious (the "why", not "what") ## Before merging - [ ] tested locally and on preview environment (preview dev login: 0000) - [ ] updated [test cases](https://github.com/webstudio-is/webstudio/blob/main/apps/builder/docs/test-cases.md) document - [ ] added tests - [ ] if any new env variables are added, added them to `.env` file
27 lines
770 B
TypeScript
27 lines
770 B
TypeScript
import { atom } from "nanostores";
|
|
import { createPubsub } from "./create";
|
|
|
|
// Allow commands to declare their types
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
export interface CommandRegistry {}
|
|
|
|
// Generate namespaced command types from CommandRegistry
|
|
type NamespacedCommands = {
|
|
[K in keyof CommandRegistry as `command:${K & string}`]: CommandRegistry[K];
|
|
};
|
|
|
|
export interface PubsubMap extends NamespacedCommands {
|
|
command: {
|
|
source: string;
|
|
name: string;
|
|
[key: string]: unknown;
|
|
};
|
|
}
|
|
|
|
export const { publish, usePublish, useSubscribe, subscribe } =
|
|
createPubsub<PubsubMap>();
|
|
export type Publish = typeof publish;
|
|
export type UsePublish = typeof usePublish;
|
|
|
|
export const $publisher = atom<{ publish?: Publish }>({});
|