@shopify/react-native-skia 1.8.1 → 1.8.2

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.
Files changed (27) hide show
  1. package/lib/commonjs/external/reanimated/useAnimatedImageValue.js +1 -8
  2. package/lib/commonjs/external/reanimated/useAnimatedImageValue.js.map +1 -1
  3. package/lib/commonjs/skia/core/AnimatedImage.d.ts +1 -1
  4. package/lib/commonjs/skia/core/AnimatedImage.js +1 -1
  5. package/lib/commonjs/skia/core/AnimatedImage.js.map +1 -1
  6. package/lib/commonjs/skia/core/Data.d.ts +1 -1
  7. package/lib/commonjs/skia/core/Data.js +2 -8
  8. package/lib/commonjs/skia/core/Data.js.map +1 -1
  9. package/lib/module/external/reanimated/useAnimatedImageValue.js +1 -8
  10. package/lib/module/external/reanimated/useAnimatedImageValue.js.map +1 -1
  11. package/lib/module/skia/core/AnimatedImage.d.ts +1 -1
  12. package/lib/module/skia/core/AnimatedImage.js +1 -1
  13. package/lib/module/skia/core/AnimatedImage.js.map +1 -1
  14. package/lib/module/skia/core/Data.d.ts +1 -1
  15. package/lib/module/skia/core/Data.js +2 -8
  16. package/lib/module/skia/core/Data.js.map +1 -1
  17. package/lib/typescript/lib/commonjs/skia/core/AnimatedImage.d.ts +1 -1
  18. package/lib/typescript/lib/commonjs/skia/core/Data.d.ts +1 -1
  19. package/lib/typescript/lib/module/mock/index.d.ts +1 -1
  20. package/lib/typescript/lib/module/skia/core/AnimatedImage.d.ts +1 -1
  21. package/lib/typescript/lib/module/skia/core/Data.d.ts +1 -1
  22. package/lib/typescript/src/skia/core/AnimatedImage.d.ts +1 -1
  23. package/lib/typescript/src/skia/core/Data.d.ts +1 -1
  24. package/package.json +1 -1
  25. package/src/external/reanimated/useAnimatedImageValue.ts +4 -15
  26. package/src/skia/core/AnimatedImage.ts +2 -3
  27. package/src/skia/core/Data.ts +3 -9
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.useAnimatedImageValue = void 0;
7
- var _react = require("react");
8
7
  var _AnimatedImage = require("../../skia/core/AnimatedImage");
9
8
  var _ReanimatedProxy = _interopRequireDefault(require("./ReanimatedProxy"));
10
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -17,7 +16,7 @@ const useAnimatedImageValue = (source, paused) => {
17
16
  const animatedImage = (0, _AnimatedImage.useAnimatedImage)(source, err => {
18
17
  console.error(err);
19
18
  throw new Error(`Could not load animated image - got '${err.message}'`);
20
- }, false);
19
+ });
21
20
  const frameDuration = (animatedImage === null || animatedImage === void 0 ? void 0 : animatedImage.currentFrameDuration()) || DEFAULT_FRAME_DURATION;
