react-native-nitro-image-pipeline 0.1.1

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 (63) hide show
  1. package/LICENSE +21 -0
  2. package/NitroImagePipeline.podspec +39 -0
  3. package/README.md +125 -0
  4. package/android/CMakeLists.txt +34 -0
  5. package/android/build.gradle +158 -0
  6. package/android/fix-prefab.gradle +51 -0
  7. package/android/gradle.properties +5 -0
  8. package/android/src/main/AndroidManifest.xml +2 -0
  9. package/android/src/main/cpp/cpp-adapter.cpp +9 -0
  10. package/android/src/main/java/com/margelo/nitro/nitroimagepipeline/HybridNitroImagePipeline.kt +119 -0
  11. package/android/src/main/java/com/margelo/nitro/nitroimagepipeline/NitroImagePipelinePackage.kt +19 -0
  12. package/android/src/main/java/com/margelo/nitro/nitroimagepipeline/transform/BlurTransformation.kt +84 -0
  13. package/ios/Bridge.h +8 -0
  14. package/ios/HybridNitroImagePipeline.swift +114 -0
  15. package/lib/commonjs/index.js +50 -0
  16. package/lib/commonjs/index.js.map +1 -0
  17. package/lib/commonjs/package.json +1 -0
  18. package/lib/commonjs/specs/nitro-image-toolkit.nitro.js +6 -0
  19. package/lib/commonjs/specs/nitro-image-toolkit.nitro.js.map +1 -0
  20. package/lib/module/index.js +45 -0
  21. package/lib/module/index.js.map +1 -0
  22. package/lib/module/specs/nitro-image-toolkit.nitro.js +4 -0
  23. package/lib/module/specs/nitro-image-toolkit.nitro.js.map +1 -0
  24. package/lib/typescript/src/index.d.ts +28 -0
  25. package/lib/typescript/src/index.d.ts.map +1 -0
  26. package/lib/typescript/src/specs/nitro-image-toolkit.nitro.d.ts +20 -0
  27. package/lib/typescript/src/specs/nitro-image-toolkit.nitro.d.ts.map +1 -0
  28. package/nitro.json +24 -0
  29. package/nitrogen/generated/.gitattributes +1 -0
  30. package/nitrogen/generated/android/NitroImagePipeline+autolinking.cmake +81 -0
  31. package/nitrogen/generated/android/NitroImagePipeline+autolinking.gradle +27 -0
  32. package/nitrogen/generated/android/NitroImagePipelineOnLoad.cpp +54 -0
  33. package/nitrogen/generated/android/NitroImagePipelineOnLoad.hpp +34 -0
  34. package/nitrogen/generated/android/c++/JCacheOption.hpp +61 -0
  35. package/nitrogen/generated/android/c++/JHybridNitroImagePipelineSpec.cpp +140 -0
  36. package/nitrogen/generated/android/c++/JHybridNitroImagePipelineSpec.hpp +67 -0
  37. package/nitrogen/generated/android/c++/JOptions.hpp +67 -0
  38. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroimagepipeline/CacheOption.kt +24 -0
  39. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroimagepipeline/HybridNitroImagePipelineSpec.kt +72 -0
  40. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroimagepipeline/NitroImagePipelineOnLoad.kt +35 -0
  41. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroimagepipeline/Options.kt +44 -0
  42. package/nitrogen/generated/ios/NitroImagePipeline+autolinking.rb +60 -0
  43. package/nitrogen/generated/ios/NitroImagePipeline-Swift-Cxx-Bridge.cpp +68 -0
  44. package/nitrogen/generated/ios/NitroImagePipeline-Swift-Cxx-Bridge.hpp +244 -0
  45. package/nitrogen/generated/ios/NitroImagePipeline-Swift-Cxx-Umbrella.hpp +58 -0
  46. package/nitrogen/generated/ios/NitroImagePipelineAutolinking.mm +33 -0
  47. package/nitrogen/generated/ios/NitroImagePipelineAutolinking.swift +26 -0
  48. package/nitrogen/generated/ios/c++/HybridNitroImagePipelineSpecSwift.cpp +11 -0
  49. package/nitrogen/generated/ios/c++/HybridNitroImagePipelineSpecSwift.hpp +124 -0
  50. package/nitrogen/generated/ios/swift/CacheOption.swift +44 -0
  51. package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
  52. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
  53. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_margelo__nitro__image__HybridImageSpec_.swift +51 -0
  54. package/nitrogen/generated/ios/swift/HybridNitroImagePipelineSpec.swift +60 -0
  55. package/nitrogen/generated/ios/swift/HybridNitroImagePipelineSpec_cxx.swift +224 -0
  56. package/nitrogen/generated/ios/swift/Options.swift +71 -0
  57. package/nitrogen/generated/shared/c++/CacheOption.hpp +80 -0
  58. package/nitrogen/generated/shared/c++/HybridNitroImagePipelineSpec.cpp +25 -0
  59. package/nitrogen/generated/shared/c++/HybridNitroImagePipelineSpec.hpp +75 -0
  60. package/nitrogen/generated/shared/c++/Options.hpp +93 -0
  61. package/package.json +99 -0
  62. package/src/index.ts +66 -0
  63. package/src/specs/nitro-image-toolkit.nitro.ts +16 -0
