@tldraw/utils 3.16.0-next.282b7be564ae → 3.16.0-next.2f9d39693e4c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,7 +9,7 @@ import { default as uniq } from 'lodash.uniq';
9
9
 
10
10
  /* Excluded from this release type: areObjectsShallowEqual */
11
11
 
12
- /* Excluded from this release type: assert */
12
+ /* Excluded from this release type: assert_2 */
13
13
 
14
14
  /* Excluded from this release type: assertExists */
15
15
 
@@ -103,10 +103,6 @@ export declare type Expand<T> = T extends infer O ? {
103
103
  * @public
104
104
  */
105
105
  export declare class FileHelpers {
106
- /**
107
- * @deprecated Use `urlToArrayBuffer` instead.
108
- */
109
- static dataUrlToArrayBuffer(dataURL: string): Promise<ArrayBuffer>;
110
106
  /**
111
107
  * @param url - The url of the file.
112
108
  */
package/dist-cjs/index.js CHANGED
@@ -167,7 +167,7 @@ var import_version2 = require("./lib/version");
167
167
  var import_warn = require("./lib/warn");
168
168
  (0, import_version.registerTldrawLibraryVersion)(
169
169
  "@tldraw/utils",
170
- "3.16.0-next.282b7be564ae",
170
+ "3.16.0-next.2f9d39693e4c",
171
171
  "cjs"
172
172
  );
173
173
  //# sourceMappingURL=index.js.map
@@ -23,14 +23,6 @@ __export(file_exports, {
23
23
  module.exports = __toCommonJS(file_exports);
24
24
  var import_network = require("./network");
25
25
  class FileHelpers {
26
- /**
27
- * @deprecated Use `urlToArrayBuffer` instead.
28
- */
29
- static async dataUrlToArrayBuffer(dataURL) {
30
- return (0, import_network.fetch)(dataURL).then(function(result) {
31
- return result.arrayBuffer();
32
- });
33
- }
34
26
  /**
35
27
  * @param url - The url of the file.
36
28
  */
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lib/file.ts"],
4
- "sourcesContent": ["import { fetch } from './network'\n\n/**\n * Helpers for files\n *\n * @public\n */\nexport class FileHelpers {\n\t/**\n\t * @deprecated Use `urlToArrayBuffer` instead.\n\t */\n\tstatic async dataUrlToArrayBuffer(dataURL: string) {\n\t\treturn fetch(dataURL).then(function (result) {\n\t\t\treturn result.arrayBuffer()\n\t\t})\n\t}\n\n\t/**\n\t * @param url - The url of the file.\n\t */\n\tstatic async urlToArrayBuffer(url: string) {\n\t\tconst response = await fetch(url)\n\t\treturn await response.arrayBuffer()\n\t}\n\n\tstatic async urlToBlob(url: string) {\n\t\tconst response = await fetch(url)\n\t\treturn await response.blob()\n\t}\n\n\tstatic async urlToDataUrl(url: string) {\n\t\tif (url.startsWith('data:')) return url\n\t\tconst blob = await FileHelpers.urlToBlob(url)\n\t\treturn await FileHelpers.blobToDataUrl(blob)\n\t}\n\n\t/**\n\t * Convert a file to a base64 encoded data url.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * const A = FileHelpers.toDataUrl(myImageFile)\n\t * ```\n\t *\n\t * @param file - The file as a blob.\n\t */\n\tstatic async blobToDataUrl(file: Blob): Promise<string> {\n\t\treturn await new Promise((resolve, reject) => {\n\t\t\tif (file) {\n\t\t\t\tconst reader = new FileReader()\n\t\t\t\treader.onload = () => resolve(reader.result as string)\n\t\t\t\treader.onerror = (error) => reject(error)\n\t\t\t\treader.onabort = (error) => reject(error)\n\t\t\t\treader.readAsDataURL(file)\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t * Convert a file to a unicode text string.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * const A = FileHelpers.fileToDataUrl(myTextFile)\n\t * ```\n\t *\n\t * @param file - The file as a blob.\n\t */\n\tstatic async blobToText(file: Blob): Promise<string> {\n\t\treturn await new Promise((resolve, reject) => {\n\t\t\tif (file) {\n\t\t\t\tconst reader = new FileReader()\n\t\t\t\treader.onload = () => resolve(reader.result as string)\n\t\t\t\treader.onerror = (error) => reject(error)\n\t\t\t\treader.onabort = (error) => reject(error)\n\t\t\t\treader.readAsText(file)\n\t\t\t}\n\t\t})\n\t}\n\n\tstatic rewriteMimeType(blob: Blob, newMimeType: string): Blob\n\tstatic rewriteMimeType(blob: File, newMimeType: string): File\n\tstatic rewriteMimeType(blob: Blob | File, newMimeType: string): Blob | File {\n\t\tif (blob.type === newMimeType) return blob\n\t\tif (blob instanceof File) {\n\t\t\treturn new File([blob], blob.name, { type: newMimeType })\n\t\t}\n\t\treturn new Blob([blob], { type: newMimeType })\n\t}\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAsB;AAOf,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA,EAIxB,aAAa,qBAAqB,SAAiB;AAClD,eAAO,sBAAM,OAAO,EAAE,KAAK,SAAU,QAAQ;AAC5C,aAAO,OAAO,YAAY;AAAA,IAC3B,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,iBAAiB,KAAa;AAC1C,UAAM,WAAW,UAAM,sBAAM,GAAG;AAChC,WAAO,MAAM,SAAS,YAAY;AAAA,EACnC;AAAA,EAEA,aAAa,UAAU,KAAa;AACnC,UAAM,WAAW,UAAM,sBAAM,GAAG;AAChC,WAAO,MAAM,SAAS,KAAK;AAAA,EAC5B;AAAA,EAEA,aAAa,aAAa,KAAa;AACtC,QAAI,IAAI,WAAW,OAAO,EAAG,QAAO;AACpC,UAAM,OAAO,MAAM,YAAY,UAAU,GAAG;AAC5C,WAAO,MAAM,YAAY,cAAc,IAAI;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,aAAa,cAAc,MAA6B;AACvD,WAAO,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC7C,UAAI,MAAM;AACT,cAAM,SAAS,IAAI,WAAW;AAC9B,eAAO,SAAS,MAAM,QAAQ,OAAO,MAAgB;AACrD,eAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AACxC,eAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AACxC,eAAO,cAAc,IAAI;AAAA,MAC1B;AAAA,IACD,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,aAAa,WAAW,MAA6B;AACpD,WAAO,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC7C,UAAI,MAAM;AACT,cAAM,SAAS,IAAI,WAAW;AAC9B,eAAO,SAAS,MAAM,QAAQ,OAAO,MAAgB;AACrD,eAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AACxC,eAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AACxC,eAAO,WAAW,IAAI;AAAA,MACvB;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAIA,OAAO,gBAAgB,MAAmB,aAAkC;AAC3E,QAAI,KAAK,SAAS,YAAa,QAAO;AACtC,QAAI,gBAAgB,MAAM;AACzB,aAAO,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAAA,IACzD;AACA,WAAO,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,MAAM,YAAY,CAAC;AAAA,EAC9C;AACD;",
4
+ "sourcesContent": ["import { fetch } from './network'\n\n/**\n * Helpers for files\n *\n * @public\n */\nexport class FileHelpers {\n\t/**\n\t * @param url - The url of the file.\n\t */\n\tstatic async urlToArrayBuffer(url: string) {\n\t\tconst response = await fetch(url)\n\t\treturn await response.arrayBuffer()\n\t}\n\n\tstatic async urlToBlob(url: string) {\n\t\tconst response = await fetch(url)\n\t\treturn await response.blob()\n\t}\n\n\tstatic async urlToDataUrl(url: string) {\n\t\tif (url.startsWith('data:')) return url\n\t\tconst blob = await FileHelpers.urlToBlob(url)\n\t\treturn await FileHelpers.blobToDataUrl(blob)\n\t}\n\n\t/**\n\t * Convert a file to a base64 encoded data url.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * const A = FileHelpers.toDataUrl(myImageFile)\n\t * ```\n\t *\n\t * @param file - The file as a blob.\n\t */\n\tstatic async blobToDataUrl(file: Blob): Promise<string> {\n\t\treturn await new Promise((resolve, reject) => {\n\t\t\tif (file) {\n\t\t\t\tconst reader = new FileReader()\n\t\t\t\treader.onload = () => resolve(reader.result as string)\n\t\t\t\treader.onerror = (error) => reject(error)\n\t\t\t\treader.onabort = (error) => reject(error)\n\t\t\t\treader.readAsDataURL(file)\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t * Convert a file to a unicode text string.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * const A = FileHelpers.fileToDataUrl(myTextFile)\n\t * ```\n\t *\n\t * @param file - The file as a blob.\n\t */\n\tstatic async blobToText(file: Blob): Promise<string> {\n\t\treturn await new Promise((resolve, reject) => {\n\t\t\tif (file) {\n\t\t\t\tconst reader = new FileReader()\n\t\t\t\treader.onload = () => resolve(reader.result as string)\n\t\t\t\treader.onerror = (error) => reject(error)\n\t\t\t\treader.onabort = (error) => reject(error)\n\t\t\t\treader.readAsText(file)\n\t\t\t}\n\t\t})\n\t}\n\n\tstatic rewriteMimeType(blob: Blob, newMimeType: string): Blob\n\tstatic rewriteMimeType(blob: File, newMimeType: string): File\n\tstatic rewriteMimeType(blob: Blob | File, newMimeType: string): Blob | File {\n\t\tif (blob.type === newMimeType) return blob\n\t\tif (blob instanceof File) {\n\t\t\treturn new File([blob], blob.name, { type: newMimeType })\n\t\t}\n\t\treturn new Blob([blob], { type: newMimeType })\n\t}\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAsB;AAOf,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA,EAIxB,aAAa,iBAAiB,KAAa;AAC1C,UAAM,WAAW,UAAM,sBAAM,GAAG;AAChC,WAAO,MAAM,SAAS,YAAY;AAAA,EACnC;AAAA,EAEA,aAAa,UAAU,KAAa;AACnC,UAAM,WAAW,UAAM,sBAAM,GAAG;AAChC,WAAO,MAAM,SAAS,KAAK;AAAA,EAC5B;AAAA,EAEA,aAAa,aAAa,KAAa;AACtC,QAAI,IAAI,WAAW,OAAO,EAAG,QAAO;AACpC,UAAM,OAAO,MAAM,YAAY,UAAU,GAAG;AAC5C,WAAO,MAAM,YAAY,cAAc,IAAI;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,aAAa,cAAc,MAA6B;AACvD,WAAO,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC7C,UAAI,MAAM;AACT,cAAM,SAAS,IAAI,WAAW;AAC9B,eAAO,SAAS,MAAM,QAAQ,OAAO,MAAgB;AACrD,eAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AACxC,eAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AACxC,eAAO,cAAc,IAAI;AAAA,MAC1B;AAAA,IACD,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,aAAa,WAAW,MAA6B;AACpD,WAAO,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC7C,UAAI,MAAM;AACT,cAAM,SAAS,IAAI,WAAW;AAC9B,eAAO,SAAS,MAAM,QAAQ,OAAO,MAAgB;AACrD,eAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AACxC,eAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AACxC,eAAO,WAAW,IAAI;AAAA,MACvB;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAIA,OAAO,gBAAgB,MAAmB,aAAkC;AAC3E,QAAI,KAAK,SAAS,YAAa,QAAO;AACtC,QAAI,gBAAgB,MAAM;AACzB,aAAO,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAAA,IACzD;AACA,WAAO,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,MAAM,YAAY,CAAC;AAAA,EAC9C;AACD;",
6
6
  "names": []
7
7
  }
@@ -9,7 +9,7 @@ import { default as uniq } from 'lodash.uniq';
9
9
 
10
10
  /* Excluded from this release type: areObjectsShallowEqual */
11
11
 
12
- /* Excluded from this release type: assert */
12
+ /* Excluded from this release type: assert_2 */
13
13
 
14
14
  /* Excluded from this release type: assertExists */
15
15
 
@@ -103,10 +103,6 @@ export declare type Expand<T> = T extends infer O ? {
103
103
  * @public
104
104
  */
105
105
  export declare class FileHelpers {
106
- /**
107
- * @deprecated Use `urlToArrayBuffer` instead.
108
- */
109
- static dataUrlToArrayBuffer(dataURL: string): Promise<ArrayBuffer>;
110
106
  /**
111
107
  * @param url - The url of the file.
112
108
  */
@@ -100,7 +100,7 @@ import { registerTldrawLibraryVersion as registerTldrawLibraryVersion2 } from ".
100
100
  import { warnDeprecatedGetter, warnOnce } from "./lib/warn.mjs";
101
101
  registerTldrawLibraryVersion(
102
102
  "@tldraw/utils",
103
- "3.16.0-next.282b7be564ae",
103
+ "3.16.0-next.2f9d39693e4c",
104
104
  "esm"
105
105
  );
106
106
  export {
@@ -1,13 +1,5 @@
1
1
  import { fetch } from "./network.mjs";
2
2
  class FileHelpers {
3
- /**
4
- * @deprecated Use `urlToArrayBuffer` instead.
5
- */
6
- static async dataUrlToArrayBuffer(dataURL) {
7
- return fetch(dataURL).then(function(result) {
8
- return result.arrayBuffer();
9
- });
10
- }
11
3
  /**
12
4
  * @param url - The url of the file.
13
5
  */
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lib/file.ts"],
4
- "sourcesContent": ["import { fetch } from './network'\n\n/**\n * Helpers for files\n *\n * @public\n */\nexport class FileHelpers {\n\t/**\n\t * @deprecated Use `urlToArrayBuffer` instead.\n\t */\n\tstatic async dataUrlToArrayBuffer(dataURL: string) {\n\t\treturn fetch(dataURL).then(function (result) {\n\t\t\treturn result.arrayBuffer()\n\t\t})\n\t}\n\n\t/**\n\t * @param url - The url of the file.\n\t */\n\tstatic async urlToArrayBuffer(url: string) {\n\t\tconst response = await fetch(url)\n\t\treturn await response.arrayBuffer()\n\t}\n\n\tstatic async urlToBlob(url: string) {\n\t\tconst response = await fetch(url)\n\t\treturn await response.blob()\n\t}\n\n\tstatic async urlToDataUrl(url: string) {\n\t\tif (url.startsWith('data:')) return url\n\t\tconst blob = await FileHelpers.urlToBlob(url)\n\t\treturn await FileHelpers.blobToDataUrl(blob)\n\t}\n\n\t/**\n\t * Convert a file to a base64 encoded data url.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * const A = FileHelpers.toDataUrl(myImageFile)\n\t * ```\n\t *\n\t * @param file - The file as a blob.\n\t */\n\tstatic async blobToDataUrl(file: Blob): Promise<string> {\n\t\treturn await new Promise((resolve, reject) => {\n\t\t\tif (file) {\n\t\t\t\tconst reader = new FileReader()\n\t\t\t\treader.onload = () => resolve(reader.result as string)\n\t\t\t\treader.onerror = (error) => reject(error)\n\t\t\t\treader.onabort = (error) => reject(error)\n\t\t\t\treader.readAsDataURL(file)\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t * Convert a file to a unicode text string.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * const A = FileHelpers.fileToDataUrl(myTextFile)\n\t * ```\n\t *\n\t * @param file - The file as a blob.\n\t */\n\tstatic async blobToText(file: Blob): Promise<string> {\n\t\treturn await new Promise((resolve, reject) => {\n\t\t\tif (file) {\n\t\t\t\tconst reader = new FileReader()\n\t\t\t\treader.onload = () => resolve(reader.result as string)\n\t\t\t\treader.onerror = (error) => reject(error)\n\t\t\t\treader.onabort = (error) => reject(error)\n\t\t\t\treader.readAsText(file)\n\t\t\t}\n\t\t})\n\t}\n\n\tstatic rewriteMimeType(blob: Blob, newMimeType: string): Blob\n\tstatic rewriteMimeType(blob: File, newMimeType: string): File\n\tstatic rewriteMimeType(blob: Blob | File, newMimeType: string): Blob | File {\n\t\tif (blob.type === newMimeType) return blob\n\t\tif (blob instanceof File) {\n\t\t\treturn new File([blob], blob.name, { type: newMimeType })\n\t\t}\n\t\treturn new Blob([blob], { type: newMimeType })\n\t}\n}\n"],
5
- "mappings": "AAAA,SAAS,aAAa;AAOf,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA,EAIxB,aAAa,qBAAqB,SAAiB;AAClD,WAAO,MAAM,OAAO,EAAE,KAAK,SAAU,QAAQ;AAC5C,aAAO,OAAO,YAAY;AAAA,IAC3B,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,iBAAiB,KAAa;AAC1C,UAAM,WAAW,MAAM,MAAM,GAAG;AAChC,WAAO,MAAM,SAAS,YAAY;AAAA,EACnC;AAAA,EAEA,aAAa,UAAU,KAAa;AACnC,UAAM,WAAW,MAAM,MAAM,GAAG;AAChC,WAAO,MAAM,SAAS,KAAK;AAAA,EAC5B;AAAA,EAEA,aAAa,aAAa,KAAa;AACtC,QAAI,IAAI,WAAW,OAAO,EAAG,QAAO;AACpC,UAAM,OAAO,MAAM,YAAY,UAAU,GAAG;AAC5C,WAAO,MAAM,YAAY,cAAc,IAAI;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,aAAa,cAAc,MAA6B;AACvD,WAAO,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC7C,UAAI,MAAM;AACT,cAAM,SAAS,IAAI,WAAW;AAC9B,eAAO,SAAS,MAAM,QAAQ,OAAO,MAAgB;AACrD,eAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AACxC,eAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AACxC,eAAO,cAAc,IAAI;AAAA,MAC1B;AAAA,IACD,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,aAAa,WAAW,MAA6B;AACpD,WAAO,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC7C,UAAI,MAAM;AACT,cAAM,SAAS,IAAI,WAAW;AAC9B,eAAO,SAAS,MAAM,QAAQ,OAAO,MAAgB;AACrD,eAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AACxC,eAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AACxC,eAAO,WAAW,IAAI;AAAA,MACvB;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAIA,OAAO,gBAAgB,MAAmB,aAAkC;AAC3E,QAAI,KAAK,SAAS,YAAa,QAAO;AACtC,QAAI,gBAAgB,MAAM;AACzB,aAAO,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAAA,IACzD;AACA,WAAO,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,MAAM,YAAY,CAAC;AAAA,EAC9C;AACD;",
4
+ "sourcesContent": ["import { fetch } from './network'\n\n/**\n * Helpers for files\n *\n * @public\n */\nexport class FileHelpers {\n\t/**\n\t * @param url - The url of the file.\n\t */\n\tstatic async urlToArrayBuffer(url: string) {\n\t\tconst response = await fetch(url)\n\t\treturn await response.arrayBuffer()\n\t}\n\n\tstatic async urlToBlob(url: string) {\n\t\tconst response = await fetch(url)\n\t\treturn await response.blob()\n\t}\n\n\tstatic async urlToDataUrl(url: string) {\n\t\tif (url.startsWith('data:')) return url\n\t\tconst blob = await FileHelpers.urlToBlob(url)\n\t\treturn await FileHelpers.blobToDataUrl(blob)\n\t}\n\n\t/**\n\t * Convert a file to a base64 encoded data url.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * const A = FileHelpers.toDataUrl(myImageFile)\n\t * ```\n\t *\n\t * @param file - The file as a blob.\n\t */\n\tstatic async blobToDataUrl(file: Blob): Promise<string> {\n\t\treturn await new Promise((resolve, reject) => {\n\t\t\tif (file) {\n\t\t\t\tconst reader = new FileReader()\n\t\t\t\treader.onload = () => resolve(reader.result as string)\n\t\t\t\treader.onerror = (error) => reject(error)\n\t\t\t\treader.onabort = (error) => reject(error)\n\t\t\t\treader.readAsDataURL(file)\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t * Convert a file to a unicode text string.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * const A = FileHelpers.fileToDataUrl(myTextFile)\n\t * ```\n\t *\n\t * @param file - The file as a blob.\n\t */\n\tstatic async blobToText(file: Blob): Promise<string> {\n\t\treturn await new Promise((resolve, reject) => {\n\t\t\tif (file) {\n\t\t\t\tconst reader = new FileReader()\n\t\t\t\treader.onload = () => resolve(reader.result as string)\n\t\t\t\treader.onerror = (error) => reject(error)\n\t\t\t\treader.onabort = (error) => reject(error)\n\t\t\t\treader.readAsText(file)\n\t\t\t}\n\t\t})\n\t}\n\n\tstatic rewriteMimeType(blob: Blob, newMimeType: string): Blob\n\tstatic rewriteMimeType(blob: File, newMimeType: string): File\n\tstatic rewriteMimeType(blob: Blob | File, newMimeType: string): Blob | File {\n\t\tif (blob.type === newMimeType) return blob\n\t\tif (blob instanceof File) {\n\t\t\treturn new File([blob], blob.name, { type: newMimeType })\n\t\t}\n\t\treturn new Blob([blob], { type: newMimeType })\n\t}\n}\n"],
5
+ "mappings": "AAAA,SAAS,aAAa;AAOf,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA,EAIxB,aAAa,iBAAiB,KAAa;AAC1C,UAAM,WAAW,MAAM,MAAM,GAAG;AAChC,WAAO,MAAM,SAAS,YAAY;AAAA,EACnC;AAAA,EAEA,aAAa,UAAU,KAAa;AACnC,UAAM,WAAW,MAAM,MAAM,GAAG;AAChC,WAAO,MAAM,SAAS,KAAK;AAAA,EAC5B;AAAA,EAEA,aAAa,aAAa,KAAa;AACtC,QAAI,IAAI,WAAW,OAAO,EAAG,QAAO;AACpC,UAAM,OAAO,MAAM,YAAY,UAAU,GAAG;AAC5C,WAAO,MAAM,YAAY,cAAc,IAAI;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,aAAa,cAAc,MAA6B;AACvD,WAAO,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC7C,UAAI,MAAM;AACT,cAAM,SAAS,IAAI,WAAW;AAC9B,eAAO,SAAS,MAAM,QAAQ,OAAO,MAAgB;AACrD,eAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AACxC,eAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AACxC,eAAO,cAAc,IAAI;AAAA,MAC1B;AAAA,IACD,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,aAAa,WAAW,MAA6B;AACpD,WAAO,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC7C,UAAI,MAAM;AACT,cAAM,SAAS,IAAI,WAAW;AAC9B,eAAO,SAAS,MAAM,QAAQ,OAAO,MAAgB;AACrD,eAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AACxC,eAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AACxC,eAAO,WAAW,IAAI;AAAA,MACvB;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAIA,OAAO,gBAAgB,MAAmB,aAAkC;AAC3E,QAAI,KAAK,SAAS,YAAa,QAAO;AACtC,QAAI,gBAAgB,MAAM;AACzB,aAAO,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAAA,IACzD;AACA,WAAO,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,MAAM,YAAY,CAAC;AAAA,EAC9C;AACD;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tldraw/utils",
3
3
  "description": "tldraw infinite canvas SDK (private utilities).",
4
- "version": "3.16.0-next.282b7be564ae",
4
+ "version": "3.16.0-next.2f9d39693e4c",
5
5
  "author": {
6
6
  "name": "tldraw Inc.",
7
7
  "email": "hello@tldraw.com"
@@ -32,24 +32,16 @@
32
32
  "src"
33
33
  ],
34
34
  "scripts": {
35
- "test-ci": "lazy inherit",
36
- "test": "yarn run -T jest",
37
- "test-coverage": "lazy inherit",
35
+ "test-ci": "yarn run -T vitest run --passWithNoTests",
36
+ "test": "yarn run -T vitest --passWithNoTests",
37
+ "test-coverage": "yarn run -T vitest run --coverage --passWithNoTests",
38
38
  "build": "yarn run -T tsx ../../internal/scripts/build-package.ts",
39
39
  "build-api": "yarn run -T tsx ../../internal/scripts/build-api.ts",
40
40
  "prepack": "yarn run -T tsx ../../internal/scripts/prepack.ts",
41
41
  "postpack": "../../internal/scripts/postpack.sh",
42
42
  "pack-tarball": "yarn pack",
43
- "lint": "yarn run -T tsx ../../internal/scripts/lint.ts"
44
- },
45
- "jest": {
46
- "preset": "../../internal/config/jest/node/jest-preset.js",
47
- "setupFiles": [
48
- "raf/polyfill"
49
- ],
50
- "moduleNameMapper": {
51
- "^~(.*)": "<rootDir>/src/$1"
52
- }
43
+ "lint": "yarn run -T tsx ../../internal/scripts/lint.ts",
44
+ "context": "yarn run -T tsx ../../internal/scripts/context.ts"
53
45
  },
54
46
  "dependencies": {
55
47
  "fractional-indexing-jittered": "^1.0.0",
@@ -63,8 +55,8 @@
63
55
  "@types/lodash.isequalwith": "^4.4.9",
64
56
  "@types/lodash.throttle": "^4.1.9",
65
57
  "@types/lodash.uniq": "^4.5.9",
66
- "jest-environment-jsdom": "^29.7.0",
67
- "lazyrepo": "0.0.0-alpha.27"
58
+ "lazyrepo": "0.0.0-alpha.27",
59
+ "vitest": "^3.2.4"
68
60
  },
69
61
  "module": "dist-esm/index.mjs",
70
62
  "source": "src/index.ts",
@@ -1,43 +1,44 @@
1
+ import { vi } from 'vitest'
1
2
  import { debounce } from './debounce'
2
3
 
3
- jest.useFakeTimers()
4
+ vi.useFakeTimers()
4
5
 
5
6
  describe(debounce, () => {
6
7
  it('should debounce a function', async () => {
7
- const fn = jest.fn()
8
+ const fn = vi.fn()
8
9
  const debounced = debounce(fn, 100)
9
10
  debounced()
10
11
  debounced()
11
12
  debounced()
12
13
  expect(fn).not.toHaveBeenCalled()
13
- jest.advanceTimersByTime(200)
14
+ vi.advanceTimersByTime(200)
14
15
  expect(fn).toHaveBeenCalledTimes(1)
15
- jest.advanceTimersByTime(200)
16
+ vi.advanceTimersByTime(200)
16
17
  expect(fn).toHaveBeenCalledTimes(1)
17
- jest.advanceTimersByTime(200)
18
+ vi.advanceTimersByTime(200)
18
19
  expect(fn).toHaveBeenCalledTimes(1)
19
20
  })
20
21
 
21
22
  it('should debounce a function with arguments', async () => {
22
- const fn = jest.fn()
23
+ const fn = vi.fn()
23
24
  const debounced = debounce(fn, 100)
24
25
  debounced('a', 'b')
25
26
  debounced('a', 'b')
26
27
  debounced('a', 'b')
27
28
  expect(fn).not.toHaveBeenCalled()
28
- jest.advanceTimersByTime(200)
29
+ vi.advanceTimersByTime(200)
29
30
  expect(fn).toHaveBeenCalledTimes(1)
30
31
  expect(fn).toHaveBeenCalledWith('a', 'b')
31
32
  })
32
33
 
33
34
  it('should debounce a function with arguments and return a promise', async () => {
34
- const fn = jest.fn((a, b) => a + b)
35
+ const fn = vi.fn((a, b) => a + b)
35
36
  const debounced = debounce(fn, 100)
36
37
  const promiseA = debounced('a', 'b')
37
38
  const promiseB = debounced('c', 'd')
38
39
  const promiseC = debounced('e', 'f')
39
40
  expect(fn).not.toHaveBeenCalled()
40
- jest.advanceTimersByTime(200)
41
+ vi.advanceTimersByTime(200)
41
42
  expect(fn).toHaveBeenCalledTimes(1)
42
43
  const results = await Promise.all([promiseA, promiseB, promiseC])
43
44
 
@@ -45,12 +46,12 @@ describe(debounce, () => {
45
46
  })
46
47
 
47
48
  it('can be called across multiple debounce windows', async () => {
48
- const fn = jest.fn((a, b) => a + b)
49
+ const fn = vi.fn((a, b) => a + b)
49
50
  const debounced = debounce(fn, 100)
50
51
  const promiseA = debounced('a', 'b')
51
52
  const promiseB = debounced('c', 'd')
52
53
  expect(fn).not.toHaveBeenCalled()
53
- jest.advanceTimersByTime(200)
54
+ vi.advanceTimersByTime(200)
54
55
  expect(fn).toHaveBeenCalledTimes(1)
55
56
 
56
57
  expect(await Promise.all([promiseA, promiseB])).toEqual(['cd', 'cd'])
@@ -59,7 +60,7 @@ describe(debounce, () => {
59
60
  const promiseD = debounced('g', 'h')
60
61
  expect(fn).toHaveBeenCalledTimes(1)
61
62
 
62
- jest.advanceTimersByTime(200)
63
+ vi.advanceTimersByTime(200)
63
64
 
64
65
  expect(fn).toHaveBeenCalledTimes(2)
65
66
  expect(await Promise.all([promiseC, promiseD])).toEqual(['gh', 'gh'])
package/src/lib/file.ts CHANGED
@@ -6,15 +6,6 @@ import { fetch } from './network'
6
6
  * @public
7
7
  */
8
8
  export class FileHelpers {
9
- /**
10
- * @deprecated Use `urlToArrayBuffer` instead.
11
- */
12
- static async dataUrlToArrayBuffer(dataURL: string) {
13
- return fetch(dataURL).then(function (result) {
14
- return result.arrayBuffer()
15
- })
16
- }
17
-
18
9
  /**
19
10
  * @param url - The url of the file.
20
11
  */
@@ -1,28 +1,29 @@
1
+ import { vi } from 'vitest'
1
2
  import { clearRegisteredVersionsForTests, registerTldrawLibraryVersion } from './version'
2
3
 
3
- jest.useFakeTimers()
4
+ vi.useFakeTimers()
4
5
 
5
6
  describe('registerTldrawLibraryVersion', () => {
6
7
  afterEach(() => {
7
8
  clearRegisteredVersionsForTests()
8
- jest.restoreAllMocks()
9
+ vi.restoreAllMocks()
9
10
  })
10
11
 
11
12
  it('doesnt log anything if all versions are the same', () => {
12
- const consoleLogSpy = jest.spyOn(console, 'log').mockImplementation()
13
+ const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
13
14
 
14
15
  registerTldrawLibraryVersion('tldraw', '1.0.0', 'esm')
15
16
  registerTldrawLibraryVersion('@tldraw/editor', '1.0.0', 'esm')
16
17
  registerTldrawLibraryVersion('@tldraw/utils', '1.0.0', 'esm')
17
18
  registerTldrawLibraryVersion('@tldraw/tlschema', '1.0.0', 'esm')
18
19
 
19
- jest.runAllTimers()
20
+ vi.runAllTimers()
20
21
 
21
22
  expect(consoleLogSpy).toHaveBeenCalledTimes(0)
22
23
  })
23
24
 
24
25
  it('logs if not all versions match', () => {
25
- const consoleLogSpy = jest.spyOn(console, 'log').mockImplementation()
26
+ const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
26
27
 
27
28
  registerTldrawLibraryVersion('tldraw', '1.0.0', 'esm')
28
29
  registerTldrawLibraryVersion('@tldraw/editor', '1.1.0', 'esm')
@@ -30,7 +31,7 @@ describe('registerTldrawLibraryVersion', () => {
30
31
  registerTldrawLibraryVersion('@tldraw/utils', '1.2.0', 'esm')
31
32
  registerTldrawLibraryVersion('@tldraw/tlschema', '1.2.0', 'esm')
32
33
 
33
- jest.runAllTimers()
34
+ vi.runAllTimers()
34
35
 
35
36
  expect(consoleLogSpy).toHaveBeenCalledTimes(1)
36
37
  expect(consoleLogSpy.mock.lastCall).toMatchInlineSnapshot(`
@@ -49,7 +50,7 @@ describe('registerTldrawLibraryVersion', () => {
49
50
  })
50
51
 
51
52
  it('logs if multiple versions of te same library are installed', () => {
52
- const consoleLogSpy = jest.spyOn(console, 'log').mockImplementation()
53
+ const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
53
54
 
54
55
  registerTldrawLibraryVersion('tldraw', '1.1.0', 'esm')
55
56
  registerTldrawLibraryVersion('@tldraw/editor', '1.1.0', 'esm')
@@ -58,7 +59,7 @@ describe('registerTldrawLibraryVersion', () => {
58
59
  registerTldrawLibraryVersion('@tldraw/utils', '1.1.0', 'cjs')
59
60
  registerTldrawLibraryVersion('@tldraw/tlschema', '1.1.0', 'esm')
60
61
 
61
- jest.runAllTimers()
62
+ vi.runAllTimers()
62
63
 
63
64
  expect(consoleLogSpy).toHaveBeenCalledTimes(1)
64
65
  expect(consoleLogSpy.mock.lastCall).toMatchInlineSnapshot(`