22
21
  _ReanimatedProxy.default.useFrameCallback(frameInfo => {
23
22
  if (!animatedImage) {
@@ -47,12 +46,6 @@ const useAnimatedImageValue = (source, paused) => {
47
46
  // Update the last timestamp
48
47
  lastTimestamp.value = timestamp;
49
48
  });
50
- (0, _react.useEffect)(() => {
51
- return () => {
52
- animatedImage === null || animatedImage === void 0 || animatedImage.dispose();
53
- };
54
- // eslint-disable-next-line react-hooks/exhaustive-deps
55
- }, []);
56
49
  return currentFrame;
57
50
  };
58
51
  exports.useAnimatedImageValue = useAnimatedImageValue;
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_AnimatedImage","_ReanimatedProxy","_interopRequireDefault","e","__esModule","default","DEFAULT_FRAME_DURATION","useAnimatedImageValue","source","paused","defaultPaused","Rea","useSharedValue","isPaused","currentFrame","lastTimestamp","animatedImage","useAnimatedImage","err","console","error","Error","message","frameDuration","currentFrameDuration","useFrameCallback","frameInfo","value","timestamp","elapsed","decodeNextFrame","dispose","getCurrentFrame","useEffect","exports"],"sources":["useAnimatedImageValue.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport type { FrameInfo, SharedValue } from \"react-native-reanimated\";\n\nimport { useAnimatedImage } from \"../../skia/core/AnimatedImage\";\nimport type { DataSourceParam, SkImage } from \"../../skia/types\";\n\nimport Rea from \"./ReanimatedProxy\";\n\nconst DEFAULT_FRAME_DURATION = 60;\n\nexport const useAnimatedImageValue = (\n source: DataSourceParam,\n paused?: SharedValue<boolean>\n) => {\n const defaultPaused = Rea.useSharedValue(false);\n const isPaused = paused ?? defaultPaused;\n const currentFrame = Rea.useSharedValue<null | SkImage>(null);\n const lastTimestamp = Rea.useSharedValue(-1);\n const animatedImage = useAnimatedImage(\n source,\n (err) => {\n console.error(err);\n throw new Error(`Could not load animated image - got '${err.message}'`);\n },\n false\n );\n const frameDuration =\n animatedImage?.currentFrameDuration() || DEFAULT_FRAME_DURATION;\n\n Rea.useFrameCallback((frameInfo: FrameInfo) => {\n if (!animatedImage) {\n currentFrame.value = null;\n return;\n }\n if (isPaused.value && lastTimestamp.value !== -1) {\n return;\n }\n const { timestamp } = frameInfo;\n const elapsed = timestamp - lastTimestamp.value;\n\n // Check if it's time to switch frames based on GIF frame duration\n if (elapsed < frameDuration) {\n return;\n }\n\n // Update the current frame\n animatedImage.decodeNextFrame();\n if (currentFrame.value) {\n currentFrame.value.dispose();\n }\n currentFrame.value = animatedImage.getCurrentFrame();\n\n // Update the last timestamp\n lastTimestamp.value = timestamp;\n });\n useEffect(() => {\n return () => {\n animatedImage?.dispose();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return currentFrame;\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGA,IAAAC,cAAA,GAAAD,OAAA;AAGA,IAAAE,gBAAA,GAAAC,sBAAA,CAAAH,OAAA;AAAoC,SAAAG,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEpC,MAAMG,sBAAsB,GAAG,EAAE;AAE1B,MAAMC,qBAAqB,GAAGA,CACnCC,MAAuB,EACvBC,MAA6B,KAC1B;EACH,MAAMC,aAAa,GAAGC,wBAAG,CAACC,cAAc,CAAC,KAAK,CAAC;EAC/C,MAAMC,QAAQ,GAAGJ,MAAM,aAANA,MAAM,cAANA,MAAM,GAAIC,aAAa;EACxC,MAAMI,YAAY,GAAGH,wBAAG,CAACC,cAAc,CAAiB,IAAI,CAAC;EAC7D,MAAMG,aAAa,GAAGJ,wBAAG,CAACC,cAAc,CAAC,CAAC,CAAC,CAAC;EAC5C,MAAMI,aAAa,GAAG,IAAAC,+BAAgB,EACpCT,MAAM,EACLU,GAAG,IAAK;IACPC,OAAO,CAACC,KAAK,CAACF,GAAG,CAAC;IAClB,MAAM,IAAIG,KAAK,CAAC,wCAAwCH,GAAG,CAACI,OAAO,GAAG,CAAC;EACzE,CAAC,EACD,KACF,CAAC;EACD,MAAMC,aAAa,GACjB,CAAAP,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEQ,oBAAoB,CAAC,CAAC,KAAIlB,sBAAsB;EAEjEK,wBAAG,CAACc,gBAAgB,CAAEC,SAAoB,IAAK;IAC7C,IAAI,CAACV,aAAa,EAAE;MAClBF,YAAY,CAACa,KAAK,GAAG,IAAI;MACzB;IACF;IACA,IAAId,QAAQ,CAACc,KAAK,IAAIZ,aAAa,CAACY,KAAK,KAAK,CAAC,CAAC,EAAE;MAChD;IACF;IACA,MAAM;MAAEC;IAAU,CAAC,GAAGF,SAAS;IAC/B,MAAMG,OAAO,GAAGD,SAAS,GAAGb,aAAa,CAACY,KAAK;;IAE/C;IACA,IAAIE,OAAO,GAAGN,aAAa,EAAE;MAC3B;IACF;;IAEA;IACAP,aAAa,CAACc,eAAe,CAAC,CAAC;IAC/B,IAAIhB,YAAY,CAACa,KAAK,EAAE;MACtBb,YAAY,CAACa,KAAK,CAACI,OAAO,CAAC,CAAC;IAC9B;IACAjB,YAAY,CAACa,KAAK,GAAGX,aAAa,CAACgB,eAAe,CAAC,CAAC;;IAEpD;IACAjB,aAAa,CAACY,KAAK,GAAGC,SAAS;EACjC,CAAC,CAAC;EACF,IAAAK,gBAAS,EAAC,MAAM;IACd,OAAO,MAAM;MACXjB,aAAa,aAAbA,aAAa,eAAbA,aAAa,CAAEe,OAAO,CAAC,CAAC;IAC1B,CAAC;IACD;EACF,CAAC,EAAE,EAAE,CAAC;EACN,OAAOjB,YAAY;AACrB,CAAC;AAACoB,OAAA,CAAA3B,qBAAA,GAAAA,qBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_AnimatedImage","require","_ReanimatedProxy","_interopRequireDefault","e","__esModule","default","DEFAULT_FRAME_DURATION","useAnimatedImageValue","source","paused","defaultPaused","Rea","useSharedValue","isPaused","currentFrame","lastTimestamp","animatedImage","useAnimatedImage","err","console","error","Error","message","frameDuration","currentFrameDuration","useFrameCallback","frameInfo","value","timestamp","elapsed","decodeNextFrame","dispose","getCurrentFrame","exports"],"sources":["useAnimatedImageValue.ts"],"sourcesContent":["import type { FrameInfo, SharedValue } from \"react-native-reanimated\";\n\nimport { useAnimatedImage } from \"../../skia/core/AnimatedImage\";\nimport type { DataSourceParam, SkImage } from \"../../skia/types\";\n\nimport Rea from \"./ReanimatedProxy\";\n\nconst DEFAULT_FRAME_DURATION = 60;\n\nexport const useAnimatedImageValue = (\n source: DataSourceParam,\n paused?: SharedValue<boolean>\n) => {\n const defaultPaused = Rea.useSharedValue(false);\n const isPaused = paused ?? defaultPaused;\n const currentFrame = Rea.useSharedValue<null | SkImage>(null);\n const lastTimestamp = Rea.useSharedValue(-1);\n const animatedImage = useAnimatedImage(source, (err) => {\n console.error(err);\n throw new Error(`Could not load animated image - got '${err.message}'`);\n });\n const frameDuration =\n animatedImage?.currentFrameDuration() || DEFAULT_FRAME_DURATION;\n\n Rea.useFrameCallback((frameInfo: FrameInfo) => {\n if (!animatedImage) {\n currentFrame.value = null;\n return;\n }\n if (isPaused.value && lastTimestamp.value !== -1) {\n return;\n }\n const { timestamp } = frameInfo;\n const elapsed = timestamp - lastTimestamp.value;\n\n // Check if it's time to switch frames based on GIF frame duration\n if (elapsed < frameDuration) {\n return;\n }\n\n // Update the current frame\n animatedImage.decodeNextFrame();\n if (currentFrame.value) {\n currentFrame.value.dispose();\n }\n currentFrame.value = animatedImage.getCurrentFrame();\n\n // Update the last timestamp\n lastTimestamp.value = timestamp;\n });\n return currentFrame;\n};\n"],"mappings":";;;;;;AAEA,IAAAA,cAAA,GAAAC,OAAA;AAGA,IAAAC,gBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAoC,SAAAE,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEpC,MAAMG,sBAAsB,GAAG,EAAE;AAE1B,MAAMC,qBAAqB,GAAGA,CACnCC,MAAuB,EACvBC,MAA6B,KAC1B;EACH,MAAMC,aAAa,GAAGC,wBAAG,CAACC,cAAc,CAAC,KAAK,CAAC;EAC/C,MAAMC,QAAQ,GAAGJ,MAAM,aAANA,MAAM,cAANA,MAAM,GAAIC,aAAa;EACxC,MAAMI,YAAY,GAAGH,wBAAG,CAACC,cAAc,CAAiB,IAAI,CAAC;EAC7D,MAAMG,aAAa,GAAGJ,wBAAG,CAACC,cAAc,CAAC,CAAC,CAAC,CAAC;EAC5C,MAAMI,aAAa,GAAG,IAAAC,+BAAgB,EAACT,MAAM,EAAGU,GAAG,IAAK;IACtDC,OAAO,CAACC,KAAK,CAACF,GAAG,CAAC;IAClB,MAAM,IAAIG,KAAK,CAAC,wCAAwCH,GAAG,CAACI,OAAO,GAAG,CAAC;EACzE,CAAC,CAAC;EACF,MAAMC,aAAa,GACjB,CAAAP,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEQ,oBAAoB,CAAC,CAAC,KAAIlB,sBAAsB;EAEjEK,wBAAG,CAACc,gBAAgB,CAAEC,SAAoB,IAAK;IAC7C,IAAI,CAACV,aAAa,EAAE;MAClBF,YAAY,CAACa,KAAK,GAAG,IAAI;MACzB;IACF;IACA,IAAId,QAAQ,CAACc,KAAK,IAAIZ,aAAa,CAACY,KAAK,KAAK,CAAC,CAAC,EAAE;MAChD;IACF;IACA,MAAM;MAAEC;IAAU,CAAC,GAAGF,SAAS;IAC/B,MAAMG,OAAO,GAAGD,SAAS,GAAGb,aAAa,CAACY,KAAK;;IAE/C;IACA,IAAIE,OAAO,GAAGN,aAAa,EAAE;MAC3B;IACF;;IAEA;IACAP,aAAa,CAACc,eAAe,CAAC,CAAC;IAC/B,IAAIhB,YAAY,CAACa,KAAK,EAAE;MACtBb,YAAY,CAACa,KAAK,CAACI,OAAO,CAAC,CAAC;IAC9B;IACAjB,YAAY,CAACa,KAAK,GAAGX,aAAa,CAACgB,eAAe,CAAC,CAAC;;IAEpD;IACAjB,aAAa,CAACY,KAAK,GAAGC,SAAS;EACjC,CAAC,CAAC;EACF,OAAOd,YAAY;AACrB,CAAC;AAACmB,OAAA,CAAA1B,qBAAA,GAAAA,qBAAA","ignoreList":[]}
@@ -2,4 +2,4 @@ import type { DataSourceParam } from "../types";
2
2
  /**
3
3
  * Returns a Skia Animated Image object
4
4
  * */
