posthog-react-native 4.75.0 → 4.77.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/dist/storage.d.ts CHANGED
@@ -21,6 +21,14 @@ export declare class PostHogRNStorage {
21
21
  * inside persist() / _drainScheduledPersist().
22
22
  */
23
23
  waitForPersist(): Promise<void>;
24
+ /**
25
+ * Same as {@link waitForPersist}, but resolves to `true` only when every
26
+ * in-flight (and any freshly-drained scheduled) write landed successfully.
27
+ * Returns `false` if any tracked write rejected — the caller is responsible
28
+ * for treating that as "data not durable" and not e.g. removing a recovery
29
+ * entry from a backup store.
30
+ */
31
+ waitForPersistSuccess(): Promise<boolean>;
24
32
  persist(): void;
25
33
  private schedulePersist;
26
34
  private _drainScheduledPersist;
package/dist/storage.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.PostHogRNSyncMemoryStorage=exports.PostHogRNStorage=void 0;exports.createEventsMemoryStorage=createEventsMemoryStorage;exports.createEventsStorage=createEventsStorage;exports.createLogsMemoryStorage=createLogsMemoryStorage;exports.createLogsStorage=createLogsStorage;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator"));var _possibleConstructorReturn2=_interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));var _getPrototypeOf2=_interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _inherits2=_interopRequireDefault(require("@babel/runtime/helpers/inherits"));var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _core=require("@posthog/core");function _callSuper(t,o,e){return o=(0,_getPrototypeOf2["default"])(o),(0,_possibleConstructorReturn2["default"])(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],(0,_getPrototypeOf2["default"])(t).constructor):o.apply(t,e));}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}var EVENTS_STORAGE_FILE='.posthog-rn.json';var LOGS_STORAGE_FILE='.posthog-rn-logs.json';var POSTHOG_STORAGE_VERSION='v1';var PERSIST_DEBOUNCE_MS=100;var PostHogRNStorage=exports.PostHogRNStorage=function(){function PostHogRNStorage(storage,storageKey){var _this=this;(0,_classCallCheck2["default"])(this,PostHogRNStorage);var _a;this.memoryCache={};this._pendingPromises=new Set();this.storage=storage;this._storageKey=storageKey;var preloadResult=this.storage.getItem(this._storageKey);if((0,_core.isPromise)(preloadResult)){this.preloadPromise=preloadResult.then(function(res){_this.populateMemoryCache(res);});(_a=this.preloadPromise)===null||_a===void 0?void 0:_a["finally"](function(){_this.preloadPromise=undefined;});}else{this.populateMemoryCache(preloadResult);}}return(0,_createClass2["default"])(PostHogRNStorage,[{key:"waitForPersist",value:(function(){var _waitForPersist=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee(){return _regenerator["default"].wrap(function(_context){while(1)switch(_context.prev=_context.next){case 0:this._drainScheduledPersist();if(!(this._pendingPromises.size>0)){_context.next=1;break;}_context.next=1;return Promise.all(this._pendingPromises);case 1:case"end":return _context.stop();}},_callee,this);}));function waitForPersist(){return _waitForPersist.apply(this,arguments);}return waitForPersist;}())},{key:"persist",value:function persist(){var _this2=this;var payload={version:POSTHOG_STORAGE_VERSION,content:this.memoryCache};var result=this.storage.setItem(this._storageKey,JSON.stringify(payload));if((0,_core.isPromise)(result)){var promise=result["catch"](function(err){console.warn('PostHog storage persist failed:',err);})["finally"](function(){_this2._pendingPromises["delete"](promise);});this._pendingPromises.add(promise);}}},{key:"schedulePersist",value:function schedulePersist(){var _this3=this;if(this._persistTimer!==undefined){return;}this._persistTimer=(0,_core.safeSetTimeout)(function(){_this3._persistTimer=undefined;try{_this3.persist();}catch(err){console.warn('PostHog storage scheduled persist threw:',err);}},PERSIST_DEBOUNCE_MS);}},{key:"_drainScheduledPersist",value:function _drainScheduledPersist(){if(this._persistTimer===undefined){return;}clearTimeout(this._persistTimer);this._persistTimer=undefined;try{this.persist();}catch(err){console.warn('PostHog storage drain persist threw:',err);}}},{key:"getItem",value:function getItem(key){return this.memoryCache[key];}},{key:"setItem",value:function setItem(key,value){this.memoryCache[key]=value;this.schedulePersist();}},{key:"removeItem",value:function removeItem(key){delete this.memoryCache[key];this.schedulePersist();}},{key:"clear",value:function clear(){for(var key in this.memoryCache){delete this.memoryCache[key];}this.schedulePersist();}},{key:"getAllKeys",value:function getAllKeys(){return Object.keys(this.memoryCache);}},{key:"populateMemoryCache",value:function populateMemoryCache(res){try{var data=res?JSON.parse(res).content:{};for(var key in data){this.memoryCache[key]=data[key];}}catch(e){console.warn("PostHog failed to load persisted data from storage. This is likely because the storage format is. We'll reset the storage.",e);}}}]);}();var PostHogRNSyncMemoryStorage=exports.PostHogRNSyncMemoryStorage=function(_PostHogRNStorage){function PostHogRNSyncMemoryStorage(storageKey){(0,_classCallCheck2["default"])(this,PostHogRNSyncMemoryStorage);var cache={};var storage={getItem:function getItem(key){return cache[key];},setItem:function setItem(key,value){cache[key]=value;}};return _callSuper(this,PostHogRNSyncMemoryStorage,[storage,storageKey]);}(0,_inherits2["default"])(PostHogRNSyncMemoryStorage,_PostHogRNStorage);return(0,_createClass2["default"])(PostHogRNSyncMemoryStorage);}(PostHogRNStorage);function createEventsStorage(customStorage){return new PostHogRNStorage(customStorage,EVENTS_STORAGE_FILE);}function createLogsStorage(customStorage){return new PostHogRNStorage(customStorage,LOGS_STORAGE_FILE);}function createEventsMemoryStorage(){return new PostHogRNSyncMemoryStorage(EVENTS_STORAGE_FILE);}function createLogsMemoryStorage(){return new PostHogRNSyncMemoryStorage(LOGS_STORAGE_FILE);}
1
+ "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.PostHogRNSyncMemoryStorage=exports.PostHogRNStorage=void 0;exports.createEventsMemoryStorage=createEventsMemoryStorage;exports.createEventsStorage=createEventsStorage;exports.createLogsMemoryStorage=createLogsMemoryStorage;exports.createLogsStorage=createLogsStorage;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator"));var _possibleConstructorReturn2=_interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));var _getPrototypeOf2=_interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _inherits2=_interopRequireDefault(require("@babel/runtime/helpers/inherits"));var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _core=require("@posthog/core");function _callSuper(t,o,e){return o=(0,_getPrototypeOf2["default"])(o),(0,_possibleConstructorReturn2["default"])(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],(0,_getPrototypeOf2["default"])(t).constructor):o.apply(t,e));}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}var EVENTS_STORAGE_FILE='.posthog-rn.json';var LOGS_STORAGE_FILE='.posthog-rn-logs.json';var POSTHOG_STORAGE_VERSION='v1';var PERSIST_DEBOUNCE_MS=100;var PostHogRNStorage=exports.PostHogRNStorage=function(){function PostHogRNStorage(storage,storageKey){var _this=this;(0,_classCallCheck2["default"])(this,PostHogRNStorage);this.memoryCache={};this._pendingPromises=new Set();this.storage=storage;this._storageKey=storageKey;var preloadResult=this.storage.getItem(this._storageKey);if((0,_core.isPromise)(preloadResult)){this.preloadPromise=preloadResult.then(function(res){_this.populateMemoryCache(res);});void this.preloadPromise.then(function(){_this.preloadPromise=undefined;},function(){_this.preloadPromise=undefined;});}else{this.populateMemoryCache(preloadResult);}}return(0,_createClass2["default"])(PostHogRNStorage,[{key:"waitForPersist",value:(function(){var _waitForPersist=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee(){return _regenerator["default"].wrap(function(_context){while(1)switch(_context.prev=_context.next){case 0:this._drainScheduledPersist();if(!(this._pendingPromises.size>0)){_context.next=1;break;}_context.next=1;return Promise.all(this._pendingPromises);case 1:case"end":return _context.stop();}},_callee,this);}));function waitForPersist(){return _waitForPersist.apply(this,arguments);}return waitForPersist;}())},{key:"waitForPersistSuccess",value:(function(){var _waitForPersistSuccess=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2(){var results;return _regenerator["default"].wrap(function(_context2){while(1)switch(_context2.prev=_context2.next){case 0:this._drainScheduledPersist();if(!(this._pendingPromises.size===0)){_context2.next=1;break;}return _context2.abrupt("return",true);case 1:_context2.next=2;return Promise.all(this._pendingPromises);case 2:results=_context2.sent;return _context2.abrupt("return",results.every(function(r){return r===true;}));case 3:case"end":return _context2.stop();}},_callee2,this);}));function waitForPersistSuccess(){return _waitForPersistSuccess.apply(this,arguments);}return waitForPersistSuccess;}())},{key:"persist",value:function persist(){var _this2=this;var payload={version:POSTHOG_STORAGE_VERSION,content:this.memoryCache};var result;try{result=this.storage.setItem(this._storageKey,JSON.stringify(payload));}catch(err){console.warn('PostHog storage persist failed:',err);var promise=Promise.resolve(false);this._pendingPromises.add(promise);void promise["finally"](function(){_this2._pendingPromises["delete"](promise);});return;}if((0,_core.isPromise)(result)){var _promise=result.then(function(){return true;})["catch"](function(err){console.warn('PostHog storage persist failed:',err);return false;})["finally"](function(){_this2._pendingPromises["delete"](_promise);});this._pendingPromises.add(_promise);}}},{key:"schedulePersist",value:function schedulePersist(){var _this3=this;if(this._persistTimer!==undefined){return;}this._persistTimer=(0,_core.safeSetTimeout)(function(){_this3._persistTimer=undefined;try{_this3.persist();}catch(err){console.warn('PostHog storage scheduled persist threw:',err);}},PERSIST_DEBOUNCE_MS);}},{key:"_drainScheduledPersist",value:function _drainScheduledPersist(){if(this._persistTimer===undefined){return;}clearTimeout(this._persistTimer);this._persistTimer=undefined;try{this.persist();}catch(err){console.warn('PostHog storage drain persist threw:',err);}}},{key:"getItem",value:function getItem(key){return this.memoryCache[key];}},{key:"setItem",value:function setItem(key,value){this.memoryCache[key]=value;this.schedulePersist();}},{key:"removeItem",value:function removeItem(key){delete this.memoryCache[key];this.schedulePersist();}},{key:"clear",value:function clear(){for(var key in this.memoryCache){delete this.memoryCache[key];}this.schedulePersist();}},{key:"getAllKeys",value:function getAllKeys(){return Object.keys(this.memoryCache);}},{key:"populateMemoryCache",value:function populateMemoryCache(res){try{var data=res?JSON.parse(res).content:{};for(var key in data){this.memoryCache[key]=data[key];}}catch(e){console.warn("PostHog failed to load persisted data from storage. This is likely because the storage format is. We'll reset the storage.",e);}}}]);}();var PostHogRNSyncMemoryStorage=exports.PostHogRNSyncMemoryStorage=function(_PostHogRNStorage){function PostHogRNSyncMemoryStorage(storageKey){(0,_classCallCheck2["default"])(this,PostHogRNSyncMemoryStorage);var cache={};var storage={getItem:function getItem(key){return cache[key];},setItem:function setItem(key,value){cache[key]=value;}};return _callSuper(this,PostHogRNSyncMemoryStorage,[storage,storageKey]);}(0,_inherits2["default"])(PostHogRNSyncMemoryStorage,_PostHogRNStorage);return(0,_createClass2["default"])(PostHogRNSyncMemoryStorage);}(PostHogRNStorage);function createEventsStorage(customStorage){return new PostHogRNStorage(customStorage,EVENTS_STORAGE_FILE);}function createLogsStorage(customStorage){return new PostHogRNStorage(customStorage,LOGS_STORAGE_FILE);}function createEventsMemoryStorage(){return new PostHogRNSyncMemoryStorage(EVENTS_STORAGE_FILE);}function createLogsMemoryStorage(){return new PostHogRNSyncMemoryStorage(LOGS_STORAGE_FILE);}
2
2
  //# sourceMappingURL=storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","names":["_core","require","_callSuper","t","o","e","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","apply","Boolean","prototype","valueOf","call","EVENTS_STORAGE_FILE","LOGS_STORAGE_FILE","POSTHOG_STORAGE_VERSION","PERSIST_DEBOUNCE_MS","PostHogRNStorage","exports","storage","storageKey","_this","_classCallCheck2","memoryCache","_pendingPromises","Set","_storageKey","preloadResult","getItem","isPromise","preloadPromise","then","res","populateMemoryCache","_a","undefined","_createClass2","key","value","_waitForPersist","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_context","prev","next","_drainScheduledPersist","size","Promise","all","stop","waitForPersist","arguments","persist","_this2","payload","version","content","result","setItem","JSON","stringify","promise","err","console","warn","add","schedulePersist","_this3","_persistTimer","safeSetTimeout","clearTimeout","removeItem","clear","getAllKeys","Object","keys","data","parse","PostHogRNSyncMemoryStorage","_PostHogRNStorage","cache","_inherits2","createEventsStorage","customStorage","createLogsStorage","createEventsMemoryStorage","createLogsMemoryStorage"],"sources":["../src/storage.ts"],"sourcesContent":["import { isPromise, safeSetTimeout } from '@posthog/core'\nimport { PostHogCustomStorage } from './types'\n\n// Module-local: SDK-internal detail, not part of any public or reachable\n// surface. The factory functions below are the only way to obtain a storage\n// instance bound to one of these files.\nconst EVENTS_STORAGE_FILE = '.posthog-rn.json'\nconst LOGS_STORAGE_FILE = '.posthog-rn-logs.json'\nconst POSTHOG_STORAGE_VERSION = 'v1'\n\n// Window over which storage mutations coalesce into one disk write. The\n// single-blob storage shape re-serializes the full cache on every write, so an\n// unbatched burst of N captures costs O(n²) bytes; coalescing collapses a\n// same-tick burst to a single write. The mutation lands in memoryCache\n// synchronously — only the disk write is deferred — and flush / AppState\n// background / shutdown each force a synchronous write via waitForPersist, so\n// the only data-loss window is a hard crash before the next drain.\n//\n// 100ms is chosen from the write-rate curve: at high burst rates the disk-write\n// count is already floored by the events flushAt (a flush drains every 20\n// events), and 100ms is enough to reach that floor while bounding worst-case\n// loss to ~one flush batch. Larger windows don't reduce writes further (the\n// floor is flushAt, not the window) and only widen the loss window when flushes\n// aren't draining.\nconst PERSIST_DEBOUNCE_MS = 100\n\ntype PostHogStorageContents = { [key: string]: any }\n\nexport class PostHogRNStorage {\n memoryCache: PostHogStorageContents = {}\n storage: PostHogCustomStorage\n preloadPromise: Promise<void> | undefined\n private _storageKey: string\n private _pendingPromises: Set<Promise<void>> = new Set()\n // Single in-flight debounce timer. Its presence doubles as the \"a write is\n // scheduled\" flag — one source of truth. Armed on the first mutation in a\n // window and deliberately not reset by later mutations, so write latency is\n // bounded to PERSIST_DEBOUNCE_MS rather than starving under a continuous\n // stream of captures.\n private _persistTimer?: ReturnType<typeof setTimeout>\n\n // Prefer the `create*Storage` factories below over calling this directly —\n // they're the only callers that know which file to bind to.\n constructor(storage: PostHogCustomStorage, storageKey: string) {\n this.storage = storage\n this._storageKey = storageKey\n\n const preloadResult = this.storage.getItem(this._storageKey)\n\n if (isPromise(preloadResult)) {\n this.preloadPromise = preloadResult.then((res) => {\n this.populateMemoryCache(res)\n })\n\n this.preloadPromise?.finally(() => {\n this.preloadPromise = undefined\n })\n } else {\n this.populateMemoryCache(preloadResult)\n }\n }\n\n /**\n * Force any scheduled write to be initiated now and await in-flight async\n * writes. Used by durability-sensitive paths (events flush, AppState\n * background, shutdown, login/logout/opt-in/opt-out, fatal exceptions) so the\n * latest state is on its way to the backend before they continue.\n *\n * Best-effort under crash: backend writes are async, so an immediate\n * termination can interrupt them. Never throws — backend errors are logged\n * inside persist() / _drainScheduledPersist().\n */\n async waitForPersist(): Promise<void> {\n this._drainScheduledPersist()\n if (this._pendingPromises.size > 0) {\n await Promise.all(this._pendingPromises)\n }\n }\n\n persist(): void {\n const payload = {\n version: POSTHOG_STORAGE_VERSION,\n content: this.memoryCache,\n }\n\n const result = this.storage.setItem(this._storageKey, JSON.stringify(payload))\n\n // Track async persist operations so we can wait for them if needed\n if (isPromise(result)) {\n const promise = result\n .catch((err) => {\n console.warn('PostHog storage persist failed:', err)\n })\n .finally(() => {\n this._pendingPromises.delete(promise)\n })\n this._pendingPromises.add(promise)\n }\n }\n\n // Arm a single debounced persist on the first un-persisted mutation. Repeated\n // calls within the window are no-ops — the mutation is already in memoryCache\n // and the scheduled fire reads the final state.\n private schedulePersist(): void {\n if (this._persistTimer !== undefined) {\n return\n }\n this._persistTimer = safeSetTimeout(() => {\n this._persistTimer = undefined\n try {\n this.persist()\n } catch (err) {\n console.warn('PostHog storage scheduled persist threw:', err)\n }\n }, PERSIST_DEBOUNCE_MS)\n }\n\n // Force any scheduled persist to fire now (cancels the timer, persists immediately).\n private _drainScheduledPersist(): void {\n if (this._persistTimer === undefined) {\n return\n }\n clearTimeout(this._persistTimer)\n this._persistTimer = undefined\n try {\n this.persist()\n } catch (err) {\n console.warn('PostHog storage drain persist threw:', err)\n }\n }\n\n getItem(key: string): any | null | undefined {\n return this.memoryCache[key]\n }\n setItem(key: string, value: any): void {\n this.memoryCache[key] = value\n this.schedulePersist()\n }\n removeItem(key: string): void {\n delete this.memoryCache[key]\n this.schedulePersist()\n }\n clear(): void {\n for (const key in this.memoryCache) {\n delete this.memoryCache[key]\n }\n this.schedulePersist()\n }\n getAllKeys(): readonly string[] {\n return Object.keys(this.memoryCache)\n }\n\n populateMemoryCache(res: string | null): void {\n try {\n const data = res ? JSON.parse(res).content : {}\n\n for (const key in data) {\n this.memoryCache[key] = data[key]\n }\n } catch (e) {\n console.warn(\n \"PostHog failed to load persisted data from storage. This is likely because the storage format is. We'll reset the storage.\",\n e\n )\n }\n }\n}\n\nexport class PostHogRNSyncMemoryStorage extends PostHogRNStorage {\n constructor(storageKey: string) {\n const cache: { [key: string]: any | undefined } = {}\n const storage = {\n getItem: (key: string) => cache[key],\n setItem: (key: string, value: string) => {\n cache[key] = value\n },\n }\n\n super(storage, storageKey)\n }\n}\n\n// Factory functions that bind the storage instance to the correct SDK-internal\n// file. The file names never leave this module — callers (including tests)\n// reach storages only through these helpers.\nexport function createEventsStorage(customStorage: PostHogCustomStorage): PostHogRNStorage {\n return new PostHogRNStorage(customStorage, EVENTS_STORAGE_FILE)\n}\n\nexport function createLogsStorage(customStorage: PostHogCustomStorage): PostHogRNStorage {\n return new PostHogRNStorage(customStorage, LOGS_STORAGE_FILE)\n}\n\nexport function createEventsMemoryStorage(): PostHogRNStorage {\n return new PostHogRNSyncMemoryStorage(EVENTS_STORAGE_FILE)\n}\n\nexport function createLogsMemoryStorage(): PostHogRNStorage {\n return new PostHogRNSyncMemoryStorage(LOGS_STORAGE_FILE)\n}\n"],"mappings":"ujCAAA,IAAAA,KAAA,CAAAC,OAAA,kBAAyD,SAAAC,WAAAC,CAAA,CAAAC,CAAA,CAAAC,CAAA,SAAAD,CAAA,IAAAE,gBAAA,aAAAF,CAAA,KAAAG,2BAAA,aAAAJ,CAAA,CAAAK,yBAAA,GAAAC,OAAA,CAAAC,SAAA,CAAAN,CAAA,CAAAC,CAAA,QAAAC,gBAAA,aAAAH,CAAA,EAAAQ,WAAA,EAAAP,CAAA,CAAAQ,KAAA,CAAAT,CAAA,CAAAE,CAAA,aAAAG,0BAAA,UAAAL,CAAA,EAAAU,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAP,OAAA,CAAAC,SAAA,CAAAG,OAAA,0BAAAV,CAAA,UAAAK,yBAAA,UAAAA,0BAAA,UAAAL,CAAA,OAMzD,GAAM,CAAAc,mBAAmB,CAAG,kBAAkB,CAC9C,GAAM,CAAAC,iBAAiB,CAAG,uBAAuB,CACjD,GAAM,CAAAC,uBAAuB,CAAG,IAAI,CAgBpC,GAAM,CAAAC,mBAAmB,CAAG,GAAG,IAIlB,CAAAC,gBAAgB,CAAAC,OAAA,CAAAD,gBAAA,YAe3B,SAAAA,iBAAYE,OAA6B,CAAEC,UAAkB,MAAAC,KAAA,SAAAC,gBAAA,kBAAAL,gBAAA,E,OAd7D,KAAAM,WAAW,CAA2B,EAAE,CAIhC,KAAAC,gBAAgB,CAAuB,GAAI,CAAAC,GAAG,EAAE,CAWtD,IAAI,CAACN,OAAO,CAAGA,OAAO,CACtB,IAAI,CAACO,WAAW,CAAGN,UAAU,CAE7B,GAAM,CAAAO,aAAa,CAAG,IAAI,CAACR,OAAO,CAACS,OAAO,CAAC,IAAI,CAACF,WAAW,CAAC,CAE5D,GAAI,GAAAG,eAAS,EAACF,aAAa,CAAC,CAAE,CAC5B,IAAI,CAACG,cAAc,CAAGH,aAAa,CAACI,IAAI,CAAC,SAACC,GAAG,CAAI,CAC/CX,KAAI,CAACY,mBAAmB,CAACD,GAAG,CAAC,CAC/B,CAAC,CAAC,CAEF,CAAAE,EAAA,KAAI,CAACJ,cAAc,UAAAI,EAAA,iBAAAA,EAAA,WAAS,CAAC,UAAK,CAChCb,KAAI,CAACS,cAAc,CAAGK,SAAS,CACjC,CAAC,CAAC,CACJ,CAAC,IAAM,CACL,IAAI,CAACF,mBAAmB,CAACN,aAAa,CAAC,CACzC,CACF,CAAC,SAAAS,aAAA,aAAAnB,gBAAA,GAAAoB,GAAA,kBAAAC,KAAA,iBAAAC,eAAA,IAAAC,kBAAA,aAAAC,YAAA,YAAAC,IAAA,CAYD,SAAAC,QAAA,SAAAF,YAAA,YAAAG,IAAA,UAAAC,QAAA,iBAAAA,QAAA,CAAAC,IAAA,CAAAD,QAAA,CAAAE,IAAA,SACE,IAAI,CAACC,sBAAsB,EAAE,MACzB,IAAI,CAACxB,gBAAgB,CAACyB,IAAI,CAAG,CAAC,GAAAJ,QAAA,CAAAE,IAAA,UAAAF,QAAA,CAAAE,IAAA,SAC1B,CAAAG,OAAO,CAACC,GAAG,CAAC,IAAI,CAAC3B,gBAAgB,CAAC,yBAAAqB,QAAA,CAAAO,IAAA,MAAAT,OAAA,QAE3C,WALK,CAAAU,cAAcA,CAAA,SAAAd,eAAA,CAAA/B,KAAA,MAAA8C,SAAA,SAAd,CAAAD,cAAc,QAAAhB,GAAA,WAAAC,KAAA,CAOpB,SAAAiB,OAAOA,CAAA,MAAAC,MAAA,MACL,GAAM,CAAAC,OAAO,CAAG,CACdC,OAAO,CAAE3C,uBAAuB,CAChC4C,OAAO,CAAE,IAAI,CAACpC,W,CACf,CAED,GAAM,CAAAqC,MAAM,CAAG,IAAI,CAACzC,OAAO,CAAC0C,OAAO,CAAC,IAAI,CAACnC,WAAW,CAAEoC,IAAI,CAACC,SAAS,CAACN,OAAO,CAAC,CAAC,CAG9E,GAAI,GAAA5B,eAAS,EAAC+B,MAAM,CAAC,CAAE,CACrB,GAAM,CAAAI,OAAO,CAAGJ,MAAM,SACd,CAAC,SAACK,GAAG,CAAI,CACbC,OAAO,CAACC,IAAI,CAAC,iCAAiC,CAAEF,GAAG,CAAC,CACtD,CAAC,CAAC,WACM,CAAC,UAAK,CACZT,MAAI,CAAChC,gBAAgB,UAAO,CAACwC,OAAO,CAAC,CACvC,CAAC,CAAC,CACJ,IAAI,CAACxC,gBAAgB,CAAC4C,GAAG,CAACJ,OAAO,CAAC,CACpC,CACF,CAAC,GAAA3B,GAAA,mBAAAC,KAAA,CAKO,SAAA+B,eAAeA,CAAA,MAAAC,MAAA,MACrB,GAAI,IAAI,CAACC,aAAa,GAAKpC,SAAS,CAAE,CACpC,OACF,CACA,IAAI,CAACoC,aAAa,CAAG,GAAAC,oBAAc,EAAC,UAAK,CACvCF,MAAI,CAACC,aAAa,CAAGpC,SAAS,CAC9B,GAAI,CACFmC,MAAI,CAACf,OAAO,EAAE,CAChB,CAAE,MAAOU,GAAG,CAAE,CACZC,OAAO,CAACC,IAAI,CAAC,0CAA0C,CAAEF,GAAG,CAAC,CAC/D,CACF,CAAC,CAAEjD,mBAAmB,CAAC,CACzB,CAAC,GAAAqB,GAAA,0BAAAC,KAAA,CAGO,SAAAU,sBAAsBA,CAAA,EAC5B,GAAI,IAAI,CAACuB,aAAa,GAAKpC,SAAS,CAAE,CACpC,OACF,CACAsC,YAAY,CAAC,IAAI,CAACF,aAAa,CAAC,CAChC,IAAI,CAACA,aAAa,CAAGpC,SAAS,CAC9B,GAAI,CACF,IAAI,CAACoB,OAAO,EAAE,CAChB,CAAE,MAAOU,GAAG,CAAE,CACZC,OAAO,CAACC,IAAI,CAAC,sCAAsC,CAAEF,GAAG,CAAC,CAC3D,CACF,CAAC,GAAA5B,GAAA,WAAAC,KAAA,CAED,SAAAV,OAAOA,CAACS,GAAW,EACjB,MAAO,KAAI,CAACd,WAAW,CAACc,GAAG,CAAC,CAC9B,CAAC,GAAAA,GAAA,WAAAC,KAAA,CACD,SAAAuB,OAAOA,CAACxB,GAAW,CAAEC,KAAU,EAC7B,IAAI,CAACf,WAAW,CAACc,GAAG,CAAC,CAAGC,KAAK,CAC7B,IAAI,CAAC+B,eAAe,EAAE,CACxB,CAAC,GAAAhC,GAAA,cAAAC,KAAA,CACD,SAAAoC,UAAUA,CAACrC,GAAW,EACpB,MAAO,KAAI,CAACd,WAAW,CAACc,GAAG,CAAC,CAC5B,IAAI,CAACgC,eAAe,EAAE,CACxB,CAAC,GAAAhC,GAAA,SAAAC,KAAA,CACD,SAAAqC,KAAKA,CAAA,EACH,IAAK,GAAM,CAAAtC,GAAG,GAAI,KAAI,CAACd,WAAW,CAAE,CAClC,MAAO,KAAI,CAACA,WAAW,CAACc,GAAG,CAAC,CAC9B,CACA,IAAI,CAACgC,eAAe,EAAE,CACxB,CAAC,GAAAhC,GAAA,cAAAC,KAAA,CACD,SAAAsC,UAAUA,CAAA,EACR,MAAO,CAAAC,MAAM,CAACC,IAAI,CAAC,IAAI,CAACvD,WAAW,CAAC,CACtC,CAAC,GAAAc,GAAA,uBAAAC,KAAA,CAED,SAAAL,mBAAmBA,CAACD,GAAkB,EACpC,GAAI,CACF,GAAM,CAAA+C,IAAI,CAAG/C,GAAG,CAAG8B,IAAI,CAACkB,KAAK,CAAChD,GAAG,CAAC,CAAC2B,OAAO,CAAG,EAAE,CAE/C,IAAK,GAAM,CAAAtB,GAAG,GAAI,CAAA0C,IAAI,CAAE,CACtB,IAAI,CAACxD,WAAW,CAACc,GAAG,CAAC,CAAG0C,IAAI,CAAC1C,GAAG,CAAC,CACnC,CACF,CAAE,MAAOpC,CAAC,CAAE,CACViE,OAAO,CAACC,IAAI,CACV,4HAA4H,CAC5HlE,CAAC,CACF,CACH,CACF,CAAC,WAGU,CAAAgF,0BAA2B,CAAA/D,OAAA,CAAA+D,0BAAA,UAAAC,iBAAA,EACtC,SAAAD,2BAAY7D,UAAkB,KAAAE,gBAAA,kBAAA2D,0BAAA,EAC5B,GAAM,CAAAE,KAAK,CAAuC,EAAE,CACpD,GAAM,CAAAhE,OAAO,CAAG,CACdS,OAAO,CAAE,QAAT,CAAAA,OAAOA,CAAGS,GAAW,QAAK,CAAA8C,KAAK,CAAC9C,GAAG,CAAC,GACpCwB,OAAO,CAAE,QAAT,CAAAA,OAAOA,CAAGxB,GAAW,CAAEC,KAAa,CAAI,CACtC6C,KAAK,CAAC9C,GAAG,CAAC,CAAGC,KAAK,CACpB,C,CACD,QAAAxC,UAAA,MAAAmF,0BAAA,EAEK9D,OAAO,CAAEC,UAAU,GAC3B,CAAC,GAAAgE,UAAA,aAAAH,0BAAA,CAAAC,iBAAA,WAAA9C,aAAA,aAAA6C,0BAAA,IAX6ChE,gBAAgB,EAiB1D,QAAU,CAAAoE,mBAAmBA,CAACC,aAAmC,EACrE,MAAO,IAAI,CAAArE,gBAAgB,CAACqE,aAAa,CAAEzE,mBAAmB,CAAC,CACjE,CAEM,QAAU,CAAA0E,iBAAiBA,CAACD,aAAmC,EACnE,MAAO,IAAI,CAAArE,gBAAgB,CAACqE,aAAa,CAAExE,iBAAiB,CAAC,CAC/D,CAEM,QAAU,CAAA0E,yBAAyBA,CAAA,EACvC,MAAO,IAAI,CAAAP,0BAA0B,CAACpE,mBAAmB,CAAC,CAC5D,CAEM,QAAU,CAAA4E,uBAAuBA,CAAA,EACrC,MAAO,IAAI,CAAAR,0BAA0B,CAACnE,iBAAiB,CAAC,CAC1D","ignoreList":[]}
