@logbrew/react-native 0.1.10 → 0.1.12

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 (72) hide show
  1. package/LogBrewReactNative.podspec +25 -3
  2. package/README.md +174 -4
  3. package/android/src/main/java/co/logbrew/reactnative/EventRecordStore.java +611 -0
  4. package/android/src/main/java/co/logbrew/reactnative/FatalStoreModuleImpl.java +129 -0
  5. package/android/src/newarch/java/co/logbrew/reactnative/FatalStoreModule.java +26 -0
  6. package/android/src/oldarch/java/co/logbrew/reactnative/FatalStoreModule.java +26 -0
  7. package/apple-native-diagnostics.d.ts +52 -0
  8. package/apple-native-diagnostics.js +286 -0
  9. package/expo.cjs +46 -0
  10. package/expo.d.ts +16 -0
  11. package/expo.js +5 -0
  12. package/fatal-replay.cjs +12 -1
  13. package/global-errors.cjs +3 -1
  14. package/index.cjs +86 -2
  15. package/index.d.cts +7 -0
  16. package/index.d.ts +7 -0
  17. package/index.js +86 -2
  18. package/index.native.d.ts +47 -1
  19. package/index.native.js +81 -1
  20. package/ios/AppleDiagnostics/LBRNAppleDiagnosticsModule.h +4 -0
  21. package/ios/AppleDiagnostics/LBRNAppleDiagnosticsModule.mm +56 -0
  22. package/ios/AppleDiagnostics/LBRNAppleNativeDiagnostics.swift +293 -0
  23. package/ios/GeneratedAppleDiagnostics/LogBrew/AutomaticTelemetryContext.swift +72 -0
  24. package/ios/GeneratedAppleDiagnostics/LogBrew/DeliveryEngine.swift +270 -0
  25. package/ios/GeneratedAppleDiagnostics/LogBrew/DeliveryEngineAutomatic.swift +331 -0
  26. package/ios/GeneratedAppleDiagnostics/LogBrew/DeliveryEngineDurable.swift +148 -0
  27. package/ios/GeneratedAppleDiagnostics/LogBrew/DeliveryEngineQueue.swift +343 -0
  28. package/ios/GeneratedAppleDiagnostics/LogBrew/DeliveryLifecycle.swift +70 -0
  29. package/ios/GeneratedAppleDiagnostics/LogBrew/DurableDeliveryStore.swift +258 -0
  30. package/ios/GeneratedAppleDiagnostics/LogBrew/DurableDeliveryStoreRecovery.swift +330 -0
  31. package/ios/GeneratedAppleDiagnostics/LogBrew/EventEncoding.swift +114 -0
  32. package/ios/GeneratedAppleDiagnostics/LogBrew/IssueDiagnostics.swift +385 -0
  33. package/ios/GeneratedAppleDiagnostics/LogBrew/LifecycleTrace.swift +138 -0
  34. package/ios/GeneratedAppleDiagnostics/LogBrew/LogBrewClient.swift +358 -0
  35. package/ios/GeneratedAppleDiagnostics/LogBrew/LogBrewLogger.swift +262 -0
  36. package/ios/GeneratedAppleDiagnostics/LogBrew/LogBrewTrace.swift +357 -0
  37. package/ios/GeneratedAppleDiagnostics/LogBrew/Metadata.swift +86 -0
  38. package/ios/GeneratedAppleDiagnostics/LogBrew/NativeStackFrame.swift +27 -0
  39. package/ios/GeneratedAppleDiagnostics/LogBrew/ProductTimeline.swift +228 -0
  40. package/ios/GeneratedAppleDiagnostics/LogBrew/PublicTypes.swift +334 -0
  41. package/ios/GeneratedAppleDiagnostics/LogBrew/TelemetryContext.swift +197 -0
  42. package/ios/GeneratedAppleDiagnostics/LogBrew/TelemetryContextValidation.swift +337 -0
  43. package/ios/GeneratedAppleDiagnostics/LogBrew/TraceEvidence.swift +79 -0
  44. package/ios/GeneratedAppleDiagnostics/LogBrew/Transport.swift +204 -0
  45. package/ios/GeneratedAppleDiagnostics/LogBrew/URLSessionTrace.swift +277 -0
  46. package/ios/GeneratedAppleDiagnostics/LogBrew/URLSessionTracer.swift +151 -0
  47. package/ios/GeneratedAppleDiagnostics/LogBrew/Validation.swift +165 -0
  48. package/ios/GeneratedAppleDiagnostics/LogBrewCrash/CrashEngine.swift +125 -0
  49. package/ios/GeneratedAppleDiagnostics/LogBrewCrash/CrashReportSanitizer.swift +139 -0
  50. package/ios/GeneratedAppleDiagnostics/LogBrewCrash/CrashStorageDirectory.swift +124 -0
  51. package/ios/GeneratedAppleDiagnostics/LogBrewCrash/NativeArtifactIdentity.swift +137 -0
  52. package/ios/GeneratedAppleDiagnostics/LogBrewCrash/NativeCrashCapture.swift +229 -0
  53. package/ios/GeneratedAppleDiagnostics/LogBrewCrash/NativeCrashPublic.swift +386 -0
  54. package/ios/GeneratedAppleDiagnostics/LogBrewCrash/NativeCrashReplay.swift +317 -0
  55. package/ios/GeneratedAppleDiagnostics/LogBrewCrash/NativeHangIncidentStore.swift +321 -0
  56. package/ios/GeneratedAppleDiagnostics/LogBrewCrash/NativeHangWatchdog.swift +386 -0
  57. package/ios/GeneratedAppleDiagnostics/LogBrewCrash/NativeHangWatchdogContracts.swift +84 -0
  58. package/ios/GeneratedAppleDiagnostics/LogBrewCrash/NativeHangWatchdogSystem.swift +139 -0
  59. package/ios/GeneratedAppleDiagnostics/LogBrewCrash/NativeMainThreadStackCapture.swift +84 -0
  60. package/ios/GeneratedAppleDiagnostics/LogBrewCrash/NativeStackFrameSanitizer.swift +170 -0
  61. package/ios/GeneratedAppleDiagnostics/SOURCE-MANIFEST.json +43 -0
  62. package/ios/LBRNEventRecordStore.h +29 -0
  63. package/ios/LBRNEventRecordStore.m +746 -0
  64. package/ios/LBRNFatalStoreModule.mm +159 -14
  65. package/ios/LBRNPrivateStorage.h +7 -0
  66. package/ios/LBRNPrivateStorage.m +38 -0
  67. package/package.json +47 -4
  68. package/persistent-delivery.native.js +282 -0
  69. package/promise-rejections.cjs +3 -1
  70. package/scripts/sync-apple-native-sources.mjs +93 -0
  71. package/src/NativeLogBrewAppleDiagnostics.ts +12 -0
  72. package/src/NativeLogBrewFatalStore.ts +9 -0