5
- export declare const useAnimatedImage: (source: DataSourceParam, onError?: (err: Error) => void, managed?: boolean) => import("../types").SkAnimatedImage | null;
5
+ export declare const useAnimatedImage: (source: DataSourceParam, onError?: (err: Error) => void) => import("../types").SkAnimatedImage | null;
@@ -11,6 +11,6 @@ const animatedImgFactory = _Skia.Skia.AnimatedImage.MakeAnimatedImageFromEncoded
11
11
  /**
12
12
  * Returns a Skia Animated Image object
13
13
  * */
14
- const useAnimatedImage = (source, onError, managed = true) => (0, _Data.useRawData)(source, animatedImgFactory, onError, managed);
14
+ const useAnimatedImage = (source, onError) => (0, _Data.useRawData)(source, animatedImgFactory, onError);
15
15
  exports.useAnimatedImage = useAnimatedImage;
16
16
  //# sourceMappingURL=AnimatedImage.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_Skia","require","_Data","animatedImgFactory","Skia","AnimatedImage","MakeAnimatedImageFromEncoded","bind","useAnimatedImage","source","onError","managed","useRawData","exports"],"sources":["AnimatedImage.ts"],"sourcesContent":["import { Skia } from \"../Skia\";\nimport type { DataSourceParam } from \"../types\";\n\nimport { useRawData } from \"./Data\";\n\nconst animatedImgFactory = Skia.AnimatedImage.MakeAnimatedImageFromEncoded.bind(\n Skia.AnimatedImage\n);\n\n/**\n * Returns a Skia Animated Image object\n * */\nexport const useAnimatedImage = (\n source: DataSourceParam,\n onError?: (err: Error) => void,\n managed = true\n) => useRawData(source, animatedImgFactory, onError, managed);\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAGA,IAAAC,KAAA,GAAAD,OAAA;AAEA,MAAME,kBAAkB,GAAGC,UAAI,CAACC,aAAa,CAACC,4BAA4B,CAACC,IAAI,CAC7EH,UAAI,CAACC,aACP,CAAC;;AAED;AACA;AACA;AACO,MAAMG,gBAAgB,GAAGA,CAC9BC,MAAuB,EACvBC,OAA8B,EAC9BC,OAAO,GAAG,IAAI,KACX,IAAAC,gBAAU,EAACH,MAAM,EAAEN,kBAAkB,EAAEO,OAAO,EAAEC,OAAO,CAAC;AAACE,OAAA,CAAAL,gBAAA,GAAAA,gBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_Skia","require","_Data","animatedImgFactory","Skia","AnimatedImage","MakeAnimatedImageFromEncoded","bind","useAnimatedImage","source","onError","useRawData","exports"],"sources":["AnimatedImage.ts"],"sourcesContent":["import { Skia } from \"../Skia\";\nimport type { DataSourceParam } from \"../types\";\n\nimport { useRawData } from \"./Data\";\n\nconst animatedImgFactory = Skia.AnimatedImage.MakeAnimatedImageFromEncoded.bind(\n Skia.AnimatedImage\n);\n\n/**\n * Returns a Skia Animated Image object\n * */\nexport const useAnimatedImage = (\n source: DataSourceParam,\n onError?: (err: Error) => void\n) => useRawData(source, animatedImgFactory, onError);\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAGA,IAAAC,KAAA,GAAAD,OAAA;AAEA,MAAME,kBAAkB,GAAGC,UAAI,CAACC,aAAa,CAACC,4BAA4B,CAACC,IAAI,CAC7EH,UAAI,CAACC,aACP,CAAC;;AAED;AACA;AACA;AACO,MAAMG,gBAAgB,GAAGA,CAC9BC,MAAuB,EACvBC,OAA8B,KAC3B,IAAAC,gBAAU,EAACF,MAAM,EAAEN,kBAAkB,EAAEO,OAAO,CAAC;AAACE,OAAA,CAAAJ,gBAAA,GAAAA,gBAAA","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import type { SkData, DataSourceParam, SkJSIInstance } from "../types";
2
2
  export declare const loadData: <T>(source: DataSourceParam, factory: (data: SkData) => T | null, onError?: (err: Error) => void) => Promise<T | null>;
3
3
  export declare const useCollectionLoading: <T extends SkJSIInstance<string>>(source: DataSourceParam[], loader: () => Promise<(T | null)[]>) => T[] | null;
4
- export declare const useRawData: <T extends SkJSIInstance<string>>(source: DataSourceParam, factory: (data: SkData) => T | null, onError?: (err: Error) => void, manage?: boolean) => T | null;
4
+ export declare const useRawData: <T extends SkJSIInstance<string>>(source: DataSourceParam, factory: (data: SkData) => T | null, onError?: (err: Error) => void) => T | null;
5
5
  export declare const useData: (source: DataSourceParam, onError?: (err: Error) => void) => SkData | null;
@@ -27,7 +27,7 @@ const loadData = (source, factory, onError) => {
27
27
  }
28
28
  };
29
29
  exports.loadData = loadData;
30
- const useLoading = (source, loader, manage = true) => {
30
+ const useLoading = (source, loader) => {
31
31
  const mounted = (0, _react.useRef)(false);
32
32
  const [data, setData] = (0, _react.useState)(null);
33
33
  const dataRef = (0, _react.useRef)(null);
@@ -40,10 +40,6 @@ const useLoading = (source, loader, manage = true) => {
40
40
  }
41
41
  });
42
42
  return () => {
43
- if (manage) {
44
- var _dataRef$current;
45
- (_dataRef$current = dataRef.current) === null || _dataRef$current === void 0 || _dataRef$current.dispose();
46
- }
47
43
  mounted.current = false;
48
44
  };
49
45
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -64,8 +60,6 @@ const useCollectionLoading = (source, loader) => {
64
60
  }
65
61
  });
66
62
  return () => {
67
- var _dataRef$current2;
68
- (_dataRef$current2 = dataRef.current) === null || _dataRef$current2 === void 0 || _dataRef$current2.forEach(instance => instance === null || instance === void 0 ? void 0 : instance.dispose());
69
63
  mounted.current = false;
70
64
  };
71
65
 
@@ -74,7 +68,7 @@ const useCollectionLoading = (source, loader) => {
74
68
  return data;
75
69
  };
76
70
  exports.useCollectionLoading = useCollectionLoading;
77
- const useRawData = (source, factory, onError, manage = true) => useLoading(source, () => loadData(source, factory, onError), manage);
71
+ const useRawData = (source, factory, onError) => useLoading(source, () => loadData(source, factory, onError));
78
72
  exports.useRawData = useRawData;
79
73
  const identity = data => data;