1
+ {"version":3,"file":"storage.js","names":["_core","require","_callSuper","t","o","e","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","apply","Boolean","prototype","valueOf","call","EVENTS_STORAGE_FILE","LOGS_STORAGE_FILE","POSTHOG_STORAGE_VERSION","PERSIST_DEBOUNCE_MS","PostHogRNStorage","exports","storage","storageKey","_this","_classCallCheck2","memoryCache","_pendingPromises","Set","_storageKey","preloadResult","getItem","isPromise","preloadPromise","then","res","populateMemoryCache","undefined","_createClass2","key","value","_waitForPersist","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_context","prev","next","_drainScheduledPersist","size","Promise","all","stop","waitForPersist","arguments","_waitForPersistSuccess","_callee2","results","_context2","abrupt","sent","every","r","waitForPersistSuccess","persist","_this2","payload","version","content","result","setItem","JSON","stringify","err","console","warn","promise","resolve","add","schedulePersist","_this3","_persistTimer","safeSetTimeout","clearTimeout","removeItem","clear","getAllKeys","Object","keys","data","parse","PostHogRNSyncMemoryStorage","_PostHogRNStorage","cache","_inherits2","createEventsStorage","customStorage","createLogsStorage","createEventsMemoryStorage","createLogsMemoryStorage"],"sources":["../src/storage.ts"],"sourcesContent":["import { isPromise, safeSetTimeout } from '@posthog/core'\nimport { PostHogCustomStorage } from './types'\n\n// Module-local: SDK-internal detail, not part of any public or reachable\n// surface. The factory functions below are the only way to obtain a storage\n// instance bound to one of these files.\nconst EVENTS_STORAGE_FILE = '.posthog-rn.json'\nconst LOGS_STORAGE_FILE = '.posthog-rn-logs.json'\nconst POSTHOG_STORAGE_VERSION = 'v1'\n\n// Window over which storage mutations coalesce into one disk write. The\n// single-blob storage shape re-serializes the full cache on every write, so an\n// unbatched burst of N captures costs O(n²) bytes; coalescing collapses a\n// same-tick burst to a single write. The mutation lands in memoryCache\n// synchronously — only the disk write is deferred — and flush / AppState\n// background / shutdown each force a synchronous write via waitForPersist, so\n// the only data-loss window is a hard crash before the next drain.\n//\n// 100ms is chosen from the write-rate curve: at high burst rates the disk-write\n// count is already floored by the events flushAt (a flush drains every 20\n// events), and 100ms is enough to reach that floor while bounding worst-case\n// loss to ~one flush batch. Larger windows don't reduce writes further (the\n// floor is flushAt, not the window) and only widen the loss window when flushes\n// aren't draining.\nconst PERSIST_DEBOUNCE_MS = 100\n\ntype PostHogStorageContents = { [key: string]: any }\n\nexport class PostHogRNStorage {\n memoryCache: PostHogStorageContents = {}\n storage: PostHogCustomStorage\n preloadPromise: Promise<void> | undefined\n private _storageKey: string\n // Each pending persist resolves to a boolean: true if the underlying setItem\n // resolved, false if it rejected. waitForPersistSuccess() uses this to surface\n // async failures instead of silently swallowing them.\n private _pendingPromises: Set<Promise<boolean>> = new Set()\n // Single in-flight debounce timer. Its presence doubles as the \"a write is\n // scheduled\" flag — one source of truth. Armed on the first mutation in a\n // window and deliberately not reset by later mutations, so write latency is\n // bounded to PERSIST_DEBOUNCE_MS rather than starving under a continuous\n // stream of captures.\n private _persistTimer?: ReturnType<typeof setTimeout>\n\n // Prefer the `create*Storage` factories below over calling this directly —\n // they're the only callers that know which file to bind to.\n constructor(storage: PostHogCustomStorage, storageKey: string) {\n this.storage = storage\n this._storageKey = storageKey\n\n const preloadResult = this.storage.getItem(this._storageKey)\n\n if (isPromise(preloadResult)) {\n this.preloadPromise = preloadResult.then((res) => {\n this.populateMemoryCache(res)\n })\n\n // Observe both outcomes without creating the unhandled rejected promise that\n // `void preloadPromise.finally(...)` would leave behind.\n void this.preloadPromise.then(\n () => {\n this.preloadPromise = undefined\n },\n () => {\n this.preloadPromise = undefined\n }\n )\n } else {\n this.populateMemoryCache(preloadResult)\n }\n }\n\n /**\n * Force any scheduled write to be initiated now and await in-flight async\n * writes. Used by durability-sensitive paths (events flush, AppState\n * background, shutdown, login/logout/opt-in/opt-out, fatal exceptions) so the\n * latest state is on its way to the backend before they continue.\n *\n * Best-effort under crash: backend writes are async, so an immediate\n * termination can interrupt them. Never throws — backend errors are logged\n * inside persist() / _drainScheduledPersist().\n */\n async waitForPersist(): Promise<void> {\n this._drainScheduledPersist()\n if (this._pendingPromises.size > 0) {\n await Promise.all(this._pendingPromises)\n }\n }\n\n /**\n * Same as {@link waitForPersist}, but resolves to `true` only when every\n * in-flight (and any freshly-drained scheduled) write landed successfully.\n * Returns `false` if any tracked write rejected — the caller is responsible\n * for treating that as \"data not durable\" and not e.g. removing a recovery\n * entry from a backup store.\n */\n async waitForPersistSuccess(): Promise<boolean> {\n this._drainScheduledPersist()\n if (this._pendingPromises.size === 0) {\n return true\n }\n const results = await Promise.all(this._pendingPromises)\n return results.every((r) => r === true)\n }\n\n persist(): void {\n const payload = {\n version: POSTHOG_STORAGE_VERSION,\n content: this.memoryCache,\n }\n\n // Wrap the setItem call in a try/catch so a synchronous throw (customStorage\n // rejecting inline) is still surfaced via waitForPersistSuccess() — without\n // this, a sync-throwing storage pretends to succeed and callers that gate on\n // durability act as though the data landed.\n let result: void | Promise<void>\n try {\n result = this.storage.setItem(this._storageKey, JSON.stringify(payload))\n } catch (err) {\n console.warn('PostHog storage persist failed:', err)\n const promise: Promise<boolean> = Promise.resolve(false)\n this._pendingPromises.add(promise)\n void promise.finally(() => {\n this._pendingPromises.delete(promise)\n })\n return\n }\n\n // Track async persist operations so we can wait for them if needed. The\n // resolved boolean is the source of truth for waitForPersistSuccess().\n if (isPromise(result)) {\n const promise: Promise<boolean> = result\n .then(() => true)\n .catch((err) => {\n console.warn('PostHog storage persist failed:', err)\n return false\n })\n .finally(() => {\n this._pendingPromises.delete(promise)\n })\n this._pendingPromises.add(promise)\n }\n }\n\n // Arm a single debounced persist on the first un-persisted mutation. Repeated\n // calls within the window are no-ops — the mutation is already in memoryCache\n // and the scheduled fire reads the final state.\n private schedulePersist(): void {\n if (this._persistTimer !== undefined) {\n return\n }\n this._persistTimer = safeSetTimeout(() => {\n this._persistTimer = undefined\n try {\n this.persist()\n } catch (err) {\n console.warn('PostHog storage scheduled persist threw:', err)\n }\n }, PERSIST_DEBOUNCE_MS)\n }\n\n // Force any scheduled persist to fire now (cancels the timer, persists immediately).\n private _drainScheduledPersist(): void {\n if (this._persistTimer === undefined) {\n return\n }\n clearTimeout(this._persistTimer)\n this._persistTimer = undefined\n try {\n this.persist()\n } catch (err) {\n console.warn('PostHog storage drain persist threw:', err)\n }\n }\n\n getItem(key: string): any | null | undefined {\n return this.memoryCache[key]\n }\n setItem(key: string, value: any): void {\n this.memoryCache[key] = value\n this.schedulePersist()\n }\n removeItem(key: string): void {\n delete this.memoryCache[key]\n this.schedulePersist()\n }\n clear(): void {\n for (const key in this.memoryCache) {\n delete this.memoryCache[key]\n }\n this.schedulePersist()\n }\n getAllKeys(): readonly string[] {\n return Object.keys(this.memoryCache)\n }\n\n populateMemoryCache(res: string | null): void {\n try {\n const data = res ? JSON.parse(res).content : {}\n\n for (const key in data) {\n this.memoryCache[key] = data[key]\n }\n } catch (e) {\n console.warn(\n \"PostHog failed to load persisted data from storage. This is likely because the storage format is. We'll reset the storage.\",\n e\n )\n }\n }\n}\n\nexport class PostHogRNSyncMemoryStorage extends PostHogRNStorage {\n constructor(storageKey: string) {\n const cache: { [key: string]: any | undefined } = {}\n const storage = {\n getItem: (key: string) => cache[key],\n setItem: (key: string, value: string) => {\n cache[key] = value\n },\n }\n\n super(storage, storageKey)\n }\n}\n\n// Factory functions that bind the storage instance to the correct SDK-internal\n// file. The file names never leave this module — callers (including tests)\n// reach storages only through these helpers.\nexport function createEventsStorage(customStorage: PostHogCustomStorage): PostHogRNStorage {\n return new PostHogRNStorage(customStorage, EVENTS_STORAGE_FILE)\n}\n\nexport function createLogsStorage(customStorage: PostHogCustomStorage): PostHogRNStorage {\n return new PostHogRNStorage(customStorage, LOGS_STORAGE_FILE)\n}\n\nexport function createEventsMemoryStorage(): PostHogRNStorage {\n return new PostHogRNSyncMemoryStorage(EVENTS_STORAGE_FILE)\n}\n\nexport function createLogsMemoryStorage(): PostHogRNStorage {\n return new PostHogRNSyncMemoryStorage(LOGS_STORAGE_FILE)\n}\n"],"mappings":"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","ignoreList":[]}
@@ -12,6 +12,7 @@ export type PostHogReleaseMode = 'symbol-set' | 'event';
12
12
  export declare const POSTHOG_RELEASE_MODES: PostHogReleaseMode[];