package/package.json ADDED
@@ -0,0 +1,99 @@
1
+ {
2
+ "name": "react-native-nitro-image-pipeline",
3
+ "version": "0.1.1",
4
+ "description": "High-performance image loading, caching, and processing for React Native, built with Nitro Modules",
5
+ "main": "./lib/commonjs/index.js",
6
+ "module": "./lib/module/index.js",
7
+ "types": "./lib/typescript/src/index.d.ts",
8
+ "react-native": "src/index",
9
+ "source": "src/index",
10
+ "scripts": {
11
+ "typecheck": "tsc --noEmit",
12
+ "lint": "biome check .",
13
+ "format": "biome format --write .",
14
+ "clean": "git clean -dfX",
15
+ "release": "semantic-release",
16
+ "build": "bun run typecheck && bob build",
17
+ "codegen": "nitrogen --logLevel=\"debug\" && bun run build && node post-script.js"
18
+ },
19
+ "keywords": [
20
+ "react-native",
21
+ "nitro",
22
+ "image",
23
+ "image-loader",
24
+ "image-cache",
25
+ "image-processing",
26
+ "react-native-nitro-image-pipeline"
27
+ ],
28
+ "files": [
29
+ "src",
30
+ "react-native.config.js",
31
+ "lib",
32
+ "nitrogen",
33
+ "cpp",
34
+ "nitro.json",
35
+ "android/build.gradle",
36
+ "android/fix-prefab.gradle",
37
+ "android/gradle.properties",
38
+ "android/CMakeLists.txt",
39
+ "android/src",
40
+ "ios/**/*.h",
41
+ "ios/**/*.m",
42
+ "ios/**/*.mm",
43
+ "ios/**/*.cpp",
44
+ "ios/**/*.swift",
45
+ "app.plugin.js",
46
+ "*.podspec",
47
+ "README.md"
48
+ ],
49
+ "workspaces": [
50
+ "example"
51
+ ],
52
+ "repository": "https://github.com/aparedes/react-native-nitro-image-pipeline.git",
53
+ "author": "aparedes",
54
+ "license": "MIT",
55
+ "bugs": "https://github.com/aparedes/react-native-nitro-image-pipeline/issues",
56
+ "homepage": "https://github.com/aparedes/react-native-nitro-image-pipeline#readme",
57
+ "publishConfig": {
58
+ "access": "public",
59
+ "registry": "https://registry.npmjs.org/"
60
+ },
61
+ "devDependencies": {
62
+ "@biomejs/biome": "^2.4.10",
63
+ "@semantic-release/changelog": "^6.0.3",
64
+ "@semantic-release/git": "^10.0.1",
65
+ "@types/jest": "^29.5.12",
66
+ "@types/react": "19.2.0",
67
+ "conventional-changelog-conventionalcommits": "^9.1.0",
68
+ "nitrogen": "0.35.2",
69
+ "react": "19.2.3",
70
+ "react-native": "0.84.1",
71
+ "react-native-builder-bob": "^0.40.18",
72
+ "react-native-nitro-modules": "0.35.2",
73
+ "semantic-release": "^25.0.3",
74
+ "typescript": "^5.8.3"
75
+ },
76
+ "peerDependencies": {
77
+ "react": "*",
78
+ "react-native": "*",
79
+ "react-native-nitro-modules": "*",
80
+ "react-native-nitro-image": "*"
81
+ },
82
+ "overrides": {
83
+ "lodash-es": "4.17.21"
84
+ },
85
+ "react-native-builder-bob": {
86
+ "source": "src",
87
+ "output": "lib",
88
+ "targets": [
89
+ "commonjs",
90
+ "module",
91
+ [
92
+ "typescript",
93
+ {
94
+ "project": "tsconfig.json"
95
+ }
96
+ ]
97
+ ]
98
+ }
99
+ }
package/src/index.ts ADDED
@@ -0,0 +1,66 @@
1
+ import { useEffect, useState } from 'react';
2
+ import type { Image } from 'react-native-nitro-image';
3
+ import { NitroModules } from 'react-native-nitro-modules';
4
+
5
+ import type { NitroImagePipeline as NitroImagePipelineSpec } from './specs/nitro-image-toolkit.nitro';
6
+
7
+ export const NitroImagePipeline =
8
+ NitroModules.createHybridObject<NitroImagePipelineSpec>('NitroImagePipeline');
9
+
10
+ type Result =
11
+ // Loading State
12
+ | {
13
+ image: undefined;
14
+ error: undefined;
15
+ }
16
+ // Loaded state
17
+ | {
18
+ image: Image;
19
+ error: undefined;
20
+ }
21
+ // Error state
22
+ | {
23
+ image: undefined;
24
+ error: Error;
25
+ };
26
+
27
+ /**
28
+ * A hook to asynchronously load an image from the
29
+ * given {@linkcode AsyncImageSource} into memory.
30
+ * @example
31
+ * ```ts
32
+ * const { image, error } = useImage({ filePath: '/tmp/image.jpg' })
33
+ * ```
34
+ */
35
+ export function useImage({
36
+ url,
37
+ blur = 0,
38
+ cornerRadius = 0,
39
+ }: {
40
+ url: string;
41
+ blur?: number;
42
+ cornerRadius?: number;
43
+ }): Result {
44
+ const [image, setImage] = useState<Result>({
45
+ image: undefined,
46
+ error: undefined,
47
+ });
48
+
49
+ useEffect(() => {
50
+ (async () => {
51
+ try {
52
+ const result = await NitroImagePipeline.loadImage(url, {
53
+ blur,
54
+ cornerRadius,
55
+ });
56
+
57
+ setImage({ image: result, error: undefined });
58
+ } catch (e) {
59
+ const error = e instanceof Error ? e : new Error(`${e}`);
60
+ setImage({ image: undefined, error: error });
61
+ }
62
+ })();
63
+ }, [url, blur]);
64
+
65
+ return image;
66
+ }
@@ -0,0 +1,16 @@
1
+ import type { Image } from 'react-native-nitro-image';
2
+ import type { HybridObject } from 'react-native-nitro-modules';
3
+
4
+ type CacheOption = 'memory' | 'disk' | 'none';
5
+ type Options = { blur?: number; cache?: CacheOption; cornerRadius?: number };
6
+
7
+ export interface NitroImagePipeline
8
+ extends HybridObject<{ ios: 'swift'; android: 'kotlin' }> {
9
+ loadImage(url: string, options?: Options): Promise<Image>;
10
+ preLoadImage(url: string): Promise<void>;
11
+ preLoadImages(urls: string[]): Promise<void>;
12
+ gaussianBlur(image: Image, radius: number): Promise<Image>;
13
+ // Future: brightness, saturation, tint, etc.
14
+
15
+ clearCache(): void;
16
+ }