80
74
  const useData = (source, onError) => useRawData(source, identity, onError);
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_Skia","_Platform","factoryWrapper","data2","factory","onError","factoryResult","Error","loadData","source","undefined","Promise","resolve","Uint8Array","Skia","Data","fromBytes","uri","Platform","resolveAsset","fromURI","then","d","exports","useLoading","loader","manage","mounted","useRef","data","setData","useState","dataRef","useEffect","current","value","_dataRef$current","dispose","useCollectionLoading","result","filter","r","_dataRef$current2","forEach","instance","useRawData","identity","useData"],"sources":["Data.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\nimport { Skia } from \"../Skia\";\nimport type { SkData, DataSourceParam, SkJSIInstance } from \"../types\";\nimport { Platform } from \"../../Platform\";\n\nconst factoryWrapper = <T>(\n data2: SkData,\n factory: (data: SkData) => T,\n onError?: (err: Error) => void\n) => {\n const factoryResult = factory(data2);\n if (factoryResult === null) {\n onError && onError(new Error(\"Could not load data\"));\n return null;\n } else {\n return factoryResult;\n }\n};\n\nexport const loadData = <T>(\n source: DataSourceParam,\n factory: (data: SkData) => T | null,\n onError?: (err: Error) => void\n): Promise<T | null> => {\n if (source === null || source === undefined) {\n return new Promise((resolve) => resolve(null));\n } else if (source instanceof Uint8Array) {\n return new Promise((resolve) =>\n resolve(factoryWrapper(Skia.Data.fromBytes(source), factory, onError))\n );\n } else {\n const uri =\n typeof source === \"string\" ? source : Platform.resolveAsset(source);\n return Skia.Data.fromURI(uri).then((d) =>\n factoryWrapper(d, factory, onError)\n );\n }\n};\n\nconst useLoading = <T extends SkJSIInstance<string>>(\n source: DataSourceParam,\n loader: () => Promise<T | null>,\n manage = true\n) => {\n const mounted = useRef(false);\n const [data, setData] = useState<T | null>(null);\n const dataRef = useRef<T | null>(null);\n useEffect(() => {\n mounted.current = true;\n loader().then((value) => {\n if (mounted.current) {\n setData(value);\n dataRef.current = value;\n }\n });\n return () => {\n if (manage) {\n dataRef.current?.dispose();\n }\n mounted.current = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [source]);\n return data;\n};\n\nexport const useCollectionLoading = <T extends SkJSIInstance<string>>(\n source: DataSourceParam[],\n loader: () => Promise<(T | null)[]>\n) => {\n const mounted = useRef(false);\n const [data, setData] = useState<T[] | null>(null);\n const dataRef = useRef<T[] | null>(null);\n\n useEffect(() => {\n mounted.current = true;\n loader().then((result) => {\n const value = result.filter((r) => r !== null) as T[];\n if (mounted.current) {\n setData(value);\n dataRef.current = value;\n }\n });\n\n return () => {\n dataRef.current?.forEach((instance) => instance?.dispose());\n mounted.current = false;\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [source]);\n\n return data;\n};\n\nexport const useRawData = <T extends SkJSIInstance<string>>(\n source: DataSourceParam,\n factory: (data: SkData) => T | null,\n onError?: (err: Error) => void,\n manage = true\n) => useLoading(source, () => loadData<T>(source, factory, onError), manage);\n\nconst identity = (data: SkData) => data;\n\nexport const useData = (\n source: DataSourceParam,\n onError?: (err: Error) => void\n) => useRawData(source, identity, onError);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_Skia","_Platform","factoryWrapper","data2","factory","onError","factoryResult","Error","loadData","source","undefined","Promise","resolve","Uint8Array","Skia","Data","fromBytes","uri","Platform","resolveAsset","fromURI","then","d","exports","useLoading","loader","mounted","useRef","data","setData","useState","dataRef","useEffect","current","value","useCollectionLoading","result","filter","r","useRawData","identity","useData"],"sources":["Data.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\nimport { Skia } from \"../Skia\";\nimport type { SkData, DataSourceParam, SkJSIInstance } from \"../types\";\nimport { Platform } from \"../../Platform\";\n\nconst factoryWrapper = <T>(\n data2: SkData,\n factory: (data: SkData) => T,\n onError?: (err: Error) => void\n) => {\n const factoryResult = factory(data2);\n if (factoryResult === null) {\n onError && onError(new Error(\"Could not load data\"));\n return null;\n } else {\n return factoryResult;\n }\n};\n\nexport const loadData = <T>(\n source: DataSourceParam,\n factory: (data: SkData) => T | null,\n onError?: (err: Error) => void\n): Promise<T | null> => {\n if (source === null || source === undefined) {\n return new Promise((resolve) => resolve(null));\n } else if (source instanceof Uint8Array) {\n return new Promise((resolve) =>\n resolve(factoryWrapper(Skia.Data.fromBytes(source), factory, onError))\n );\n } else {\n const uri =\n typeof source === \"string\" ? source : Platform.resolveAsset(source);\n return Skia.Data.fromURI(uri).then((d) =>\n factoryWrapper(d, factory, onError)\n );\n }\n};\n\nconst useLoading = <T extends SkJSIInstance<string>>(\n source: DataSourceParam,\n loader: () => Promise<T | null>\n) => {\n const mounted = useRef(false);\n const [data, setData] = useState<T | null>(null);\n const dataRef = useRef<T | null>(null);\n useEffect(() => {\n mounted.current = true;\n loader().then((value) => {\n if (mounted.current) {\n setData(value);\n dataRef.current = value;\n }\n });\n return () => {\n mounted.current = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [source]);\n return data;\n};\n\nexport const useCollectionLoading = <T extends SkJSIInstance<string>>(\n source: DataSourceParam[],\n loader: () => Promise<(T | null)[]>\n) => {\n const mounted = useRef(false);\n const [data, setData] = useState<T[] | null>(null);\n const dataRef = useRef<T[] | null>(null);\n\n useEffect(() => {\n mounted.current = true;\n loader().then((result) => {\n const value = result.filter((r) => r !== null) as T[];\n if (mounted.current) {\n setData(value);\n dataRef.current = value;\n }\n });\n\n return () => {\n mounted.current = false;\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [source]);\n\n return data;\n};\n\nexport const useRawData = <T extends SkJSIInstance<string>>(\n source: DataSourceParam,\n factory: (data: SkData) => T | null,\n onError?: (err: Error) => void\n) => useLoading(source, () => loadData<T>(source, factory, onError));\n\nconst identity = (data: SkData) => data;\n\nexport const useData = (\n source: DataSourceParam,\n onError?: (err: Error) => void\n) => useRawData(source, identity, onError);\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,3 @@
1
- import { useEffect } from "react";
2
1
  import { useAnimatedImage } from "../../skia/core/AnimatedImage";
3
2
  import Rea from "./ReanimatedProxy";
4
3
  const DEFAULT_FRAME_DURATION = 60;
@@ -10,7 +9,7 @@ export const useAnimatedImageValue = (source, paused) => {
10
9
  const animatedImage = useAnimatedImage(source, err => {
11
10
  console.error(err);
12
11
  throw new Error(`Could not load animated image - got '${err.message}'`);
13
- }, false);
12
+ });
14
13
  const frameDuration = (animatedImage === null || animatedImage === void 0 ? void 0 : animatedImage.currentFrameDuration()) || DEFAULT_FRAME_DURATION;
