Files
Oleg Isonen 11ba996f13 feat: New token conflict resolution logic (#5524)
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
2025-12-18 17:31:31 +01:00

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 }>({});