nightingale-app-react-native 15.0.0 → 16.0.0

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/CHANGELOG.md CHANGED
@@ -3,6 +3,20 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [16.0.0](https://github.com/christophehurpeau/nightingale/compare/v15.0.0...v16.0.0) (2025-03-30)
7
+
8
+ ### ⚠ BREAKING CHANGES
9
+
10
+ * drop node 18
11
+
12
+ ### Features
13
+
14
+ * drop node 18 ([1b11a55](https://github.com/christophehurpeau/nightingale/commit/1b11a55dd24c9435be50519a748316079f554414))
15
+
16
+ Version bump for dependency: nightingale
17
+ Version bump for dependency: nightingale-react-native-console
18
+
19
+
6
20
  ## [15.0.0](https://github.com/christophehurpeau/nightingale/compare/v14.2.1...v15.0.0) (2023-12-25)
7
21
 
8
22
 
package/README.md CHANGED
@@ -1,16 +1,16 @@
1
- <h3 align="center">
1
+ <h1 align="center">
2
2
  nightingale-app-react-native
3
- </h3>
3
+ </h1>
4
4
 
5
5
  <p align="center">
6
6
  React Native and Expo logger for application
7
7
  </p>
8
8
 
9
9
  <p align="center">
10
- <a href="https://npmjs.org/package/nightingale-app-react-native"><img src="https://img.shields.io/npm/v/nightingale-app-react-native.svg?style=flat-square"></a>
11
- <a href="https://npmjs.org/package/nightingale-app-react-native"><img src="https://img.shields.io/npm/dw/nightingale-app-react-native.svg?style=flat-square"></a>
12
- <a href="https://npmjs.org/package/nightingale-app-react-native"><img src="https://img.shields.io/node/v/nightingale-app-react-native.svg?style=flat-square"></a>
13
- <a href="https://npmjs.org/package/nightingale-app-react-native"><img src="https://img.shields.io/npm/types/nightingale-app-react-native.svg?style=flat-square"></a>
10
+ <a href="https://npmjs.org/package/nightingale-app-react-native"><img src="https://img.shields.io/npm/v/nightingale-app-react-native.svg?style=flat-square" alt="npm version"></a>
11
+ <a href="https://npmjs.org/package/nightingale-app-react-native"><img src="https://img.shields.io/npm/dw/nightingale-app-react-native.svg?style=flat-square" alt="npm downloads"></a>
12
+ <a href="https://npmjs.org/package/nightingale-app-react-native"><img src="https://img.shields.io/node/v/nightingale-app-react-native.svg?style=flat-square" alt="node version"></a>
13
+ <a href="https://npmjs.org/package/nightingale-app-react-native"><img src="https://img.shields.io/npm/types/nightingale-app-react-native.svg?style=flat-square" alt="types"></a>
14
14
  </p>
15
15
 
16
16
  ## Install
@@ -22,16 +22,16 @@ npm install --save nightingale-app-react-native
22
22
  ## Usage
23
23
 
24
24
  ```js
25
- import { appLogger } from 'nightingale-app-react-native';
25
+ import { appLogger } from "nightingale-app-react-native";
26
26
 
27
- appLogger.info('hello');
27
+ appLogger.info("hello");
28
28
  ```
29
29
 
30
30
  ## Create children
31
31
 
32
32
  ```js
33
- const myServiceLogger = appLogger.child('services:myService');
34
- myServiceLogger.debug('started');
33
+ const myServiceLogger = appLogger.child("services:myService");
34
+ myServiceLogger.debug("started");
35
35
  ```
36
36
 
37
37
  ### The Logger class
@@ -51,10 +51,10 @@ import {
51
51
  configure,
52
52
  ReactNativeConsoleHandler,
53
53
  Level,
54
- } from 'nightingale-app-react-native';
54
+ } from "nightingale-app-react-native";
55
55
 
56
56
  configure(
57
- process.env.NODE_ENV === 'production'
57
+ process.env.NODE_ENV === "production"
58
58
  ? []
59
59
  : [
60
60
  {
@@ -1,7 +1,6 @@
1
- import { Logger } from 'nightingale';
2
- import { BrowserConsoleHandler } from 'nightingale-browser-console';
3
- import { ReactNativeConsoleHandler } from 'nightingale-react-native-console';
4
- export { configure, addConfig, Level } from 'nightingale';
1
+ import { BrowserConsoleHandler, Logger } from "nightingale";
2
+ import { ReactNativeConsoleHandler } from "nightingale-react-native-console";
3
+ export { configure, addConfig, Level } from "nightingale";
5
4
  export declare const appLogger: Logger;
6
5
  export declare const ReactNativeConsoleHandlerForPlatform: typeof BrowserConsoleHandler | typeof ReactNativeConsoleHandler;
7
6
  export declare function listenReactNativeUnhandledErrors(logger?: Logger): void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAG7E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAE1D,eAAO,MAAM,SAAS,QAAoB,CAAC;AAE3C,eAAO,MAAM,oCAAoC,EAC7C,OAAO,qBAAqB,GAC5B,OAAO,yBACgE,CAAC;AAiB5E,wBAAgB,gCAAgC,CAC9C,MAAM,GAAE,MAGP,GACA,IAAI,CAkCN"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAS,MAAM,EAAa,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAG7E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAE1D,eAAO,MAAM,SAAS,QAAoB,CAAC;AAE3C,eAAO,MAAM,oCAAoC,EAC7C,OAAO,qBAAqB,GAC5B,OAAO,yBACgE,CAAC;AAiB5E,wBAAgB,gCAAgC,CAC9C,MAAM,GAAE,MAGP,GACA,IAAI,CAkCN"}
@@ -1,53 +1,51 @@
1
- import { Logger, configure, Level } from 'nightingale';
1
+ import { Logger, BrowserConsoleHandler, configure, Level } from 'nightingale';
2
2
  export { Level, addConfig, configure } from 'nightingale';
3
- import { BrowserConsoleHandler } from 'nightingale-browser-console';
4
3
  import { ReactNativeConsoleHandler } from 'nightingale-react-native-console';
5
4
  import { Platform } from 'react-native';
6
5
 
7
- const appLogger = new Logger('app');
8
- const ReactNativeConsoleHandlerForPlatform = Platform.OS === 'web' ? BrowserConsoleHandler : ReactNativeConsoleHandler;
9
- configure(process.env.NODE_ENV === 'production' ? [] : [{
6
+ const appLogger = new Logger("app");
7
+ const ReactNativeConsoleHandlerForPlatform = Platform.OS === "web" ? BrowserConsoleHandler : ReactNativeConsoleHandler;
8
+ configure(process.env.NODE_ENV === "production" ? [] : [{
10
9
  pattern: /^app(:|$)/,
11
10
  handlers: [new ReactNativeConsoleHandlerForPlatform(Level.DEBUG)],
12
11
  stop: true
13
12
  }, {
14
13
  handlers: [new ReactNativeConsoleHandlerForPlatform(Level.INFO)]
15
14
  }]);
16
- function listenReactNativeUnhandledErrors(logger = new Logger('nightingale:listenReactNativeUnhandledErrors', 'UnhandledErrors')) {
17
- var _global;
15
+ function listenReactNativeUnhandledErrors(logger = new Logger("nightingale:listenReactNativeUnhandledErrors", "UnhandledErrors")) {
18
16
  // Check if Hermes is available and is being used for promises
19
17
  // React Native v0.63 and v0.64 include global.HermesInternal but not 'hasPromise'
20
- if ((_global = global) != null && (_global = _global.HermesInternal) != null && _global.hasPromise != null && _global.hasPromise() && global.HermesInternal.enablePromiseRejectionTracker) {
21
- global.HermesInternal.enablePromiseRejectionTracker({
18
+ if (globalThis.HermesInternal.hasPromise?.() && globalThis.HermesInternal.enablePromiseRejectionTracker) {
19
+ globalThis.HermesInternal.enablePromiseRejectionTracker({
22
20
  allRejections: true,
23
21
  onUnhandled: (id, rejection) => {
24
22
  logger.error(rejection, {
25
23
  unhandled: true,
26
- type: 'promiseRejectionTracker',
24
+ type: "promiseRejectionTracker",
27
25
  id
28
26
  });
29
27
  }
30
28
  });
31
29
  } else {
32
- throw new Error('Only Hermes is supported.');
30
+ throw new Error("Only Hermes is supported.");
33
31
  }
34
- const globalHander = ErrorUtils.getGlobalHandler();
32
+ const globalHandler = ErrorUtils.getGlobalHandler();
35
33
  ErrorUtils.setGlobalHandler((error, isFatal) => {
36
34
  if (isFatal) {
37
35
  logger.fatal(error, {
38
36
  unhandled: true,
39
- type: 'globalHandler',
37
+ type: "globalHandler",
40
38
  isFatal
41
39
  });
42
40
  } else {
43
41
  logger.error(error, {
44
42
  unhandled: true,
45
- type: 'globalHandler',
43
+ type: "globalHandler",
46
44
  isFatal
47
45
  });
48
46
  }
49
- if (globalHander) {
50
- globalHander(error, isFatal);
47
+ if (globalHandler) {
48
+ globalHandler(error, isFatal);
51
49
  }
52
50
  });
53
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index-browser.es.js","sources":["../src/index.ts"],"sourcesContent":["import { Logger, configure, Level } from 'nightingale';\nimport { BrowserConsoleHandler } from 'nightingale-browser-console';\nimport { ReactNativeConsoleHandler } from 'nightingale-react-native-console';\nimport { Platform } from 'react-native';\n\nexport { configure, addConfig, Level } from 'nightingale';\n\nexport const appLogger = new Logger('app');\n\nexport const ReactNativeConsoleHandlerForPlatform:\n | typeof BrowserConsoleHandler\n | typeof ReactNativeConsoleHandler =\n Platform.OS === 'web' ? BrowserConsoleHandler : ReactNativeConsoleHandler;\n\nconfigure(\n process.env.NODE_ENV === 'production'\n ? []\n : [\n {\n pattern: /^app(:|$)/,\n handlers: [new ReactNativeConsoleHandlerForPlatform(Level.DEBUG)],\n stop: true,\n },\n {\n handlers: [new ReactNativeConsoleHandlerForPlatform(Level.INFO)],\n },\n ],\n);\n\nexport function listenReactNativeUnhandledErrors(\n logger: Logger = new Logger(\n 'nightingale:listenReactNativeUnhandledErrors',\n 'UnhandledErrors',\n ),\n): void {\n // Check if Hermes is available and is being used for promises\n // React Native v0.63 and v0.64 include global.HermesInternal but not 'hasPromise'\n if (\n global?.HermesInternal?.hasPromise?.() &&\n global.HermesInternal.enablePromiseRejectionTracker\n ) {\n global.HermesInternal.enablePromiseRejectionTracker({\n allRejections: true,\n onUnhandled: (id: number, rejection: Error) => {\n logger.error(rejection, {\n unhandled: true,\n type: 'promiseRejectionTracker',\n id,\n });\n },\n });\n } else {\n throw new Error('Only Hermes is supported.');\n }\n\n const globalHander = ErrorUtils.getGlobalHandler();\n\n ErrorUtils.setGlobalHandler((error: Error, isFatal?: boolean) => {\n if (isFatal) {\n logger.fatal(error, { unhandled: true, type: 'globalHandler', isFatal });\n } else {\n logger.error(error, { unhandled: true, type: 'globalHandler', isFatal });\n }\n\n if (globalHander) {\n globalHander(error, isFatal);\n }\n });\n}\n"],"names":["appLogger","Logger","ReactNativeConsoleHandlerForPlatform","Platform","OS","BrowserConsoleHandler","ReactNativeConsoleHandler","configure","process","env","NODE_ENV","pattern","handlers","Level","DEBUG","stop","INFO","listenReactNativeUnhandledErrors","logger","_global","global","HermesInternal","hasPromise","enablePromiseRejectionTracker","allRejections","onUnhandled","id","rejection","error","unhandled","type","Error","globalHander","ErrorUtils","getGlobalHandler","setGlobalHandler","isFatal","fatal"],"mappings":";;;;;;MAOaA,SAAS,GAAG,IAAIC,MAAM,CAAC,KAAK,EAAC;AAEnC,MAAMC,oCAEuB,GAClCC,QAAQ,CAACC,EAAE,KAAK,KAAK,GAAGC,qBAAqB,GAAGC,0BAAyB;AAE3EC,SAAS,CACPC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,GACjC,EAAE,GACF,CACE;AACEC,EAAAA,OAAO,EAAE,WAAW;EACpBC,QAAQ,EAAE,CAAC,IAAIV,oCAAoC,CAACW,KAAK,CAACC,KAAK,CAAC,CAAC;AACjEC,EAAAA,IAAI,EAAE,IAAA;AACR,CAAC,EACD;EACEH,QAAQ,EAAE,CAAC,IAAIV,oCAAoC,CAACW,KAAK,CAACG,IAAI,CAAC,CAAA;AACjE,CAAC,CAET,CAAC,CAAA;AAEM,SAASC,gCAAgCA,CAC9CC,MAAc,GAAG,IAAIjB,MAAM,CACzB,8CAA8C,EAC9C,iBACF,CAAC,EACK;AAAA,EAAA,IAAAkB,OAAA,CAAA;AACN;AACA;EACA,IACE,CAAAA,OAAA,GAAAC,MAAM,KAAA,IAAA,IAAA,CAAAD,OAAA,GAANA,OAAA,CAAQE,cAAc,KAAA,IAAA,IAAtBF,OAAA,CAAwBG,UAAU,IAAlCH,IAAAA,IAAAA,OAAA,CAAwBG,UAAU,EAAI,IACtCF,MAAM,CAACC,cAAc,CAACE,6BAA6B,EACnD;AACAH,IAAAA,MAAM,CAACC,cAAc,CAACE,6BAA6B,CAAC;AAClDC,MAAAA,aAAa,EAAE,IAAI;AACnBC,MAAAA,WAAW,EAAEA,CAACC,EAAU,EAAEC,SAAgB,KAAK;AAC7CT,QAAAA,MAAM,CAACU,KAAK,CAACD,SAAS,EAAE;AACtBE,UAAAA,SAAS,EAAE,IAAI;AACfC,UAAAA,IAAI,EAAE,yBAAyB;AAC/BJ,UAAAA,EAAAA;AACF,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAC,CAAC,CAAA;AACJ,GAAC,MAAM;AACL,IAAA,MAAM,IAAIK,KAAK,CAAC,2BAA2B,CAAC,CAAA;AAC9C,GAAA;AAEA,EAAA,MAAMC,YAAY,GAAGC,UAAU,CAACC,gBAAgB,EAAE,CAAA;AAElDD,EAAAA,UAAU,CAACE,gBAAgB,CAAC,CAACP,KAAY,EAAEQ,OAAiB,KAAK;AAC/D,IAAA,IAAIA,OAAO,EAAE;AACXlB,MAAAA,MAAM,CAACmB,KAAK,CAACT,KAAK,EAAE;AAAEC,QAAAA,SAAS,EAAE,IAAI;AAAEC,QAAAA,IAAI,EAAE,eAAe;AAAEM,QAAAA,OAAAA;AAAQ,OAAC,CAAC,CAAA;AAC1E,KAAC,MAAM;AACLlB,MAAAA,MAAM,CAACU,KAAK,CAACA,KAAK,EAAE;AAAEC,QAAAA,SAAS,EAAE,IAAI;AAAEC,QAAAA,IAAI,EAAE,eAAe;AAAEM,QAAAA,OAAAA;AAAQ,OAAC,CAAC,CAAA;AAC1E,KAAA;AAEA,IAAA,IAAIJ,YAAY,EAAE;AAChBA,MAAAA,YAAY,CAACJ,KAAK,EAAEQ,OAAO,CAAC,CAAA;AAC9B,KAAA;AACF,GAAC,CAAC,CAAA;AACJ;;;;"}
1
+ {"version":3,"file":"index-browser.es.js","sources":["../src/index.ts"],"sourcesContent":["import { BrowserConsoleHandler, Level, Logger, configure } from \"nightingale\";\nimport { ReactNativeConsoleHandler } from \"nightingale-react-native-console\";\nimport { Platform } from \"react-native\";\n\nexport { configure, addConfig, Level } from \"nightingale\";\n\nexport const appLogger = new Logger(\"app\");\n\nexport const ReactNativeConsoleHandlerForPlatform:\n | typeof BrowserConsoleHandler\n | typeof ReactNativeConsoleHandler =\n Platform.OS === \"web\" ? BrowserConsoleHandler : ReactNativeConsoleHandler;\n\nconfigure(\n process.env.NODE_ENV === \"production\"\n ? []\n : [\n {\n pattern: /^app(:|$)/,\n handlers: [new ReactNativeConsoleHandlerForPlatform(Level.DEBUG)],\n stop: true,\n },\n {\n handlers: [new ReactNativeConsoleHandlerForPlatform(Level.INFO)],\n },\n ],\n);\n\nexport function listenReactNativeUnhandledErrors(\n logger: Logger = new Logger(\n \"nightingale:listenReactNativeUnhandledErrors\",\n \"UnhandledErrors\",\n ),\n): void {\n // Check if Hermes is available and is being used for promises\n // React Native v0.63 and v0.64 include global.HermesInternal but not 'hasPromise'\n if (\n globalThis.HermesInternal.hasPromise?.() &&\n globalThis.HermesInternal.enablePromiseRejectionTracker\n ) {\n globalThis.HermesInternal.enablePromiseRejectionTracker({\n allRejections: true,\n onUnhandled: (id: number, rejection: Error) => {\n logger.error(rejection, {\n unhandled: true,\n type: \"promiseRejectionTracker\",\n id,\n });\n },\n });\n } else {\n throw new Error(\"Only Hermes is supported.\");\n }\n\n const globalHandler = ErrorUtils.getGlobalHandler();\n\n ErrorUtils.setGlobalHandler((error: Error, isFatal?: boolean) => {\n if (isFatal) {\n logger.fatal(error, { unhandled: true, type: \"globalHandler\", isFatal });\n } else {\n logger.error(error, { unhandled: true, type: \"globalHandler\", isFatal });\n }\n\n if (globalHandler) {\n globalHandler(error, isFatal);\n }\n });\n}\n"],"names":["appLogger","Logger","ReactNativeConsoleHandlerForPlatform","Platform","OS","BrowserConsoleHandler","ReactNativeConsoleHandler","configure","process","env","NODE_ENV","pattern","handlers","Level","DEBUG","stop","INFO","listenReactNativeUnhandledErrors","logger","globalThis","HermesInternal","hasPromise","enablePromiseRejectionTracker","allRejections","onUnhandled","id","rejection","error","unhandled","type","Error","globalHandler","ErrorUtils","getGlobalHandler","setGlobalHandler","isFatal","fatal"],"mappings":";;;;;MAMaA,SAAS,GAAG,IAAIC,MAAM,CAAC,KAAK;AAElC,MAAMC,oCAEuB,GAClCC,QAAQ,CAACC,EAAE,KAAK,KAAK,GAAGC,qBAAqB,GAAGC;AAElDC,SAAS,CACPC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,GACjC,EAAE,GACF,CACE;AACEC,EAAAA,OAAO,EAAE,WAAW;EACpBC,QAAQ,EAAE,CAAC,IAAIV,oCAAoC,CAACW,KAAK,CAACC,KAAK,CAAC,CAAC;AACjEC,EAAAA,IAAI,EAAE;AACR,CAAC,EACD;EACEH,QAAQ,EAAE,CAAC,IAAIV,oCAAoC,CAACW,KAAK,CAACG,IAAI,CAAC;AACjE,CAAC,CAET,CAAC;AAEM,SAASC,gCAAgCA,CAC9CC,MAAc,GAAG,IAAIjB,MAAM,CACzB,8CAA8C,EAC9C,iBACF,CAAC,EACK;AACN;AACA;AACA,EAAA,IACEkB,UAAU,CAACC,cAAc,CAACC,UAAU,IAAI,IACxCF,UAAU,CAACC,cAAc,CAACE,6BAA6B,EACvD;AACAH,IAAAA,UAAU,CAACC,cAAc,CAACE,6BAA6B,CAAC;AACtDC,MAAAA,aAAa,EAAE,IAAI;AACnBC,MAAAA,WAAW,EAAEA,CAACC,EAAU,EAAEC,SAAgB,KAAK;AAC7CR,QAAAA,MAAM,CAACS,KAAK,CAACD,SAAS,EAAE;AACtBE,UAAAA,SAAS,EAAE,IAAI;AACfC,UAAAA,IAAI,EAAE,yBAAyB;AAC/BJ,UAAAA;AACF,SAAC,CAAC;AACJ;AACF,KAAC,CAAC;AACJ,GAAC,MAAM;AACL,IAAA,MAAM,IAAIK,KAAK,CAAC,2BAA2B,CAAC;AAC9C;AAEA,EAAA,MAAMC,aAAa,GAAGC,UAAU,CAACC,gBAAgB,EAAE;AAEnDD,EAAAA,UAAU,CAACE,gBAAgB,CAAC,CAACP,KAAY,EAAEQ,OAAiB,KAAK;AAC/D,IAAA,IAAIA,OAAO,EAAE;AACXjB,MAAAA,MAAM,CAACkB,KAAK,CAACT,KAAK,EAAE;AAAEC,QAAAA,SAAS,EAAE,IAAI;AAAEC,QAAAA,IAAI,EAAE,eAAe;AAAEM,QAAAA;AAAQ,OAAC,CAAC;AAC1E,KAAC,MAAM;AACLjB,MAAAA,MAAM,CAACS,KAAK,CAACA,KAAK,EAAE;AAAEC,QAAAA,SAAS,EAAE,IAAI;AAAEC,QAAAA,IAAI,EAAE,eAAe;AAAEM,QAAAA;AAAQ,OAAC,CAAC;AAC1E;AAEA,IAAA,IAAIJ,aAAa,EAAE;AACjBA,MAAAA,aAAa,CAACJ,KAAK,EAAEQ,OAAO,CAAC;AAC/B;AACF,GAAC,CAAC;AACJ;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nightingale-app-react-native",
3
- "version": "15.0.0",
3
+ "version": "16.0.0",
4
4
  "description": "React Native and Expo logger for application",
5
5
  "keywords": [
6
6
  "nightingale",
@@ -18,17 +18,9 @@
18
18
  "homepage": "https://github.com/christophehurpeau/nightingale",
19
19
  "type": "module",
20
20
  "engines": {
21
- "node": ">=18.12.0"
22
- },
23
- "browserslist": {
24
- "production": [
25
- "defaults",
26
- "> 0.2%",
27
- "not ie < 12",
28
- "not safari < 10",
29
- "not ios_saf < 10"
30
- ]
21
+ "node": ">=22.14.0"
31
22
  },
23
+ "sideEffects": false,
32
24
  "types": "./dist/definitions/index.d.ts",
33
25
  "module": "./dist/index-browser.es.js",
34
26
  "browser": "./dist/index-browser.es.js",
@@ -41,7 +33,6 @@
41
33
  }
42
34
  }
43
35
  },
44
- "sideEffects": false,
45
36
  "files": [
46
37
  "src",
47
38
  "dist"
@@ -52,20 +43,30 @@
52
43
  "clean": "yarn clean:build",
53
44
  "clean:build": "pob-babel-clean-out dist",
54
45
  "lint": "yarn run lint:eslint",
55
- "lint:eslint": "yarn ../.. run eslint --report-unused-disable-directives --resolve-plugins-relative-to . --quiet packages/nightingale-app-react-native",
46
+ "lint:eslint": "yarn ../.. run eslint --quiet packages/nightingale-app-react-native",
56
47
  "watch": "yarn clean:build && rollup --config rollup.config.mjs --watch"
57
48
  },
58
- "prettier": "@pob/root/prettier-config",
49
+ "browserslist": {
50
+ "production": [
51
+ "defaults",
52
+ "> 0.2%",
53
+ "not ie < 12",
54
+ "not safari < 10",
55
+ "not ios_saf < 10"
56
+ ]
57
+ },
59
58
  "pob": {
60
- "babelEnvs": [
59
+ "bundler": "rollup-babel",
60
+ "entries": [
61
+ "index"
62
+ ],
63
+ "envs": [
61
64
  {
62
65
  "target": "browser"
63
66
  }
64
- ],
65
- "entries": [
66
- "index"
67
67
  ]
68
68
  },
69
+ "prettier": "@pob/root/prettier-config",
69
70
  "peerDependencies": {
70
71
  "react-native": "*",
71
72
  "react-native-web": "*"
@@ -76,14 +77,13 @@
76
77
  }
77
78
  },
78
79
  "dependencies": {
79
- "nightingale": "15.0.0",
80
- "nightingale-browser-console": "15.0.0",
81
- "nightingale-react-native-console": "15.0.0"
80
+ "nightingale": "16.0.0",
81
+ "nightingale-react-native-console": "16.0.0"
82
82
  },
83
83
  "devDependencies": {
84
- "@babel/core": "7.23.6",
85
- "@babel/preset-env": "7.23.6",
86
- "pob-babel": "38.0.0",
87
- "typescript": "5.3.3"
84
+ "@babel/core": "7.26.10",
85
+ "@babel/preset-env": "7.26.9",
86
+ "pob-babel": "43.4.0",
87
+ "typescript": "5.8.2"
88
88
  }
89
89
  }
package/src/index.ts CHANGED
@@ -1,19 +1,18 @@
1
- import { Logger, configure, Level } from 'nightingale';
2
- import { BrowserConsoleHandler } from 'nightingale-browser-console';
3
- import { ReactNativeConsoleHandler } from 'nightingale-react-native-console';
4
- import { Platform } from 'react-native';
1
+ import { BrowserConsoleHandler, Level, Logger, configure } from "nightingale";
2
+ import { ReactNativeConsoleHandler } from "nightingale-react-native-console";
3
+ import { Platform } from "react-native";
5
4
 
6
- export { configure, addConfig, Level } from 'nightingale';
5
+ export { configure, addConfig, Level } from "nightingale";
7
6
 
8
- export const appLogger = new Logger('app');
7
+ export const appLogger = new Logger("app");
9
8
 
10
9
  export const ReactNativeConsoleHandlerForPlatform:
11
10
  | typeof BrowserConsoleHandler
12
11
  | typeof ReactNativeConsoleHandler =
13
- Platform.OS === 'web' ? BrowserConsoleHandler : ReactNativeConsoleHandler;
12
+ Platform.OS === "web" ? BrowserConsoleHandler : ReactNativeConsoleHandler;
14
13
 
15
14
  configure(
16
- process.env.NODE_ENV === 'production'
15
+ process.env.NODE_ENV === "production"
17
16
  ? []
18
17
  : [
19
18
  {
@@ -29,41 +28,41 @@ configure(
29
28
 
30
29
  export function listenReactNativeUnhandledErrors(
31
30
  logger: Logger = new Logger(
32
- 'nightingale:listenReactNativeUnhandledErrors',
33
- 'UnhandledErrors',
31
+ "nightingale:listenReactNativeUnhandledErrors",
32
+ "UnhandledErrors",
34
33
  ),
35
34
  ): void {
36
35
  // Check if Hermes is available and is being used for promises
37
36
  // React Native v0.63 and v0.64 include global.HermesInternal but not 'hasPromise'
38
37
  if (
39
- global?.HermesInternal?.hasPromise?.() &&
40
- global.HermesInternal.enablePromiseRejectionTracker
38
+ globalThis.HermesInternal.hasPromise?.() &&
39
+ globalThis.HermesInternal.enablePromiseRejectionTracker
41
40
  ) {
42
- global.HermesInternal.enablePromiseRejectionTracker({
41
+ globalThis.HermesInternal.enablePromiseRejectionTracker({
43
42
  allRejections: true,
44
43
  onUnhandled: (id: number, rejection: Error) => {
45
44
  logger.error(rejection, {
46
45
  unhandled: true,
47
- type: 'promiseRejectionTracker',
46
+ type: "promiseRejectionTracker",
48
47
  id,
49
48
  });
50
49
  },
51
50
  });
52
51
  } else {
53
- throw new Error('Only Hermes is supported.');
52
+ throw new Error("Only Hermes is supported.");
54
53
  }
55
54
 
56
- const globalHander = ErrorUtils.getGlobalHandler();
55
+ const globalHandler = ErrorUtils.getGlobalHandler();
57
56
 
58
57
  ErrorUtils.setGlobalHandler((error: Error, isFatal?: boolean) => {
59
58
  if (isFatal) {
60
- logger.fatal(error, { unhandled: true, type: 'globalHandler', isFatal });
59
+ logger.fatal(error, { unhandled: true, type: "globalHandler", isFatal });
61
60
  } else {
62
- logger.error(error, { unhandled: true, type: 'globalHandler', isFatal });
61
+ logger.error(error, { unhandled: true, type: "globalHandler", isFatal });
63
62
  }
64
63
 
65
- if (globalHander) {
66
- globalHander(error, isFatal);
64
+ if (globalHandler) {
65
+ globalHandler(error, isFatal);
67
66
  }
68
67
  });
69
68
  }
@@ -1,27 +0,0 @@
1
- {
2
- "root": true,
3
- "parser": "@typescript-eslint/parser",
4
- "parserOptions": {
5
- "project": "packages/nightingale-app-react-native/tsconfig.json"
6
- },
7
- "plugins": ["@typescript-eslint"],
8
- "extends": ["@pob/eslint-config-typescript"],
9
- "ignorePatterns": ["*.d.ts"],
10
- "overrides": [
11
- {
12
- "files": ["**/*.test.ts", "__tests__/**/*.ts"],
13
- "extends": ["@pob/eslint-config-typescript/test"],
14
- "env": {
15
- "jest": true
16
- },
17
- "rules": {
18
- "import/no-extraneous-dependencies": [
19
- "error",
20
- {
21
- "devDependencies": true
22
- }
23
- ]
24
- }
25
- }
26
- ]
27
- }