15
14
  Rea.useFrameCallback(frameInfo => {
16
15
  if (!animatedImage) {
@@ -40,12 +39,6 @@ export const useAnimatedImageValue = (source, paused) => {
40
39
  // Update the last timestamp
41
40
  lastTimestamp.value = timestamp;
42
41
  });
43
- useEffect(() => {
44
- return () => {
45
- animatedImage === null || animatedImage === void 0 || animatedImage.dispose();
46
- };
47
- // eslint-disable-next-line react-hooks/exhaustive-deps
48
- }, []);
49
42
  return currentFrame;
50
43
  };
51
44
  //# sourceMappingURL=useAnimatedImageValue.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useAnimatedImage","Rea","DEFAULT_FRAME_DURATION","useAnimatedImageValue","source","paused","defaultPaused","useSharedValue","isPaused","currentFrame","lastTimestamp","animatedImage","err","console","error","Error","message","frameDuration","currentFrameDuration","useFrameCallback","frameInfo","value","timestamp","elapsed","decodeNextFrame","dispose","getCurrentFrame"],"sources":["useAnimatedImageValue.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport type { FrameInfo, SharedValue } from \"react-native-reanimated\";\n\nimport { useAnimatedImage } from \"../../skia/core/AnimatedImage\";\nimport type { DataSourceParam, SkImage } from \"../../skia/types\";\n\nimport Rea from \"./ReanimatedProxy\";\n\nconst DEFAULT_FRAME_DURATION = 60;\n\nexport const useAnimatedImageValue = (\n source: DataSourceParam,\n paused?: SharedValue<boolean>\n) => {\n const defaultPaused = Rea.useSharedValue(false);\n const isPaused = paused ?? defaultPaused;\n const currentFrame = Rea.useSharedValue<null | SkImage>(null);\n const lastTimestamp = Rea.useSharedValue(-1);\n const animatedImage = useAnimatedImage(\n source,\n (err) => {\n console.error(err);\n throw new Error(`Could not load animated image - got '${err.message}'`);\n },\n false\n );\n const frameDuration =\n animatedImage?.currentFrameDuration() || DEFAULT_FRAME_DURATION;\n\n Rea.useFrameCallback((frameInfo: FrameInfo) => {\n if (!animatedImage) {\n currentFrame.value = null;\n return;\n }\n if (isPaused.value && lastTimestamp.value !== -1) {\n return;\n }\n const { timestamp } = frameInfo;\n const elapsed = timestamp - lastTimestamp.value;\n\n // Check if it's time to switch frames based on GIF frame duration\n if (elapsed < frameDuration) {\n return;\n }\n\n // Update the current frame\n animatedImage.decodeNextFrame();\n if (currentFrame.value) {\n currentFrame.value.dispose();\n }\n currentFrame.value = animatedImage.getCurrentFrame();\n\n // Update the last timestamp\n lastTimestamp.value = timestamp;\n });\n useEffect(() => {\n return () => {\n animatedImage?.dispose();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return currentFrame;\n};\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AAGjC,SAASC,gBAAgB,QAAQ,+BAA+B;AAGhE,OAAOC,GAAG,MAAM,mBAAmB;AAEnC,MAAMC,sBAAsB,GAAG,EAAE;AAEjC,OAAO,MAAMC,qBAAqB,GAAGA,CACnCC,MAAuB,EACvBC,MAA6B,KAC1B;EACH,MAAMC,aAAa,GAAGL,GAAG,CAACM,cAAc,CAAC,KAAK,CAAC;EAC/C,MAAMC,QAAQ,GAAGH,MAAM,aAANA,MAAM,cAANA,MAAM,GAAIC,aAAa;EACxC,MAAMG,YAAY,GAAGR,GAAG,CAACM,cAAc,CAAiB,IAAI,CAAC;EAC7D,MAAMG,aAAa,GAAGT,GAAG,CAACM,cAAc,CAAC,CAAC,CAAC,CAAC;EAC5C,MAAMI,aAAa,GAAGX,gBAAgB,CACpCI,MAAM,EACLQ,GAAG,IAAK;IACPC,OAAO,CAACC,KAAK,CAACF,GAAG,CAAC;IAClB,MAAM,IAAIG,KAAK,CAAC,wCAAwCH,GAAG,CAACI,OAAO,GAAG,CAAC;EACzE,CAAC,EACD,KACF,CAAC;EACD,MAAMC,aAAa,GACjB,CAAAN,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEO,oBAAoB,CAAC,CAAC,KAAIhB,sBAAsB;EAEjED,GAAG,CAACkB,gBAAgB,CAAEC,SAAoB,IAAK;IAC7C,IAAI,CAACT,aAAa,EAAE;MAClBF,YAAY,CAACY,KAAK,GAAG,IAAI;MACzB;IACF;IACA,IAAIb,QAAQ,CAACa,KAAK,IAAIX,aAAa,CAACW,KAAK,KAAK,CAAC,CAAC,EAAE;MAChD;IACF;IACA,MAAM;MAAEC;IAAU,CAAC,GAAGF,SAAS;IAC/B,MAAMG,OAAO,GAAGD,SAAS,GAAGZ,aAAa,CAACW,KAAK;;IAE/C;IACA,IAAIE,OAAO,GAAGN,aAAa,EAAE;MAC3B;IACF;;IAEA;IACAN,aAAa,CAACa,eAAe,CAAC,CAAC;IAC/B,IAAIf,YAAY,CAACY,KAAK,EAAE;MACtBZ,YAAY,CAACY,KAAK,CAACI,OAAO,CAAC,CAAC;IAC9B;IACAhB,YAAY,CAACY,KAAK,GAAGV,aAAa,CAACe,eAAe,CAAC,CAAC;;IAEpD;IACAhB,aAAa,CAACW,KAAK,GAAGC,SAAS;EACjC,CAAC,CAAC;EACFvB,SAAS,CAAC,MAAM;IACd,OAAO,MAAM;MACXY,aAAa,aAAbA,aAAa,eAAbA,aAAa,CAAEc,OAAO,CAAC,CAAC;IAC1B,CAAC;IACD;EACF,CAAC,EAAE,EAAE,CAAC;EACN,OAAOhB,YAAY;AACrB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useAnimatedImage","Rea","DEFAULT_FRAME_DURATION","useAnimatedImageValue","source","paused","defaultPaused","useSharedValue","isPaused","currentFrame","lastTimestamp","animatedImage","err","console","error","Error","message","frameDuration","currentFrameDuration","useFrameCallback","frameInfo","value","timestamp","elapsed","decodeNextFrame","dispose","getCurrentFrame"],"sources":["useAnimatedImageValue.ts"],"sourcesContent":["import type { FrameInfo, SharedValue } from \"react-native-reanimated\";\n\nimport { useAnimatedImage } from \"../../skia/core/AnimatedImage\";\nimport type { DataSourceParam, SkImage } from \"../../skia/types\";\n\nimport Rea from \"./ReanimatedProxy\";\n\nconst DEFAULT_FRAME_DURATION = 60;\n\nexport const useAnimatedImageValue = (\n source: DataSourceParam,\n paused?: SharedValue<boolean>\n) => {\n const defaultPaused = Rea.useSharedValue(false);\n const isPaused = paused ?? defaultPaused;\n const currentFrame = Rea.useSharedValue<null | SkImage>(null);\n const lastTimestamp = Rea.useSharedValue(-1);\n const animatedImage = useAnimatedImage(source, (err) => {\n console.error(err);\n throw new Error(`Could not load animated image - got '${err.message}'`);\n });\n const frameDuration =\n animatedImage?.currentFrameDuration() || DEFAULT_FRAME_DURATION;\n\n Rea.useFrameCallback((frameInfo: FrameInfo) => {\n if (!animatedImage) {\n currentFrame.value = null;\n return;\n }\n if (isPaused.value && lastTimestamp.value !== -1) {\n return;\n }\n const { timestamp } = frameInfo;\n const elapsed = timestamp - lastTimestamp.value;\n\n // Check if it's time to switch frames based on GIF frame duration\n if (elapsed < frameDuration) {\n return;\n }\n\n // Update the current frame\n animatedImage.decodeNextFrame();\n if (currentFrame.value) {\n currentFrame.value.dispose();\n }\n currentFrame.value = animatedImage.getCurrentFrame();\n\n // Update the last timestamp\n lastTimestamp.value = timestamp;\n });\n return currentFrame;\n};\n"],"mappings":"AAEA,SAASA,gBAAgB,QAAQ,+BAA+B;AAGhE,OAAOC,GAAG,MAAM,mBAAmB;AAEnC,MAAMC,sBAAsB,GAAG,EAAE;AAEjC,OAAO,MAAMC,qBAAqB,GAAGA,CACnCC,MAAuB,EACvBC,MAA6B,KAC1B;EACH,MAAMC,aAAa,GAAGL,GAAG,CAACM,cAAc,CAAC,KAAK,CAAC;EAC/C,MAAMC,QAAQ,GAAGH,MAAM,aAANA,MAAM,cAANA,MAAM,GAAIC,aAAa;EACxC,MAAMG,YAAY,GAAGR,GAAG,CAACM,cAAc,CAAiB,IAAI,CAAC;EAC7D,MAAMG,aAAa,GAAGT,GAAG,CAACM,cAAc,CAAC,CAAC,CAAC,CAAC;EAC5C,MAAMI,aAAa,GAAGX,gBAAgB,CAACI,MAAM,EAAGQ,GAAG,IAAK;IACtDC,OAAO,CAACC,KAAK,CAACF,GAAG,CAAC;IAClB,MAAM,IAAIG,KAAK,CAAC,wCAAwCH,GAAG,CAACI,OAAO,GAAG,CAAC;EACzE,CAAC,CAAC;EACF,MAAMC,aAAa,GACjB,CAAAN,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEO,oBAAoB,CAAC,CAAC,KAAIhB,sBAAsB;EAEjED,GAAG,CAACkB,gBAAgB,CAAEC,SAAoB,IAAK;IAC7C,IAAI,CAACT,aAAa,EAAE;MAClBF,YAAY,CAACY,KAAK,GAAG,IAAI;MACzB;IACF;IACA,IAAIb,QAAQ,CAACa,KAAK,IAAIX,aAAa,CAACW,KAAK,KAAK,CAAC,CAAC,EAAE;MAChD;IACF;IACA,MAAM;MAAEC;IAAU,CAAC,GAAGF,SAAS;IAC/B,MAAMG,OAAO,GAAGD,SAAS,GAAGZ,aAAa,CAACW,KAAK;;IAE/C;IACA,IAAIE,OAAO,GAAGN,aAAa,EAAE;MAC3B;IACF;;IAEA;IACAN,aAAa,CAACa,eAAe,CAAC,CAAC;IAC/B,IAAIf,YAAY,CAACY,KAAK,EAAE;MACtBZ,YAAY,CAACY,KAAK,CAACI,OAAO,CAAC,CAAC;IAC9B;IACAhB,YAAY,CAACY,KAAK,GAAGV,aAAa,CAACe,eAAe,CAAC,CAAC;;IAEpD;IACAhB,aAAa,CAACW,KAAK,GAAGC,SAAS;EACjC,CAAC,CAAC;EACF,OAAOb,YAAY;AACrB,CAAC","ignoreList":[]}
@@ -2,4 +2,4 @@ import type { DataSourceParam } from "../types";
2
2
  /**
3
3
  * Returns a Skia Animated Image object
4
4
  * */
5
- export declare const useAnimatedImage: (source: DataSourceParam, onError?: (err: Error) => void, managed?: boolean) => import("../types").SkAnimatedImage | null;
5
+ export declare const useAnimatedImage: (source: DataSourceParam, onError?: (err: Error) => void) => import("../types").SkAnimatedImage | null;
@@ -5,5 +5,5 @@ const animatedImgFactory = Skia.AnimatedImage.MakeAnimatedImageFromEncoded.bind(
5
5
  /**
6
6
  * Returns a Skia Animated Image object
7
7
  * */
8
- export const useAnimatedImage = (source, onError, managed = true) => useRawData(source, animatedImgFactory, onError, managed);
8
+ export const useAnimatedImage = (source, onError) => useRawData(source, animatedImgFactory, onError);
9
9
  //# sourceMappingURL=AnimatedImage.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Skia","useRawData","animatedImgFactory","AnimatedImage","MakeAnimatedImageFromEncoded","bind","useAnimatedImage","source","onError","managed"],"sources":["AnimatedImage.ts"],"sourcesContent":["import { Skia } from \"../Skia\";\nimport type { DataSourceParam } from \"../types\";\n\nimport { useRawData } from \"./Data\";\n\nconst animatedImgFactory = Skia.AnimatedImage.MakeAnimatedImageFromEncoded.bind(\n Skia.AnimatedImage\n);\n\n/**\n * Returns a Skia Animated Image object\n * */\nexport const useAnimatedImage = (\n source: DataSourceParam,\n onError?: (err: Error) => void,\n managed = true\n) => useRawData(source, animatedImgFactory, onError, managed);\n"],"mappings":"AAAA,SAASA,IAAI,QAAQ,SAAS;AAG9B,SAASC,UAAU,QAAQ,QAAQ;AAEnC,MAAMC,kBAAkB,GAAGF,IAAI,CAACG,aAAa,CAACC,4BAA4B,CAACC,IAAI,CAC7EL,IAAI,CAACG,aACP,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMG,gBAAgB,GAAGA,CAC9BC,MAAuB,EACvBC,OAA8B,EAC9BC,OAAO,GAAG,IAAI,KACXR,UAAU,CAACM,MAAM,EAAEL,kBAAkB,EAAEM,OAAO,EAAEC,OAAO,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Skia","useRawData","animatedImgFactory","AnimatedImage","MakeAnimatedImageFromEncoded","bind","useAnimatedImage","source","onError"],"sources":["AnimatedImage.ts"],"sourcesContent":["import { Skia } from \"../Skia\";\nimport type { DataSourceParam } from \"../types\";\n\nimport { useRawData } from \"./Data\";\n\nconst animatedImgFactory = Skia.AnimatedImage.MakeAnimatedImageFromEncoded.bind(\n Skia.AnimatedImage\n);\n\n/**\n * Returns a Skia Animated Image object\n * */\nexport const useAnimatedImage = (\n source: DataSourceParam,\n onError?: (err: Error) => void\n) => useRawData(source, animatedImgFactory, onError);\n"],"mappings":"AAAA,SAASA,IAAI,QAAQ,SAAS;AAG9B,SAASC,UAAU,QAAQ,QAAQ;AAEnC,MAAMC,kBAAkB,GAAGF,IAAI,CAACG,aAAa,CAACC,4BAA4B,CAACC,IAAI,CAC7EL,IAAI,CAACG,aACP,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMG,gBAAgB,GAAGA,CAC9BC,MAAuB,EACvBC,OAA8B,KAC3BP,UAAU,CAACM,MAAM,EAAEL,kBAAkB,EAAEM,OAAO,CAAC","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import type { SkData, DataSourceParam, SkJSIInstance } from "../types";
2
2
  export declare const loadData: <T>(source: DataSourceParam, factory: (data: SkData) => T | null, onError?: (err: Error) => void) => Promise<T | null>;
3
3
  export declare const useCollectionLoading: <T extends SkJSIInstance<string>>(source: DataSourceParam[], loader: () => Promise<(T | null)[]>) => T[] | null;
4
- export declare const useRawData: <T extends SkJSIInstance<string>>(source: DataSourceParam, factory: (data: SkData) => T | null, onError?: (err: Error) => void, manage?: boolean) => T | null;
4
+ export declare const useRawData: <T extends SkJSIInstance<string>>(source: DataSourceParam, factory: (data: SkData) => T | null, onError?: (err: Error) => void) => T | null;
5
5
  export declare const useData: (source: DataSourceParam, onError?: (err: Error) => void) => SkData | null;
@@ -20,7 +20,7 @@ export const loadData = (source, factory, onError) => {
20
20
  return Skia.Data.fromURI(uri).then(d => factoryWrapper(d, factory, onError));
21
21
  }
22
22
  };
23
- const useLoading = (source, loader, manage = true) => {
23
+ const useLoading = (source, loader) => {
24
24
  const mounted = useRef(false);
25
25
  const [data, setData] = useState(null);
26
26
  const dataRef = useRef(null);
@@ -33,10 +33,6 @@ const useLoading = (source, loader, manage = true) => {
33
33
  }
34
34
  });
35
35
  return () => {
36
- if (manage) {
37
- var _dataRef$current;
38
- (_dataRef$current = dataRef.current) === null || _dataRef$current === void 0 || _dataRef$current.dispose();
39
- }
40
36
  mounted.current = false;
41
37
  };
42
38
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -57,8 +53,6 @@ export const useCollectionLoading = (source, loader) => {
57
53
  }
58
54
  });
