@crumbsdk/react-native 0.0.1-rc.3
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.
- package/CrumbReactNative.podspec +38 -0
- package/LICENSE +201 -0
- package/README.md +109 -0
- package/android/CMakeLists.txt +20 -0
- package/android/build.gradle +118 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/cpp/cpp-adapter.cpp +10 -0
- package/android/src/main/java/com/margelo/nitro/crumbsdk/reactnative/CrumbReactNative.kt +228 -0
- package/android/src/main/java/com/margelo/nitro/crumbsdk/reactnative/ReactNativePackage.kt +22 -0
- package/ios/CrumbReactNative.swift +283 -0
- package/lib/module/CrumbReactNative.nitro.js +4 -0
- package/lib/module/CrumbReactNative.nitro.js.map +1 -0
- package/lib/module/NativeCrumbReactNative.js +5 -0
- package/lib/module/NativeCrumbReactNative.js.map +1 -0
- package/lib/module/NativeCrumbReactNative.web.js +18 -0
- package/lib/module/NativeCrumbReactNative.web.js.map +1 -0
- package/lib/module/index.js +60 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/log-buffer.js +200 -0
- package/lib/module/log-buffer.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/CrumbReactNative.nitro.d.ts +12 -0
- package/lib/typescript/src/CrumbReactNative.nitro.d.ts.map +1 -0
- package/lib/typescript/src/NativeCrumbReactNative.d.ts +4 -0
- package/lib/typescript/src/NativeCrumbReactNative.d.ts.map +1 -0
- package/lib/typescript/src/NativeCrumbReactNative.web.d.ts +4 -0
- package/lib/typescript/src/NativeCrumbReactNative.web.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +19 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/log-buffer.d.ts +8 -0
- package/lib/typescript/src/log-buffer.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +55 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/nitro.json +24 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/android/c++/JHybridCrumbReactNativeSpec.cpp +94 -0
- package/nitrogen/generated/android/c++/JHybridCrumbReactNativeSpec.hpp +67 -0
- package/nitrogen/generated/android/crumbsdk_reactnative+autolinking.cmake +81 -0
- package/nitrogen/generated/android/crumbsdk_reactnative+autolinking.gradle +27 -0
- package/nitrogen/generated/android/crumbsdk_reactnativeOnLoad.cpp +54 -0
- package/nitrogen/generated/android/crumbsdk_reactnativeOnLoad.hpp +34 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/crumbsdk/reactnative/HybridCrumbReactNativeSpec.kt +73 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/crumbsdk/reactnative/crumbsdk_reactnativeOnLoad.kt +35 -0
- package/nitrogen/generated/ios/CrumbReactNative+autolinking.rb +62 -0
- package/nitrogen/generated/ios/CrumbReactNative-Swift-Cxx-Bridge.cpp +49 -0
- package/nitrogen/generated/ios/CrumbReactNative-Swift-Cxx-Bridge.hpp +119 -0
- package/nitrogen/generated/ios/CrumbReactNative-Swift-Cxx-Umbrella.hpp +45 -0
- package/nitrogen/generated/ios/CrumbReactNativeAutolinking.mm +33 -0
- package/nitrogen/generated/ios/CrumbReactNativeAutolinking.swift +26 -0
- package/nitrogen/generated/ios/c++/HybridCrumbReactNativeSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridCrumbReactNativeSpecSwift.hpp +109 -0
- package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridCrumbReactNativeSpec.swift +59 -0
- package/nitrogen/generated/ios/swift/HybridCrumbReactNativeSpec_cxx.swift +197 -0
- package/nitrogen/generated/shared/c++/HybridCrumbReactNativeSpec.cpp +25 -0
- package/nitrogen/generated/shared/c++/HybridCrumbReactNativeSpec.hpp +67 -0
- package/package.json +138 -0
- package/src/CrumbReactNative.nitro.ts +12 -0
- package/src/NativeCrumbReactNative.ts +6 -0
- package/src/NativeCrumbReactNative.web.ts +20 -0
- package/src/index.ts +115 -0
- package/src/log-buffer.ts +265 -0
- package/src/types.ts +70 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NativeCrumbReactNative from './NativeCrumbReactNative';
|
|
4
|
+
const DEFAULT_LOOKBACK_MS = 60_000;
|
|
5
|
+
const DEFAULT_MAXIMUM_ENTRIES = 200;
|
|
6
|
+
const DEFAULT_MAXIMUM_BYTES = 65_536;
|
|
7
|
+
const MAXIMUM_METADATA_DEPTH = 4;
|
|
8
|
+
const MAXIMUM_OBJECT_KEYS = 24;
|
|
9
|
+
const MAXIMUM_ARRAY_ITEMS = 24;
|
|
10
|
+
const MAXIMUM_STRING_LENGTH = 2_048;
|
|
11
|
+
const MAXIMUM_ENTRY_BYTES = 16_384;
|
|
12
|
+
let limits = {
|
|
13
|
+
lookbackMs: DEFAULT_LOOKBACK_MS,
|
|
14
|
+
maximumEntries: DEFAULT_MAXIMUM_ENTRIES,
|
|
15
|
+
maximumBytes: DEFAULT_MAXIMUM_BYTES
|
|
16
|
+
};
|
|
17
|
+
let entries = [];
|
|
18
|
+
let usedBytes = 0;
|
|
19
|
+
let nativeStarted = false;
|
|
20
|
+
let originalWarn;
|
|
21
|
+
let originalError;
|
|
22
|
+
let capturedWarn;
|
|
23
|
+
let capturedError;
|
|
24
|
+
export function configureLogBuffer(options) {
|
|
25
|
+
limits = {
|
|
26
|
+
lookbackMs: options?.lookbackMs ?? DEFAULT_LOOKBACK_MS,
|
|
27
|
+
maximumEntries: options?.maximumEntries ?? DEFAULT_MAXIMUM_ENTRIES,
|
|
28
|
+
maximumBytes: options?.maximumBytes ?? DEFAULT_MAXIMUM_BYTES
|
|
29
|
+
};
|
|
30
|
+
prune(Date.now());
|
|
31
|
+
}
|
|
32
|
+
export function markNativeStarted() {
|
|
33
|
+
nativeStarted = true;
|
|
34
|
+
NativeCrumbReactNative.clearLogs();
|
|
35
|
+
for (const entry of entries) {
|
|
36
|
+
NativeCrumbReactNative.addLog(JSON.stringify(entry));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export function clearLogs() {
|
|
40
|
+
entries = [];
|
|
41
|
+
usedBytes = 0;
|
|
42
|
+
if (nativeStarted) {
|
|
43
|
+
NativeCrumbReactNative.clearLogs();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function writeLog(level, message, metadata, category = 'javascript') {
|
|
47
|
+
const timestampMs = Date.now();
|
|
48
|
+
const metadataText = metadata ? serializeMetadata(metadata) : undefined;
|
|
49
|
+
const entry = {
|
|
50
|
+
timestampMs,
|
|
51
|
+
level,
|
|
52
|
+
source: 'react-native',
|
|
53
|
+
category,
|
|
54
|
+
message: truncateUtf8(metadataText ? `${message}\nmetadata=${metadataText}` : message, MAXIMUM_ENTRY_BYTES)
|
|
55
|
+
};
|
|
56
|
+
const bytes = byteLength(JSON.stringify(entry));
|
|
57
|
+
entries.push(entry);
|
|
58
|
+
usedBytes += bytes;
|
|
59
|
+
prune(timestampMs);
|
|
60
|
+
if (nativeStarted && entries.includes(entry)) {
|
|
61
|
+
NativeCrumbReactNative.addLog(JSON.stringify(entry));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export function enableConsoleCapture() {
|
|
65
|
+
if (capturedWarn || capturedError) return;
|
|
66
|
+
originalWarn = console.warn;
|
|
67
|
+
originalError = console.error;
|
|
68
|
+
capturedWarn = (...data) => {
|
|
69
|
+
originalWarn?.apply(console, data);
|
|
70
|
+
writeConsoleLog('warning', data);
|
|
71
|
+
};
|
|
72
|
+
capturedError = (...data) => {
|
|
73
|
+
originalError?.apply(console, data);
|
|
74
|
+
writeConsoleLog('error', data);
|
|
75
|
+
};
|
|
76
|
+
console.warn = capturedWarn;
|
|
77
|
+
console.error = capturedError;
|
|
78
|
+
}
|
|
79
|
+
export function disableConsoleCapture() {
|
|
80
|
+
if (capturedWarn && console.warn === capturedWarn && originalWarn) {
|
|
81
|
+
console.warn = originalWarn;
|
|
82
|
+
}
|
|
83
|
+
if (capturedError && console.error === capturedError && originalError) {
|
|
84
|
+
console.error = originalError;
|
|
85
|
+
}
|
|
86
|
+
originalWarn = undefined;
|
|
87
|
+
originalError = undefined;
|
|
88
|
+
capturedWarn = undefined;
|
|
89
|
+
capturedError = undefined;
|
|
90
|
+
}
|
|
91
|
+
function writeConsoleLog(level, data) {
|
|
92
|
+
const suppliedError = data.find(value => value instanceof Error);
|
|
93
|
+
const rendered = data.map(renderConsoleValue).join(' ');
|
|
94
|
+
const stack = suppliedError?.stack ?? new Error(`console.${level}`).stack;
|
|
95
|
+
const message = stack ? `${rendered}\n${stack}` : rendered;
|
|
96
|
+
writeLog(level, message, undefined, 'console');
|
|
97
|
+
}
|
|
98
|
+
function renderConsoleValue(value) {
|
|
99
|
+
if (value instanceof Error) return value.stack ?? value.message;
|
|
100
|
+
if (typeof value === 'string') return value;
|
|
101
|
+
if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') {
|
|
102
|
+
return String(value);
|
|
103
|
+
}
|
|
104
|
+
if (value === null) return 'null';
|
|
105
|
+
if (value === undefined) return 'undefined';
|
|
106
|
+
return serializeMetadata({
|
|
107
|
+
value
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
function serializeMetadata(metadata) {
|
|
111
|
+
const seen = new WeakSet();
|
|
112
|
+
const bounded = boundValue(metadata, 0, seen);
|
|
113
|
+
try {
|
|
114
|
+
return truncateUtf8(JSON.stringify(bounded), MAXIMUM_ENTRY_BYTES / 2);
|
|
115
|
+
} catch {
|
|
116
|
+
return '"[Unserializable metadata]"';
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function boundValue(value, depth, seen) {
|
|
120
|
+
if (value instanceof Error) {
|
|
121
|
+
return {
|
|
122
|
+
name: value.name,
|
|
123
|
+
message: truncateString(value.message),
|
|
124
|
+
stack: value.stack ? truncateString(value.stack) : undefined
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
if (typeof value === 'string') return truncateString(value);
|
|
128
|
+
if (value === null || typeof value === 'number' || typeof value === 'boolean') {
|
|
129
|
+
return value;
|
|
130
|
+
}
|
|
131
|
+
if (typeof value === 'bigint') return String(value);
|
|
132
|
+
if (typeof value === 'undefined') return '[Undefined]';
|
|
133
|
+
if (typeof value === 'function') return '[Function]';
|
|
134
|
+
if (typeof value === 'symbol') return String(value);
|
|
135
|
+
if (depth >= MAXIMUM_METADATA_DEPTH) return '[Max depth]';
|
|
136
|
+
if (typeof value !== 'object') return String(value);
|
|
137
|
+
if (seen.has(value)) return '[Circular]';
|
|
138
|
+
seen.add(value);
|
|
139
|
+
if (Array.isArray(value)) {
|
|
140
|
+
const result = value.slice(0, MAXIMUM_ARRAY_ITEMS).map(item => boundValue(item, depth + 1, seen));
|
|
141
|
+
seen.delete(value);
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
const result = {};
|
|
145
|
+
for (const key of Object.keys(value).slice(0, MAXIMUM_OBJECT_KEYS)) {
|
|
146
|
+
result[truncateString(key)] = boundValue(value[key], depth + 1, seen);
|
|
147
|
+
}
|
|
148
|
+
seen.delete(value);
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
function prune(now) {
|
|
152
|
+
const earliest = now - limits.lookbackMs;
|
|
153
|
+
while (entries[0] && entries[0].timestampMs < earliest) {
|
|
154
|
+
removeOldest();
|
|
155
|
+
}
|
|
156
|
+
while (entries.length > limits.maximumEntries || usedBytes > limits.maximumBytes) {
|
|
157
|
+
removeOldest();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function removeOldest() {
|
|
161
|
+
const removed = entries.shift();
|
|
162
|
+
if (!removed) return;
|
|
163
|
+
usedBytes -= byteLength(JSON.stringify(removed));
|
|
164
|
+
}
|
|
165
|
+
function truncateString(value) {
|
|
166
|
+
return value.length <= MAXIMUM_STRING_LENGTH ? value : `${value.slice(0, MAXIMUM_STRING_LENGTH)}…`;
|
|
167
|
+
}
|
|
168
|
+
function truncateUtf8(value, maximumBytes) {
|
|
169
|
+
if (byteLength(value) <= maximumBytes) return value;
|
|
170
|
+
let low = 0;
|
|
171
|
+
let high = value.length;
|
|
172
|
+
while (low < high) {
|
|
173
|
+
const middle = Math.ceil((low + high) / 2);
|
|
174
|
+
if (byteLength(value.slice(0, middle)) <= maximumBytes - 3) {
|
|
175
|
+
low = middle;
|
|
176
|
+
} else {
|
|
177
|
+
high = middle - 1;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return `${value.slice(0, low)}…`;
|
|
181
|
+
}
|
|
182
|
+
function byteLength(value) {
|
|
183
|
+
let bytes = 0;
|
|
184
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
185
|
+
const code = value.charCodeAt(index);
|
|
186
|
+
if (code <= 0x7f) {
|
|
187
|
+
bytes += 1;
|
|
188
|
+
} else if (code <= 0x7ff) {
|
|
189
|
+
bytes += 2;
|
|
190
|
+
} else if (code >= 0xd800 && code <= 0xdbff) {
|
|
191
|
+
const next = value.charCodeAt(index + 1);
|
|
192
|
+
if (next >= 0xdc00 && next <= 0xdfff) index += 1;
|
|
193
|
+
bytes += 4;
|
|
194
|
+
} else {
|
|
195
|
+
bytes += 3;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return bytes;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=log-buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NativeCrumbReactNative","DEFAULT_LOOKBACK_MS","DEFAULT_MAXIMUM_ENTRIES","DEFAULT_MAXIMUM_BYTES","MAXIMUM_METADATA_DEPTH","MAXIMUM_OBJECT_KEYS","MAXIMUM_ARRAY_ITEMS","MAXIMUM_STRING_LENGTH","MAXIMUM_ENTRY_BYTES","limits","lookbackMs","maximumEntries","maximumBytes","entries","usedBytes","nativeStarted","originalWarn","originalError","capturedWarn","capturedError","configureLogBuffer","options","prune","Date","now","markNativeStarted","clearLogs","entry","addLog","JSON","stringify","writeLog","level","message","metadata","category","timestampMs","metadataText","serializeMetadata","undefined","source","truncateUtf8","bytes","byteLength","push","includes","enableConsoleCapture","console","warn","error","data","apply","writeConsoleLog","disableConsoleCapture","suppliedError","find","value","Error","rendered","map","renderConsoleValue","join","stack","String","seen","WeakSet","bounded","boundValue","depth","name","truncateString","has","add","Array","isArray","result","slice","item","delete","key","Object","keys","earliest","removeOldest","length","removed","shift","low","high","middle","Math","ceil","index","code","charCodeAt","next"],"sourceRoot":"../../src","sources":["log-buffer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { HybridObject } from 'react-native-nitro-modules';
|
|
2
|
+
export interface CrumbReactNative extends HybridObject<{
|
|
3
|
+
ios: 'swift';
|
|
4
|
+
android: 'kotlin';
|
|
5
|
+
}> {
|
|
6
|
+
start(configurationJson: string): void;
|
|
7
|
+
installReporter(): Promise<boolean>;
|
|
8
|
+
show(): Promise<boolean>;
|
|
9
|
+
addLog(entryJson: string): void;
|
|
10
|
+
clearLogs(): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=CrumbReactNative.nitro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CrumbReactNative.nitro.d.ts","sourceRoot":"","sources":["../../../src/CrumbReactNative.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,WAAW,gBAAiB,SAAQ,YAAY,CAAC;IACrD,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,QAAQ,CAAC;CACnB,CAAC;IACA,KAAK,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,IAAI,IAAI,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeCrumbReactNative.d.ts","sourceRoot":"","sources":["../../../src/NativeCrumbReactNative.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA0B,CAAC;;AAEjE,wBAEE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeCrumbReactNative.web.d.ts","sourceRoot":"","sources":["../../../src/NativeCrumbReactNative.web.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA0B,CAAC;AAKjE,QAAA,MAAM,iBAAiB,EAAE,gBAYxB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { clearLogs, disableConsoleCapture, enableConsoleCapture } from './log-buffer.js';
|
|
2
|
+
import type { CrumbConfiguration, CrumbLogLevel, CrumbLogMetadata } from './types.js';
|
|
3
|
+
export type { CrumbCaptureOptions, CrumbConfiguration, CrumbDiagnosticsOptions, CrumbInvocation, CrumbLogLevel, CrumbLogMetadata, CrumbLogOptions, CrumbPrivacyOptions, CrumbRelease, CrumbUploadOptions, } from './types.js';
|
|
4
|
+
export declare function start(configuration: CrumbConfiguration): Promise<void>;
|
|
5
|
+
export declare function installReporter(): Promise<boolean>;
|
|
6
|
+
export declare function show(): Promise<boolean>;
|
|
7
|
+
export declare function log(level: CrumbLogLevel, message: string, metadata?: CrumbLogMetadata): void;
|
|
8
|
+
export { clearLogs, disableConsoleCapture, enableConsoleCapture };
|
|
9
|
+
declare const Crumb: Readonly<{
|
|
10
|
+
start: typeof start;
|
|
11
|
+
installReporter: typeof installReporter;
|
|
12
|
+
show: typeof show;
|
|
13
|
+
log: typeof log;
|
|
14
|
+
clearLogs: typeof clearLogs;
|
|
15
|
+
enableConsoleCapture: typeof enableConsoleCapture;
|
|
16
|
+
disableConsoleCapture: typeof disableConsoleCapture;
|
|
17
|
+
}>;
|
|
18
|
+
export default Crumb;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EAET,qBAAqB,EACrB,oBAAoB,EAGrB,MAAM,iBAAc,CAAC;AACtB,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EACjB,MAAM,YAAS,CAAC;AAEjB,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,GACnB,MAAM,YAAS,CAAC;AAEjB,wBAAsB,KAAK,CAAC,aAAa,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAY5E;AAED,wBAAgB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAElD;AAED,wBAAgB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAEvC;AAED,wBAAgB,GAAG,CACjB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,IAAI,CAKN;AAED,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;AA2ClE,QAAA,MAAM,KAAK;;;;;;;;EAQT,CAAC;AAEH,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CrumbLogEntry, CrumbLogLevel, CrumbLogMetadata, CrumbLogOptions } from './types.js';
|
|
2
|
+
export declare function configureLogBuffer(options: CrumbLogOptions | undefined): void;
|
|
3
|
+
export declare function markNativeStarted(): void;
|
|
4
|
+
export declare function clearLogs(): void;
|
|
5
|
+
export declare function writeLog(level: CrumbLogLevel, message: string, metadata?: CrumbLogMetadata, category?: CrumbLogEntry['category']): void;
|
|
6
|
+
export declare function enableConsoleCapture(): void;
|
|
7
|
+
export declare function disableConsoleCapture(): void;
|
|
8
|
+
//# sourceMappingURL=log-buffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-buffer.d.ts","sourceRoot":"","sources":["../../../src/log-buffer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EAChB,MAAM,YAAS,CAAC;AAgCjB,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAO7E;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAMxC;AAED,wBAAgB,SAAS,IAAI,IAAI,CAMhC;AAED,wBAAgB,QAAQ,CACtB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,gBAAgB,EAC3B,QAAQ,GAAE,aAAa,CAAC,UAAU,CAAgB,GACjD,IAAI,CAsBN;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAe3C;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAW5C"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export type CrumbInvocation = 'shake' | 'programmatic';
|
|
2
|
+
export type CrumbLogLevel = 'debug' | 'info' | 'notice' | 'warning' | 'error' | 'fault';
|
|
3
|
+
export interface CrumbRelease {
|
|
4
|
+
/** Defaults to the native bundle version name. */
|
|
5
|
+
appVersion?: string;
|
|
6
|
+
/** Defaults to the native bundle build number. */
|
|
7
|
+
nativeBuild?: string;
|
|
8
|
+
/** OTA or JavaScript bundle identity supplied by the host app. */
|
|
9
|
+
bundleVersion?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface CrumbCaptureOptions {
|
|
12
|
+
screenshot?: boolean;
|
|
13
|
+
maximumScreenshotDimension?: number;
|
|
14
|
+
maximumScreenshotBytes?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface CrumbLogOptions {
|
|
17
|
+
enabled?: boolean;
|
|
18
|
+
lookbackMs?: number;
|
|
19
|
+
maximumEntries?: number;
|
|
20
|
+
maximumBytes?: number;
|
|
21
|
+
/** Captures console.warn and console.error while preserving their behavior. */
|
|
22
|
+
captureConsole?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface CrumbDiagnosticsOptions {
|
|
25
|
+
healthCheckUrl?: string;
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
logs?: CrumbLogOptions;
|
|
28
|
+
}
|
|
29
|
+
export interface CrumbPrivacyOptions {
|
|
30
|
+
maskAllTextInputs?: boolean;
|
|
31
|
+
maskScreenshotsBeforeUpload?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface CrumbUploadOptions {
|
|
34
|
+
/** Base URL of the Crumb ingestion API. Omit to keep reports local-only. */
|
|
35
|
+
ingestionUrl?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface CrumbConfiguration {
|
|
38
|
+
projectKey: string;
|
|
39
|
+
environment: string;
|
|
40
|
+
release?: CrumbRelease;
|
|
41
|
+
invocation?: readonly CrumbInvocation[];
|
|
42
|
+
capture?: CrumbCaptureOptions;
|
|
43
|
+
diagnostics?: CrumbDiagnosticsOptions;
|
|
44
|
+
privacy?: CrumbPrivacyOptions;
|
|
45
|
+
upload?: CrumbUploadOptions;
|
|
46
|
+
}
|
|
47
|
+
export type CrumbLogMetadata = Readonly<Record<string, unknown>>;
|
|
48
|
+
export interface CrumbLogEntry {
|
|
49
|
+
timestampMs: number;
|
|
50
|
+
level: CrumbLogLevel;
|
|
51
|
+
source: 'react-native';
|
|
52
|
+
category: 'javascript' | 'console';
|
|
53
|
+
message: string;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,cAAc,CAAC;AAEvD,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,MAAM,GACN,QAAQ,GACR,SAAS,GACT,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,UAAU,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACxC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B;AAED,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
package/nitro.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://nitro.margelo.com/nitro.schema.json",
|
|
3
|
+
"cxxNamespace": ["crumbsdk_reactnative"],
|
|
4
|
+
"ios": {
|
|
5
|
+
"iosModuleName": "CrumbReactNative"
|
|
6
|
+
},
|
|
7
|
+
"android": {
|
|
8
|
+
"androidNamespace": ["crumbsdk", "reactnative"],
|
|
9
|
+
"androidCxxLibName": "crumbsdk_reactnative"
|
|
10
|
+
},
|
|
11
|
+
"autolinking": {
|
|
12
|
+
"CrumbReactNative": {
|
|
13
|
+
"ios": {
|
|
14
|
+
"language": "swift",
|
|
15
|
+
"implementationClassName": "CrumbReactNative"
|
|
16
|
+
},
|
|
17
|
+
"android": {
|
|
18
|
+
"language": "kotlin",
|
|
19
|
+
"implementationClassName": "CrumbReactNative"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"ignorePaths": ["node_modules"]
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
** linguist-generated=true
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// JHybridCrumbReactNativeSpec.cpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#include "JHybridCrumbReactNativeSpec.hpp"
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
#include <NitroModules/Promise.hpp>
|
|
13
|
+
#include <NitroModules/JPromise.hpp>
|
|
14
|
+
#include <string>
|
|
15
|
+
|
|
16
|
+
namespace margelo::nitro::crumbsdk_reactnative {
|
|
17
|
+
|
|
18
|
+
std::shared_ptr<JHybridCrumbReactNativeSpec> JHybridCrumbReactNativeSpec::JavaPart::getJHybridCrumbReactNativeSpec() {
|
|
19
|
+
auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
|
|
20
|
+
auto castHybridObject = std::dynamic_pointer_cast<JHybridCrumbReactNativeSpec>(hybridObject);
|
|
21
|
+
if (castHybridObject == nullptr) [[unlikely]] {
|
|
22
|
+
throw std::runtime_error("Failed to downcast JHybridObject to JHybridCrumbReactNativeSpec!");
|
|
23
|
+
}
|
|
24
|
+
return castHybridObject;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
jni::local_ref<JHybridCrumbReactNativeSpec::CxxPart::jhybriddata> JHybridCrumbReactNativeSpec::CxxPart::initHybrid(jni::alias_ref<jhybridobject> jThis) {
|
|
28
|
+
return makeCxxInstance(jThis);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
std::shared_ptr<JHybridObject> JHybridCrumbReactNativeSpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
|
|
32
|
+
auto castJavaPart = jni::dynamic_ref_cast<JHybridCrumbReactNativeSpec::JavaPart>(javaPart);
|
|
33
|
+
if (castJavaPart == nullptr) [[unlikely]] {
|
|
34
|
+
throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridCrumbReactNativeSpec::JavaPart!");
|
|
35
|
+
}
|
|
36
|
+
return std::make_shared<JHybridCrumbReactNativeSpec>(castJavaPart);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
void JHybridCrumbReactNativeSpec::CxxPart::registerNatives() {
|
|
40
|
+
registerHybrid({
|
|
41
|
+
makeNativeMethod("initHybrid", JHybridCrumbReactNativeSpec::CxxPart::initHybrid),
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Properties
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
// Methods
|
|
49
|
+
void JHybridCrumbReactNativeSpec::start(const std::string& configurationJson) {
|
|
50
|
+
static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* configurationJson */)>("start");
|
|
51
|
+
method(_javaPart, jni::make_jstring(configurationJson));
|
|
52
|
+
}
|
|
53
|
+
std::shared_ptr<Promise<bool>> JHybridCrumbReactNativeSpec::installReporter() {
|
|
54
|
+
static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("installReporter");
|
|
55
|
+
auto __result = method(_javaPart);
|
|
56
|
+
return [&]() {
|
|
57
|
+
auto __promise = Promise<bool>::create();
|
|
58
|
+
__result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
|
|
59
|
+
auto __result = jni::static_ref_cast<jni::JBoolean>(__boxedResult);
|
|
60
|
+
__promise->resolve(static_cast<bool>(__result->value()));
|
|
61
|
+
});
|
|
62
|
+
__result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
|
|
63
|
+
jni::JniException __jniError(__throwable);
|
|
64
|
+
__promise->reject(std::make_exception_ptr(__jniError));
|
|
65
|
+
});
|
|
66
|
+
return __promise;
|
|
67
|
+
}();
|
|
68
|
+
}
|
|
69
|
+
std::shared_ptr<Promise<bool>> JHybridCrumbReactNativeSpec::show() {
|
|
70
|
+
static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("show");
|
|
71
|
+
auto __result = method(_javaPart);
|
|
72
|
+
return [&]() {
|
|
73
|
+
auto __promise = Promise<bool>::create();
|
|
74
|
+
__result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
|
|
75
|
+
auto __result = jni::static_ref_cast<jni::JBoolean>(__boxedResult);
|
|
76
|
+
__promise->resolve(static_cast<bool>(__result->value()));
|
|
77
|
+
});
|
|
78
|
+
__result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
|
|
79
|
+
jni::JniException __jniError(__throwable);
|
|
80
|
+
__promise->reject(std::make_exception_ptr(__jniError));
|
|
81
|
+
});
|
|
82
|
+
return __promise;
|
|
83
|
+
}();
|
|
84
|
+
}
|
|
85
|
+
void JHybridCrumbReactNativeSpec::addLog(const std::string& entryJson) {
|
|
86
|
+
static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* entryJson */)>("addLog");
|
|
87
|
+
method(_javaPart, jni::make_jstring(entryJson));
|
|
88
|
+
}
|
|
89
|
+
void JHybridCrumbReactNativeSpec::clearLogs() {
|
|
90
|
+
static const auto method = _javaPart->javaClassStatic()->getMethod<void()>("clearLogs");
|
|
91
|
+
method(_javaPart);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
} // namespace margelo::nitro::crumbsdk_reactnative
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// HybridCrumbReactNativeSpec.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <NitroModules/JHybridObject.hpp>
|
|
11
|
+
#include <fbjni/fbjni.h>
|
|
12
|
+
#include "HybridCrumbReactNativeSpec.hpp"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
namespace margelo::nitro::crumbsdk_reactnative {
|
|
18
|
+
|
|
19
|
+
using namespace facebook;
|
|
20
|
+
|
|
21
|
+
class JHybridCrumbReactNativeSpec: public virtual HybridCrumbReactNativeSpec, public virtual JHybridObject {
|
|
22
|
+
public:
|
|
23
|
+
struct JavaPart: public jni::JavaClass<JavaPart, JHybridObject::JavaPart> {
|
|
24
|
+
static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/crumbsdk/reactnative/HybridCrumbReactNativeSpec;";
|
|
25
|
+
std::shared_ptr<JHybridCrumbReactNativeSpec> getJHybridCrumbReactNativeSpec();
|
|
26
|
+
};
|
|
27
|
+
struct CxxPart: public jni::HybridClass<CxxPart, JHybridObject::CxxPart> {
|
|
28
|
+
static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/crumbsdk/reactnative/HybridCrumbReactNativeSpec$CxxPart;";
|
|
29
|
+
static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
|
|
30
|
+
static void registerNatives();
|
|
31
|
+
using HybridBase::HybridBase;
|
|
32
|
+
protected:
|
|
33
|
+
std::shared_ptr<JHybridObject> createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) override;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
public:
|
|
37
|
+
explicit JHybridCrumbReactNativeSpec(const jni::local_ref<JHybridCrumbReactNativeSpec::JavaPart>& javaPart):
|
|
38
|
+
HybridObject(HybridCrumbReactNativeSpec::TAG),
|
|
39
|
+
JHybridObject(javaPart),
|
|
40
|
+
_javaPart(jni::make_global(javaPart)) {}
|
|
41
|
+
~JHybridCrumbReactNativeSpec() override {
|
|
42
|
+
// Hermes GC can destroy JS objects on a non-JNI Thread.
|
|
43
|
+
jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); });
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public:
|
|
47
|
+
inline const jni::global_ref<JHybridCrumbReactNativeSpec::JavaPart>& getJavaPart() const noexcept {
|
|
48
|
+
return _javaPart;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public:
|
|
52
|
+
// Properties
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
public:
|
|
56
|
+
// Methods
|
|
57
|
+
void start(const std::string& configurationJson) override;
|
|
58
|
+
std::shared_ptr<Promise<bool>> installReporter() override;
|
|
59
|
+
std::shared_ptr<Promise<bool>> show() override;
|
|
60
|
+
void addLog(const std::string& entryJson) override;
|
|
61
|
+
void clearLogs() override;
|
|
62
|
+
|
|
63
|
+
private:
|
|
64
|
+
jni::global_ref<JHybridCrumbReactNativeSpec::JavaPart> _javaPart;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
} // namespace margelo::nitro::crumbsdk_reactnative
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#
|
|
2
|
+
# crumbsdk_reactnative+autolinking.cmake
|
|
3
|
+
# This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
# https://github.com/mrousavy/nitro
|
|
5
|
+
# Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
#
|
|
7
|
+
|
|
8
|
+
# This is a CMake file that adds all files generated by Nitrogen
|
|
9
|
+
# to the current CMake project.
|
|
10
|
+
#
|
|
11
|
+
# To use it, add this to your CMakeLists.txt:
|
|
12
|
+
# ```cmake
|
|
13
|
+
# include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/crumbsdk_reactnative+autolinking.cmake)
|
|
14
|
+
# ```
|
|
15
|
+
|
|
16
|
+
# Define a flag to check if we are building properly
|
|
17
|
+
add_definitions(-DBUILDING_CRUMBSDKREACTNATIVE_WITH_GENERATED_CMAKE_PROJECT)
|
|
18
|
+
|
|
19
|
+
# Enable Raw Props parsing in react-native (for Nitro Views)
|
|
20
|
+
add_definitions(-DRN_SERIALIZABLE_STATE)
|
|
21
|
+
|
|
22
|
+
# Add all headers that were generated by Nitrogen
|
|
23
|
+
include_directories(
|
|
24
|
+
"../nitrogen/generated/shared/c++"
|
|
25
|
+
"../nitrogen/generated/android/c++"
|
|
26
|
+
"../nitrogen/generated/android/"
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
# Add all .cpp sources that were generated by Nitrogen
|
|
30
|
+
target_sources(
|
|
31
|
+
# CMake project name (Android C++ library name)
|
|
32
|
+
crumbsdk_reactnative PRIVATE
|
|
33
|
+
# Autolinking Setup
|
|
34
|
+
../nitrogen/generated/android/crumbsdk_reactnativeOnLoad.cpp
|
|
35
|
+
# Shared Nitrogen C++ sources
|
|
36
|
+
../nitrogen/generated/shared/c++/HybridCrumbReactNativeSpec.cpp
|
|
37
|
+
# Android-specific Nitrogen C++ sources
|
|
38
|
+
../nitrogen/generated/android/c++/JHybridCrumbReactNativeSpec.cpp
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
# From node_modules/react-native/ReactAndroid/cmake-utils/folly-flags.cmake
|
|
42
|
+
# Used in node_modules/react-native/ReactAndroid/cmake-utils/ReactNative-application.cmake
|
|
43
|
+
target_compile_definitions(
|
|
44
|
+
crumbsdk_reactnative PRIVATE
|
|
45
|
+
-DFOLLY_NO_CONFIG=1
|
|
46
|
+
-DFOLLY_HAVE_CLOCK_GETTIME=1
|
|
47
|
+
-DFOLLY_USE_LIBCPP=1
|
|
48
|
+
-DFOLLY_CFG_NO_COROUTINES=1
|
|
49
|
+
-DFOLLY_MOBILE=1
|
|
50
|
+
-DFOLLY_HAVE_RECVMMSG=1
|
|
51
|
+
-DFOLLY_HAVE_PTHREAD=1
|
|
52
|
+
# Once we target android-23 above, we can comment
|
|
53
|
+
# the following line. NDK uses GNU style stderror_r() after API 23.
|
|
54
|
+
-DFOLLY_HAVE_XSI_STRERROR_R=1
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
# Add all libraries required by the generated specs
|
|
58
|
+
find_package(fbjni REQUIRED) # <-- Used for communication between Java <-> C++
|
|
59
|
+
find_package(ReactAndroid REQUIRED) # <-- Used to set up React Native bindings (e.g. CallInvoker/TurboModule)
|
|
60
|
+
find_package(react-native-nitro-modules REQUIRED) # <-- Used to create all HybridObjects and use the Nitro core library
|
|
61
|
+
|
|
62
|
+
# Link all libraries together
|
|
63
|
+
target_link_libraries(
|
|
64
|
+
crumbsdk_reactnative
|
|
65
|
+
fbjni::fbjni # <-- Facebook C++ JNI helpers
|
|
66
|
+
ReactAndroid::jsi # <-- RN: JSI
|
|
67
|
+
react-native-nitro-modules::NitroModules # <-- NitroModules Core :)
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
# Link react-native (different prefab between RN 0.75 and RN 0.76)
|
|
71
|
+
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
|
|
72
|
+
target_link_libraries(
|
|
73
|
+
crumbsdk_reactnative
|
|
74
|
+
ReactAndroid::reactnative # <-- RN: Native Modules umbrella prefab
|
|
75
|
+
)
|
|
76
|
+
else()
|
|
77
|
+
target_link_libraries(
|
|
78
|
+
crumbsdk_reactnative
|
|
79
|
+
ReactAndroid::react_nativemodule_core # <-- RN: TurboModules Core
|
|
80
|
+
)
|
|
81
|
+
endif()
|