@@ -0,0 +1,93 @@
1
+ import assert from "node:assert/strict";
2
+ import crypto from "node:crypto";
3
+ import fs from "node:fs";
4
+ import path from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+
7
+ const scriptDirectory = path.dirname(fileURLToPath(import.meta.url));
8
+ const packageRoot = path.resolve(scriptDirectory, "..");
9
+ const repositoryRoot = path.resolve(packageRoot, "../..");
10
+ const generatedRoot = path.join(packageRoot, "ios", "GeneratedAppleDiagnostics");
11
+ const sourceRoot = path.join(repositoryRoot, "swift", "logbrew-swift", "Sources");
12
+ const sourceModules = ["LogBrew", "LogBrewCrash"];
13
+ const generatedHeader = [
14
+ "// Generated by scripts/sync-apple-native-sources.mjs.",
15
+ "// Edit the canonical Swift source, then regenerate this package boundary.",
16
+ ""
17
+ ].join("\n");
18
+ const mode = process.argv[2] ?? "--check";
19
+
20
+ assert.ok(
21
+ generatedRoot.startsWith(`${packageRoot}${path.sep}`)
22
+ && path.basename(generatedRoot) === "GeneratedAppleDiagnostics",
23
+ "refusing to operate outside the package-generated source directory"
24
+ );
25
+
26
+ const expected = expectedFiles();
27
+ if (mode === "--write") {
28
+ fs.rmSync(generatedRoot, { force: true, recursive: true });
29
+ for (const [relativePath, contents] of expected) {
30
+ const destination = path.join(generatedRoot, relativePath);
31
+ fs.mkdirSync(path.dirname(destination), { recursive: true });
32
+ fs.writeFileSync(destination, contents, "utf8");
33
+ }
34
+ process.stdout.write(`generated ${expected.size} Apple diagnostics source files\n`);
35
+ } else if (mode === "--check") {
36
+ const actualPaths = listFiles(generatedRoot).map((filePath) =>
37
+ path.relative(generatedRoot, filePath)
38
+ );
39
+ assert.deepEqual(actualPaths, [...expected.keys()]);
40
+ for (const [relativePath, contents] of expected) {
41
+ assert.equal(
42
+ fs.readFileSync(path.join(generatedRoot, relativePath), "utf8"),
43
+ contents,
44
+ `${relativePath} is stale; run the source sync with --write`
45
+ );
46
+ }
47
+ process.stdout.write(`verified ${expected.size} Apple diagnostics source files\n`);
48
+ } else {
49
+ throw new Error("usage: sync-apple-native-sources.mjs [--check|--write]");
50
+ }
51
+
52
+ function expectedFiles() {
53
+ const files = new Map();
54
+ const manifest = {};
55
+ for (const moduleName of sourceModules) {
56
+ const moduleRoot = path.join(sourceRoot, moduleName);
57
+ for (const sourcePath of listFiles(moduleRoot).filter((filePath) => filePath.endsWith(".swift"))) {
58
+ const moduleRelativePath = path.relative(moduleRoot, sourcePath);
59
+ const relativePath = path.join(moduleName, moduleRelativePath);
60
+ const canonical = fs.readFileSync(sourcePath, "utf8");
61
+ const transformed = transformCanonicalSource(canonical);
62
+ const contents = `${generatedHeader}${transformed}`;
63
+ files.set(relativePath, contents);
64
+ manifest[path.join("swift", "logbrew-swift", "Sources", relativePath)] =
65
+ crypto.createHash("sha256").update(canonical).digest("hex");
66
+ }
67
+ }
68
+ files.set(
69
+ "SOURCE-MANIFEST.json",
70
+ `${JSON.stringify({ schemaVersion: 1, sources: manifest }, null, 2)}\n`
71
+ );
72
+ return new Map([...files].sort(([left], [right]) => left.localeCompare(right)));
73
+ }
74
+
75
+ function transformCanonicalSource(canonical) {
76
+ return canonical
77
+ .replaceAll("@_spi(CrashReplay) import LogBrew\n", "")
78
+ .replaceAll("@objc(LBW", "@objc(LBRNApple")
79
+ .replaceAll("@preconcurrency import KSCrashRecording\n", "@preconcurrency import KSCrash\n")
80
+ .replaceAll("@preconcurrency import KSCrashRecordingCore\n", "@preconcurrency import KSCrash\n");
81
+ }
82
+
83
+ function listFiles(root) {
84
+ if (!fs.existsSync(root)) {
85
+ return [];
86
+ }
87
+ return fs.readdirSync(root, { withFileTypes: true })
88
+ .flatMap((entry) => {
89
+ const entryPath = path.join(root, entry.name);
90
+ return entry.isDirectory() ? listFiles(entryPath) : [entryPath];
91
+ })
92
+ .sort();
93
+ }
@@ -0,0 +1,12 @@
1
+ import type { CodegenTypes, TurboModule } from "react-native";
2
+ import { TurboModuleRegistry } from "react-native";
3
+
4
+ export interface Spec extends TurboModule {
5
+ installNativeDiagnostics(
6
+ configuration: CodegenTypes.UnsafeObject
7
+ ): CodegenTypes.UnsafeObject;
8
+ replayNativeDiagnostics(): Promise<CodegenTypes.UnsafeObject>;
9
+ nativeDiagnosticsStatus(): CodegenTypes.UnsafeObject;
10
+ }
11
+
12
+ export default TurboModuleRegistry.get<Spec>("LogBrewAppleDiagnostics");
@@ -6,6 +6,15 @@ export interface Spec extends TurboModule {
6
6
  readFatalRecord(): CodegenTypes.UnsafeObject;
7
7
  acknowledgeFatalRecord(recordId: string): CodegenTypes.UnsafeObject;
8
8
  discardFatalRecord(): CodegenTypes.UnsafeObject;
9
+ loadEventRecords(queueKey: string): CodegenTypes.UnsafeObject;
10
+ appendEventRecord(
11
+ queueKey: string,
12
+ serializedEvent: string,
13
+ eventBytes: number
14
+ ): CodegenTypes.UnsafeObject;
15
+ acknowledgeEventRecords(queueKey: string, count: number): CodegenTypes.UnsafeObject;
16
+ purgeEventRecords(queueKey: string): CodegenTypes.UnsafeObject;
17
+ closeEventStore(queueKey: string): CodegenTypes.UnsafeObject;
9
18
  }
10
19
 
11
20
  export default TurboModuleRegistry.getEnforcing<Spec>("LogBrewFatalStore");