59
55
  return () => {
60
- var _dataRef$current2;
61
- (_dataRef$current2 = dataRef.current) === null || _dataRef$current2 === void 0 || _dataRef$current2.forEach(instance => instance === null || instance === void 0 ? void 0 : instance.dispose());
62
56
  mounted.current = false;
63
57
  };
64
58
 
@@ -66,7 +60,7 @@ export const useCollectionLoading = (source, loader) => {
66
60
  }, [source]);
67
61
  return data;
68
62
  };
69
- export const useRawData = (source, factory, onError, manage = true) => useLoading(source, () => loadData(source, factory, onError), manage);
63
+ export const useRawData = (source, factory, onError) => useLoading(source, () => loadData(source, factory, onError));
70
64
  const identity = data => data;
71
65
  export const useData = (source, onError) => useRawData(source, identity, onError);
72
66
  //# sourceMappingURL=Data.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useRef","useState","Skia","Platform","factoryWrapper","data2","factory","onError","factoryResult","Error","loadData","source","undefined","Promise","resolve","Uint8Array","Data","fromBytes","uri","resolveAsset","fromURI","then","d","useLoading","loader","manage","mounted","data","setData","dataRef","current","value","_dataRef$current","dispose","useCollectionLoading","result","filter","r","_dataRef$current2","forEach","instance","useRawData","identity","useData"],"sources":["Data.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\nimport { Skia } from \"../Skia\";\nimport type { SkData, DataSourceParam, SkJSIInstance } from \"../types\";\nimport { Platform } from \"../../Platform\";\n\nconst factoryWrapper = <T>(\n data2: SkData,\n factory: (data: SkData) => T,\n onError?: (err: Error) => void\n) => {\n const factoryResult = factory(data2);\n if (factoryResult === null) {\n onError && onError(new Error(\"Could not load data\"));\n return null;\n } else {\n return factoryResult;\n }\n};\n\nexport const loadData = <T>(\n source: DataSourceParam,\n factory: (data: SkData) => T | null,\n onError?: (err: Error) => void\n): Promise<T | null> => {\n if (source === null || source === undefined) {\n return new Promise((resolve) => resolve(null));\n } else if (source instanceof Uint8Array) {\n return new Promise((resolve) =>\n resolve(factoryWrapper(Skia.Data.fromBytes(source), factory, onError))\n );\n } else {\n const uri =\n typeof source === \"string\" ? source : Platform.resolveAsset(source);\n return Skia.Data.fromURI(uri).then((d) =>\n factoryWrapper(d, factory, onError)\n );\n }\n};\n\nconst useLoading = <T extends SkJSIInstance<string>>(\n source: DataSourceParam,\n loader: () => Promise<T | null>,\n manage = true\n) => {\n const mounted = useRef(false);\n const [data, setData] = useState<T | null>(null);\n const dataRef = useRef<T | null>(null);\n useEffect(() => {\n mounted.current = true;\n loader().then((value) => {\n if (mounted.current) {\n setData(value);\n dataRef.current = value;\n }\n });\n return () => {\n if (manage) {\n dataRef.current?.dispose();\n }\n mounted.current = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [source]);\n return data;\n};\n\nexport const useCollectionLoading = <T extends SkJSIInstance<string>>(\n source: DataSourceParam[],\n loader: () => Promise<(T | null)[]>\n) => {\n const mounted = useRef(false);\n const [data, setData] = useState<T[] | null>(null);\n const dataRef = useRef<T[] | null>(null);\n\n useEffect(() => {\n mounted.current = true;\n loader().then((result) => {\n const value = result.filter((r) => r !== null) as T[];\n if (mounted.current) {\n setData(value);\n dataRef.current = value;\n }\n });\n\n return () => {\n dataRef.current?.forEach((instance) => instance?.dispose());\n mounted.current = false;\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [source]);\n\n return data;\n};\n\nexport const useRawData = <T extends SkJSIInstance<string>>(\n source: DataSourceParam,\n factory: (data: SkData) => T | null,\n onError?: (err: Error) => void,\n manage = true\n) => useLoading(source, () => loadData<T>(source, factory, onError), manage);\n\nconst identity = (data: SkData) => data;\n\nexport const useData = (\n source: DataSourceParam,\n onError?: (err: Error) => void\n) => useRawData(source, identity, onError);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","useRef","useState","Skia","Platform","factoryWrapper","data2","factory","onError","factoryResult","Error","loadData","source","undefined","Promise","resolve","Uint8Array","Data","fromBytes","uri","resolveAsset","fromURI","then","d","useLoading","loader","mounted","data","setData","dataRef","current","value","useCollectionLoading","result","filter","r","useRawData","identity","useData"],"sources":["Data.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\nimport { Skia } from \"../Skia\";\nimport type { SkData, DataSourceParam, SkJSIInstance } from \"../types\";\nimport { Platform } from \"../../Platform\";\n\nconst factoryWrapper = <T>(\n data2: SkData,\n factory: (data: SkData) => T,\n onError?: (err: Error) => void\n) => {\n const factoryResult = factory(data2);\n if (factoryResult === null) {\n onError && onError(new Error(\"Could not load data\"));\n return null;\n } else {\n return factoryResult;\n }\n};\n\nexport const loadData = <T>(\n source: DataSourceParam,\n factory: (data: SkData) => T | null,\n onError?: (err: Error) => void\n): Promise<T | null> => {\n if (source === null || source === undefined) {\n return new Promise((resolve) => resolve(null));\n } else if (source instanceof Uint8Array) {\n return new Promise((resolve) =>\n resolve(factoryWrapper(Skia.Data.fromBytes(source), factory, onError))\n );\n } else {\n const uri =\n typeof source === \"string\" ? source : Platform.resolveAsset(source);\n return Skia.Data.fromURI(uri).then((d) =>\n factoryWrapper(d, factory, onError)\n );\n }\n};\n\nconst useLoading = <T extends SkJSIInstance<string>>(\n source: DataSourceParam,\n loader: () => Promise<T | null>\n) => {\n const mounted = useRef(false);\n const [data, setData] = useState<T | null>(null);\n const dataRef = useRef<T | null>(null);\n useEffect(() => {\n mounted.current = true;\n loader().then((value) => {\n if (mounted.current) {\n setData(value);\n dataRef.current = value;\n }\n });\n return () => {\n mounted.current = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [source]);\n return data;\n};\n\nexport const useCollectionLoading = <T extends SkJSIInstance<string>>(\n source: DataSourceParam[],\n loader: () => Promise<(T | null)[]>\n) => {\n const mounted = useRef(false);\n const [data, setData] = useState<T[] | null>(null);\n const dataRef = useRef<T[] | null>(null);\n\n useEffect(() => {\n mounted.current = true;\n loader().then((result) => {\n const value = result.filter((r) => r !== null) as T[];\n if (mounted.current) {\n setData(value);\n dataRef.current = value;\n }\n });\n\n return () => {\n mounted.current = false;\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [source]);\n\n return data;\n};\n\nexport const useRawData = <T extends SkJSIInstance<string>>(\n source: DataSourceParam,\n factory: (data: SkData) => T | null,\n onError?: (err: Error) => void\n) => useLoading(source, () => loadData<T>(source, factory, onError));\n\nconst identity = (data: SkData) => data;\n\nexport const useData = (\n source: DataSourceParam,\n onError?: (err: Error) => void\n) => useRawData(source, identity, onError);\n"],"mappings":"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","ignoreList":[]}
