diff --git a/excalidraw-app/collab/Collab.tsx b/excalidraw-app/collab/Collab.tsx index 0964a7365..f10783f40 100644 --- a/excalidraw-app/collab/Collab.tsx +++ b/excalidraw-app/collab/Collab.tsx @@ -24,6 +24,7 @@ import { t } from "@excalidraw/excalidraw/i18n"; import { withBatchedUpdates } from "@excalidraw/excalidraw/reactUtils"; import { assertNever, + isDevEnv, preventUnload, resolvablePromise, throttleRAF, @@ -240,7 +241,7 @@ class Collab extends PureComponent { appJotaiStore.set(collabAPIAtom, collabAPI); - if (import.meta.env.MODE === ENV.TEST || import.meta.env.DEV) { + if (import.meta.env.MODE === ENV.TEST || isDevEnv()) { window.collab = window.collab || ({} as Window["collab"]); Object.defineProperties(window, { collab: { @@ -1013,7 +1014,7 @@ declare global { } } -if (import.meta.env.MODE === ENV.TEST || import.meta.env.DEV) { +if (import.meta.env.MODE === ENV.TEST || isDevEnv()) { window.collab = window.collab || ({} as Window["collab"]); } diff --git a/packages/excalidraw/change.ts b/packages/excalidraw/change.ts index 206f3dcc7..1afc6107a 100644 --- a/packages/excalidraw/change.ts +++ b/packages/excalidraw/change.ts @@ -25,6 +25,7 @@ import { arrayToMap, arrayToObject, assertNever, + isDevEnv, isShallowEqual, toBrandedType, } from "./utils"; @@ -514,7 +515,7 @@ export class AppStateChange implements Change { // shouldn't really happen, but just in case console.error(`Couldn't apply appstate change`, e); - if (import.meta.env.DEV || import.meta.env.MODE === ENV.TEST) { + if (isDevEnv() || import.meta.env.MODE === ENV.TEST) { throw e; } @@ -552,7 +553,7 @@ export class AppStateChange implements Change { // if postprocessing fails it does not make sense to bubble up, but let's make sure we know about it console.error(`Couldn't postprocess appstate change deltas.`); - if (import.meta.env.DEV || import.meta.env.MODE === ENV.TEST) { + if (isDevEnv() || import.meta.env.MODE === ENV.TEST) { throw e; } } finally { @@ -842,7 +843,7 @@ export class ElementsChange implements Change { change = new ElementsChange(added, removed, updated); } - if (import.meta.env.DEV || import.meta.env.MODE === ENV.TEST) { + if (isDevEnv() || import.meta.env.MODE === ENV.TEST) { ElementsChange.validate(change, "added", this.satisfiesAddition); ElementsChange.validate(change, "removed", this.satisfiesRemoval); ElementsChange.validate(change, "updated", this.satisfiesUpdate); @@ -1106,7 +1107,7 @@ export class ElementsChange implements Change { } catch (e) { console.error(`Couldn't apply elements change`, e); - if (import.meta.env.DEV || import.meta.env.MODE === ENV.TEST) { + if (isDevEnv() || import.meta.env.MODE === ENV.TEST) { throw e; } @@ -1137,7 +1138,7 @@ export class ElementsChange implements Change { e, ); - if (import.meta.env.DEV || import.meta.env.MODE === ENV.TEST) { + if (isDevEnv() || import.meta.env.MODE === ENV.TEST) { throw e; } } finally { @@ -1551,7 +1552,7 @@ export class ElementsChange implements Change { // if postprocessing fails, it does not make sense to bubble up, but let's make sure we know about it console.error(`Couldn't postprocess elements change deltas.`); - if (import.meta.env.DEV || import.meta.env.MODE === ENV.TEST) { + if (isDevEnv() || import.meta.env.MODE === ENV.TEST) { throw e; } } finally { diff --git a/packages/excalidraw/components/App.tsx b/packages/excalidraw/components/App.tsx index 8239493ba..a380d9cea 100644 --- a/packages/excalidraw/components/App.tsx +++ b/packages/excalidraw/components/App.tsx @@ -258,6 +258,7 @@ import { getDateTime, isShallowEqual, arrayToMap, + isDevEnv, } from "../utils"; import { createSrcDoc, @@ -2434,7 +2435,7 @@ class App extends React.Component { this.excalidrawContainerValue.container = this.excalidrawContainerRef.current; - if (import.meta.env.MODE === ENV.TEST || import.meta.env.DEV) { + if (import.meta.env.MODE === ENV.TEST || isDevEnv()) { const setState = this.setState.bind(this); Object.defineProperties(window.h, { state: { @@ -11060,7 +11061,7 @@ declare global { } export const createTestHook = () => { - if (import.meta.env.MODE === ENV.TEST || import.meta.env.DEV) { + if (import.meta.env.MODE === ENV.TEST || isDevEnv()) { window.h = window.h || ({} as Window["h"]); Object.defineProperties(window.h, { diff --git a/packages/excalidraw/data/reconcile.ts b/packages/excalidraw/data/reconcile.ts index ef644c3aa..044d3f645 100644 --- a/packages/excalidraw/data/reconcile.ts +++ b/packages/excalidraw/data/reconcile.ts @@ -6,7 +6,7 @@ import { syncInvalidIndices, validateFractionalIndices, } from "../fractionalIndex"; -import { arrayToMap } from "../utils"; +import { arrayToMap, isDevEnv } from "../utils"; import type { OrderedExcalidrawElement } from "../element/types"; import type { AppState } from "../types"; @@ -48,7 +48,7 @@ const validateIndicesThrottled = throttle( remoteElements: readonly RemoteExcalidrawElement[], ) => { if ( - import.meta.env.DEV || + isDevEnv() || import.meta.env.MODE === ENV.TEST || window?.DEBUG_FRACTIONAL_INDICES ) { @@ -59,7 +59,7 @@ const validateIndicesThrottled = throttle( validateFractionalIndices(elements, { // throw in dev & test only, to remain functional on `DEBUG_FRACTIONAL_INDICES` - shouldThrow: import.meta.env.DEV || import.meta.env.MODE === ENV.TEST, + shouldThrow: isDevEnv() || import.meta.env.MODE === ENV.TEST, includeBoundTextValidation: true, reconciliationContext: { localElements, diff --git a/packages/excalidraw/element/textWrapping.ts b/packages/excalidraw/element/textWrapping.ts index 5df7051c0..08a30039c 100644 --- a/packages/excalidraw/element/textWrapping.ts +++ b/packages/excalidraw/element/textWrapping.ts @@ -1,4 +1,5 @@ import { ENV } from "../constants"; +import { isDevEnv } from "../utils"; import { charWidth, getLineWidth } from "./textMeasurements"; @@ -562,7 +563,7 @@ const isSingleCharacter = (maybeSingleCharacter: string) => { * Invariant for the word wrapping algorithm. */ const satisfiesWordInvariant = (word: string) => { - if (import.meta.env.MODE === ENV.TEST || import.meta.env.DEV) { + if (import.meta.env.MODE === ENV.TEST || isDevEnv()) { if (/\s/.test(word)) { throw new Error("Word should not contain any whitespaces!"); } diff --git a/packages/excalidraw/scene/Scene.ts b/packages/excalidraw/scene/Scene.ts index 0eab8b80e..6f711c8dd 100644 --- a/packages/excalidraw/scene/Scene.ts +++ b/packages/excalidraw/scene/Scene.ts @@ -10,7 +10,7 @@ import { } from "../fractionalIndex"; import { getElementsInGroup } from "../groups"; import { randomInteger } from "../random"; -import { arrayToMap } from "../utils"; +import { arrayToMap, isDevEnv } from "../utils"; import { toBrandedType } from "../utils"; import { getSelectedElements } from "./selection"; @@ -58,13 +58,13 @@ const getNonDeletedElements = ( const validateIndicesThrottled = throttle( (elements: readonly ExcalidrawElement[]) => { if ( - import.meta.env.DEV || + isDevEnv() || import.meta.env.MODE === ENV.TEST || window?.DEBUG_FRACTIONAL_INDICES ) { validateFractionalIndices(elements, { // throw only in dev & test, to remain functional on `DEBUG_FRACTIONAL_INDICES` - shouldThrow: import.meta.env.DEV || import.meta.env.MODE === ENV.TEST, + shouldThrow: isDevEnv() || import.meta.env.MODE === ENV.TEST, includeBoundTextValidation: true, }); } diff --git a/packages/excalidraw/store.ts b/packages/excalidraw/store.ts index 1723d0aa1..148786577 100644 --- a/packages/excalidraw/store.ts +++ b/packages/excalidraw/store.ts @@ -3,7 +3,7 @@ import { AppStateChange, ElementsChange } from "./change"; import { ENV } from "./constants"; import { newElementWith } from "./element/mutateElement"; import { Emitter } from "./emitter"; -import { isShallowEqual } from "./utils"; +import { isDevEnv, isShallowEqual } from "./utils"; import { deepCopyElement } from "./element/duplicate"; @@ -257,7 +257,7 @@ export class Store implements IStore { const message = `There can be at most three store actions scheduled at the same time, but there are "${this.scheduledActions.size}".`; console.error(message, this.scheduledActions.values()); - if (import.meta.env.DEV || import.meta.env.MODE === ENV.TEST) { + if (isDevEnv() || import.meta.env.MODE === ENV.TEST) { throw new Error(message); } }