diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 1d743439a..a35efba94 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1 +1 @@ -{"packages/core-loader":"1.7.1","packages/react-loader":"1.10.9","packages/svelte-loader":"1.12.1","packages/presentation":"1.17.2","packages/preview-url-secret":"2.0.0","packages/preview-kit-compat":"1.5.9","packages/channels":"0.4.0","packages/visual-editing-helpers":"0.6.23","packages/visual-editing":"2.2.1","packages/insert-menu":"1.0.9","packages/comlink":"1.0.0","packages/next-loader":"1.0.1"} +{"packages/core-loader":"1.7.1","packages/react-loader":"1.10.9","packages/svelte-loader":"1.12.1","packages/presentation":"1.17.2","packages/preview-url-secret":"2.0.0","packages/preview-kit-compat":"1.5.9","packages/visual-editing-helpers":"0.6.23","packages/visual-editing":"2.2.1","packages/insert-menu":"1.0.9","packages/comlink":"1.0.0","packages/next-loader":"1.0.1"} diff --git a/package.config.ts b/package.config.ts deleted file mode 100644 index 30b466ef1..000000000 --- a/package.config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {defineConfig} from '@sanity/pkg-utils' - -export default defineConfig({ - minify: !!process.env.GITHUB_ACTIONS, - extract: { - bundledPackages: ['@repo/visual-editing-helpers'], - rules: { - 'ae-forgotten-export': 'error', - 'ae-incompatible-release-tags': 'warn', - 'ae-internal-missing-underscore': 'off', - 'ae-missing-release-tag': 'warn', - }, - }, - tsconfig: 'tsconfig.build.json', -}) diff --git a/packages/@repo/package.config/src/package.config.ts b/packages/@repo/package.config/src/package.config.ts index 30b466ef1..e945d59fc 100644 --- a/packages/@repo/package.config/src/package.config.ts +++ b/packages/@repo/package.config/src/package.config.ts @@ -1,7 +1,6 @@ import {defineConfig} from '@sanity/pkg-utils' export default defineConfig({ - minify: !!process.env.GITHUB_ACTIONS, extract: { bundledPackages: ['@repo/visual-editing-helpers'], rules: { diff --git a/packages/channels/.eslintignore b/packages/channels/.eslintignore deleted file mode 100644 index 1521c8b76..000000000 --- a/packages/channels/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -dist diff --git a/packages/channels/CHANGELOG.md b/packages/channels/CHANGELOG.md deleted file mode 100644 index f34bf2e73..000000000 --- a/packages/channels/CHANGELOG.md +++ /dev/null @@ -1,37 +0,0 @@ -# Changelog - -## [0.4.0](https://github.com/sanity-io/visual-editing/compare/channels-v0.3.0...channels-v0.4.0) (2024-01-10) - - -### Features - -* add share URL button and improve popup window mode ([#639](https://github.com/sanity-io/visual-editing/issues/639)) ([76daf22](https://github.com/sanity-io/visual-editing/commit/76daf22374afa7ffd92e6e107f0e3bf8f215d46f)) - -## [0.3.0](https://github.com/sanity-io/visual-editing/compare/channels-v0.2.0...channels-v0.3.0) (2023-12-14) - - -### Features - -* **channels:** log error on legacy message ([5377163](https://github.com/sanity-io/visual-editing/commit/5377163f5798451206dc14476080a7c890f66815)) - -## [0.2.0](https://github.com/sanity-io/visual-editing/compare/channels-v0.1.0...channels-v0.2.0) (2023-12-12) - - -### Features - -* **channels:** simplify implementation and API ([#542](https://github.com/sanity-io/visual-editing/issues/542)) ([4854e7f](https://github.com/sanity-io/visual-editing/commit/4854e7f22dabe1aafad340342d1dbc209a94e9e0)) - -## 0.1.0 (2023-12-05) - - -### Features - -* add new `same-origin` option ([#471](https://github.com/sanity-io/visual-editing/issues/471)) ([09621ad](https://github.com/sanity-io/visual-editing/commit/09621ad85897d4c600cbf7a011f8ddcfed75841e)) - - -### Bug Fixes - -* add base readmes ([e5f3f70](https://github.com/sanity-io/visual-editing/commit/e5f3f7054090c269a98bc5d5f6ff9572a8c3725b)) -* add UI for `disconnected` states, improve `unhealthy` UI ([40adc81](https://github.com/sanity-io/visual-editing/commit/40adc81c9c18599c33467148b94155e4d7debf16)) -* handle stega nodes in a way that supports focus ([#254](https://github.com/sanity-io/visual-editing/issues/254)) ([dce801f](https://github.com/sanity-io/visual-editing/commit/dce801f3b76e6e2bb0597345b5deacc2038e6fec)) -* load src directly ([94308f0](https://github.com/sanity-io/visual-editing/commit/94308f0ba815d89347c7201eb759cc0ba6e2bbf7)) diff --git a/packages/channels/README.md b/packages/channels/README.md deleted file mode 100644 index 75038d390..000000000 --- a/packages/channels/README.md +++ /dev/null @@ -1,3 +0,0 @@ -> **Warning** -> -> This is a private package that is bundled into other packages, it's not meant to be published to npm or be used directly. diff --git a/packages/channels/package.json b/packages/channels/package.json deleted file mode 100644 index bf3e5c7dc..000000000 --- a/packages/channels/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "@repo/channels", - "version": "0.4.0", - "private": true, - "license": "MIT", - "author": "Sanity.io ", - "sideEffects": false, - "type": "module", - "exports": { - ".": "./src/index.ts", - "./package.json": "./package.json" - }, - "files": [ - "src" - ], - "scripts": { - "lint": "eslint --cache .", - "test": "vitest --pass-with-no-tests --typecheck" - }, - "prettier": "@repo/prettier-config", - "eslintConfig": { - "extends": [ - "@repo/eslint-config" - ], - "root": true - }, - "dependencies": { - "uuid": "^10.0.0" - }, - "devDependencies": { - "@repo/eslint-config": "workspace:*", - "@repo/prettier-config": "workspace:*", - "eslint": "^8.57.1", - "typescript": "5.6.3", - "vitest": "^2.1.3" - }, - "engines": { - "node": ">=18" - } -} diff --git a/packages/channels/src/constants.ts b/packages/channels/src/constants.ts deleted file mode 100644 index bc2733476..000000000 --- a/packages/channels/src/constants.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type {ChannelMsgType} from './types' - -export const RESPONSE_TIMEOUT = 1000 -export const HEARTBEAT_INTERVAL = 1000 -export const HANDSHAKE_INTERVAL = 500 - -export const INTERNAL_MSG_TYPES = [ - 'channel/disconnect', - 'channel/response', - 'channel/heartbeat', -] satisfies ChannelMsgType[] - -export const HANDSHAKE_MSG_TYPES = [ - 'handshake/syn', - 'handshake/syn-ack', - 'handshake/ack', -] satisfies ChannelMsgType[] diff --git a/packages/channels/src/controller.ts b/packages/channels/src/controller.ts deleted file mode 100644 index 82277524e..000000000 --- a/packages/channels/src/controller.ts +++ /dev/null @@ -1,369 +0,0 @@ -import {v4 as uuid} from 'uuid' -import {HANDSHAKE_INTERVAL, HEARTBEAT_INTERVAL, RESPONSE_TIMEOUT} from './constants' -import {isHandshakeMessage, isLegacyHandshakeMessage} from './helpers' -import type { - ChannelMsg, - ChannelsController, - ChannelsControllerChannel, - ChannelsControllerOptions, - ChannelStatus, - InternalMsgType, - ProtocolMsg, - ToArgs, -} from './types' - -export function createChannelsController< - ConnectionIds extends string, - Sends extends ChannelMsg, - Receives extends ChannelMsg, ->( - config: ChannelsControllerOptions, -): ChannelsController { - type Controller = ChannelsController - - const {destroy, send} = createChannelsControllerInternal(config) - const sources = new Set() - const sendToSource = new WeakMap() - const destroySource = new Set() - - const sendToMany = ((id, ...args) => { - send(id, ...args) - for (const source of sources) { - if (source && 'closed' in source && !source.closed && sendToSource.has(source)) { - const send = sendToSource.get(source) - send!(id, ...args) - } - } - }) satisfies Controller['send'] - - const destroyMany = (() => { - destroy() - for (const destroy of destroySource) { - destroy() - } - }) satisfies Controller['destroy'] - - return { - destroy: destroyMany, - send: sendToMany, - addSource(source) { - if (sources.has(source)) { - return - } - if (!('closed' in source)) { - // eslint-disable-next-line no-console - console.warn('Source is unsupported', {source}) - throw new Error('Source is unsupported') - } - if (source.closed) { - throw new Error('Source is closed') - } - const {send, destroy} = createChannelsControllerInternal({ - ...config, - target: source, - // @TODO temporary workaround for onStatusUpdate and onEvent not differentiating - // iframes from popups - connectTo: config.connectTo.map((prevConnectTo) => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const {onStatusUpdate, onEvent, ...connectTo} = prevConnectTo - - return { - ...connectTo, - onEvent: onEvent - ? (((...args) => { - const [type] = args - if ( - type === 'preview-kit/documents' || - type === 'overlay/navigate' || - type === 'loader/documents' - ) { - return - } - - return onEvent(...args) - }) satisfies typeof onEvent) - : undefined, - } - }), - }) - destroySource.add(destroy) - sendToSource.set(source, send) - sources.add(source) - }, - } -} - -function createChannelsControllerInternal< - ConnectionIds extends string, - Sends extends ChannelMsg, - Receives extends ChannelMsg, ->( - config: ChannelsControllerOptions, -): Omit, 'addSource'> { - type Channel = ChannelsControllerChannel - - const target = config.target - - const channels: Channel[] = config.connectTo.map((config) => ({ - buffer: [], - config, - id: '', - handler: handshakeHandler, - status: 'connecting', - interval: undefined, - heartbeat: undefined, - })) - - function startHandshake(channel: Channel) { - channel.id = uuid() - channel.interval = window.setInterval(() => { - sendHandshake(channel, 'handshake/syn', {id: channel.id}) - }, HANDSHAKE_INTERVAL) - } - - function stopHandshake(channel: Channel) { - window.clearInterval(channel.interval) - } - - function isValidMessageEvent(e: MessageEvent): e is MessageEvent> { - const {data, origin} = e - return ( - data.domain === 'sanity/channels' && - data.to == config.id && - channels.map((channel) => channel.config.id).includes(data.from) && - data.type !== 'channel/response' && - origin === config.targetOrigin - ) - } - - function handshakeHandler(e: MessageEvent>) { - const {data} = e - if (isHandshakeMessage(data.type)) { - const channel = channels.find((channel) => channel.config.id === data.from) - if (channel && data.type === 'handshake/syn-ack') { - sendHandshake(channel, 'handshake/ack', {id: channel.id}) - setChannelStatus(channel, 'connected') - } - } - } - - const messageHandler = ((e: MessageEvent>) => { - const data = e.data as ProtocolMsg - if ( - !isHandshakeMessage(data.type) && - channels.find((channel) => channel.id === data.connectionId) - ) { - const channel = channels.find((channel) => channel.config.id === data.from) - if (channel) { - const args = [data.type, data.data] as ToArgs - channel.config.onEvent?.(...args) - config.onEvent?.(...args) - send(channel, 'channel/response', {responseTo: data.id}, false) - } - } - }) satisfies Channel['handler'] - - function handleEvents(e: MessageEvent>) { - if (isLegacyHandshakeMessage(e)) { - // eslint-disable-next-line no-console - console.error( - 'Visual editing package mismatch detected! Please ensure you are using the latest version of Sanity Studio and any packages listed here:\nhttps://github.com/sanity-io/visual-editing', - ) - return - } - - if (isValidMessageEvent(e)) { - const {data} = e - channels.find((channel) => channel.config.id === data.from)?.handler(e) - } - } - - function flush(channel: Channel) { - const toFlush = [...channel.buffer] - channel.buffer.splice(0, channel.buffer.length) - toFlush.forEach(({type, data}) => { - send(channel, type, data) - }) - } - - function startHeartbeat(channel: Channel) { - stopHeartbeat(channel) - if (channel.config.heartbeat) { - const heartbeatInverval = - typeof channel.config.heartbeat === 'number' ? channel.config.heartbeat : HEARTBEAT_INTERVAL - channel.heartbeat = window.setInterval(() => { - send(channel, 'channel/heartbeat') - }, heartbeatInverval) - } - } - - function stopHeartbeat(channel: Channel) { - if (channel.heartbeat) { - window.clearInterval(channel.heartbeat) - } - } - - function setChannelStatus(channel: Channel, next: ChannelStatus) { - channel.status = next - channel.config.onStatusUpdate?.(next, channel.config.id) - config.onStatusUpdate?.(next, channel.config.id) - if (next === 'connecting' || next === 'reconnecting') { - channel.handler = handshakeHandler - stopHeartbeat(channel) - startHandshake(channel) - } else if (next === 'connected') { - channel.handler = messageHandler - stopHandshake(channel) - startHeartbeat(channel) - flush(channel) - } else if (next === 'disconnected') { - channel.id = null - channel.handler = handshakeHandler - stopHandshake(channel) - stopHeartbeat(channel) - } - } - - function sendHandshake( - channel: Channel, - type: T, - data?: Extract['data'], - ) { - if (!channel.id) { - throw new Error('No channel ID set') - } - - const msg = { - connectionId: channel.id, - data, - domain: 'sanity/channels', - from: config.id, - id: uuid(), - to: channel.config.id, - type, - } satisfies ProtocolMsg - - try { - target?.postMessage(msg, {targetOrigin: '*'}) - } catch (e) { - throw new Error(`Failed to postMessage '${msg.id}' on '${config.id}'`) - } - } - - function send( - channel: Channel, - type: T | InternalMsgType, - data?: Extract['data'], - expectResponse = true, - ) { - const id = uuid() - - // If there is no active channel, push to the buffer - if ( - channel.status === 'connecting' || - channel.status === 'reconnecting' || - channel.status === 'disconnected' - ) { - channel.buffer.push({type, data}) - return - } - - if (!channel.id) { - throw new Error('No channel ID set') - } - - const msg = { - connectionId: channel.id, - data, - domain: 'sanity/channels', - from: config.id, - id, - to: channel.config.id, - type, - } satisfies ProtocolMsg - - if (expectResponse) { - const maxWait = setTimeout(() => { - // The channel may have changed, so only reject if the IDs match - if (msg.connectionId === channel.id) { - // Cleanup the transaction listener - window.removeEventListener('message', transact, false) - // Push the message to the buffer - if (type !== 'channel/heartbeat') { - channel.buffer.push({type, data}) - } - // Try to reconnect - setChannelStatus(channel, 'reconnecting') - // eslint-disable-next-line no-console - console.warn( - `Received no response to message '${msg.type}' on client '${config.id}' (ID: '${msg.id}').`, - ) - } - }, RESPONSE_TIMEOUT) - - const transact = (e: MessageEvent) => { - const {data: eventData} = e - if ( - eventData.type === 'channel/response' && - eventData.data?.['responseTo'] && - eventData.data['responseTo'] === msg.id - ) { - window.removeEventListener('message', transact, false) - clearTimeout(maxWait) - } - } - window.addEventListener('message', transact, false) - } - - try { - target?.postMessage(msg, {targetOrigin: config.targetOrigin}) - } catch (e) { - throw new Error(`Failed to postMessage '${msg.id}' on client '${config.id}'`) - } - } - - function disconnect() { - channels.forEach((channel) => { - if (['disconnected'].includes(channel.status)) return - send(channel, 'channel/disconnect', {id: channel.id}, false) - setChannelStatus(channel, 'disconnected') - }) - } - - function destroy() { - disconnect() - window.removeEventListener('message', handleEvents, false) - channels.forEach((channel) => { - stopHeartbeat(channel) - stopHandshake(channel) - }) - } - - function initialise() { - window.addEventListener('message', handleEvents, false) - channels.forEach((channel) => { - setChannelStatus(channel, 'connecting') - }) - } - - initialise() - - function sendPublic( - id: string | string[] | undefined, - type: T, - data?: Extract['data'], - ) { - const channelsToSend = id ? (Array.isArray(id) ? [...id] : [id]) : channels - - channelsToSend.forEach((id) => { - const channel = channels.find((channel) => channel.config.id === id) - if (!channel) throw new Error('Invalid channel ID') - send(channel, type, data) - }) - } - - return { - destroy, - send: sendPublic, - } -} diff --git a/packages/channels/src/helpers.ts b/packages/channels/src/helpers.ts deleted file mode 100644 index 5b35e4ad8..000000000 --- a/packages/channels/src/helpers.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {HANDSHAKE_MSG_TYPES, INTERNAL_MSG_TYPES} from './constants' -import type {ChannelMsgType, HandshakeMsgType, InternalMsgType} from './types' - -export const isInternalMessage = ( - type: ChannelMsgType | InternalMsgType, -): type is InternalMsgType => { - return INTERNAL_MSG_TYPES.some((t) => t === type) -} - -export const isHandshakeMessage = ( - type: ChannelMsgType | InternalMsgType, -): type is HandshakeMsgType => { - return HANDSHAKE_MSG_TYPES.some((t) => t === type) -} - -export const isLegacyHandshakeMessage = ({data = {}}: MessageEvent): boolean => { - return ( - // Check data is a record type - typeof data === 'object' && - data !== null && - !Array.isArray(data) && - // The "domain" key was introduced in commit 4854e7f - !('domain' in data) && - // Check the rest of the object shape is present - ['id', 'type', 'from', 'to'].every((key) => key in data) && - // Prior to 4854e7f only handshake events were emitted prior to an established connection - data.type.startsWith('handshake/') - ) -} diff --git a/packages/channels/src/index.ts b/packages/channels/src/index.ts deleted file mode 100644 index a99b722b5..000000000 --- a/packages/channels/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -export * from './controller' -export * from './node' -export type { - ChannelMsg, - ChannelMsgData, - ChannelMsgType, - ChannelsController, - ChannelsControllerChannelOptions, - ChannelsControllerOptions, - ChannelsEventHandler, - ChannelsNode, - ChannelsNodeOptions, - ChannelStatus, -} from './types' diff --git a/packages/channels/src/node.ts b/packages/channels/src/node.ts deleted file mode 100644 index 84e4302b6..000000000 --- a/packages/channels/src/node.ts +++ /dev/null @@ -1,187 +0,0 @@ -import {v4 as uuid} from 'uuid' -import {isHandshakeMessage, isInternalMessage, isLegacyHandshakeMessage} from './helpers' -import type { - ChannelMsg, - ChannelsEventSubscriber, - ChannelsNode, - ChannelsNodeChannel, - ChannelsNodeOptions, - ChannelsNodeStatusSubscriber, - ChannelStatus, - HandshakeMsgType, - InternalMsgType, - ProtocolMsg, - ToArgs, -} from './types' - -export function createChannelsNode< - ConnectionIds extends string, - Sends extends ChannelMsg, - Receives extends ChannelMsg, ->(config: ChannelsNodeOptions): ChannelsNode { - const inFrame = window.self !== window.top || window.opener - - const channel: ChannelsNodeChannel = { - buffer: [], - id: null, - origin: null, - source: null, - status: 'connecting', - } - - function flush() { - const toFlush = [...channel.buffer] - channel.buffer.splice(0, channel.buffer.length) - toFlush.forEach(({type, data}) => { - send(type, data) - }) - } - - function send( - type: T | InternalMsgType | HandshakeMsgType, - data?: Extract['data'], - ) { - if ( - !isHandshakeMessage(type) && - !isInternalMessage(type) && - (channel.status === 'connecting' || channel.status === 'reconnecting') - ) { - channel.buffer.push({type, data}) - return - } - - if (channel.id && channel.origin && channel.source) { - const msg: ProtocolMsg = { - connectionId: channel.id, - data, - domain: 'sanity/channels', - from: config.id, - id: uuid(), - to: config.connectTo, - type, - } - - try { - channel.source.postMessage(msg, { - targetOrigin: channel.origin, - }) - } catch (e) { - throw new Error(`Failed to postMessage '${msg.id}' on '${config.id}'`) - } - } - } - - function isValidMessageEvent(e: MessageEvent): e is MessageEvent> { - const {data} = e - return ( - data.domain === 'sanity/channels' && - data.to === config.id && - data.from === config.connectTo && - data.type !== 'channel/response' - ) - } - - function handleEvents(e: MessageEvent) { - if (isLegacyHandshakeMessage(e)) { - // eslint-disable-next-line no-console - console.error( - 'Visual editing package mismatch detected! Please ensure you are using the latest version of Sanity Studio and any packages listed here:\nhttps://github.com/sanity-io/visual-editing', - ) - return - } - - if (isValidMessageEvent(e)) { - const {data} = e - // Once we know the origin, after a valid handshake, we always verify it - if (channel.origin && e.origin !== channel.origin) { - return - } - // Always update the channel source reference, in case it changes - if (e.source && channel.source !== e.source) { - channel.source = e.source - } - - if (isHandshakeMessage(data.type) && data.data) { - if (data.type === 'handshake/syn') { - channel.origin = e.origin - channel.id = data.data['id'] as string - setConnectionStatus('connecting') - send('handshake/syn-ack', {id: channel.id}) - return - } - if (data.type === 'handshake/ack' && data.data['id'] === channel.id) { - setConnectionStatus('connected') - return - } - } else if (data.connectionId === channel.id && e.origin === channel.origin) { - if (data.type === 'channel/disconnect') { - setConnectionStatus('disconnected') - return - } else { - const args = [data.type, data.data] as ToArgs - eventSubscribers.forEach((subscriber) => { - subscriber(...args) - }) - send('channel/response', {responseTo: data.id}) - } - return - } - } - } - - const eventSubscribers = new Set>() - - function subscribeToEvent(subscriber: ChannelsEventSubscriber) { - eventSubscribers.add(subscriber) - return () => eventSubscribers.delete(subscriber) - } - - function disconnect() { - if (['disconnected'].includes(channel.status)) return - // send('channel/disconnect', { id: channel.id }) - setConnectionStatus('disconnected') - } - - const statusSubscribers = new Set() - - function subscribeToStatus(subscriber: ChannelsNodeStatusSubscriber) { - statusSubscribers.add(subscriber) - return () => statusSubscribers.delete(subscriber) - } - - function setConnectionStatus(next: ChannelStatus) { - channel.status = next - statusSubscribers.forEach((subscriber) => { - subscriber(next) - }) - if (next === 'connected') { - flush() - } - } - - function destroy() { - disconnect() - eventSubscribers.clear() - statusSubscribers.clear() - window.removeEventListener('message', handleEvents, false) - } - - function initialise() { - window.addEventListener('message', handleEvents, false) - setConnectionStatus('connecting') - } - - initialise() - - function sendPublic(type: T, data?: Extract['data']) { - send(type, data) - } - - return { - destroy, - inFrame, - send: sendPublic, - subscribe: subscribeToEvent, - onStatusUpdate: subscribeToStatus, - } -} diff --git a/packages/channels/src/types.ts b/packages/channels/src/types.ts deleted file mode 100644 index 75c131122..000000000 --- a/packages/channels/src/types.ts +++ /dev/null @@ -1,175 +0,0 @@ -import {HANDSHAKE_MSG_TYPES, INTERNAL_MSG_TYPES} from './constants' - -/** - * @public - */ -export type ChannelMsgType = `${string}/${string}` - -/** - * @public - */ -export type ChannelMsgData = Record | undefined - -/** - * @public - */ -export interface ChannelMsg { - data: ChannelMsgData - type: ChannelMsgType -} - -/** - * @internal - */ -export type ProtocolMsg = { - id: string - connectionId: string - data?: T['data'] - domain: 'sanity/channels' - from: string - to: string - type: T['type'] -} - -/** - * @internal - */ -export type ToArgs = T extends T ? [type: T['type'], data: T['data']] : never - -/** - * @public - */ -export type ChannelStatus = 'connecting' | 'connected' | 'reconnecting' | 'disconnected' - -/** - * @internal - */ -export type InternalMsgTypeTuple = typeof INTERNAL_MSG_TYPES - -/** - * @internal - */ -export type InternalMsgType = InternalMsgTypeTuple[number] - -/** - * @internal - */ -export type HandshakeMsgTypeTuple = typeof HANDSHAKE_MSG_TYPES - -/** - * @internal - */ -export type HandshakeMsgType = HandshakeMsgTypeTuple[number] - -/** - * @public - */ -export type ChannelsEventHandler = ( - ...args: ToArgs -) => void - -/** - * @public - */ -export type ChannelsControllerStatusSubscriber = ( - status: ChannelStatus, - connectionId: string, -) => void - -/** - * @public - */ -export interface ChannelsControllerOptions< - ConnectionIds extends string, - Receives extends ChannelMsg = ChannelMsg, -> { - id: ConnectionIds - connectTo: ChannelsControllerChannelOptions[] - target: Window - targetOrigin: string - onEvent?: ChannelsEventHandler - onStatusUpdate?: ChannelsControllerStatusSubscriber -} - -/** - * @public - */ -export interface ChannelsControllerChannelOptions< - ConnectionIds extends string, - Receives extends ChannelMsg = ChannelMsg, -> { - id: ConnectionIds - heartbeat?: boolean | number - onEvent?: ChannelsEventHandler - onStatusUpdate?: ChannelsControllerStatusSubscriber -} - -/** - * @internal - */ -export interface ChannelsControllerChannel< - ConnectionIds extends string, - Receives extends ChannelMsg = ChannelMsg, -> { - id: string | null - buffer: ChannelMsg[] - config: ChannelsControllerChannelOptions - handler: (e: MessageEvent>) => void - heartbeat: number | undefined - interval: number | undefined - status: ChannelStatus -} - -/** - * @public - */ -export interface ChannelsController< - ConnectionIds extends string, - Sends extends ChannelMsg = ChannelMsg, -> { - addSource: (source: MessageEventSource) => void - destroy: () => void - send: (id: ConnectionIds | ConnectionIds[] | undefined, ...args: ToArgs) => void -} - -/** - * @public - */ -export interface ChannelsNodeOptions { - id: ConnectionIds - connectTo: ConnectionIds -} - -/** - * @internal - */ -export interface ChannelsNodeChannel { - id: string | null - buffer: ChannelMsg[] - origin: string | null - source: MessageEventSource | null - status: ChannelStatus -} - -/** - * @public - */ -export type ChannelsEventSubscriber = ( - ...args: ToArgs -) => void - -/** - * @public - */ -export type ChannelsNodeStatusSubscriber = (status: ChannelStatus) => void - -/** - * @public - */ -export interface ChannelsNode { - destroy: () => void - inFrame: boolean - onStatusUpdate: (subscriber: ChannelsNodeStatusSubscriber) => () => void - send: (...args: ToArgs) => void - subscribe: (subscriber: ChannelsEventSubscriber) => () => void -} diff --git a/packages/channels/tsconfig.json b/packages/channels/tsconfig.json deleted file mode 100644 index c96d6b9f0..000000000 --- a/packages/channels/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "@sanity/pkg-utils/tsconfig/strictest.json", - "compilerOptions": { - "rootDir": ".", - "outDir": "./dist", - "noUnusedLocals": false, - "noUnusedParameters": false - }, - "include": ["**/*.ts", "**/*.tsx"], - "exclude": ["dist", "node_modules"] -} diff --git a/packages/next-loader/package.config.ts b/packages/next-loader/package.config.ts index bd2b17aa3..d8f3bbd73 100644 --- a/packages/next-loader/package.config.ts +++ b/packages/next-loader/package.config.ts @@ -14,7 +14,6 @@ const MODULE_PATHS_WHICH_USE_SERVER_DIRECTIVE_SHOULD_BE_ADDED = [ export default defineConfig({ ...baseConfig, - minify: false, bundles: [ { source: './src/index.ts', diff --git a/packages/presentation/package.config.ts b/packages/presentation/package.config.ts index 757bfb2d4..8454e08c2 100644 --- a/packages/presentation/package.config.ts +++ b/packages/presentation/package.config.ts @@ -3,7 +3,6 @@ import {defineConfig} from '@sanity/pkg-utils' export default defineConfig({ ...baseConfig, - minify: false, external: ['@sanity/ui', 'react', 'react-dom', 'sanity', 'styled-components'], define: { PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS: process.env['PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS'], diff --git a/packages/presentation/turbo.json b/packages/presentation/turbo.json index 00decc2b7..8c44fd388 100644 --- a/packages/presentation/turbo.json +++ b/packages/presentation/turbo.json @@ -3,7 +3,7 @@ "extends": ["//"], "tasks": { "build": { - "env": ["GITHUB_ACTIONS", "PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS"] + "env": ["PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS"] }, "dev": { "env": ["SANITY_STUDIO_PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS"], diff --git a/packages/visual-editing/package.config.ts b/packages/visual-editing/package.config.ts index 6f79606a7..fb040a017 100644 --- a/packages/visual-editing/package.config.ts +++ b/packages/visual-editing/package.config.ts @@ -3,6 +3,7 @@ import {defineConfig} from '@sanity/pkg-utils' export default defineConfig({ ...baseConfig, + minify: true, // `@sanity/visual-editing` isn't designed to be server side rendered runtime: 'browser', define: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6987fb839..7e88d68d9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -903,28 +903,6 @@ importers: specifier: 5.6.3 version: 5.6.3 - packages/channels: - dependencies: - uuid: - specifier: ^10.0.0 - version: 10.0.0 - devDependencies: - '@repo/eslint-config': - specifier: workspace:* - version: link:../@repo/eslint-config - '@repo/prettier-config': - specifier: workspace:* - version: link:../@repo/prettier-config - eslint: - specifier: ^8.57.1 - version: 8.57.1 - typescript: - specifier: 5.6.3 - version: 5.6.3 - vitest: - specifier: ^2.1.3 - version: 2.1.3(@types/node@22.5.5)(happy-dom@15.7.4)(jsdom@23.2.0)(terser@5.33.0) - packages/comlink: dependencies: rxjs: diff --git a/release-please-config.json b/release-please-config.json index ea8593287..9c60233b0 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -2,9 +2,6 @@ "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", "plugins": ["node-workspace"], "packages": { - "packages/channels": { - "bump-minor-pre-major": true - }, "packages/comlink": {}, "packages/core-loader": {}, "packages/insert-menu": {}, diff --git a/turbo.json b/turbo.json index e88d32504..8b3c5aac4 100644 --- a/turbo.json +++ b/turbo.json @@ -4,12 +4,10 @@ "globalDependencies": [".npmrc", ".prettierrc.cjs", "**/.env.*local"], "tasks": { "build": { - "env": ["GITHUB_ACTIONS"], "outputs": [".svelte-kit/**", "dist/**", "dist-svelte/**"], "dependsOn": ["@sanity/insert-menu#build", "^build"] }, "test": { - "env": ["GITHUB_ACTIONS"], "dependsOn": ["^build"], "cache": false },