@@ -2,4 +2,4 @@ export const __esModule: boolean;
2
2
  /**
3
3
  * Returns a Skia Animated Image object
4
4
  * */
5
- export function useAnimatedImage(source: any, onError: any, managed?: boolean): null;
5
+ export function useAnimatedImage(source: any, onError: any): null;
@@ -1,5 +1,5 @@
1
1
  export const __esModule: boolean;
2
2
  export function loadData(source: any, factory: any, onError: any): Promise<any>;
3
3
  export function useCollectionLoading(source: any, loader: any): null;
4
- export function useRawData(source: any, factory: any, onError: any, manage?: boolean): null;
4
+ export function useRawData(source: any, factory: any, onError: any): null;
5
5
  export function useData(source: any, onError: any): null;
@@ -154,7 +154,7 @@ export function Mock(CanvasKit: any): {
154
154
  matchFont: (inputStyle?: {}, fontMgr?: import("../../..").SkFontMgr) => import("../../..").SkFont;
155
155
  listFontFamilies: (fontMgr?: import("../../..").SkFontMgr) => string[];
156
156
  makeImageFromView: (viewRef: any, callback?: null) => any;
157
- useAnimatedImage: (source: any, onError: any, managed?: boolean) => null;
157
+ useAnimatedImage: (source: any, onError: any) => null;
158
158
  createPicture: (cb: any, rect: any) => import("../../..").SkPicture;
159
159
  vec: (x: number | undefined, y: any) => import("../../..").SkPoint;
160
160
  point: (x: number | undefined, y: any) => import("../../..").SkPoint;
@@ -1 +1 @@
1
- export function useAnimatedImage(source: any, onError: any, managed?: boolean): null;
1
+ export function useAnimatedImage(source: any, onError: any): null;
@@ -1,4 +1,4 @@
1
1
  export function loadData(source: any, factory: any, onError: any): Promise<any>;
2
2
  export function useCollectionLoading(source: any, loader: any): null;
3
- export function useRawData(source: any, factory: any, onError: any, manage?: boolean): null;
3
+ export function useRawData(source: any, factory: any, onError: any): null;
4
4
  export function useData(source: any, onError: any): null;
@@ -2,4 +2,4 @@ import type { DataSourceParam } from "../types";
2
2
  /**
3
3
  * Returns a Skia Animated Image object
4
4
  * */
5
- export declare const useAnimatedImage: (source: DataSourceParam, onError?: (err: Error) => void, managed?: boolean) => import("../types").SkAnimatedImage | null;
5
+ export declare const useAnimatedImage: (source: DataSourceParam, onError?: (err: Error) => void) => import("../types").SkAnimatedImage | null;
@@ -1,5 +1,5 @@
1
1
  import type { SkData, DataSourceParam, SkJSIInstance } from "../types";
2
2
  export declare const loadData: <T>(source: DataSourceParam, factory: (data: SkData) => T | null, onError?: (err: Error) => void) => Promise<T | null>;
3
3
  export declare const useCollectionLoading: <T extends SkJSIInstance<string>>(source: DataSourceParam[], loader: () => Promise<(T | null)[]>) => T[] | null;
4
- export declare const useRawData: <T extends SkJSIInstance<string>>(source: DataSourceParam, factory: (data: SkData) => T | null, onError?: (err: Error) => void, manage?: boolean) => T | null;
4
+ export declare const useRawData: <T extends SkJSIInstance<string>>(source: DataSourceParam, factory: (data: SkData) => T | null, onError?: (err: Error) => void) => T | null;
5
5
  export declare const useData: (source: DataSourceParam, onError?: (err: Error) => void) => SkData | null;
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "setup-skia-web": "./scripts/setup-canvaskit.js"
8
8
  },
