@amplytools/react-native-amply-sdk 0.14.0 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/AmplyReactNative.podspec +1 -1
  2. package/README.md +41 -0
  3. package/android/build.gradle +1 -1
  4. package/android/src/main/java/tools/amply/sdk/reactnative/AmplyModule.kt +22 -0
  5. package/android/src/main/java/tools/amply/sdk/reactnative/core/AmplyClient.kt +11 -0
  6. package/android/src/main/java/tools/amply/sdk/reactnative/core/DefaultAmplyClient.kt +29 -0
  7. package/android/src/main/java/tools/amply/sdk/reactnative/model/CampaignTouchPayload.kt +12 -0
  8. package/android/src/newarch/java/tools/amply/sdk/reactnative/NativeAmplyModuleSpec.java +8 -0
  9. package/android/src/newarch/jni/AmplyReactNative-generated.cpp +12 -0
  10. package/dist/cjs/campaignTouch.js +44 -0
  11. package/dist/cjs/campaignTouch.js.map +1 -0
  12. package/dist/cjs/hooks/useAmplySystemEvents.js +60 -0
  13. package/dist/cjs/hooks/useAmplySystemEvents.js.map +1 -0
  14. package/dist/cjs/index.js +723 -0
  15. package/dist/cjs/index.js.map +1 -0
  16. package/dist/cjs/nativeModule.js +55 -0
  17. package/dist/cjs/nativeModule.js.map +1 -0
  18. package/dist/cjs/nativeSpecs/NativeAmplyModule.js +5 -0
  19. package/dist/cjs/nativeSpecs/NativeAmplyModule.js.map +1 -0
  20. package/dist/cjs/systemEventUtils.js +47 -0
  21. package/dist/cjs/systemEventUtils.js.map +1 -0
  22. package/dist/cjs/systemEvents.js +27 -0
  23. package/dist/cjs/systemEvents.js.map +1 -0
  24. package/dist/src/campaignTouch.d.ts +36 -0
  25. package/dist/src/campaignTouch.d.ts.map +1 -0
  26. package/dist/src/campaignTouch.js +39 -0
  27. package/dist/src/index.d.ts +35 -0
  28. package/dist/src/index.d.ts.map +1 -1
  29. package/dist/src/index.js +120 -0
  30. package/dist/src/nativeSpecs/NativeAmplyModule.d.ts +28 -0
  31. package/dist/src/nativeSpecs/NativeAmplyModule.d.ts.map +1 -1
  32. package/dist/src/systemEventUtils.d.ts.map +1 -1
  33. package/dist/src/systemEventUtils.js +3 -1
  34. package/docs/ARCHITECTURE.md +28 -19
  35. package/docs/DEVELOPMENT.md +2 -1
  36. package/ios/Sources/AmplyReactNative/AmplyModule.mm +56 -0
  37. package/ios/Sources/AmplyReactNative/AmplyReactNative/AmplyReactNative-generated.mm +14 -0
  38. package/ios/Sources/AmplyReactNative/AmplyReactNative/AmplyReactNative.h +4 -0
  39. package/package.json +12 -6
  40. package/scripts/check-package.js +159 -0
  41. package/src/campaignTouch.ts +74 -0
  42. package/src/index.ts +124 -0
  43. package/src/nativeSpecs/NativeAmplyModule.ts +29 -0
  44. package/src/systemEventUtils.ts +3 -1
  45. package/dist/index.js +0 -272
  46. package/dist/index.js.map +0 -1
  47. package/dist/index.mjs +0 -234
  48. package/dist/index.mjs.map +0 -1
  49. package/dist/plugin/index.d.ts +0 -6
  50. package/dist/plugin/index.d.ts.map +0 -1
  51. package/dist/plugin/index.js +0 -186
  52. package/dist/plugin/index.js.map +0 -1
  53. package/dist/plugin/index.mjs +0 -169
  54. package/dist/plugin/index.mjs.map +0 -1
  55. package/dist/plugin/withAmply.d.ts +0 -12
  56. package/dist/plugin/withAmply.d.ts.map +0 -1
  57. package/dist/src/__tests__/appLanguage.test.d.ts +0 -43
  58. package/dist/src/__tests__/appLanguage.test.d.ts.map +0 -1
  59. package/dist/src/__tests__/appLanguage.test.js +0 -211
  60. package/dist/src/__tests__/campaignResolved.test.d.ts +0 -2
  61. package/dist/src/__tests__/campaignResolved.test.d.ts.map +0 -1
  62. package/dist/src/__tests__/campaignResolved.test.js +0 -208
  63. package/dist/src/__tests__/gateRegistrationLifecycle.test.d.ts +0 -2
  64. package/dist/src/__tests__/gateRegistrationLifecycle.test.d.ts.map +0 -1
  65. package/dist/src/__tests__/gateRegistrationLifecycle.test.js +0 -215
  66. package/dist/src/__tests__/index.test.d.ts +0 -2
  67. package/dist/src/__tests__/index.test.d.ts.map +0 -1
  68. package/dist/src/__tests__/index.test.js +0 -204
  69. package/dist/src/__tests__/systemEventUtils.test.d.ts +0 -2
  70. package/dist/src/__tests__/systemEventUtils.test.d.ts.map +0 -1
  71. package/dist/src/__tests__/systemEventUtils.test.js +0 -56
  72. package/dist/tsconfig.tsbuildinfo +0 -1
  73. package/plugin/tsconfig.tsbuildinfo +0 -1
  74. package/src/__tests__/appLanguage.test.ts +0 -296
  75. package/src/__tests__/campaignResolved.test.ts +0 -294
  76. package/src/__tests__/gateRegistrationLifecycle.test.ts +0 -281
  77. package/src/__tests__/index.test.ts +0 -258
  78. package/src/__tests__/systemEventUtils.test.ts +0 -75