13
13
  export declare function resolveReleaseModeProp(releaseMode?: string, environmentMode?: string): PostHogReleaseMode | undefined;
14
14
  export declare function buildAndroidSkipOnConflictGradleLine(skipOnConflict: boolean): string | null;
15
+ export declare function buildAndroidForceGradleLine(force: boolean): string | null;
15
16
  export declare function addPostHogAndroidGradlePluginClasspath(projectBuildGradle: string): {
16
17
  contents: string;
17
18
  classpathPresent: boolean;
@@ -29,11 +30,11 @@ export declare function updateMainActivityNewIntentOverride(contents: string, la
29
30
  type BuildPhase = {
30
31
  shellScript: string;
31
32
  };
32
- export declare function modifyExistingXcodeBuildScript(script: BuildPhase | undefined, skipOnConflict?: boolean, releaseMode?: PostHogReleaseMode): void;
33
- export declare function addPostHogWithBundledScriptsToBundleShellScript(script: string, skipOnConflict?: boolean, releaseMode?: PostHogReleaseMode): string;
34
- export declare function buildDsymUploadShellScript(includeSource?: boolean, skipOnConflict?: boolean): string;
33
+ export declare function modifyExistingXcodeBuildScript(script: BuildPhase | undefined, skipOnConflict?: boolean, releaseMode?: PostHogReleaseMode, force?: boolean): void;
34
+ export declare function addPostHogWithBundledScriptsToBundleShellScript(script: string, skipOnConflict?: boolean, releaseMode?: PostHogReleaseMode, force?: boolean): string;
35
+ export declare function buildDsymUploadShellScript(includeSource?: boolean, skipOnConflict?: boolean, force?: boolean): string;
35
36
  export declare function moveDsymUploadBuildPhaseToEnd(xcodeProject: any): void;
36
- export declare function addDsymUploadBuildPhase(xcodeProject: any, includeSource?: boolean, skipOnConflict?: boolean): void;
37
+ export declare function addDsymUploadBuildPhase(xcodeProject: any, includeSource?: boolean, skipOnConflict?: boolean, force?: boolean): void;
37
38
  export declare function disableUserScriptSandboxing(xcodeProject: any): void;
38
39
  export declare function resolveDotenvFileProp(dotenvFile?: string): string | undefined;
39
40
  export declare function buildIosDotenvFileBuildSetting(dotenvFile: string): string;
@@ -93,9 +94,28 @@ type PostHogPluginProps = {
93
94
  * to `posthog-cli dsym upload` on posthog-ios >= 3.64.7 (with posthog-cli >= 0.7.12) and
94
95
  * ignores it on older versions, where dSYM conflicts keep failing the build.
95
96
  *
97
+ * Mutually exclusive with `force`: posthog-cli rejects the two flags together, so enabling
98
+ * both stops the prebuild.
99
+ *
96
100
  * Default: false.
97
101
  */
98
102
  skipOnConflict?: boolean;
103
+ /**
104
+ * Whether to overwrite uploads whose content already exists in PostHog instead of failing the
105
+ * build.
106
+ *
107
+ * Appends `--force` to `posthog-cli hermes upload` on iOS and Android. When
108
+ * `uploadNativeSymbols` is enabled, also sets `POSTHOG_FORCE=1` in the iOS dSYM upload build
109
+ * phase; posthog-ios's `upload-symbols.sh` forwards it as `--force` to `posthog-cli dsym upload`
110
+ * on versions that read the variable and ignores it on older ones, where dSYM conflicts keep
111
+ * failing the build. `uploadNativeSymbols: { includeSource: true }` already overwrites dSYMs.
112
+ *
113
+ * Mutually exclusive with `skipOnConflict`: posthog-cli rejects the two flags together, so
114
+ * enabling both stops the prebuild.
115
+ *
116
+ * Default: false.
117
+ */
118
+ force?: boolean;
99
119
  /**
100
120
  * Path to a dotenv file with POSTHOG_CLI_* credentials (API key, project id,
101
121
  * optional host), relative to the project root — or absolute.
@@ -1,2 +1,2 @@
1
- "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.POSTHOG_RELEASE_MODES=void 0;exports.addDsymUploadBuildPhase=addDsymUploadBuildPhase;exports.addPostHogAndroidGradlePluginClasspath=addPostHogAndroidGradlePluginClasspath;exports.addPostHogWithBundledScriptsToBundleShellScript=addPostHogWithBundledScriptsToBundleShellScript;exports.applyDotenvFileBuildSetting=applyDotenvFileBuildSetting;exports.applyPostHogAndroidGradlePlugin=applyPostHogAndroidGradlePlugin;exports.buildAndroidDotenvFileGradleValue=buildAndroidDotenvFileGradleValue;exports.buildAndroidSkipOnConflictGradleLine=buildAndroidSkipOnConflictGradleLine;exports.buildDsymUploadShellScript=buildDsymUploadShellScript;exports.buildIosDotenvFileBuildSetting=buildIosDotenvFileBuildSetting;exports.disableUserScriptSandboxing=disableUserScriptSandboxing;exports.modifyExistingXcodeBuildScript=modifyExistingXcodeBuildScript;exports.moveDsymUploadBuildPhaseToEnd=moveDsymUploadBuildPhaseToEnd;exports.resolveDotenvFileProp=resolveDotenvFileProp;exports.resolveNativeSymbolUpload=resolveNativeSymbolUpload;exports.resolveReleaseModeProp=resolveReleaseModeProp;exports.updateDotenvFileGradleProperties=updateDotenvFileGradleProperties;exports.updateHermesReleaseModeGradleProperties=updateHermesReleaseModeGradleProperties;exports.updateMainActivityNewIntentOverride=updateMainActivityNewIntentOverride;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator"));var _typeof2=_interopRequireDefault(require("@babel/runtime/helpers/typeof"));var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _excluded=["nextMod"],_excluded2=["nextMod"];function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]};},e:function e(r){throw r;},f:F};}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var o,a=!0,u=!1;return{s:function s(){t=t.call(r);},n:function n(){var r=t.next();return a=r.done,r;},e:function e(r){u=!0,o=r;},f:function f(){try{a||null==t["return"]||t["return"]();}finally{if(u)throw o;}}};}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0;}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n;}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){(0,_defineProperty2["default"])(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}var fs=require('fs');var path=require('path');var _require=require('@expo/config-plugins'),AndroidConfig=_require.AndroidConfig,withAppBuildGradle=_require.withAppBuildGradle,withBaseMod=_require.withBaseMod,withDangerousMod=_require.withDangerousMod,withGradleProperties=_require.withGradleProperties,withXcodeProject=_require.withXcodeProject;var POSTHOG_ANDROID_GRADLE_PLUGIN_VERSION='1.6.0';var resolvePostHogReactNativePackageJsonPath="[\"node\", \"--print\", \"require('path').join(require('path').dirname(require.resolve('posthog-react-native')), '..', 'tooling', 'posthog.gradle')\"].execute().text.trim()";var POSTHOG_ANDROID_SKIP_ON_CONFLICT_PROPERTY='posthogReactNativeSkipOnConflict';var POSTHOG_HERMES_RELEASE_MODE_GRADLE_PROPERTY='posthog.hermesReleaseMode';var POSTHOG_RELEASE_MODES=exports.POSTHOG_RELEASE_MODES=['symbol-set','event'];function resolveReleaseModeProp(releaseMode,environmentMode){var trimmed=(releaseMode===null||releaseMode===void 0?void 0:releaseMode.trim())||(environmentMode===null||environmentMode===void 0?void 0:environmentMode.trim());if(!trimmed){return undefined;}if(!POSTHOG_RELEASE_MODES.includes(trimmed)){throw new Error("[posthog-react-native] releaseMode must be one of ".concat(POSTHOG_RELEASE_MODES.join(', '),", was '").concat(trimmed,"'"));}return trimmed;}function buildAndroidSkipOnConflictGradleLine(skipOnConflict){if(!skipOnConflict){return null;}return"project.ext.".concat(POSTHOG_ANDROID_SKIP_ON_CONFLICT_PROPERTY," = true");}var withAndroidPlugin=function withAndroidPlugin(config){var skipOnConflict=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;return withAppBuildGradle(config,function(config){if(config.modResults.language!=='groovy'){console.warn('Cannot configure PostHog in the app gradle because the build.gradle is not groovy');}var buildGradle=config.modResults.contents;var applyFrom="apply from: new File(".concat(resolvePostHogReactNativePackageJsonPath,")");var skipOnConflictLine=buildAndroidSkipOnConflictGradleLine(skipOnConflict);var applyBlock=skipOnConflictLine?"".concat(skipOnConflictLine,"\n").concat(applyFrom):applyFrom;var skipOnConflictPattern=new RegExp("^project\\.ext\\.".concat(POSTHOG_ANDROID_SKIP_ON_CONFLICT_PROPERTY,"\\s*=\\s*(true|false)\\n?"),'m');if(buildGradle.includes(applyFrom)){var contents=buildGradle.replace(skipOnConflictPattern,'');if(skipOnConflictLine){contents=contents.replace(applyFrom,"".concat(skipOnConflictLine,"\n").concat(applyFrom));}config.modResults.contents=contents;return config;}var pattern=/^android\s*\{/m;if(buildGradle.match(pattern)){config.modResults.contents=buildGradle.replace(pattern,"".concat(applyBlock,"\n\nandroid {"));}else{console.warn('PostHog: Could not find "android {" block in build.gradle');}return config;});};function matchingBraceIndex(s,openBraceIndex){var depth=0;for(var i=openBraceIndex;i<s.length;i++){if(s[i]==='{'){depth++;}else if(s[i]==='}'){depth--;if(depth===0){return i;}}}return-1;}function addPostHogAndroidGradlePluginClasspath(projectBuildGradle){if(projectBuildGradle.includes('posthog-android-gradle-plugin')){return{contents:projectBuildGradle,classpathPresent:true};}var classpathLine=" classpath(\"com.posthog:posthog-android-gradle-plugin:".concat(POSTHOG_ANDROID_GRADLE_PLUGIN_VERSION,"\")");var buildscriptMatch=/buildscript\s*\{/.exec(projectBuildGradle);var buildscriptOpenBrace=buildscriptMatch?buildscriptMatch.index+buildscriptMatch[0].length-1:-1;var buildscriptEnd=buildscriptOpenBrace===-1?-1:matchingBraceIndex(projectBuildGradle,buildscriptOpenBrace);var buildscriptBody=buildscriptEnd===-1?'':projectBuildGradle.slice(buildscriptOpenBrace,buildscriptEnd);var dependenciesMatch=buildscriptBody?/dependencies\s*\{/.exec(buildscriptBody):null;if(!dependenciesMatch){console.warn('PostHog: Could not find a buildscript dependencies block in the project build.gradle; '+'skipping the com.posthog.android classpath. Native symbols will not be uploaded.');return{contents:projectBuildGradle,classpathPresent:false};}var insertAt=buildscriptOpenBrace+dependenciesMatch.index+dependenciesMatch[0].length;return{contents:"".concat(projectBuildGradle.slice(0,insertAt),"\n").concat(classpathLine).concat(projectBuildGradle.slice(insertAt)),classpathPresent:true};}function applyPostHogAndroidGradlePlugin(appBuildGradle){if(/apply plugin: ["']com\.posthog\.android["']/.test(appBuildGradle)){return appBuildGradle;}var applyLine='apply plugin: "com.posthog.android"';var appPluginPattern=/^([ \t]*apply plugin: ["']com\.android\.application["'].*)$/m;if(appPluginPattern.test(appBuildGradle)){return appBuildGradle.replace(appPluginPattern,"$1\n".concat(applyLine));}var androidBlockPattern=/^android\s*\{/m;if(androidBlockPattern.test(appBuildGradle)){return appBuildGradle.replace(androidBlockPattern,"".concat(applyLine,"\n\nandroid {"));}console.warn('PostHog: Could not find where to apply com.posthog.android in the app build.gradle');return appBuildGradle;}var withFinalizedProjectBuildGradle=function withFinalizedProjectBuildGradle(config,_action){return withBaseMod(config,{platform:'android',mod:'projectBuildGradle',skipEmptyMod:false,action:function action(config){return(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee(){var _config$modRequest,nextMod,modRequest,results;return _regenerator["default"].wrap(function(_context){while(1)switch(_context.prev=_context.next){case 0:_config$modRequest=config.modRequest,nextMod=_config$modRequest.nextMod,modRequest=(0,_objectWithoutProperties2["default"])(_config$modRequest,_excluded);_context.next=1;return nextMod(_objectSpread(_objectSpread({},config),{},{modRequest:modRequest}));case 1:results=_context.sent;return _context.abrupt("return",_action(results));case 2:case"end":return _context.stop();}},_callee);}))();}});};var withAndroidNativeSymbolsPlugin=function withAndroidNativeSymbolsPlugin(config){return withFinalizedProjectBuildGradle(config,function(){var _ref=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2(config){var result,appBuildGradle,contents;return _regenerator["default"].wrap(function(_context2){while(1)switch(_context2.prev=_context2.next){case 0:if(!(config.modResults.language!=='groovy')){_context2.next=1;break;}console.warn('Cannot configure the PostHog Android Gradle plugin because the project build.gradle is not groovy');return _context2.abrupt("return",config);case 1:result=addPostHogAndroidGradlePluginClasspath(config.modResults.contents);if(!(result.contents!==config.modResults.contents)){_context2.next=3;break;}_context2.next=2;return fs.promises.writeFile(config.modResults.path,result.contents);case 2:config.modResults.contents=result.contents;case 3:if(result.classpathPresent){_context2.next=4;break;}return _context2.abrupt("return",config);case 4:_context2.next=5;return AndroidConfig.Paths.getAppBuildGradleAsync(config.modRequest.projectRoot);case 5:appBuildGradle=_context2.sent;if(!(appBuildGradle.language!=='groovy')){_context2.next=6;break;}console.warn('Cannot configure the PostHog Android Gradle plugin because the app build.gradle is not groovy');return _context2.abrupt("return",config);case 6:contents=applyPostHogAndroidGradlePlugin(appBuildGradle.contents);if(!(contents!==appBuildGradle.contents)){_context2.next=7;break;}_context2.next=7;return fs.promises.writeFile(appBuildGradle.path,contents);case 7:return _context2.abrupt("return",config);case 8:case"end":return _context2.stop();}},_callee2);}));return function(_x){return _ref.apply(this,arguments);};}());};var POSTHOG_NEW_INTENT_MARKER='posthog-new-intent';var POSTHOG_NEW_INTENT_BEGIN="// @generated begin ".concat(POSTHOG_NEW_INTENT_MARKER," - posthog-react-native (DO NOT MODIFY)");var POSTHOG_NEW_INTENT_END="// @generated end ".concat(POSTHOG_NEW_INTENT_MARKER);var NEW_INTENT_DOC=" /**\n * Records the intent that reopened the app so getIntent() stays correct.\n *\n * Works around a React Native defect that drops notification taps and deep links arriving while\n * the React context is still starting. Managed by the posthog-react-native Expo config plugin;\n * remove it with { patchMainActivityNewIntent: false } in app.json.\n * https://posthog.com/docs/workflows/push-notifications/react-native\n */";var NEW_INTENT_KOTLIN_BODY=" override fun onNewIntent(intent: android.content.Intent) {\n setIntent(intent)\n super.onNewIntent(intent)\n }";var NEW_INTENT_JAVA_BODY=" @Override\n public void onNewIntent(android.content.Intent intent) {\n setIntent(intent);\n super.onNewIntent(intent);\n }";function newIntentOverrideBlock(language){var body=language==='java'?NEW_INTENT_JAVA_BODY:NEW_INTENT_KOTLIN_BODY;return"\n ".concat(POSTHOG_NEW_INTENT_BEGIN,"\n").concat(NEW_INTENT_DOC,"\n").concat(body,"\n ").concat(POSTHOG_NEW_INTENT_END,"\n");}function escapeRegExp(value){return value.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');}var POSTHOG_NEW_INTENT_BLOCK_PATTERN=new RegExp("\\r?\\n?[ \\t]*".concat(escapeRegExp(POSTHOG_NEW_INTENT_BEGIN),"[\\s\\S]*?").concat(escapeRegExp(POSTHOG_NEW_INTENT_END),"[ \\t]*\\r?\\n"),'g');function literalEnd(s,start,language){var quote=s[start];var raw=quote==='"'&&s.startsWith('"""',start);var i=start+(raw?3:1);while(i<s.length){var c=s[i];if(raw){if(s.startsWith('"""',i)){while(s[i]==='"'){i++;}return i;}}else if(c==='\n'){return-1;}else if(c===quote){return i+1;}if(c==='\\'&&(!raw||language==='java')){i+=2;continue;}if(language==='kt'&&quote==='"'&&c==='$'&&s[i+1]==='{'){var close=matchingBraceIndexInSource(s,i+1,language);if(close===-1){return-1;}i=close+1;continue;}i++;}return-1;}function matchingBraceIndexInSource(s,openBraceIndex,language){var depth=0;var i=openBraceIndex;while(i<s.length){var c=s[i];if(c==='/'&&s[i+1]==='/'){var end=s.indexOf('\n',i);i=end===-1?s.length:end;continue;}if(c==='/'&&s[i+1]==='*'){var depthOfComment=1;i+=2;while(i<s.length&&depthOfComment>0){if(language==='kt'&&s[i]==='/'&&s[i+1]==='*'){depthOfComment++;i+=2;continue;}if(s[i]==='*'&&s[i+1]==='/'){depthOfComment--;i+=2;continue;}i++;}if(depthOfComment>0){return-1;}continue;}if(c==='"'||c==="'"){var _end=literalEnd(s,i,language);if(_end===-1){return-1;}i=_end;continue;}if(c==='{'){depth++;}else if(c==='}'){depth--;if(depth===0){return i;}}i++;}return-1;}function maskCommentsAndLiterals(source,language){var out=source.split('');var blank=function blank(from,to){for(var j=from;j<to&&j<out.length;j++){if(out[j]!=='\n'){out[j]=' ';}}};var i=0;while(i<source.length){var c=source[i];if(c==='/'&&source[i+1]==='/'){var end=source.indexOf('\n',i);var stop=end===-1?source.length:end;blank(i,stop);i=stop;continue;}if(c==='/'&&source[i+1]==='*'){var depth=1;var j=i+2;while(j<source.length&&depth>0){if(language==='kt'&&source[j]==='/'&&source[j+1]==='*'){depth++;j+=2;continue;}if(source[j]==='*'&&source[j+1]==='/'){depth--;j+=2;continue;}j++;}blank(i,j);i=j;continue;}if(c==='"'||c==="'"){var _end2=literalEnd(source,i,language);if(_end2===-1){blank(i,source.length);return out.join('');}blank(i,_end2);i=_end2;continue;}i++;}return out.join('');}function mainActivityBody(contents,language){var code=maskCommentsAndLiterals(contents,language);var declaration=/\bclass\s+MainActivity\b/.exec(code);if(!declaration){return undefined;}var searchFrom=declaration.index+declaration[0].length;var open=code.indexOf('{',searchFrom);if(open===-1||!/^[^;{}]*$/.test(code.slice(searchFrom,open))){return undefined;}var depth=0;var close=-1;for(var i=open;i<code.length;i++){if(code[i]==='{'){depth++;}else if(code[i]==='}'){depth--;if(depth===0){close=i;break;}}}return close===-1?undefined:{open:open,close:close};}function updateMainActivityNewIntentOverride(contents,language,enabled){var withoutManagedBlock=contents.replace(POSTHOG_NEW_INTENT_BLOCK_PATTERN,'');if(!enabled){return withoutManagedBlock;}var body=mainActivityBody(withoutManagedBlock,language);if(!body){console.warn('[posthog-react-native] Could not find the MainActivity class body; skipping the onNewIntent '+'override. Notification taps delivered while the React context is starting will be lost.');return withoutManagedBlock;}var codeOnly=maskCommentsAndLiterals(withoutManagedBlock,language);if(/\b(fun|void)\s+onNewIntent\s*\(/.test(codeOnly.slice(body.open,body.close))){console.warn('[posthog-react-native] MainActivity already overrides onNewIntent; leaving it alone. '+'Add `setIntent(intent)` as its first statement so a notification tap that arrives before '+'the React context is ready is not lost, or set `{ patchMainActivityNewIntent: false }` '+'on the plugin to silence this.');return withoutManagedBlock;}return withoutManagedBlock.slice(0,body.open+1)+newIntentOverrideBlock(language)+withoutManagedBlock.slice(body.open+1);}var MAIN_ACTIVITY_SOURCE_ROOTS=['android/app/src/main/java','android/app/src/main/kotlin'];function findMainActivityPath(projectRoot){var _walk=function walk(dir){if(!fs.existsSync(dir)){return undefined;}var _iterator=_createForOfIteratorHelper(fs.readdirSync(dir,{withFileTypes:true})),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var entry=_step.value;var candidate=path.join(dir,entry.name);if(!entry.isDirectory()){if(/^MainActivity\.(kt|java)$/.test(entry.name)){return candidate;}continue;}var hit=_walk(candidate);if(hit){return hit;}}}catch(err){_iterator.e(err);}finally{_iterator.f();}return undefined;};for(var _i=0,_MAIN_ACTIVITY_SOURCE=MAIN_ACTIVITY_SOURCE_ROOTS;_i<_MAIN_ACTIVITY_SOURCE.length;_i++){var sourceRoot=_MAIN_ACTIVITY_SOURCE[_i];var hit=_walk(path.join(projectRoot,sourceRoot));if(hit){return hit;}}return undefined;}var withMainActivityNewIntent=function withMainActivityNewIntent(config,enabled){return withDangerousMod(config,['android',(function(){var _ref2=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee3(config){var mainActivityPath,contents,updated;return _regenerator["default"].wrap(function(_context3){while(1)switch(_context3.prev=_context3.next){case 0:mainActivityPath=findMainActivityPath(config.modRequest.projectRoot);if(mainActivityPath){_context3.next=1;break;}console.warn('[posthog-react-native] Could not find MainActivity under android/app/src/main/{java,kotlin}; '+'skipping the onNewIntent override. Notification taps delivered while the React context is '+'starting will be lost.');return _context3.abrupt("return",config);case 1:_context3.next=2;return fs.promises.readFile(mainActivityPath,'utf8');case 2:contents=_context3.sent;updated=updateMainActivityNewIntentOverride(contents,mainActivityPath.endsWith('.java')?'java':'kt',enabled);if(!(updated!==contents)){_context3.next=3;break;}_context3.next=3;return fs.promises.writeFile(mainActivityPath,updated);case 3:if(!contents.includes(POSTHOG_NEW_INTENT_BEGIN)&&updated.includes(POSTHOG_NEW_INTENT_BEGIN)){console.warn("[posthog-react-native] Added an onNewIntent override to ".concat(path.relative(config.modRequest.projectRoot,mainActivityPath)," so a notification tap that arrives before the React context is ready is not lost. ")+'Set `{ patchMainActivityNewIntent: false }` on the plugin in app.json to opt out.');}return _context3.abrupt("return",config);case 4:case"end":return _context3.stop();}},_callee3);}));return function(_x2){return _ref2.apply(this,arguments);};}())]);};function modifyExistingXcodeBuildScript(script){var skipOnConflict=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var releaseMode=arguments.length>2?arguments[2]:undefined;if(!(script===null||script===void 0?void 0:script.shellScript)){console.warn("[posthog-react-native] Could not find the 'Bundle React Native code and images' build phase; "+'skipping sourcemap upload setup.');return;}if(!script.shellScript.match(/(packager|scripts)\/react-native-xcode\.sh\b/)){return;}if(script.shellScript.includes('posthog-xcode.sh')){var _code=migrateLegacyPostHogWrapperInvocation(JSON.parse(script.shellScript));script.shellScript=JSON.stringify(updatePostHogBundlePhaseExports(_code,skipOnConflict,releaseMode));return;}if(script.shellScript.includes('posthog-react-native')){return;}var code=JSON.parse(script.shellScript);script.shellScript=JSON.stringify(addPostHogWithBundledScriptsToBundleShellScript(code,skipOnConflict,releaseMode));}var POSTHOG_REACT_NATIVE_XCODE_PATH="`\"$NODE_BINARY\" --print \"require('path').join(require('path').dirname(require.resolve('posthog-react-native')), '..', 'tooling', 'posthog-xcode.sh')\"`";var POSTHOG_SKIP_ON_CONFLICT_EXPORT='export POSTHOG_SKIP_ON_CONFLICT=1';var POSTHOG_RELEASE_MODE_EXPORT_PREFIX='export POSTHOG_RELEASE_MODE=';function buildBundlePhaseExports(skipOnConflict,releaseMode){var exports=[];if(skipOnConflict){exports.push(POSTHOG_SKIP_ON_CONFLICT_EXPORT);}if(releaseMode){exports.push("".concat(POSTHOG_RELEASE_MODE_EXPORT_PREFIX).concat(releaseMode));}return exports;}var REACT_NATIVE_XCODE_LINE=/^([ \t]*)(?![A-Za-z_][A-Za-z0-9_]*=)([^\n]*(?:packager|scripts)\/react-native-xcode\.sh\b[^\n]*)$/m;function migrateLegacyPostHogWrapperInvocation(script){return script.replace("/bin/sh ".concat(POSTHOG_REACT_NATIVE_XCODE_PATH),POSTHOG_REACT_NATIVE_XCODE_PATH);}function updatePostHogBundlePhaseExports(script,skipOnConflict,releaseMode){var _a;var _b;var skipArg='--posthog-skip-on-conflict --';var lines=script.replace(new RegExp("\\s*".concat(skipArg,"\\s*"),'g'),' ').split('\n').filter(function(line){return line.trim()!==POSTHOG_SKIP_ON_CONFLICT_EXPORT;}).filter(function(line){return!line.trim().startsWith(POSTHOG_RELEASE_MODE_EXPORT_PREFIX);});var exports=buildBundlePhaseExports(skipOnConflict,releaseMode);if(exports.length>0){var commandIndex=lines.findIndex(function(line){return line.includes(POSTHOG_REACT_NATIVE_XCODE_PATH);});if(commandIndex!==-1){var indent=(_b=(_a=lines[commandIndex].match(/^[ \t]*/))===null||_a===void 0?void 0:_a[0])!==null&&_b!==void 0?_b:'';lines.splice.apply(lines,[commandIndex,0].concat((0,_toConsumableArray2["default"])(exports.map(function(line){return"".concat(indent).concat(line);}))));}}return lines.join('\n');}function addPostHogWithBundledScriptsToBundleShellScript(script){var skipOnConflict=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var releaseMode=arguments.length>2?arguments[2]:undefined;return script.replace(REACT_NATIVE_XCODE_LINE,function(_match,indent,rnCommand){var exports=buildBundlePhaseExports(skipOnConflict,releaseMode).map(function(line){return"".concat(indent).concat(line,"\n");}).join('');return"".concat(exports).concat(indent).concat(POSTHOG_REACT_NATIVE_XCODE_PATH," ").concat(rnCommand);});}var POSTHOG_DSYM_BUILD_PHASE_NAME='Upload PostHog Debug Symbols';var POSTHOG_DSYM_INPUT_PATH='"$(DWARF_DSYM_FOLDER_PATH)/$(DWARF_DSYM_FILE_NAME)/Contents/Resources/DWARF/$(EXECUTABLE_NAME)"';function buildDsymUploadShellScript(){var includeSource=arguments.length>0&&arguments[0]!==undefined?arguments[0]:false;var skipOnConflict=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;return composeDsymUploadShellScript(includeSource,skipOnConflict);}function composeDsymUploadShellScript(includeSource,skipOnConflict){var lines=['# Upload iOS dSYMs to PostHog so native crashes can be symbolicated.','# upload-symbols.sh ships inside the posthog-ios dependency.'];if(includeSource){lines.push('# Also upload native source files for source-code context around crashes.','export POSTHOG_INCLUDE_SOURCE=1');}if(skipOnConflict){lines.push('# Skip dSYMs that already exist in PostHog with different content instead of failing the build.','export POSTHOG_SKIP_ON_CONFLICT=1');}lines.push('PODS_SCRIPT="${PODS_ROOT}/PostHog/build-tools/upload-symbols.sh"','SPM_SCRIPT="${BUILD_DIR%/Build/*}/SourcePackages/checkouts/posthog-ios/build-tools/upload-symbols.sh"','if [ -f "$PODS_SCRIPT" ]; then',' /bin/sh "$PODS_SCRIPT"','elif [ -f "$SPM_SCRIPT" ]; then',' /bin/sh "$SPM_SCRIPT"','else',' echo "warning: PostHog upload-symbols.sh not found in Pods or SwiftPM checkouts; skipping dSYM upload."','fi');return lines.join('\n');}function legacyDsymReleaseModeLines(releaseMode){return[releaseMode?"POSTHOG_RESOLVED_RELEASE_MODE=\"".concat(releaseMode,"\""):'POSTHOG_RESOLVED_RELEASE_MODE="${POSTHOG_RELEASE_MODE:-}"','case "$POSTHOG_RESOLVED_RELEASE_MODE" in',' ""|symbol-set) ;;',' event)',' # Upload dSYMs without binding them to a release, so each crash resolves its own from the',' # app version and namespace the SDK sends. posthog-ios versions whose upload-symbols.sh',' # does not read this variable ignore it and keep binding the dSYMs.',' export POSTHOG_NO_RELEASE_BIND=1',' ;;',' *)'," echo \"error: posthog release mode must be 'symbol-set' or 'event', was '$POSTHOG_RESOLVED_RELEASE_MODE'\"",' exit 1',' ;;','esac'];}function buildLegacyReleaseModeDsymUploadShellScript(includeSource,skipOnConflict,releaseMode){var lines=composeDsymUploadShellScript(includeSource,skipOnConflict).split('\n');var uploadIndex=lines.findIndex(function(line){return line.startsWith('PODS_SCRIPT=');});lines.splice.apply(lines,[uploadIndex,0].concat((0,_toConsumableArray2["default"])(legacyDsymReleaseModeLines(releaseMode))));return lines.join('\n');}function encodePbxShellScript(script){return'"'+script.replace(/"/g,'\\"')+'"';}function decodePbxShellScript(stored){if(!stored.startsWith('"')||!stored.endsWith('"')){return stored;}return stored.slice(1,-1).replace(/\\(.)/g,function(_match,ch){return ch==='n'?'\n':ch==='t'?'\t':ch;});}function isPluginGeneratedDsymUploadBuildPhase(phase){if(typeof(phase===null||phase===void 0?void 0:phase.shellScript)!=='string'){return false;}var stored=decodePbxShellScript(phase.shellScript);return[false,true].some(function(source){return[false,true].some(function(skip){return stored===buildDsymUploadShellScript(source,skip)||[undefined].concat(POSTHOG_RELEASE_MODES).some(function(mode){return stored===buildLegacyReleaseModeDsymUploadShellScript(source,skip,mode);});});});}function moveDsymUploadBuildPhaseToEnd(xcodeProject){var _a,_b;var existing=xcodeProject.pbxItemByComment(POSTHOG_DSYM_BUILD_PHASE_NAME,'PBXShellScriptBuildPhase');if(!isPluginGeneratedDsymUploadBuildPhase(existing)){return;}var buildPhases=(_b=(_a=xcodeProject.getFirstTarget)===null||_a===void 0?void 0:_a.call(xcodeProject).firstTarget)===null||_b===void 0?void 0:_b.buildPhases;if(Array.isArray(buildPhases)){var phaseIndex=buildPhases.findIndex(function(phase){return phase.comment===POSTHOG_DSYM_BUILD_PHASE_NAME;});if(phaseIndex!==-1&&phaseIndex!==buildPhases.length-1){buildPhases.push.apply(buildPhases,(0,_toConsumableArray2["default"])(buildPhases.splice(phaseIndex,1)));}}}function addDsymUploadBuildPhase(xcodeProject){var includeSource=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var skipOnConflict=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var existing=xcodeProject.pbxItemByComment(POSTHOG_DSYM_BUILD_PHASE_NAME,'PBXShellScriptBuildPhase');if(existing){if(isPluginGeneratedDsymUploadBuildPhase(existing)){existing.shellScript=encodePbxShellScript(buildDsymUploadShellScript(includeSource,skipOnConflict));existing.inputPaths=Array.from(new Set([].concat((0,_toConsumableArray2["default"])(Array.isArray(existing.inputPaths)?existing.inputPaths:[]),[POSTHOG_DSYM_INPUT_PATH])));}}else{xcodeProject.addBuildPhase([],'PBXShellScriptBuildPhase',POSTHOG_DSYM_BUILD_PHASE_NAME,null,{inputPaths:[POSTHOG_DSYM_INPUT_PATH],shellPath:'/bin/sh',shellScript:buildDsymUploadShellScript(includeSource,skipOnConflict)});}moveDsymUploadBuildPhaseToEnd(xcodeProject);}function disableUserScriptSandboxing(xcodeProject){var configurations=xcodeProject.pbxXCBuildConfigurationSection();for(var key in configurations){var configuration=configurations[key];if(configuration&&configuration.buildSettings){configuration.buildSettings.ENABLE_USER_SCRIPT_SANDBOXING='"NO"';}}}var POSTHOG_DOTENV_BUILD_SETTING='POSTHOG_CLI_DOTENV_FILE';var POSTHOG_DOTENV_GRADLE_PROPERTY='posthog.dotenvFile';function normalizeDotenvFileProp(dotenvFile){return dotenvFile.replace(/^\.\//,'');}function resolveDotenvFileProp(dotenvFile){var trimmed=dotenvFile===null||dotenvFile===void 0?void 0:dotenvFile.trim();return trimmed?trimmed:undefined;}function isAbsoluteDotenvPath(dotenvFile){return dotenvFile.startsWith('/')||/^[A-Za-z]:[\\/]/.test(dotenvFile);}function buildIosDotenvFileBuildSetting(dotenvFile){var value=isAbsoluteDotenvPath(dotenvFile)?dotenvFile:"$(SRCROOT)/../".concat(normalizeDotenvFileProp(dotenvFile));return'"'+value.replace(/(["\\])/g,'\\$1')+'"';}function applyDotenvFileBuildSetting(xcodeProject,dotenvFile){var configurations=xcodeProject.pbxXCBuildConfigurationSection();for(var key in configurations){var configuration=configurations[key];if(configuration&&configuration.buildSettings){if(dotenvFile){configuration.buildSettings[POSTHOG_DOTENV_BUILD_SETTING]=buildIosDotenvFileBuildSetting(dotenvFile);}else{delete configuration.buildSettings[POSTHOG_DOTENV_BUILD_SETTING];}}}}function buildAndroidDotenvFileGradleValue(dotenvFile){return isAbsoluteDotenvPath(dotenvFile)?dotenvFile:"../".concat(normalizeDotenvFileProp(dotenvFile));}function updateDotenvFileGradleProperties(properties,dotenvFile){var rest=properties.filter(function(item){return!(item.type==='property'&&item.key===POSTHOG_DOTENV_GRADLE_PROPERTY);});if(!dotenvFile){return rest;}rest.push({type:'property',key:POSTHOG_DOTENV_GRADLE_PROPERTY,value:buildAndroidDotenvFileGradleValue(dotenvFile)});return rest;}function updateHermesReleaseModeGradleProperties(properties,releaseMode){var rest=properties.filter(function(item){return!(item.type==='property'&&item.key===POSTHOG_HERMES_RELEASE_MODE_GRADLE_PROPERTY);});if(!releaseMode){return rest;}rest.push({type:'property',key:POSTHOG_HERMES_RELEASE_MODE_GRADLE_PROPERTY,value:releaseMode});return rest;}var withPostHogGradleProperties=function withPostHogGradleProperties(config,dotenvFile,releaseMode){return withGradleProperties(config,function(config){config.modResults=updateDotenvFileGradleProperties(config.modResults,dotenvFile);config.modResults=updateHermesReleaseModeGradleProperties(config.modResults,releaseMode);return config;});};function resolveNativeSymbolUpload(prop){if(prop===true){return{enabled:true,includeSource:false};}if(prop&&(0,_typeof2["default"])(prop)==='object'){return{enabled:true,includeSource:prop.includeSource===true};}return{enabled:false,includeSource:false};}var withFinalizedXcodeProject=function withFinalizedXcodeProject(config,_action2){return withBaseMod(config,{platform:'ios',mod:'xcodeproj',action:function action(config){return(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee4(){var _config$modRequest2,nextMod,modRequest,results;return _regenerator["default"].wrap(function(_context4){while(1)switch(_context4.prev=_context4.next){case 0:_config$modRequest2=config.modRequest,nextMod=_config$modRequest2.nextMod,modRequest=(0,_objectWithoutProperties2["default"])(_config$modRequest2,_excluded2);_context4.next=1;return nextMod(_objectSpread(_objectSpread({},config),{},{modRequest:modRequest}));case 1:results=_context4.sent;return _context4.abrupt("return",_action2(results));case 2:case"end":return _context4.stop();}},_callee4);}))();}});};var withIosPlugin=function withIosPlugin(config){var props=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var nativeSymbols=resolveNativeSymbolUpload(props.uploadNativeSymbols);config=withXcodeProject(config,function(config){var xcodeProject=config.modResults;var bundleReactNativePhase=xcodeProject.pbxItemByComment('Bundle React Native code and images','PBXShellScriptBuildPhase');modifyExistingXcodeBuildScript(bundleReactNativePhase,props.skipOnConflict===true,props.releaseMode);if(nativeSymbols.enabled){addDsymUploadBuildPhase(xcodeProject,nativeSymbols.includeSource,props.skipOnConflict===true);}applyDotenvFileBuildSetting(xcodeProject,props.dotenvFile);if(props.disableSandboxing!==false){disableUserScriptSandboxing(xcodeProject);console.warn('[posthog-react-native] Setting ENABLE_USER_SCRIPT_SANDBOXING=NO on all Xcode '+'build configurations so sourcemap uploads can resolve git metadata. '+'If your org requires sandboxing to stay enabled, set `{ disableSandboxing: false }` '+'on the plugin in app.json — note that stock Expo projects may fail to build under '+'sandboxing until every script build phase declares its input/output files.');}return config;});if(nativeSymbols.enabled){config=withFinalizedXcodeProject(config,function(config){moveDsymUploadBuildPhaseToEnd(config.modResults);return config;});}return config;};var withPostHogPlugin=function withPostHogPlugin(config){var rawProps=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var props=_objectSpread(_objectSpread({},rawProps),{},{dotenvFile:resolveDotenvFileProp(rawProps.dotenvFile),releaseMode:resolveReleaseModeProp(rawProps.releaseMode,process.env.POSTHOG_RELEASE_MODE)});if(resolveNativeSymbolUpload(props.uploadNativeSymbols).enabled){config=withAndroidNativeSymbolsPlugin(config);}config=withAndroidPlugin(config,props.skipOnConflict===true);config=withPostHogGradleProperties(config,props.dotenvFile,props.releaseMode);config=withMainActivityNewIntent(config,props.patchMainActivityNewIntent!==false);return withIosPlugin(config,props);};var postHogPlugin=function postHogPlugin(config){var props=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};return withPostHogPlugin(config,props);};module.exports=postHogPlugin;module.exports.modifyExistingXcodeBuildScript=modifyExistingXcodeBuildScript;module.exports.addPostHogWithBundledScriptsToBundleShellScript=addPostHogWithBundledScriptsToBundleShellScript;module.exports.disableUserScriptSandboxing=disableUserScriptSandboxing;module.exports.buildDsymUploadShellScript=buildDsymUploadShellScript;module.exports.addDsymUploadBuildPhase=addDsymUploadBuildPhase;module.exports.moveDsymUploadBuildPhaseToEnd=moveDsymUploadBuildPhaseToEnd;module.exports.resolveNativeSymbolUpload=resolveNativeSymbolUpload;module.exports.buildAndroidSkipOnConflictGradleLine=buildAndroidSkipOnConflictGradleLine;module.exports.addPostHogAndroidGradlePluginClasspath=addPostHogAndroidGradlePluginClasspath;module.exports.applyPostHogAndroidGradlePlugin=applyPostHogAndroidGradlePlugin;module.exports.buildIosDotenvFileBuildSetting=buildIosDotenvFileBuildSetting;module.exports.applyDotenvFileBuildSetting=applyDotenvFileBuildSetting;module.exports.resolveDotenvFileProp=resolveDotenvFileProp;module.exports.buildAndroidDotenvFileGradleValue=buildAndroidDotenvFileGradleValue;module.exports.updateDotenvFileGradleProperties=updateDotenvFileGradleProperties;module.exports.POSTHOG_RELEASE_MODES=POSTHOG_RELEASE_MODES;module.exports.resolveReleaseModeProp=resolveReleaseModeProp;module.exports.updateHermesReleaseModeGradleProperties=updateHermesReleaseModeGradleProperties;module.exports.updateMainActivityNewIntentOverride=updateMainActivityNewIntentOverride;
1
+ "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.POSTHOG_RELEASE_MODES=void 0;exports.addDsymUploadBuildPhase=addDsymUploadBuildPhase;exports.addPostHogAndroidGradlePluginClasspath=addPostHogAndroidGradlePluginClasspath;exports.addPostHogWithBundledScriptsToBundleShellScript=addPostHogWithBundledScriptsToBundleShellScript;exports.applyDotenvFileBuildSetting=applyDotenvFileBuildSetting;exports.applyPostHogAndroidGradlePlugin=applyPostHogAndroidGradlePlugin;exports.buildAndroidDotenvFileGradleValue=buildAndroidDotenvFileGradleValue;exports.buildAndroidForceGradleLine=buildAndroidForceGradleLine;exports.buildAndroidSkipOnConflictGradleLine=buildAndroidSkipOnConflictGradleLine;exports.buildDsymUploadShellScript=buildDsymUploadShellScript;exports.buildIosDotenvFileBuildSetting=buildIosDotenvFileBuildSetting;exports.disableUserScriptSandboxing=disableUserScriptSandboxing;exports.modifyExistingXcodeBuildScript=modifyExistingXcodeBuildScript;exports.moveDsymUploadBuildPhaseToEnd=moveDsymUploadBuildPhaseToEnd;exports.resolveDotenvFileProp=resolveDotenvFileProp;exports.resolveNativeSymbolUpload=resolveNativeSymbolUpload;exports.resolveReleaseModeProp=resolveReleaseModeProp;exports.updateDotenvFileGradleProperties=updateDotenvFileGradleProperties;exports.updateHermesReleaseModeGradleProperties=updateHermesReleaseModeGradleProperties;exports.updateMainActivityNewIntentOverride=updateMainActivityNewIntentOverride;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator"));var _typeof2=_interopRequireDefault(require("@babel/runtime/helpers/typeof"));var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _excluded=["nextMod"],_excluded2=["nextMod"];function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]};},e:function e(r){throw r;},f:F};}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var o,a=!0,u=!1;return{s:function s(){t=t.call(r);},n:function n(){var r=t.next();return a=r.done,r;},e:function e(r){u=!0,o=r;},f:function f(){try{a||null==t["return"]||t["return"]();}finally{if(u)throw o;}}};}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0;}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n;}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){(0,_defineProperty2["default"])(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}var fs=require('fs');var path=require('path');var _require=require('@expo/config-plugins'),AndroidConfig=_require.AndroidConfig,withAppBuildGradle=_require.withAppBuildGradle,withBaseMod=_require.withBaseMod,withDangerousMod=_require.withDangerousMod,withGradleProperties=_require.withGradleProperties,withXcodeProject=_require.withXcodeProject;var POSTHOG_ANDROID_GRADLE_PLUGIN_VERSION='1.6.0';var resolvePostHogReactNativePackageJsonPath="[\"node\", \"--print\", \"require('path').join(require('path').dirname(require.resolve('posthog-react-native')), '..', 'tooling', 'posthog.gradle')\"].execute().text.trim()";var POSTHOG_ANDROID_SKIP_ON_CONFLICT_PROPERTY='posthogReactNativeSkipOnConflict';var POSTHOG_ANDROID_FORCE_PROPERTY='posthogReactNativeForce';var POSTHOG_HERMES_RELEASE_MODE_GRADLE_PROPERTY='posthog.hermesReleaseMode';var POSTHOG_RELEASE_MODES=exports.POSTHOG_RELEASE_MODES=['symbol-set','event'];function resolveReleaseModeProp(releaseMode,environmentMode){var trimmed=(releaseMode===null||releaseMode===void 0?void 0:releaseMode.trim())||(environmentMode===null||environmentMode===void 0?void 0:environmentMode.trim());if(!trimmed){return undefined;}if(!POSTHOG_RELEASE_MODES.includes(trimmed)){throw new Error("[posthog-react-native] releaseMode must be one of ".concat(POSTHOG_RELEASE_MODES.join(', '),", was '").concat(trimmed,"'"));}return trimmed;}function buildAndroidSkipOnConflictGradleLine(skipOnConflict){if(!skipOnConflict){return null;}return"project.ext.".concat(POSTHOG_ANDROID_SKIP_ON_CONFLICT_PROPERTY," = true");}function buildAndroidForceGradleLine(force){if(!force){return null;}return"project.ext.".concat(POSTHOG_ANDROID_FORCE_PROPERTY," = true");}var androidConflictPropertyPattern=function androidConflictPropertyPattern(property){return new RegExp("^project\\.ext\\.".concat(property,"\\s*=\\s*(true|false)\\n?"),'m');};var withAndroidPlugin=function withAndroidPlugin(config){var skipOnConflict=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var force=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return withAppBuildGradle(config,function(config){if(config.modResults.language!=='groovy'){console.warn('Cannot configure PostHog in the app gradle because the build.gradle is not groovy');}var buildGradle=config.modResults.contents;var applyFrom="apply from: new File(".concat(resolvePostHogReactNativePackageJsonPath,")");var conflictLines=[buildAndroidSkipOnConflictGradleLine(skipOnConflict),buildAndroidForceGradleLine(force)].filter(function(line){return line!==null;}).join('\n');var applyBlock=conflictLines?"".concat(conflictLines,"\n").concat(applyFrom):applyFrom;var conflictPatterns=[androidConflictPropertyPattern(POSTHOG_ANDROID_SKIP_ON_CONFLICT_PROPERTY),androidConflictPropertyPattern(POSTHOG_ANDROID_FORCE_PROPERTY)];if(buildGradle.includes(applyFrom)){var contents=conflictPatterns.reduce(function(gradle,pattern){return gradle.replace(pattern,'');},buildGradle);if(conflictLines){contents=contents.replace(applyFrom,"".concat(conflictLines,"\n").concat(applyFrom));}config.modResults.contents=contents;return config;}var pattern=/^android\s*\{/m;if(buildGradle.match(pattern)){config.modResults.contents=buildGradle.replace(pattern,"".concat(applyBlock,"\n\nandroid {"));}else{console.warn('PostHog: Could not find "android {" block in build.gradle');}return config;});};function matchingBraceIndex(s,openBraceIndex){var depth=0;for(var i=openBraceIndex;i<s.length;i++){if(s[i]==='{'){depth++;}else if(s[i]==='}'){depth--;if(depth===0){return i;}}}return-1;}function addPostHogAndroidGradlePluginClasspath(projectBuildGradle){if(projectBuildGradle.includes('posthog-android-gradle-plugin')){return{contents:projectBuildGradle,classpathPresent:true};}var classpathLine=" classpath(\"com.posthog:posthog-android-gradle-plugin:".concat(POSTHOG_ANDROID_GRADLE_PLUGIN_VERSION,"\")");var buildscriptMatch=/buildscript\s*\{/.exec(projectBuildGradle);var buildscriptOpenBrace=buildscriptMatch?buildscriptMatch.index+buildscriptMatch[0].length-1:-1;var buildscriptEnd=buildscriptOpenBrace===-1?-1:matchingBraceIndex(projectBuildGradle,buildscriptOpenBrace);var buildscriptBody=buildscriptEnd===-1?'':projectBuildGradle.slice(buildscriptOpenBrace,buildscriptEnd);var dependenciesMatch=buildscriptBody?/dependencies\s*\{/.exec(buildscriptBody):null;if(!dependenciesMatch){console.warn('PostHog: Could not find a buildscript dependencies block in the project build.gradle; '+'skipping the com.posthog.android classpath. Native symbols will not be uploaded.');return{contents:projectBuildGradle,classpathPresent:false};}var insertAt=buildscriptOpenBrace+dependenciesMatch.index+dependenciesMatch[0].length;return{contents:"".concat(projectBuildGradle.slice(0,insertAt),"\n").concat(classpathLine).concat(projectBuildGradle.slice(insertAt)),classpathPresent:true};}function applyPostHogAndroidGradlePlugin(appBuildGradle){if(/apply plugin: ["']com\.posthog\.android["']/.test(appBuildGradle)){return appBuildGradle;}var applyLine='apply plugin: "com.posthog.android"';var appPluginPattern=/^([ \t]*apply plugin: ["']com\.android\.application["'].*)$/m;if(appPluginPattern.test(appBuildGradle)){return appBuildGradle.replace(appPluginPattern,"$1\n".concat(applyLine));}var androidBlockPattern=/^android\s*\{/m;if(androidBlockPattern.test(appBuildGradle)){return appBuildGradle.replace(androidBlockPattern,"".concat(applyLine,"\n\nandroid {"));}console.warn('PostHog: Could not find where to apply com.posthog.android in the app build.gradle');return appBuildGradle;}var withFinalizedProjectBuildGradle=function withFinalizedProjectBuildGradle(config,_action){return withBaseMod(config,{platform:'android',mod:'projectBuildGradle',skipEmptyMod:false,action:function action(config){return(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee(){var _config$modRequest,nextMod,modRequest,results;return _regenerator["default"].wrap(function(_context){while(1)switch(_context.prev=_context.next){case 0:_config$modRequest=config.modRequest,nextMod=_config$modRequest.nextMod,modRequest=(0,_objectWithoutProperties2["default"])(_config$modRequest,_excluded);_context.next=1;return nextMod(_objectSpread(_objectSpread({},config),{},{modRequest:modRequest}));case 1:results=_context.sent;return _context.abrupt("return",_action(results));case 2:case"end":return _context.stop();}},_callee);}))();}});};var withAndroidNativeSymbolsPlugin=function withAndroidNativeSymbolsPlugin(config){return withFinalizedProjectBuildGradle(config,function(){var _ref=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2(config){var result,appBuildGradle,contents;return _regenerator["default"].wrap(function(_context2){while(1)switch(_context2.prev=_context2.next){case 0:if(!(config.modResults.language!=='groovy')){_context2.next=1;break;}console.warn('Cannot configure the PostHog Android Gradle plugin because the project build.gradle is not groovy');return _context2.abrupt("return",config);case 1:result=addPostHogAndroidGradlePluginClasspath(config.modResults.contents);if(!(result.contents!==config.modResults.contents)){_context2.next=3;break;}_context2.next=2;return fs.promises.writeFile(config.modResults.path,result.contents);case 2:config.modResults.contents=result.contents;case 3:if(result.classpathPresent){_context2.next=4;break;}return _context2.abrupt("return",config);case 4:_context2.next=5;return AndroidConfig.Paths.getAppBuildGradleAsync(config.modRequest.projectRoot);case 5:appBuildGradle=_context2.sent;if(!(appBuildGradle.language!=='groovy')){_context2.next=6;break;}console.warn('Cannot configure the PostHog Android Gradle plugin because the app build.gradle is not groovy');return _context2.abrupt("return",config);case 6:contents=applyPostHogAndroidGradlePlugin(appBuildGradle.contents);if(!(contents!==appBuildGradle.contents)){_context2.next=7;break;}_context2.next=7;return fs.promises.writeFile(appBuildGradle.path,contents);case 7:return _context2.abrupt("return",config);case 8:case"end":return _context2.stop();}},_callee2);}));return function(_x){return _ref.apply(this,arguments);};}());};var POSTHOG_NEW_INTENT_MARKER='posthog-new-intent';var POSTHOG_NEW_INTENT_BEGIN="// @generated begin ".concat(POSTHOG_NEW_INTENT_MARKER," - posthog-react-native (DO NOT MODIFY)");var POSTHOG_NEW_INTENT_END="// @generated end ".concat(POSTHOG_NEW_INTENT_MARKER);var NEW_INTENT_DOC=" /**\n * Records the intent that reopened the app so getIntent() stays correct.\n *\n * Works around a React Native defect that drops notification taps and deep links arriving while\n * the React context is still starting. Managed by the posthog-react-native Expo config plugin;\n * remove it with { patchMainActivityNewIntent: false } in app.json.\n * https://posthog.com/docs/workflows/push-notifications/react-native\n */";var NEW_INTENT_KOTLIN_BODY=" override fun onNewIntent(intent: android.content.Intent) {\n setIntent(intent)\n super.onNewIntent(intent)\n }";var NEW_INTENT_JAVA_BODY=" @Override\n public void onNewIntent(android.content.Intent intent) {\n setIntent(intent);\n super.onNewIntent(intent);\n }";function newIntentOverrideBlock(language){var body=language==='java'?NEW_INTENT_JAVA_BODY:NEW_INTENT_KOTLIN_BODY;return"\n ".concat(POSTHOG_NEW_INTENT_BEGIN,"\n").concat(NEW_INTENT_DOC,"\n").concat(body,"\n ").concat(POSTHOG_NEW_INTENT_END,"\n");}function escapeRegExp(value){return value.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');}var POSTHOG_NEW_INTENT_BLOCK_PATTERN=new RegExp("\\r?\\n?[ \\t]*".concat(escapeRegExp(POSTHOG_NEW_INTENT_BEGIN),"[\\s\\S]*?").concat(escapeRegExp(POSTHOG_NEW_INTENT_END),"[ \\t]*\\r?\\n"),'g');function literalEnd(s,start,language){var quote=s[start];var raw=quote==='"'&&s.startsWith('"""',start);var i=start+(raw?3:1);while(i<s.length){var c=s[i];if(raw){if(s.startsWith('"""',i)){while(s[i]==='"'){i++;}return i;}}else if(c==='\n'){return-1;}else if(c===quote){return i+1;}if(c==='\\'&&(!raw||language==='java')){i+=2;continue;}if(language==='kt'&&quote==='"'&&c==='$'&&s[i+1]==='{'){var close=matchingBraceIndexInSource(s,i+1,language);if(close===-1){return-1;}i=close+1;continue;}i++;}return-1;}function matchingBraceIndexInSource(s,openBraceIndex,language){var depth=0;var i=openBraceIndex;while(i<s.length){var c=s[i];if(c==='/'&&s[i+1]==='/'){var end=s.indexOf('\n',i);i=end===-1?s.length:end;continue;}if(c==='/'&&s[i+1]==='*'){var depthOfComment=1;i+=2;while(i<s.length&&depthOfComment>0){if(language==='kt'&&s[i]==='/'&&s[i+1]==='*'){depthOfComment++;i+=2;continue;}if(s[i]==='*'&&s[i+1]==='/'){depthOfComment--;i+=2;continue;}i++;}if(depthOfComment>0){return-1;}continue;}if(c==='"'||c==="'"){var _end=literalEnd(s,i,language);if(_end===-1){return-1;}i=_end;continue;}if(c==='{'){depth++;}else if(c==='}'){depth--;if(depth===0){return i;}}i++;}return-1;}function maskCommentsAndLiterals(source,language){var out=source.split('');var blank=function blank(from,to){for(var j=from;j<to&&j<out.length;j++){if(out[j]!=='\n'){out[j]=' ';}}};var i=0;while(i<source.length){var c=source[i];if(c==='/'&&source[i+1]==='/'){var end=source.indexOf('\n',i);var stop=end===-1?source.length:end;blank(i,stop);i=stop;continue;}if(c==='/'&&source[i+1]==='*'){var depth=1;var j=i+2;while(j<source.length&&depth>0){if(language==='kt'&&source[j]==='/'&&source[j+1]==='*'){depth++;j+=2;continue;}if(source[j]==='*'&&source[j+1]==='/'){depth--;j+=2;continue;}j++;}blank(i,j);i=j;continue;}if(c==='"'||c==="'"){var _end2=literalEnd(source,i,language);if(_end2===-1){blank(i,source.length);return out.join('');}blank(i,_end2);i=_end2;continue;}i++;}return out.join('');}function mainActivityBody(contents,language){var code=maskCommentsAndLiterals(contents,language);var declaration=/\bclass\s+MainActivity\b/.exec(code);if(!declaration){return undefined;}var searchFrom=declaration.index+declaration[0].length;var open=code.indexOf('{',searchFrom);if(open===-1||!/^[^;{}]*$/.test(code.slice(searchFrom,open))){return undefined;}var depth=0;var close=-1;for(var i=open;i<code.length;i++){if(code[i]==='{'){depth++;}else if(code[i]==='}'){depth--;if(depth===0){close=i;break;}}}return close===-1?undefined:{open:open,close:close};}function updateMainActivityNewIntentOverride(contents,language,enabled){var withoutManagedBlock=contents.replace(POSTHOG_NEW_INTENT_BLOCK_PATTERN,'');if(!enabled){return withoutManagedBlock;}var body=mainActivityBody(withoutManagedBlock,language);if(!body){console.warn('[posthog-react-native] Could not find the MainActivity class body; skipping the onNewIntent '+'override. Notification taps delivered while the React context is starting will be lost.');return withoutManagedBlock;}var codeOnly=maskCommentsAndLiterals(withoutManagedBlock,language);if(/\b(fun|void)\s+onNewIntent\s*\(/.test(codeOnly.slice(body.open,body.close))){console.warn('[posthog-react-native] MainActivity already overrides onNewIntent; leaving it alone. '+'Add `setIntent(intent)` as its first statement so a notification tap that arrives before '+'the React context is ready is not lost, or set `{ patchMainActivityNewIntent: false }` '+'on the plugin to silence this.');return withoutManagedBlock;}return withoutManagedBlock.slice(0,body.open+1)+newIntentOverrideBlock(language)+withoutManagedBlock.slice(body.open+1);}var MAIN_ACTIVITY_SOURCE_ROOTS=['android/app/src/main/java','android/app/src/main/kotlin'];function findMainActivityPath(projectRoot){var _walk=function walk(dir){if(!fs.existsSync(dir)){return undefined;}var _iterator=_createForOfIteratorHelper(fs.readdirSync(dir,{withFileTypes:true})),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var entry=_step.value;var candidate=path.join(dir,entry.name);if(!entry.isDirectory()){if(/^MainActivity\.(kt|java)$/.test(entry.name)){return candidate;}continue;}var hit=_walk(candidate);if(hit){return hit;}}}catch(err){_iterator.e(err);}finally{_iterator.f();}return undefined;};for(var _i=0,_MAIN_ACTIVITY_SOURCE=MAIN_ACTIVITY_SOURCE_ROOTS;_i<_MAIN_ACTIVITY_SOURCE.length;_i++){var sourceRoot=_MAIN_ACTIVITY_SOURCE[_i];var hit=_walk(path.join(projectRoot,sourceRoot));if(hit){return hit;}}return undefined;}var withMainActivityNewIntent=function withMainActivityNewIntent(config,enabled){return withDangerousMod(config,['android',(function(){var _ref2=(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee3(config){var mainActivityPath,contents,updated;return _regenerator["default"].wrap(function(_context3){while(1)switch(_context3.prev=_context3.next){case 0:mainActivityPath=findMainActivityPath(config.modRequest.projectRoot);if(mainActivityPath){_context3.next=1;break;}console.warn('[posthog-react-native] Could not find MainActivity under android/app/src/main/{java,kotlin}; '+'skipping the onNewIntent override. Notification taps delivered while the React context is '+'starting will be lost.');return _context3.abrupt("return",config);case 1:_context3.next=2;return fs.promises.readFile(mainActivityPath,'utf8');case 2:contents=_context3.sent;updated=updateMainActivityNewIntentOverride(contents,mainActivityPath.endsWith('.java')?'java':'kt',enabled);if(!(updated!==contents)){_context3.next=3;break;}_context3.next=3;return fs.promises.writeFile(mainActivityPath,updated);case 3:if(!contents.includes(POSTHOG_NEW_INTENT_BEGIN)&&updated.includes(POSTHOG_NEW_INTENT_BEGIN)){console.warn("[posthog-react-native] Added an onNewIntent override to ".concat(path.relative(config.modRequest.projectRoot,mainActivityPath)," so a notification tap that arrives before the React context is ready is not lost. ")+'Set `{ patchMainActivityNewIntent: false }` on the plugin in app.json to opt out.');}return _context3.abrupt("return",config);case 4:case"end":return _context3.stop();}},_callee3);}));return function(_x2){return _ref2.apply(this,arguments);};}())]);};function modifyExistingXcodeBuildScript(script){var skipOnConflict=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var releaseMode=arguments.length>2?arguments[2]:undefined;var force=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;if(!(script===null||script===void 0?void 0:script.shellScript)){console.warn("[posthog-react-native] Could not find the 'Bundle React Native code and images' build phase; "+'skipping sourcemap upload setup.');return;}if(!script.shellScript.match(/(packager|scripts)\/react-native-xcode\.sh\b/)){return;}if(script.shellScript.includes('posthog-xcode.sh')){var _code=migrateLegacyPostHogWrapperInvocation(JSON.parse(script.shellScript));script.shellScript=JSON.stringify(updatePostHogBundlePhaseExports(_code,skipOnConflict,releaseMode,force));return;}if(script.shellScript.includes('posthog-react-native')){return;}var code=JSON.parse(script.shellScript);script.shellScript=JSON.stringify(addPostHogWithBundledScriptsToBundleShellScript(code,skipOnConflict,releaseMode,force));}var POSTHOG_REACT_NATIVE_XCODE_PATH="`\"$NODE_BINARY\" --print \"require('path').join(require('path').dirname(require.resolve('posthog-react-native')), '..', 'tooling', 'posthog-xcode.sh')\"`";var POSTHOG_SKIP_ON_CONFLICT_EXPORT='export POSTHOG_SKIP_ON_CONFLICT=1';var POSTHOG_FORCE_EXPORT='export POSTHOG_FORCE=1';var POSTHOG_RELEASE_MODE_EXPORT_PREFIX='export POSTHOG_RELEASE_MODE=';function buildBundlePhaseExports(skipOnConflict,releaseMode){var force=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var exports=[];if(skipOnConflict){exports.push(POSTHOG_SKIP_ON_CONFLICT_EXPORT);}if(force){exports.push(POSTHOG_FORCE_EXPORT);}if(releaseMode){exports.push("".concat(POSTHOG_RELEASE_MODE_EXPORT_PREFIX).concat(releaseMode));}return exports;}var REACT_NATIVE_XCODE_LINE=/^([ \t]*)(?![A-Za-z_][A-Za-z0-9_]*=)([^\n]*(?:packager|scripts)\/react-native-xcode\.sh\b[^\n]*)$/m;function migrateLegacyPostHogWrapperInvocation(script){return script.replace("/bin/sh ".concat(POSTHOG_REACT_NATIVE_XCODE_PATH),POSTHOG_REACT_NATIVE_XCODE_PATH);}function updatePostHogBundlePhaseExports(script,skipOnConflict,releaseMode){var force=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;var _a;var _b;var skipArg='--posthog-skip-on-conflict --';var lines=script.replace(new RegExp("\\s*".concat(skipArg,"\\s*"),'g'),' ').split('\n').filter(function(line){return line.trim()!==POSTHOG_SKIP_ON_CONFLICT_EXPORT;}).filter(function(line){return line.trim()!==POSTHOG_FORCE_EXPORT;}).filter(function(line){return!line.trim().startsWith(POSTHOG_RELEASE_MODE_EXPORT_PREFIX);});var exports=buildBundlePhaseExports(skipOnConflict,releaseMode,force);if(exports.length>0){var commandIndex=lines.findIndex(function(line){return line.includes(POSTHOG_REACT_NATIVE_XCODE_PATH);});if(commandIndex!==-1){var indent=(_b=(_a=lines[commandIndex].match(/^[ \t]*/))===null||_a===void 0?void 0:_a[0])!==null&&_b!==void 0?_b:'';lines.splice.apply(lines,[commandIndex,0].concat((0,_toConsumableArray2["default"])(exports.map(function(line){return"".concat(indent).concat(line);}))));}}return lines.join('\n');}function addPostHogWithBundledScriptsToBundleShellScript(script){var skipOnConflict=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var releaseMode=arguments.length>2?arguments[2]:undefined;var force=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;return script.replace(REACT_NATIVE_XCODE_LINE,function(_match,indent,rnCommand){var exports=buildBundlePhaseExports(skipOnConflict,releaseMode,force).map(function(line){return"".concat(indent).concat(line,"\n");}).join('');return"".concat(exports).concat(indent).concat(POSTHOG_REACT_NATIVE_XCODE_PATH," ").concat(rnCommand);});}var POSTHOG_DSYM_BUILD_PHASE_NAME='Upload PostHog Debug Symbols';var POSTHOG_DSYM_INPUT_PATH='"$(DWARF_DSYM_FOLDER_PATH)/$(DWARF_DSYM_FILE_NAME)/Contents/Resources/DWARF/$(EXECUTABLE_NAME)"';function buildDsymUploadShellScript(){var includeSource=arguments.length>0&&arguments[0]!==undefined?arguments[0]:false;var skipOnConflict=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var force=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return composeDsymUploadShellScript(includeSource,skipOnConflict,force);}function composeDsymUploadShellScript(includeSource,skipOnConflict,force){var lines=['# Upload iOS dSYMs to PostHog so native crashes can be symbolicated.','# upload-symbols.sh ships inside the posthog-ios dependency.'];if(includeSource){lines.push('# Also upload native source files for source-code context around crashes.','export POSTHOG_INCLUDE_SOURCE=1');}if(skipOnConflict){lines.push('# Skip dSYMs that already exist in PostHog with different content instead of failing the build.','export POSTHOG_SKIP_ON_CONFLICT=1');}if(force){lines.push('# Overwrite dSYMs that already exist in PostHog with different content instead of failing the build.','export POSTHOG_FORCE=1');}lines.push('PODS_SCRIPT="${PODS_ROOT}/PostHog/build-tools/upload-symbols.sh"','SPM_SCRIPT="${BUILD_DIR%/Build/*}/SourcePackages/checkouts/posthog-ios/build-tools/upload-symbols.sh"','if [ -f "$PODS_SCRIPT" ]; then',' /bin/sh "$PODS_SCRIPT"','elif [ -f "$SPM_SCRIPT" ]; then',' /bin/sh "$SPM_SCRIPT"','else',' echo "warning: PostHog upload-symbols.sh not found in Pods or SwiftPM checkouts; skipping dSYM upload."','fi');return lines.join('\n');}function legacyDsymReleaseModeLines(releaseMode){return[releaseMode?"POSTHOG_RESOLVED_RELEASE_MODE=\"".concat(releaseMode,"\""):'POSTHOG_RESOLVED_RELEASE_MODE="${POSTHOG_RELEASE_MODE:-}"','case "$POSTHOG_RESOLVED_RELEASE_MODE" in',' ""|symbol-set) ;;',' event)',' # Upload dSYMs without binding them to a release, so each crash resolves its own from the',' # app version and namespace the SDK sends. posthog-ios versions whose upload-symbols.sh',' # does not read this variable ignore it and keep binding the dSYMs.',' export POSTHOG_NO_RELEASE_BIND=1',' ;;',' *)'," echo \"error: posthog release mode must be 'symbol-set' or 'event', was '$POSTHOG_RESOLVED_RELEASE_MODE'\"",' exit 1',' ;;','esac'];}function buildLegacyReleaseModeDsymUploadShellScript(includeSource,skipOnConflict,releaseMode){var lines=composeDsymUploadShellScript(includeSource,skipOnConflict,false).split('\n');var uploadIndex=lines.findIndex(function(line){return line.startsWith('PODS_SCRIPT=');});lines.splice.apply(lines,[uploadIndex,0].concat((0,_toConsumableArray2["default"])(legacyDsymReleaseModeLines(releaseMode))));return lines.join('\n');}function encodePbxShellScript(script){return'"'+script.replace(/"/g,'\\"')+'"';}function decodePbxShellScript(stored){if(!stored.startsWith('"')||!stored.endsWith('"')){return stored;}return stored.slice(1,-1).replace(/\\(.)/g,function(_match,ch){return ch==='n'?'\n':ch==='t'?'\t':ch;});}function isPluginGeneratedDsymUploadBuildPhase(phase){if(typeof(phase===null||phase===void 0?void 0:phase.shellScript)!=='string'){return false;}var stored=decodePbxShellScript(phase.shellScript);return[false,true].some(function(source){return[false,true].some(function(skip){return[false,true].some(function(force){return stored===buildDsymUploadShellScript(source,skip,force);})||[undefined].concat(POSTHOG_RELEASE_MODES).some(function(mode){return stored===buildLegacyReleaseModeDsymUploadShellScript(source,skip,mode);});});});}function moveDsymUploadBuildPhaseToEnd(xcodeProject){var _a,_b;var existing=xcodeProject.pbxItemByComment(POSTHOG_DSYM_BUILD_PHASE_NAME,'PBXShellScriptBuildPhase');if(!isPluginGeneratedDsymUploadBuildPhase(existing)){return;}var buildPhases=(_b=(_a=xcodeProject.getFirstTarget)===null||_a===void 0?void 0:_a.call(xcodeProject).firstTarget)===null||_b===void 0?void 0:_b.buildPhases;if(Array.isArray(buildPhases)){var phaseIndex=buildPhases.findIndex(function(phase){return phase.comment===POSTHOG_DSYM_BUILD_PHASE_NAME;});if(phaseIndex!==-1&&phaseIndex!==buildPhases.length-1){buildPhases.push.apply(buildPhases,(0,_toConsumableArray2["default"])(buildPhases.splice(phaseIndex,1)));}}}function addDsymUploadBuildPhase(xcodeProject){var includeSource=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var skipOnConflict=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var force=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;var existing=xcodeProject.pbxItemByComment(POSTHOG_DSYM_BUILD_PHASE_NAME,'PBXShellScriptBuildPhase');if(existing){if(isPluginGeneratedDsymUploadBuildPhase(existing)){existing.shellScript=encodePbxShellScript(buildDsymUploadShellScript(includeSource,skipOnConflict,force));existing.inputPaths=Array.from(new Set([].concat((0,_toConsumableArray2["default"])(Array.isArray(existing.inputPaths)?existing.inputPaths:[]),[POSTHOG_DSYM_INPUT_PATH])));}}else{xcodeProject.addBuildPhase([],'PBXShellScriptBuildPhase',POSTHOG_DSYM_BUILD_PHASE_NAME,null,{inputPaths:[POSTHOG_DSYM_INPUT_PATH],shellPath:'/bin/sh',shellScript:buildDsymUploadShellScript(includeSource,skipOnConflict,force)});}moveDsymUploadBuildPhaseToEnd(xcodeProject);}function disableUserScriptSandboxing(xcodeProject){var configurations=xcodeProject.pbxXCBuildConfigurationSection();for(var key in configurations){var configuration=configurations[key];if(configuration&&configuration.buildSettings){configuration.buildSettings.ENABLE_USER_SCRIPT_SANDBOXING='"NO"';}}}var POSTHOG_DOTENV_BUILD_SETTING='POSTHOG_CLI_DOTENV_FILE';var POSTHOG_DOTENV_GRADLE_PROPERTY='posthog.dotenvFile';function normalizeDotenvFileProp(dotenvFile){return dotenvFile.replace(/^\.\//,'');}function resolveDotenvFileProp(dotenvFile){var trimmed=dotenvFile===null||dotenvFile===void 0?void 0:dotenvFile.trim();return trimmed?trimmed:undefined;}function isAbsoluteDotenvPath(dotenvFile){return dotenvFile.startsWith('/')||/^[A-Za-z]:[\\/]/.test(dotenvFile);}function buildIosDotenvFileBuildSetting(dotenvFile){var value=isAbsoluteDotenvPath(dotenvFile)?dotenvFile:"$(SRCROOT)/../".concat(normalizeDotenvFileProp(dotenvFile));return'"'+value.replace(/(["\\])/g,'\\$1')+'"';}function applyDotenvFileBuildSetting(xcodeProject,dotenvFile){var configurations=xcodeProject.pbxXCBuildConfigurationSection();for(var key in configurations){var configuration=configurations[key];if(configuration&&configuration.buildSettings){if(dotenvFile){configuration.buildSettings[POSTHOG_DOTENV_BUILD_SETTING]=buildIosDotenvFileBuildSetting(dotenvFile);}else{delete configuration.buildSettings[POSTHOG_DOTENV_BUILD_SETTING];}}}}function buildAndroidDotenvFileGradleValue(dotenvFile){return isAbsoluteDotenvPath(dotenvFile)?dotenvFile:"../".concat(normalizeDotenvFileProp(dotenvFile));}function updateDotenvFileGradleProperties(properties,dotenvFile){var rest=properties.filter(function(item){return!(item.type==='property'&&item.key===POSTHOG_DOTENV_GRADLE_PROPERTY);});if(!dotenvFile){return rest;}rest.push({type:'property',key:POSTHOG_DOTENV_GRADLE_PROPERTY,value:buildAndroidDotenvFileGradleValue(dotenvFile)});return rest;}function updateHermesReleaseModeGradleProperties(properties,releaseMode){var rest=properties.filter(function(item){return!(item.type==='property'&&item.key===POSTHOG_HERMES_RELEASE_MODE_GRADLE_PROPERTY);});if(!releaseMode){return rest;}rest.push({type:'property',key:POSTHOG_HERMES_RELEASE_MODE_GRADLE_PROPERTY,value:releaseMode});return rest;}var withPostHogGradleProperties=function withPostHogGradleProperties(config,dotenvFile,releaseMode){return withGradleProperties(config,function(config){config.modResults=updateDotenvFileGradleProperties(config.modResults,dotenvFile);config.modResults=updateHermesReleaseModeGradleProperties(config.modResults,releaseMode);return config;});};function resolveNativeSymbolUpload(prop){if(prop===true){return{enabled:true,includeSource:false};}if(prop&&(0,_typeof2["default"])(prop)==='object'){return{enabled:true,includeSource:prop.includeSource===true};}return{enabled:false,includeSource:false};}var withFinalizedXcodeProject=function withFinalizedXcodeProject(config,_action2){return withBaseMod(config,{platform:'ios',mod:'xcodeproj',action:function action(config){return(0,_asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee4(){var _config$modRequest2,nextMod,modRequest,results;return _regenerator["default"].wrap(function(_context4){while(1)switch(_context4.prev=_context4.next){case 0:_config$modRequest2=config.modRequest,nextMod=_config$modRequest2.nextMod,modRequest=(0,_objectWithoutProperties2["default"])(_config$modRequest2,_excluded2);_context4.next=1;return nextMod(_objectSpread(_objectSpread({},config),{},{modRequest:modRequest}));case 1:results=_context4.sent;return _context4.abrupt("return",_action2(results));case 2:case"end":return _context4.stop();}},_callee4);}))();}});};var withIosPlugin=function withIosPlugin(config){var props=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var nativeSymbols=resolveNativeSymbolUpload(props.uploadNativeSymbols);config=withXcodeProject(config,function(config){var xcodeProject=config.modResults;var bundleReactNativePhase=xcodeProject.pbxItemByComment('Bundle React Native code and images','PBXShellScriptBuildPhase');modifyExistingXcodeBuildScript(bundleReactNativePhase,props.skipOnConflict===true,props.releaseMode,props.force===true);if(nativeSymbols.enabled){addDsymUploadBuildPhase(xcodeProject,nativeSymbols.includeSource,props.skipOnConflict===true,props.force===true);}applyDotenvFileBuildSetting(xcodeProject,props.dotenvFile);if(props.disableSandboxing!==false){disableUserScriptSandboxing(xcodeProject);console.warn('[posthog-react-native] Setting ENABLE_USER_SCRIPT_SANDBOXING=NO on all Xcode '+'build configurations so sourcemap uploads can resolve git metadata. '+'If your org requires sandboxing to stay enabled, set `{ disableSandboxing: false }` '+'on the plugin in app.json — note that stock Expo projects may fail to build under '+'sandboxing until every script build phase declares its input/output files.');}return config;});if(nativeSymbols.enabled){config=withFinalizedXcodeProject(config,function(config){moveDsymUploadBuildPhaseToEnd(config.modResults);return config;});}return config;};var withPostHogPlugin=function withPostHogPlugin(config){var rawProps=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(rawProps.skipOnConflict===true&&rawProps.force===true){throw new Error('[posthog-react-native] skipOnConflict and force cannot both be enabled: posthog-cli accepts only one of --skip-on-conflict and --force');}var props=_objectSpread(_objectSpread({},rawProps),{},{dotenvFile:resolveDotenvFileProp(rawProps.dotenvFile),releaseMode:resolveReleaseModeProp(rawProps.releaseMode,process.env.POSTHOG_RELEASE_MODE)});if(resolveNativeSymbolUpload(props.uploadNativeSymbols).enabled){config=withAndroidNativeSymbolsPlugin(config);}config=withAndroidPlugin(config,props.skipOnConflict===true,props.force===true);config=withPostHogGradleProperties(config,props.dotenvFile,props.releaseMode);config=withMainActivityNewIntent(config,props.patchMainActivityNewIntent!==false);return withIosPlugin(config,props);};var postHogPlugin=function postHogPlugin(config){var props=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};return withPostHogPlugin(config,props);};module.exports=postHogPlugin;module.exports.modifyExistingXcodeBuildScript=modifyExistingXcodeBuildScript;module.exports.addPostHogWithBundledScriptsToBundleShellScript=addPostHogWithBundledScriptsToBundleShellScript;module.exports.disableUserScriptSandboxing=disableUserScriptSandboxing;module.exports.buildDsymUploadShellScript=buildDsymUploadShellScript;module.exports.addDsymUploadBuildPhase=addDsymUploadBuildPhase;module.exports.moveDsymUploadBuildPhaseToEnd=moveDsymUploadBuildPhaseToEnd;module.exports.resolveNativeSymbolUpload=resolveNativeSymbolUpload;module.exports.buildAndroidSkipOnConflictGradleLine=buildAndroidSkipOnConflictGradleLine;module.exports.buildAndroidForceGradleLine=buildAndroidForceGradleLine;module.exports.addPostHogAndroidGradlePluginClasspath=addPostHogAndroidGradlePluginClasspath;module.exports.applyPostHogAndroidGradlePlugin=applyPostHogAndroidGradlePlugin;module.exports.buildIosDotenvFileBuildSetting=buildIosDotenvFileBuildSetting;module.exports.applyDotenvFileBuildSetting=applyDotenvFileBuildSetting;module.exports.resolveDotenvFileProp=resolveDotenvFileProp;module.exports.buildAndroidDotenvFileGradleValue=buildAndroidDotenvFileGradleValue;module.exports.updateDotenvFileGradleProperties=updateDotenvFileGradleProperties;module.exports.POSTHOG_RELEASE_MODES=POSTHOG_RELEASE_MODES;module.exports.resolveReleaseModeProp=resolveReleaseModeProp;module.exports.updateHermesReleaseModeGradleProperties=updateHermesReleaseModeGradleProperties;module.exports.updateMainActivityNewIntentOverride=updateMainActivityNewIntentOverride;
2
2
  //# sourceMappingURL=expoconfig.js.map