9
9
  "title": "React Native Skia",
10
- "version": "1.8.1",
10
+ "version": "1.8.2",
11
11
  "description": "High-performance React Native Graphics using Skia",
12
12
  "main": "lib/module/index.js",
13
13
  "react-native": "src/index.ts",
@@ -1,4 +1,3 @@
1
- import { useEffect } from "react";
2
1
  import type { FrameInfo, SharedValue } from "react-native-reanimated";
3
2
 
4
3
  import { useAnimatedImage } from "../../skia/core/AnimatedImage";
@@ -16,14 +15,10 @@ export const useAnimatedImageValue = (
16
15
  const isPaused = paused ?? defaultPaused;
17
16
  const currentFrame = Rea.useSharedValue<null | SkImage>(null);
18
17
  const lastTimestamp = Rea.useSharedValue(-1);
19
- const animatedImage = useAnimatedImage(
20
- source,
21
- (err) => {
22
- console.error(err);
23
- throw new Error(`Could not load animated image - got '${err.message}'`);
24
- },
25
- false
26
- );
18
+ const animatedImage = useAnimatedImage(source, (err) => {
19
+ console.error(err);
20
+ throw new Error(`Could not load animated image - got '${err.message}'`);
21
+ });
27
22
  const frameDuration =
28
23
  animatedImage?.currentFrameDuration() || DEFAULT_FRAME_DURATION;
29
24
 
@@ -53,11 +48,5 @@ export const useAnimatedImageValue = (
53
48
  // Update the last timestamp
54
49
  lastTimestamp.value = timestamp;
55
50
  });
56
- useEffect(() => {
57
- return () => {
58
- animatedImage?.dispose();
59
- };
60
- // eslint-disable-next-line react-hooks/exhaustive-deps
61
- }, []);
62
51
  return currentFrame;
63
52
  };
@@ -12,6 +12,5 @@ const animatedImgFactory = Skia.AnimatedImage.MakeAnimatedImageFromEncoded.bind(
12
12
  * */
13
13
  export const useAnimatedImage = (
14
14
  source: DataSourceParam,
15
- onError?: (err: Error) => void,
16
- managed = true
17
- ) => useRawData(source, animatedImgFactory, onError, managed);
15
+ onError?: (err: Error) => void
16
+ ) => useRawData(source, animatedImgFactory, onError);
@@ -40,8 +40,7 @@ export const loadData = <T>(
40
40
 
41
41
  const useLoading = <T extends SkJSIInstance<string>>(
42
42
  source: DataSourceParam,
43
- loader: () => Promise<T | null>,
44
- manage = true
43
+ loader: () => Promise<T | null>
45
44
  ) => {
46
45
  const mounted = useRef(false);
47
46
  const [data, setData] = useState<T | null>(null);
@@ -55,9 +54,6 @@ const useLoading = <T extends SkJSIInstance<string>>(
55
54
  }
56
55
  });
57
56
  return () => {
58
- if (manage) {
59
- dataRef.current?.dispose();
60
- }
61
57
  mounted.current = false;
62
58
  };
63
59
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -84,7 +80,6 @@ export const useCollectionLoading = <T extends SkJSIInstance<string>>(
84
80
  });
85
81
 
86
82
  return () => {
87
- dataRef.current?.forEach((instance) => instance?.dispose());
88
83
  mounted.current = false;
89
84
  };
90
85
 
@@ -97,9 +92,8 @@ export const useCollectionLoading = <T extends SkJSIInstance<string>>(
97
92
  export const useRawData = <T extends SkJSIInstance<string>>(
98
93
  source: DataSourceParam,
99
94
  factory: (data: SkData) => T | null,
100
- onError?: (err: Error) => void,
101
- manage = true
102
- ) => useLoading(source, () => loadData<T>(source, factory, onError), manage);
95
+ onError?: (err: Error) => void
96
+ ) => useLoading(source, () => loadData<T>(source, factory, onError));
103
97
 
104
98
  const identity = (data: SkData) => data;
105
99