package/dist/index.mjs DELETED
@@ -1,234 +0,0 @@
1
- // src/nativeModule.ts
2
- import { NativeModules, TurboModuleRegistry } from "react-native";
3
- var MODULE_NAME = "Amply";
4
- var cachedModule = null;
5
- var attemptedTurboLookup = false;
6
- var resolvedTurboModule = null;
7
- function loadModule() {
8
- const globalWithTurbo = globalThis;
9
- if (globalWithTurbo.__turboModuleProxy != null) {
10
- if (!attemptedTurboLookup) {
11
- attemptedTurboLookup = true;
12
- try {
13
- resolvedTurboModule = TurboModuleRegistry.getEnforcing(MODULE_NAME);
14
- } catch (error) {
15
- resolvedTurboModule = null;
16
- if (__DEV__) {
17
- console.warn(
18
- "[Amply] TurboModule lookup failed; falling back to legacy NativeModules. " + (error instanceof Error ? error.message : String(error))
19
- );
20
- }
21
- }
22
- }
23
- if (resolvedTurboModule) {
24
- return resolvedTurboModule;
25
- }
26
- }
27
- const legacyModule = NativeModules[MODULE_NAME];
28
- if (legacyModule) {
29
- return legacyModule;
30
- }
31
- return null;
32
- }
33
- function getNativeModule() {
34
- if (cachedModule) {
35
- return cachedModule;
36
- }
37
- const module = loadModule();
38
- if (!module) {
39
- throw new Error(
40
- `Amply native module '${MODULE_NAME}' not found. Ensure the module is properly linked and new architecture is enabled.`
41
- );
42
- }
43
- cachedModule = module;
44
- return cachedModule;
45
- }
46
- var nativeModule_default = getNativeModule;
47
-
48
- // src/systemEvents.ts
49
- async function addSystemEventListener(listener) {
50
- const subscription = nativeModule_default().onSystemEvent(listener);
51
- return () => {
52
- var _a;
53
- return (_a = subscription == null ? void 0 : subscription.remove) == null ? void 0 : _a.call(subscription);
54
- };
55
- }
56
-
57
- // src/hooks/useAmplySystemEvents.ts
58
- import { useCallback, useEffect, useRef, useState } from "react";
59
- function useAmplySystemEvents(options = {}) {
60
- const { maxEntries = 50, dedupe = true, onEvent } = options;
61
- const [events, setEvents] = useState([]);
62
- const seenKeysRef = useRef(/* @__PURE__ */ new Set());
63
- const handlerRef = useRef(onEvent);
64
- useEffect(() => {
65
- handlerRef.current = onEvent;
66
- }, [onEvent]);
67
- useEffect(() => {
68
- let unsubscribe;
69
- let isMounted = true;
70
- addSystemEventListener((event) => {
71
- var _a;
72
- if (!isMounted) {
73
- return;
74
- }
75
- if (dedupe) {
76
- const key = `${event.name}-${event.timestamp}`;
77
- if (seenKeysRef.current.has(key)) {
78
- return;
79
- }
80
- seenKeysRef.current.add(key);
81
- }
82
- (_a = handlerRef.current) == null ? void 0 : _a.call(handlerRef, event);
83
- setEvents((prev) => {
84
- const next = [...prev, event];
85
- if (next.length > maxEntries) {
86
- next.splice(0, next.length - maxEntries);
87
- }
88
- return next;
89
- });
90
- }).then((unsub) => {
91
- if (!isMounted) {
92
- unsub();
93
- } else {
94
- unsubscribe = unsub;
95
- }
96
- }).catch((error) => {
97
- console.warn("[Amply] system event listener error", error);
98
- });
99
- return () => {
100
- isMounted = false;
101
- unsubscribe == null ? void 0 : unsubscribe();
102
- };
103
- }, [dedupe, maxEntries]);
104
- const reset = useCallback(() => {
105
- seenKeysRef.current.clear();
106
- setEvents([]);
107
- }, []);
108
- return { events, reset };
109
- }
110
-
111
- // src/systemEventUtils.ts
112
- var DEFAULT_LABELS = {
113
- SdkInitialized: "SDK initialized",
114
- ConfigFetchStarted: "Config fetch started",
115
- ConfigFetchFinished: "Config fetch finished",
116
- SessionStarted: "Session started",
117
- SessionFinished: "Session finished",
118
- CampaignShown: "Campaign shown",
119
- EventTriggered: "Event triggered",
120
- CampaignStarted: "Campaign processing started",
121
- CampaignFinished: "Campaign finished"
122
- };
123
- function formatSystemEventLabel(event) {
124
- var _a, _b;
125
- if (event.name === "CampaignShown") {
126
- const campaignId = event.properties.campaignId;
127
- const source = event.properties.source;
128
- return `Campaign shown${campaignId ? ` (${campaignId})` : ""}${source ? ` via ${source}` : ""}`;
129
- }
130
- if (event.name === "EventTriggered") {
131
- const source = event.properties.sourceEvent;
132
- return source ? `Event triggered (${source})` : (_a = DEFAULT_LABELS[event.name]) != null ? _a : event.name;
133
- }
134
- if (event.name === "ConfigFetchFinished") {
135
- const success = event.properties.success;
136
- const campaignCount = event.properties.campaignCount;
137
- const countLabel = typeof campaignCount === "number" ? ` (${campaignCount} campaigns)` : "";
138
- return success === false ? "Config fetch failed" : `Config fetch finished${countLabel}`;
139
- }
140
- return (_b = DEFAULT_LABELS[event.name]) != null ? _b : `System event ${event.name}`;
141
- }
142
-
143
- // src/index.ts
144
- var deepLinkRegistered = false;
145
- var deepLinkSubscriptions = /* @__PURE__ */ new Set();
146
- async function ensureDeepLinkRegistration() {
147
- if (!deepLinkRegistered) {
148
- console.log("[Amply] Calling registerDeepLinkListener on native module");
149
- nativeModule_default().registerDeepLinkListener();
150
- deepLinkRegistered = true;
151
- console.log("[Amply] registerDeepLinkListener completed");
152
- }
153
- }
154
- function trackDeepLinkSubscription(subscription) {
155
- let removed = false;
156
- const unsubscribe = () => {
157
- var _a;
158
- if (removed) {
159
- return;
160
- }
161
- removed = true;
162
- (_a = subscription == null ? void 0 : subscription.remove) == null ? void 0 : _a.call(subscription);
163
- deepLinkSubscriptions.delete(unsubscribe);
164
- };
165
- deepLinkSubscriptions.add(unsubscribe);
166
- return unsubscribe;
167
- }
168
- async function initialize(config) {
169
- await nativeModule_default().initialize(config);
170
- }
171
- function isInitialized() {
172
- return nativeModule_default().isInitialized();
173
- }
174
- async function track(payload) {
175
- await nativeModule_default().track(payload);
176
- }
177
- async function getRecentEvents(limit) {
178
- return nativeModule_default().getRecentEvents(limit);
179
- }
180
- async function getDataSetSnapshot(type) {
181
- return nativeModule_default().getDataSetSnapshot(type);
182
- }
183
- async function addDeepLinkListener(listener) {
184
- await ensureDeepLinkRegistration();
185
- const subscription = nativeModule_default().onDeepLink(listener);
186
- return trackDeepLinkSubscription(subscription);
187
- }
188
- async function addSystemEventListener2(listener) {
189
- return addSystemEventListener(listener);
190
- }
191
- function removeAllListeners() {
192
- deepLinkSubscriptions.forEach((unsubscribe) => {
193
- try {
194
- unsubscribe();
195
- } catch (error) {
196
- console.warn("[Amply] Failed to remove deep link listener", error);
197
- }
198
- });
199
- deepLinkSubscriptions.clear();
200
- }
201
- function addSystemEventsListener(listener) {
202
- return addSystemEventListener2(listener);
203
- }
204
- var systemEvents = {
205
- addListener: addSystemEventsListener
206
- };
207
- var src_default = {
208
- initialize,
209
- isInitialized,
210
- track,
211
- getRecentEvents,
212
- getDataSetSnapshot,
213
- addDeepLinkListener,
214
- addSystemEventListener: addSystemEventListener2,
215
- addSystemEventsListener,
216
- removeAllListeners,
217
- systemEvents
218
- };
219
- export {
220
- addDeepLinkListener,
221
- addSystemEventListener2 as addSystemEventListener,
222
- addSystemEventsListener,
223
- src_default as default,
224
- formatSystemEventLabel,
225
- getDataSetSnapshot,
226
- getRecentEvents,
227
- initialize,
228
- isInitialized,
229
- removeAllListeners,
230
- systemEvents,
231
- track,
232
- useAmplySystemEvents
233
- };
234
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/nativeModule.ts","../src/systemEvents.ts","../src/hooks/useAmplySystemEvents.ts","../src/systemEventUtils.ts","../src/index.ts"],"sourcesContent":["import {NativeModules, TurboModuleRegistry} from 'react-native';\nimport type {Spec} from './nativeSpecs/NativeAmplyModule';\n\nconst MODULE_NAME = 'Amply';\n\nlet cachedModule: Spec | null = null;\nlet attemptedTurboLookup = false;\nlet resolvedTurboModule: Spec | null = null;\n\nfunction loadModule(): Spec | null {\n const globalWithTurbo = globalThis as typeof globalThis & {\n __turboModuleProxy?: unknown;\n };\n\n if (globalWithTurbo.__turboModuleProxy != null) {\n if (!attemptedTurboLookup) {\n attemptedTurboLookup = true;\n try {\n resolvedTurboModule = TurboModuleRegistry.getEnforcing<Spec>(MODULE_NAME);\n } catch (error) {\n resolvedTurboModule = null;\n if (__DEV__) {\n console.warn(\n \"[Amply] TurboModule lookup failed; falling back to legacy NativeModules. \" +\n (error instanceof Error ? error.message : String(error))\n );\n }\n }\n }\n if (resolvedTurboModule) {\n return resolvedTurboModule;\n }\n }\n\n const legacyModule = NativeModules[MODULE_NAME] as Spec | undefined;\n if (legacyModule) {\n return legacyModule;\n }\n\n return null;\n}\n\nexport function getNativeModule(): Spec {\n if (cachedModule) {\n return cachedModule;\n }\n\n const module = loadModule();\n if (!module) {\n throw new Error(\n `Amply native module '${MODULE_NAME}' not found. ` +\n 'Ensure the module is properly linked and new architecture is enabled.'\n );\n }\n\n cachedModule = module;\n return cachedModule;\n}\n\n// Testing hook to override the resolved native module.\nexport function __setNativeModule(mock: Spec | null): void {\n cachedModule = mock;\n}\n\nexport default getNativeModule;\n","import getNativeModule from './nativeModule';\nimport type {SystemEventPayload} from './nativeSpecs/NativeAmplyModule';\n\nexport async function addSystemEventListener(\n listener: (event: SystemEventPayload) => void,\n): Promise<() => void> {\n const subscription = getNativeModule().onSystemEvent(listener);\n return () => subscription?.remove?.();\n}\n\nexport const systemEvents = {\n addListener: addSystemEventListener,\n};\n","import {useCallback, useEffect, useRef, useState} from 'react';\nimport type {EventRecord} from '../nativeSpecs/NativeAmplyModule';\nimport {addSystemEventListener} from '../systemEvents';\n\nexport type UseAmplySystemEventsOptions = {\n maxEntries?: number;\n dedupe?: boolean;\n onEvent?: (event: EventRecord) => void;\n};\n\nexport type UseAmplySystemEventsResult = {\n events: EventRecord[];\n reset: () => void;\n};\n\nexport function useAmplySystemEvents(\n options: UseAmplySystemEventsOptions = {},\n): UseAmplySystemEventsResult {\n const {maxEntries = 50, dedupe = true, onEvent} = options;\n const [events, setEvents] = useState<EventRecord[]>([]);\n const seenKeysRef = useRef<Set<string>>(new Set());\n const handlerRef = useRef<typeof onEvent>(onEvent);\n\n useEffect(() => {\n handlerRef.current = onEvent;\n }, [onEvent]);\n\n useEffect(() => {\n let unsubscribe: (() => void) | undefined;\n let isMounted = true;\n\n addSystemEventListener(event => {\n if (!isMounted) {\n return;\n }\n if (dedupe) {\n const key = `${event.name}-${event.timestamp}`;\n if (seenKeysRef.current.has(key)) {\n return;\n }\n seenKeysRef.current.add(key);\n }\n handlerRef.current?.(event);\n setEvents(prev => {\n const next = [...prev, event];\n if (next.length > maxEntries) {\n next.splice(0, next.length - maxEntries);\n }\n return next;\n });\n })\n .then(unsub => {\n if (!isMounted) {\n unsub();\n } else {\n unsubscribe = unsub;\n }\n })\n .catch(error => {\n console.warn('[Amply] system event listener error', error);\n });\n\n return () => {\n isMounted = false;\n unsubscribe?.();\n };\n }, [dedupe, maxEntries]);\n\n const reset = useCallback(() => {\n seenKeysRef.current.clear();\n setEvents([]);\n }, []);\n\n return {events, reset};\n}\n","import type {EventRecord} from './nativeSpecs/NativeAmplyModule';\n\nconst DEFAULT_LABELS: Record<string, string> = {\n SdkInitialized: 'SDK initialized',\n ConfigFetchStarted: 'Config fetch started',\n ConfigFetchFinished: 'Config fetch finished',\n SessionStarted: 'Session started',\n SessionFinished: 'Session finished',\n CampaignShown: 'Campaign shown',\n EventTriggered: 'Event triggered',\n CampaignStarted: 'Campaign processing started',\n CampaignFinished: 'Campaign finished',\n};\n\nexport function formatSystemEventLabel(event: EventRecord): string {\n if (event.name === 'CampaignShown') {\n const campaignId = event.properties.campaignId as string | undefined;\n const source = event.properties.source as string | undefined;\n return `Campaign shown${campaignId ? ` (${campaignId})` : ''}${\n source ? ` via ${source}` : ''\n }`;\n }\n if (event.name === 'EventTriggered') {\n const source = event.properties.sourceEvent as string | undefined;\n return source ? `Event triggered (${source})` : DEFAULT_LABELS[event.name] ?? event.name;\n }\n if (event.name === 'ConfigFetchFinished') {\n const success = event.properties.success as boolean | undefined;\n const campaignCount = event.properties.campaignCount as number | undefined;\n const countLabel =\n typeof campaignCount === 'number' ? ` (${campaignCount} campaigns)` : '';\n return success === false ? 'Config fetch failed' : `Config fetch finished${countLabel}`;\n }\n return DEFAULT_LABELS[event.name] ?? `System event ${event.name}`;\n}\n","import getNativeModule from './nativeModule';\nimport {addSystemEventListener as addSystemEventListenerInternal} from './systemEvents';\nexport {useAmplySystemEvents} from './hooks/useAmplySystemEvents';\nexport {formatSystemEventLabel} from './systemEventUtils';\nimport type {\n AmplyInitializationConfig,\n DataSetSnapshot,\n DataSetType,\n DeepLinkEvent,\n EventRecord,\n TrackEventPayload,\n} from './nativeSpecs/NativeAmplyModule';\n\nlet deepLinkRegistered = false;\nconst deepLinkSubscriptions = new Set<() => void>();\n\nasync function ensureDeepLinkRegistration(): Promise<void> {\n if (!deepLinkRegistered) {\n console.log('[Amply] Calling registerDeepLinkListener on native module');\n getNativeModule().registerDeepLinkListener();\n deepLinkRegistered = true;\n console.log('[Amply] registerDeepLinkListener completed');\n }\n}\n\nfunction trackDeepLinkSubscription(subscription?: {remove?: () => void}): () => void {\n let removed = false;\n const unsubscribe = () => {\n if (removed) {\n return;\n }\n removed = true;\n subscription?.remove?.();\n deepLinkSubscriptions.delete(unsubscribe);\n };\n deepLinkSubscriptions.add(unsubscribe);\n return unsubscribe;\n}\n\nexport async function initialize(config: AmplyInitializationConfig): Promise<void> {\n await getNativeModule().initialize(config);\n}\n\nexport function isInitialized(): boolean {\n return getNativeModule().isInitialized();\n}\n\nexport async function track(payload: TrackEventPayload): Promise<void> {\n await getNativeModule().track(payload);\n}\n\nexport async function getRecentEvents(limit: number): Promise<EventRecord[]> {\n return getNativeModule().getRecentEvents(limit);\n}\n\nexport async function getDataSetSnapshot(type: DataSetType): Promise<DataSetSnapshot> {\n return getNativeModule().getDataSetSnapshot(type);\n}\n\nexport async function addDeepLinkListener(\n listener: (event: DeepLinkEvent) => void\n): Promise<() => void> {\n await ensureDeepLinkRegistration();\n const subscription = getNativeModule().onDeepLink(listener);\n return trackDeepLinkSubscription(subscription);\n}\n\nexport async function addSystemEventListener(\n listener: (event: EventRecord) => void\n): Promise<() => void> {\n return addSystemEventListenerInternal(listener);\n}\n\nexport function removeAllListeners(): void {\n deepLinkSubscriptions.forEach(unsubscribe => {\n try {\n unsubscribe();\n } catch (error) {\n console.warn('[Amply] Failed to remove deep link listener', error);\n }\n });\n deepLinkSubscriptions.clear();\n}\n\nexport type {\n AmplyInitializationConfig,\n DataSetSnapshot,\n DataSetType,\n DeepLinkEvent,\n EventRecord,\n TrackEventPayload,\n};\n\nexport function addSystemEventsListener(\n listener: (event: EventRecord) => void,\n): Promise<() => void> {\n return addSystemEventListener(listener);\n}\n\nexport const systemEvents = {\n addListener: addSystemEventsListener,\n};\n\nexport default {\n initialize,\n isInitialized,\n track,\n getRecentEvents,\n getDataSetSnapshot,\n addDeepLinkListener,\n addSystemEventListener,\n addSystemEventsListener,\n removeAllListeners,\n systemEvents,\n};\n"],"mappings":"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","names":["addSystemEventListener"]}
@@ -1,6 +0,0 @@
1
- import type { ConfigPlugin } from '@expo/config-plugins';
2
- declare const plugin: ConfigPlugin<{
3
- sdkVersion?: string;
4
- }>;
5
- export default plugin;
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../plugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAGvD,QAAA,MAAM,MAAM,EAAE,YAAY,CAAC;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CACxB,CAAC;AAE3B,eAAe,MAAM,CAAC"}
@@ -1,186 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // plugin/index.ts
21
- var plugin_exports = {};
22
- __export(plugin_exports, {
23
- default: () => plugin_default
24
- });
25
- module.exports = __toCommonJS(plugin_exports);
26
-
27
- // plugin/withAmply.ts
28
- var import_config_plugins = require("@expo/config-plugins");
29
- var import_generateCode = require("@expo/config-plugins/build/utils/generateCode");
30
- var import_codeMod = require("@expo/config-plugins/build/android/codeMod");
31
- var DEFAULT_SDK_VERSION = "0.1.7";
32
- var GITHUB_MAVEN_URL = "https://maven.pkg.github.com/amply/sdk";
33
- var GITHUB_MAVEN_CREDENTIALS_ENV = {
34
- username: "AMPLY_MAVEN_USERNAME",
35
- password: "AMPLY_MAVEN_PASSWORD"
36
- };
37
- var GITHUB_GRADLE_REPOSITORY_SNIPPET = `
38
- maven {
39
- url '${GITHUB_MAVEN_URL}'
40
- credentials {
41
- username findProperty('${GITHUB_MAVEN_CREDENTIALS_ENV.username}') ?: System.getenv('${GITHUB_MAVEN_CREDENTIALS_ENV.username}')
42
- password findProperty('${GITHUB_MAVEN_CREDENTIALS_ENV.password}') ?: System.getenv('${GITHUB_MAVEN_CREDENTIALS_ENV.password}')
43
- }
44
- }
45
- `;
46
- var GRADLE_DEPENDENCY_LINE = ` implementation("tools.amply:sdk-android:${"$"}{project.findProperty('amplySdkVersion') ?: System.getenv('AMPLY_SDK_VERSION') ?: '${DEFAULT_SDK_VERSION}'}")`;
47
- function applyGithubMavenRepository(contents) {
48
- if (contents.includes(GITHUB_MAVEN_URL)) {
49
- return contents;
50
- }
51
- const repositoriesBlock = /(repositories\s*\{[\s\S]*?\n\})/;
52
- if (repositoriesBlock.test(contents)) {
53
- return contents.replace(repositoriesBlock, (match) => {
54
- if (match.includes(GITHUB_MAVEN_URL)) {
55
- return match;
56
- }
57
- return match.replace(/\n\}/, `
58
- ${GITHUB_GRADLE_REPOSITORY_SNIPPET} }`);
59
- });
60
- }
61
- return `${contents}
62
- repositories {${GITHUB_GRADLE_REPOSITORY_SNIPPET}}
63
- `;
64
- }
65
- function applyDependency(contents) {
66
- if (contents.includes("tools.amply:sdk-android")) {
67
- return contents;
68
- }
69
- const dependenciesBlock = /(dependencies\s*\{[\s\S]*?\n\})/;
70
- if (dependenciesBlock.test(contents)) {
71
- return contents.replace(dependenciesBlock, (match) => {
72
- if (match.includes("tools.amply:sdk-android")) {
73
- return match;
74
- }
75
- return match.replace(/\n\}/, `
76
- ${GRADLE_DEPENDENCY_LINE}
77
- }`);
78
- });
79
- }
80
- return `${contents}
81
- dependencies {
82
- ${GRADLE_DEPENDENCY_LINE}
83
- }
84
- `;
85
- }
86
- function addAmplyPackageRegistration(contents, language) {
87
- if (contents.includes("AmplyPackage")) {
88
- console.log("[Amply] AmplyPackage already registered in MainApplication");
89
- return contents;
90
- }
91
- if (!contents.includes("import com.amply.reactnative.AmplyPackage")) {
92
- contents = (0, import_codeMod.addImports)(contents, ["com.amply.reactnative.AmplyPackage"], language === "java");
93
- console.log("[Amply] Added AmplyPackage import to MainApplication");
94
- }
95
- const amplyPackageCall = language === "java" ? "add(new AmplyPackage());" : "add(AmplyPackage())";
96
- const result = (0, import_generateCode.mergeContents)({
97
- src: contents,
98
- newSrc: amplyPackageCall,
99
- tag: "amply-package-registration",
100
- anchor: /(?<=\.apply\s*\{[\s]*)/,
101
- offset: 0,
102
- comment: language === "java" ? "//" : "//"
103
- });
104
- if (result.didMerge) {
105
- console.log("[Amply] Registered AmplyPackage in getPackages() method");
106
- return result.contents;
107
- } else {
108
- console.warn("[Amply] Could not register AmplyPackage - anchor pattern not found");
109
- return contents;
110
- }
111
- }
112
- var withAmply = (config, props = {}) => {
113
- const { sdkVersion, useGithubFallbackRepo = false } = props;
114
- const version = sdkVersion != null ? sdkVersion : DEFAULT_SDK_VERSION;
115
- config = (0, import_config_plugins.withGradleProperties)(config, (gradleConfig) => {
116
- const exists = gradleConfig.modResults.find(
117
- (item) => item.type === "property" && item.key === "amplySdkVersion"
118
- );
119
- if (!exists) {
120
- gradleConfig.modResults.push({ type: "property", key: "amplySdkVersion", value: version });
121
- }
122
- return gradleConfig;
123
- });
124
- config = (0, import_config_plugins.withProjectBuildGradle)(config, (gradleConfig) => {
125
- if (useGithubFallbackRepo) {
126
- gradleConfig.modResults.contents = applyGithubMavenRepository(gradleConfig.modResults.contents);
127
- }
128
- gradleConfig.modResults.contents = applyDependency(gradleConfig.modResults.contents);
129
- return gradleConfig;
130
- });
131
- config = (0, import_config_plugins.withSettingsGradle)(config, (gradleConfig) => {
132
- const contents = gradleConfig.modResults.contents;
133
- if (contents.includes(":amplyreactnative")) {
134
- console.log("[Amply] Amply module already configured in settings.gradle");
135
- return gradleConfig;
136
- }
137
- const moduleConfig = "\n\ninclude ':amplyreactnative'\nproject(':amplyreactnative').projectDir = new File(rootProject.projectDir, '../../../android')";
138
- const lastIncludeBuildMatch = contents.lastIndexOf("includeBuild");
139
- let modified = contents;
140
- if (lastIncludeBuildMatch !== -1) {
141
- const nextNewlineAfterIncludeBuild = contents.indexOf("\n", lastIncludeBuildMatch);
142
- if (nextNewlineAfterIncludeBuild !== -1) {
143
- modified = contents.slice(0, nextNewlineAfterIncludeBuild + 1) + moduleConfig + contents.slice(nextNewlineAfterIncludeBuild + 1);
144
- console.log("[Amply] Added Amply module include to settings.gradle");
145
- }
146
- } else {
147
- modified = contents + moduleConfig;
148
- console.log("[Amply] Appended Amply module include to settings.gradle (no includeBuild found)");
149
- }
150
- gradleConfig.modResults.contents = modified;
151
- return gradleConfig;
152
- });
153
- config = (0, import_config_plugins.withAppBuildGradle)(config, (gradleConfig) => {
154
- const contents = gradleConfig.modResults.contents;
155
- if (contents.includes(":amplyreactnative")) {
156
- console.log("[Amply] Amply module already configured in app/build.gradle");
157
- return gradleConfig;
158
- }
159
- const depsStart = contents.indexOf("dependencies {");
160
- if (depsStart !== -1) {
161
- const firstImplAfterDeps = contents.indexOf("implementation", depsStart);
162
- if (firstImplAfterDeps !== -1) {
163
- const lineEnd = contents.indexOf("\n", firstImplAfterDeps);
164
- if (lineEnd !== -1) {
165
- const moduleImpl = "\n\n // Amply React Native module\n implementation project(':amplyreactnative')";
166
- gradleConfig.modResults.contents = contents.slice(0, lineEnd) + moduleImpl + contents.slice(lineEnd);
167
- console.log("[Amply] Added Amply module dependency to app/build.gradle");
168
- }
169
- }
170
- }
171
- return gradleConfig;
172
- });
173
- config = (0, import_config_plugins.withMainApplication)(config, async (config2) => {
174
- const { contents, language } = config2.modResults;
175
- const modified = addAmplyPackageRegistration(contents, language);
176
- config2.modResults.contents = modified;
177
- return config2;
178
- });
179
- return config;
180
- };
181
- var withAmply_default = withAmply;
182
-
183
- // plugin/index.ts
184
- var plugin = (config, props) => withAmply_default(config, props);
185
- var plugin_default = plugin;
186
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../plugin/index.ts","../../plugin/withAmply.ts"],"sourcesContent":["import type {ConfigPlugin} from '@expo/config-plugins';\nimport withAmply from './withAmply';\n\nconst plugin: ConfigPlugin<{ sdkVersion?: string }> = (config, props) =>\n withAmply(config, props);\n\nexport default plugin;\n","import {\n ConfigPlugin,\n withGradleProperties,\n withProjectBuildGradle,\n withMainApplication,\n withSettingsGradle,\n withAppBuildGradle,\n AndroidConfig,\n} from '@expo/config-plugins';\nimport { mergeContents } from '@expo/config-plugins/build/utils/generateCode';\nimport { addImports } from '@expo/config-plugins/build/android/codeMod';\n\nconst DEFAULT_SDK_VERSION = '0.1.7';\nconst GITHUB_MAVEN_URL = 'https://maven.pkg.github.com/amply/sdk';\nconst GITHUB_MAVEN_CREDENTIALS_ENV = {\n username: 'AMPLY_MAVEN_USERNAME',\n password: 'AMPLY_MAVEN_PASSWORD',\n};\n\nconst GITHUB_GRADLE_REPOSITORY_SNIPPET = `\n maven {\n url '${GITHUB_MAVEN_URL}'\n credentials {\n username findProperty('${GITHUB_MAVEN_CREDENTIALS_ENV.username}') ?: System.getenv('${GITHUB_MAVEN_CREDENTIALS_ENV.username}')\n password findProperty('${GITHUB_MAVEN_CREDENTIALS_ENV.password}') ?: System.getenv('${GITHUB_MAVEN_CREDENTIALS_ENV.password}')\n }\n }\n`;\n\nconst GRADLE_DEPENDENCY_LINE = ` implementation(\"tools.amply:sdk-android:${'$'}{project.findProperty('amplySdkVersion') ?: System.getenv('AMPLY_SDK_VERSION') ?: '${DEFAULT_SDK_VERSION}'}\")`;\n\nfunction applyGithubMavenRepository(contents: string): string {\n if (contents.includes(GITHUB_MAVEN_URL)) {\n return contents;\n }\n\n const repositoriesBlock = /(repositories\\s*\\{[\\s\\S]*?\\n\\})/;\n if (repositoriesBlock.test(contents)) {\n return contents.replace(repositoriesBlock, match => {\n if (match.includes(GITHUB_MAVEN_URL)) {\n return match;\n }\n return match.replace(/\\n\\}/, `\\n${GITHUB_GRADLE_REPOSITORY_SNIPPET} }`);\n });\n }\n\n // Fallback: append at the end of settings block\n return `${contents}\\nrepositories {${GITHUB_GRADLE_REPOSITORY_SNIPPET}}\\n`;\n}\n\nfunction applyDependency(contents: string): string {\n if (contents.includes('tools.amply:sdk-android')) {\n return contents;\n }\n\n const dependenciesBlock = /(dependencies\\s*\\{[\\s\\S]*?\\n\\})/;\n if (dependenciesBlock.test(contents)) {\n return contents.replace(dependenciesBlock, match => {\n if (match.includes('tools.amply:sdk-android')) {\n return match;\n }\n return match.replace(/\\n\\}/, `\\n${GRADLE_DEPENDENCY_LINE}\\n}`);\n });\n }\n\n return `${contents}\\ndependencies {\\n${GRADLE_DEPENDENCY_LINE}\\n}\\n`;\n}\n\ntype WithAmplyPluginProps = {\n sdkVersion?: string;\n /**\n * Optional escape hatch for internal builds that still rely on GitHub Packages.\n * Public installs resolve from Maven Central without any additional repositories.\n */\n useGithubFallbackRepo?: boolean;\n};\n\nfunction addAmplyPackageRegistration(contents: string, language: 'java' | 'kt'): string {\n // Check if AmplyPackage is already registered\n if (contents.includes('AmplyPackage')) {\n console.log('[Amply] AmplyPackage already registered in MainApplication');\n return contents;\n }\n\n // Add import if not present\n if (!contents.includes('import com.amply.reactnative.AmplyPackage')) {\n contents = addImports(contents, ['com.amply.reactnative.AmplyPackage'], language === 'java');\n console.log('[Amply] Added AmplyPackage import to MainApplication');\n }\n\n // Determine the correct syntax for the language\n const amplyPackageCall = language === 'java' ? 'add(new AmplyPackage());' : 'add(AmplyPackage())';\n\n // Add AmplyPackage() to the packages list in getPackages() method\n // Use mergeContents for safe, idempotent insertion\n const result = mergeContents({\n src: contents,\n newSrc: amplyPackageCall,\n tag: 'amply-package-registration',\n anchor: /(?<=\\.apply\\s*\\{[\\s]*)/,\n offset: 0,\n comment: language === 'java' ? '//' : '//',\n });\n\n if (result.didMerge) {\n console.log('[Amply] Registered AmplyPackage in getPackages() method');\n return result.contents;\n } else {\n console.warn('[Amply] Could not register AmplyPackage - anchor pattern not found');\n return contents;\n }\n}\n\nconst withAmply: ConfigPlugin<WithAmplyPluginProps> = (config, props = {}) => {\n const {sdkVersion, useGithubFallbackRepo = false} = props;\n const version = sdkVersion ?? DEFAULT_SDK_VERSION;\n\n config = withGradleProperties(config, gradleConfig => {\n const exists = gradleConfig.modResults.find(\n item => item.type === 'property' && item.key === 'amplySdkVersion'\n );\n if (!exists) {\n gradleConfig.modResults.push({ type: 'property', key: 'amplySdkVersion', value: version });\n }\n return gradleConfig;\n });\n\n config = withProjectBuildGradle(config, gradleConfig => {\n if (useGithubFallbackRepo) {\n gradleConfig.modResults.contents = applyGithubMavenRepository(gradleConfig.modResults.contents);\n }\n gradleConfig.modResults.contents = applyDependency(gradleConfig.modResults.contents);\n return gradleConfig;\n });\n\n // Add Amply native module to settings.gradle\n config = withSettingsGradle(config, gradleConfig => {\n const contents = gradleConfig.modResults.contents;\n\n // Only add if not already present\n if (contents.includes(':amplyreactnative')) {\n console.log('[Amply] Amply module already configured in settings.gradle');\n return gradleConfig;\n }\n\n // Add the Amply native module include configuration after the last includeBuild statement\n const moduleConfig = \"\\n\\ninclude ':amplyreactnative'\\nproject(':amplyreactnative').projectDir = new File(rootProject.projectDir, '../../../android')\";\n\n const lastIncludeBuildMatch = contents.lastIndexOf('includeBuild');\n let modified = contents;\n\n if (lastIncludeBuildMatch !== -1) {\n const nextNewlineAfterIncludeBuild = contents.indexOf('\\n', lastIncludeBuildMatch);\n if (nextNewlineAfterIncludeBuild !== -1) {\n modified =\n contents.slice(0, nextNewlineAfterIncludeBuild + 1) +\n moduleConfig +\n contents.slice(nextNewlineAfterIncludeBuild + 1);\n console.log('[Amply] Added Amply module include to settings.gradle');\n }\n } else {\n // Fallback: append at the end\n modified = contents + moduleConfig;\n console.log('[Amply] Appended Amply module include to settings.gradle (no includeBuild found)');\n }\n\n gradleConfig.modResults.contents = modified;\n return gradleConfig;\n });\n\n // Add Amply native module dependency to app/build.gradle\n config = withAppBuildGradle(config, gradleConfig => {\n const contents = gradleConfig.modResults.contents;\n\n // Only add if not already present\n if (contents.includes(':amplyreactnative')) {\n console.log('[Amply] Amply module already configured in app/build.gradle');\n return gradleConfig;\n }\n\n // Add the Amply native module dependency after the first implementation statement\n const depsStart = contents.indexOf('dependencies {');\n if (depsStart !== -1) {\n const firstImplAfterDeps = contents.indexOf('implementation', depsStart);\n if (firstImplAfterDeps !== -1) {\n const lineEnd = contents.indexOf('\\n', firstImplAfterDeps);\n if (lineEnd !== -1) {\n const moduleImpl = \"\\n\\n // Amply React Native module\\n implementation project(':amplyreactnative')\";\n gradleConfig.modResults.contents =\n contents.slice(0, lineEnd) +\n moduleImpl +\n contents.slice(lineEnd);\n console.log('[Amply] Added Amply module dependency to app/build.gradle');\n }\n }\n }\n\n return gradleConfig;\n });\n\n // Register AmplyPackage in MainApplication using proper Expo API\n // This hook runs AFTER the MainApplication file is generated by Expo\n config = withMainApplication(config, async config => {\n const { contents, language } = config.modResults;\n const modified = addAmplyPackageRegistration(contents, language);\n config.modResults.contents = modified;\n return config;\n });\n\n return config;\n};\n\nexport default withAmply;\n"],"mappings":"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","names":["config"]}
@@ -1,169 +0,0 @@
1
- // plugin/withAmply.ts
2
- import {
3
- withGradleProperties,
4
- withProjectBuildGradle,
5
- withMainApplication,
6
- withSettingsGradle,
7
- withAppBuildGradle
8
- } from "@expo/config-plugins";
9
- import { mergeContents } from "@expo/config-plugins/build/utils/generateCode";
10
- import { addImports } from "@expo/config-plugins/build/android/codeMod";
11
- var DEFAULT_SDK_VERSION = "0.1.7";
12
- var GITHUB_MAVEN_URL = "https://maven.pkg.github.com/amply/sdk";
13
- var GITHUB_MAVEN_CREDENTIALS_ENV = {
14
- username: "AMPLY_MAVEN_USERNAME",
15
- password: "AMPLY_MAVEN_PASSWORD"
16
- };
17
- var GITHUB_GRADLE_REPOSITORY_SNIPPET = `
18
- maven {
19
- url '${GITHUB_MAVEN_URL}'
20
- credentials {
21
- username findProperty('${GITHUB_MAVEN_CREDENTIALS_ENV.username}') ?: System.getenv('${GITHUB_MAVEN_CREDENTIALS_ENV.username}')
22
- password findProperty('${GITHUB_MAVEN_CREDENTIALS_ENV.password}') ?: System.getenv('${GITHUB_MAVEN_CREDENTIALS_ENV.password}')
23
- }
24
- }
25
- `;
26
- var GRADLE_DEPENDENCY_LINE = ` implementation("tools.amply:sdk-android:${"$"}{project.findProperty('amplySdkVersion') ?: System.getenv('AMPLY_SDK_VERSION') ?: '${DEFAULT_SDK_VERSION}'}")`;
27
- function applyGithubMavenRepository(contents) {
28
- if (contents.includes(GITHUB_MAVEN_URL)) {
29
- return contents;
30
- }
31
- const repositoriesBlock = /(repositories\s*\{[\s\S]*?\n\})/;
32
- if (repositoriesBlock.test(contents)) {
33
- return contents.replace(repositoriesBlock, (match) => {
34
- if (match.includes(GITHUB_MAVEN_URL)) {
35
- return match;
36
- }
37
- return match.replace(/\n\}/, `
38
- ${GITHUB_GRADLE_REPOSITORY_SNIPPET} }`);
39
- });
40
- }
41
- return `${contents}
42
- repositories {${GITHUB_GRADLE_REPOSITORY_SNIPPET}}
43
- `;
44
- }
45
- function applyDependency(contents) {
46
- if (contents.includes("tools.amply:sdk-android")) {
47
- return contents;
48
- }
49
- const dependenciesBlock = /(dependencies\s*\{[\s\S]*?\n\})/;
50
- if (dependenciesBlock.test(contents)) {
51
- return contents.replace(dependenciesBlock, (match) => {
52
- if (match.includes("tools.amply:sdk-android")) {
53
- return match;
54
- }
55
- return match.replace(/\n\}/, `
56
- ${GRADLE_DEPENDENCY_LINE}
57
- }`);
58
- });
59
- }
60
- return `${contents}
61
- dependencies {
62
- ${GRADLE_DEPENDENCY_LINE}
63
- }
64
- `;
65
- }
66
- function addAmplyPackageRegistration(contents, language) {
67
- if (contents.includes("AmplyPackage")) {
68
- console.log("[Amply] AmplyPackage already registered in MainApplication");
69
- return contents;
70
- }
71
- if (!contents.includes("import com.amply.reactnative.AmplyPackage")) {
72
- contents = addImports(contents, ["com.amply.reactnative.AmplyPackage"], language === "java");
73
- console.log("[Amply] Added AmplyPackage import to MainApplication");
74
- }
75
- const amplyPackageCall = language === "java" ? "add(new AmplyPackage());" : "add(AmplyPackage())";
76
- const result = mergeContents({
77
- src: contents,
78
- newSrc: amplyPackageCall,
79
- tag: "amply-package-registration",
80
- anchor: /(?<=\.apply\s*\{[\s]*)/,
81
- offset: 0,
82
- comment: language === "java" ? "//" : "//"
83
- });
84
- if (result.didMerge) {
85
- console.log("[Amply] Registered AmplyPackage in getPackages() method");
86
- return result.contents;
87
- } else {
88
- console.warn("[Amply] Could not register AmplyPackage - anchor pattern not found");
89
- return contents;
90
- }
91
- }
92
- var withAmply = (config, props = {}) => {
93
- const { sdkVersion, useGithubFallbackRepo = false } = props;
94
- const version = sdkVersion != null ? sdkVersion : DEFAULT_SDK_VERSION;
95
- config = withGradleProperties(config, (gradleConfig) => {
96
- const exists = gradleConfig.modResults.find(
97
- (item) => item.type === "property" && item.key === "amplySdkVersion"
98
- );
99
- if (!exists) {
100
- gradleConfig.modResults.push({ type: "property", key: "amplySdkVersion", value: version });
101
- }
102
- return gradleConfig;
103
- });
104
- config = withProjectBuildGradle(config, (gradleConfig) => {
105
- if (useGithubFallbackRepo) {
106
- gradleConfig.modResults.contents = applyGithubMavenRepository(gradleConfig.modResults.contents);
107
- }
108
- gradleConfig.modResults.contents = applyDependency(gradleConfig.modResults.contents);
109
- return gradleConfig;
110
- });
111
- config = withSettingsGradle(config, (gradleConfig) => {
112
- const contents = gradleConfig.modResults.contents;
113
- if (contents.includes(":amplyreactnative")) {
114
- console.log("[Amply] Amply module already configured in settings.gradle");
115
- return gradleConfig;
116
- }
117
- const moduleConfig = "\n\ninclude ':amplyreactnative'\nproject(':amplyreactnative').projectDir = new File(rootProject.projectDir, '../../../android')";
118
- const lastIncludeBuildMatch = contents.lastIndexOf("includeBuild");
119
- let modified = contents;
120
- if (lastIncludeBuildMatch !== -1) {
121
- const nextNewlineAfterIncludeBuild = contents.indexOf("\n", lastIncludeBuildMatch);
122
- if (nextNewlineAfterIncludeBuild !== -1) {
123
- modified = contents.slice(0, nextNewlineAfterIncludeBuild + 1) + moduleConfig + contents.slice(nextNewlineAfterIncludeBuild + 1);
124
- console.log("[Amply] Added Amply module include to settings.gradle");
125
- }
126
- } else {
127
- modified = contents + moduleConfig;
128
- console.log("[Amply] Appended Amply module include to settings.gradle (no includeBuild found)");
129
- }
130
- gradleConfig.modResults.contents = modified;
131
- return gradleConfig;
132
- });
133
- config = withAppBuildGradle(config, (gradleConfig) => {
134
- const contents = gradleConfig.modResults.contents;
135
- if (contents.includes(":amplyreactnative")) {
136
- console.log("[Amply] Amply module already configured in app/build.gradle");
137
- return gradleConfig;
138
- }
139
- const depsStart = contents.indexOf("dependencies {");
140
- if (depsStart !== -1) {
141
- const firstImplAfterDeps = contents.indexOf("implementation", depsStart);
142
- if (firstImplAfterDeps !== -1) {
143
- const lineEnd = contents.indexOf("\n", firstImplAfterDeps);
144
- if (lineEnd !== -1) {
145
- const moduleImpl = "\n\n // Amply React Native module\n implementation project(':amplyreactnative')";
146
- gradleConfig.modResults.contents = contents.slice(0, lineEnd) + moduleImpl + contents.slice(lineEnd);
147
- console.log("[Amply] Added Amply module dependency to app/build.gradle");
148
- }
149
- }
150
- }
151
- return gradleConfig;
152
- });
153
- config = withMainApplication(config, async (config2) => {
154
- const { contents, language } = config2.modResults;
155
- const modified = addAmplyPackageRegistration(contents, language);
156
- config2.modResults.contents = modified;
157
- return config2;
158
- });
159
- return config;
160
- };
161
- var withAmply_default = withAmply;
162
-
163
- // plugin/index.ts
164
- var plugin = (config, props) => withAmply_default(config, props);
165
- var plugin_default = plugin;
166
- export {
167
- plugin_default as default
168
- };
169
- //# sourceMappingURL=index.mjs.map