@amplytools/react-native-amply-sdk 0.15.0 → 0.15.2

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 (61) hide show
  1. package/AmplyReactNative.podspec +1 -1
  2. package/android/build.gradle +1 -1
  3. package/dist/cjs/campaignTouch.js +44 -0
  4. package/dist/cjs/campaignTouch.js.map +1 -0
  5. package/dist/cjs/hooks/useAmplySystemEvents.js +60 -0
  6. package/dist/cjs/hooks/useAmplySystemEvents.js.map +1 -0
  7. package/dist/cjs/index.js +723 -0
  8. package/dist/cjs/index.js.map +1 -0
  9. package/dist/cjs/nativeModule.js +55 -0
  10. package/dist/cjs/nativeModule.js.map +1 -0
  11. package/dist/cjs/nativeSpecs/NativeAmplyModule.js +5 -0
  12. package/dist/cjs/nativeSpecs/NativeAmplyModule.js.map +1 -0
  13. package/dist/cjs/systemEventUtils.js +47 -0
  14. package/dist/cjs/systemEventUtils.js.map +1 -0
  15. package/dist/cjs/systemEvents.js +27 -0
  16. package/dist/cjs/systemEvents.js.map +1 -0
  17. package/docs/ARCHITECTURE.md +26 -19
  18. package/package.json +12 -6
  19. package/scripts/check-package.js +159 -0
  20. package/dist/index.js +0 -272
  21. package/dist/index.js.map +0 -1
  22. package/dist/index.mjs +0 -234
  23. package/dist/index.mjs.map +0 -1
  24. package/dist/plugin/index.d.ts +0 -6
  25. package/dist/plugin/index.d.ts.map +0 -1
  26. package/dist/plugin/index.js +0 -186
  27. package/dist/plugin/index.js.map +0 -1
  28. package/dist/plugin/index.mjs +0 -169
  29. package/dist/plugin/index.mjs.map +0 -1
  30. package/dist/plugin/withAmply.d.ts +0 -12
  31. package/dist/plugin/withAmply.d.ts.map +0 -1
  32. package/dist/src/__tests__/appLanguage.test.d.ts +0 -2
  33. package/dist/src/__tests__/appLanguage.test.d.ts.map +0 -1
  34. package/dist/src/__tests__/appLanguage.test.js +0 -211
  35. package/dist/src/__tests__/campaignResolved.test.d.ts +0 -2
  36. package/dist/src/__tests__/campaignResolved.test.d.ts.map +0 -1
  37. package/dist/src/__tests__/campaignResolved.test.js +0 -208
  38. package/dist/src/__tests__/gateRegistrationLifecycle.test.d.ts +0 -2
  39. package/dist/src/__tests__/gateRegistrationLifecycle.test.d.ts.map +0 -1
  40. package/dist/src/__tests__/gateRegistrationLifecycle.test.js +0 -215
  41. package/dist/src/__tests__/handleUrl.test.d.ts +0 -2
  42. package/dist/src/__tests__/handleUrl.test.d.ts.map +0 -1
  43. package/dist/src/__tests__/handleUrl.test.js +0 -114
  44. package/dist/src/__tests__/index.test.d.ts +0 -2
  45. package/dist/src/__tests__/index.test.d.ts.map +0 -1
  46. package/dist/src/__tests__/index.test.js +0 -204
  47. package/dist/src/__tests__/lastCampaignTouch.test.d.ts +0 -2
  48. package/dist/src/__tests__/lastCampaignTouch.test.d.ts.map +0 -1
  49. package/dist/src/__tests__/lastCampaignTouch.test.js +0 -119
  50. package/dist/src/__tests__/systemEventUtils.test.d.ts +0 -2
  51. package/dist/src/__tests__/systemEventUtils.test.d.ts.map +0 -1
  52. package/dist/src/__tests__/systemEventUtils.test.js +0 -72
  53. package/dist/tsconfig.tsbuildinfo +0 -1
  54. package/plugin/tsconfig.tsbuildinfo +0 -1
  55. package/src/__tests__/appLanguage.test.ts +0 -298
  56. package/src/__tests__/campaignResolved.test.ts +0 -294
  57. package/src/__tests__/gateRegistrationLifecycle.test.ts +0 -281
  58. package/src/__tests__/handleUrl.test.ts +0 -155
  59. package/src/__tests__/index.test.ts +0 -258
  60. package/src/__tests__/lastCampaignTouch.test.ts +0 -151
  61. package/src/__tests__/systemEventUtils.test.ts +0 -97
@@ -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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,4BAQO;AACP,0BAA8B;AAC9B,qBAA2B;AAE3B,IAAM,sBAAsB;AAC5B,IAAM,mBAAmB;AACzB,IAAM,+BAA+B;AAAA,EACnC,UAAU;AAAA,EACV,UAAU;AACZ;AAEA,IAAM,mCAAmC;AAAA;AAAA,mBAEtB,gBAAgB;AAAA;AAAA,yCAEM,6BAA6B,QAAQ,wBAAwB,6BAA6B,QAAQ;AAAA,yCAClG,6BAA6B,QAAQ,wBAAwB,6BAA6B,QAAQ;AAAA;AAAA;AAAA;AAK3I,IAAM,yBAAyB,+CAA+C,GAAG,sFAAsF,mBAAmB;AAE1L,SAAS,2BAA2B,UAA0B;AAC5D,MAAI,SAAS,SAAS,gBAAgB,GAAG;AACvC,WAAO;AAAA,EACT;AAEA,QAAM,oBAAoB;AAC1B,MAAI,kBAAkB,KAAK,QAAQ,GAAG;AACpC,WAAO,SAAS,QAAQ,mBAAmB,WAAS;AAClD,UAAI,MAAM,SAAS,gBAAgB,GAAG;AACpC,eAAO;AAAA,MACT;AACA,aAAO,MAAM,QAAQ,QAAQ;AAAA,EAAK,gCAAgC,OAAO;AAAA,IAC3E,CAAC;AAAA,EACH;AAGA,SAAO,GAAG,QAAQ;AAAA,gBAAmB,gCAAgC;AAAA;AACvE;AAEA,SAAS,gBAAgB,UAA0B;AACjD,MAAI,SAAS,SAAS,yBAAyB,GAAG;AAChD,WAAO;AAAA,EACT;AAEA,QAAM,oBAAoB;AAC1B,MAAI,kBAAkB,KAAK,QAAQ,GAAG;AACpC,WAAO,SAAS,QAAQ,mBAAmB,WAAS;AAClD,UAAI,MAAM,SAAS,yBAAyB,GAAG;AAC7C,eAAO;AAAA,MACT;AACA,aAAO,MAAM,QAAQ,QAAQ;AAAA,EAAK,sBAAsB;AAAA,EAAK;AAAA,IAC/D,CAAC;AAAA,EACH;AAEA,SAAO,GAAG,QAAQ;AAAA;AAAA,EAAqB,sBAAsB;AAAA;AAAA;AAC/D;AAWA,SAAS,4BAA4B,UAAkB,UAAiC;AAEtF,MAAI,SAAS,SAAS,cAAc,GAAG;AACrC,YAAQ,IAAI,4DAA4D;AACxE,WAAO;AAAA,EACT;AAGA,MAAI,CAAC,SAAS,SAAS,2CAA2C,GAAG;AACnE,mBAAW,2BAAW,UAAU,CAAC,oCAAoC,GAAG,aAAa,MAAM;AAC3F,YAAQ,IAAI,sDAAsD;AAAA,EACpE;AAGA,QAAM,mBAAmB,aAAa,SAAS,6BAA6B;AAI5E,QAAM,aAAS,mCAAc;AAAA,IAC3B,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,aAAa,SAAS,OAAO;AAAA,EACxC,CAAC;AAED,MAAI,OAAO,UAAU;AACnB,YAAQ,IAAI,yDAAyD;AACrE,WAAO,OAAO;AAAA,EAChB,OAAO;AACL,YAAQ,KAAK,oEAAoE;AACjF,WAAO;AAAA,EACT;AACF;AAEA,IAAM,YAAgD,CAAC,QAAQ,QAAQ,CAAC,MAAM;AAC5E,QAAM,EAAC,YAAY,wBAAwB,MAAK,IAAI;AACpD,QAAM,UAAU,kCAAc;AAE9B,eAAS,4CAAqB,QAAQ,kBAAgB;AACpD,UAAM,SAAS,aAAa,WAAW;AAAA,MACrC,UAAQ,KAAK,SAAS,cAAc,KAAK,QAAQ;AAAA,IACnD;AACA,QAAI,CAAC,QAAQ;AACX,mBAAa,WAAW,KAAK,EAAE,MAAM,YAAY,KAAK,mBAAmB,OAAO,QAAQ,CAAC;AAAA,IAC3F;AACA,WAAO;AAAA,EACT,CAAC;AAED,eAAS,8CAAuB,QAAQ,kBAAgB;AACtD,QAAI,uBAAuB;AACzB,mBAAa,WAAW,WAAW,2BAA2B,aAAa,WAAW,QAAQ;AAAA,IAChG;AACA,iBAAa,WAAW,WAAW,gBAAgB,aAAa,WAAW,QAAQ;AACnF,WAAO;AAAA,EACT,CAAC;AAGD,eAAS,0CAAmB,QAAQ,kBAAgB;AAClD,UAAM,WAAW,aAAa,WAAW;AAGzC,QAAI,SAAS,SAAS,mBAAmB,GAAG;AAC1C,cAAQ,IAAI,4DAA4D;AACxE,aAAO;AAAA,IACT;AAGA,UAAM,eAAe;AAErB,UAAM,wBAAwB,SAAS,YAAY,cAAc;AACjE,QAAI,WAAW;AAEf,QAAI,0BAA0B,IAAI;AAChC,YAAM,+BAA+B,SAAS,QAAQ,MAAM,qBAAqB;AACjF,UAAI,iCAAiC,IAAI;AACvC,mBACE,SAAS,MAAM,GAAG,+BAA+B,CAAC,IAClD,eACA,SAAS,MAAM,+BAA+B,CAAC;AACjD,gBAAQ,IAAI,uDAAuD;AAAA,MACrE;AAAA,IACF,OAAO;AAEL,iBAAW,WAAW;AACtB,cAAQ,IAAI,kFAAkF;AAAA,IAChG;AAEA,iBAAa,WAAW,WAAW;AACnC,WAAO;AAAA,EACT,CAAC;AAGD,eAAS,0CAAmB,QAAQ,kBAAgB;AAClD,UAAM,WAAW,aAAa,WAAW;AAGzC,QAAI,SAAS,SAAS,mBAAmB,GAAG;AAC1C,cAAQ,IAAI,6DAA6D;AACzE,aAAO;AAAA,IACT;AAGA,UAAM,YAAY,SAAS,QAAQ,gBAAgB;AACnD,QAAI,cAAc,IAAI;AACpB,YAAM,qBAAqB,SAAS,QAAQ,kBAAkB,SAAS;AACvE,UAAI,uBAAuB,IAAI;AAC7B,cAAM,UAAU,SAAS,QAAQ,MAAM,kBAAkB;AACzD,YAAI,YAAY,IAAI;AAClB,gBAAM,aAAa;AACnB,uBAAa,WAAW,WACtB,SAAS,MAAM,GAAG,OAAO,IACzB,aACA,SAAS,MAAM,OAAO;AACxB,kBAAQ,IAAI,2DAA2D;AAAA,QACzE;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT,CAAC;AAID,eAAS,2CAAoB,QAAQ,OAAMA,YAAU;AACnD,UAAM,EAAE,UAAU,SAAS,IAAIA,QAAO;AACtC,UAAM,WAAW,4BAA4B,UAAU,QAAQ;AAC/D,IAAAA,QAAO,WAAW,WAAW;AAC7B,WAAOA;AAAA,EACT,CAAC;AAED,SAAO;AACT;AAEA,IAAO,oBAAQ;;;ADjNf,IAAM,SAAgD,CAAC,QAAQ,UAC7D,kBAAU,QAAQ,KAAK;AAEzB,IAAO,iBAAQ;","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
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../plugin/withAmply.ts","../../plugin/index.ts"],"sourcesContent":["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","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"],"mappings":"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","names":["config"]}
@@ -1,12 +0,0 @@
1
- import { ConfigPlugin } from '@expo/config-plugins';
2
- type WithAmplyPluginProps = {
3
- sdkVersion?: string;
4
- /**
5
- * Optional escape hatch for internal builds that still rely on GitHub Packages.
6
- * Public installs resolve from Maven Central without any additional repositories.
7
- */
8
- useGithubFallbackRepo?: boolean;
9
- };
10
- declare const withAmply: ConfigPlugin<WithAmplyPluginProps>;
11
- export default withAmply;
12
- //# sourceMappingURL=withAmply.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"withAmply.d.ts","sourceRoot":"","sources":["../../plugin/withAmply.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAOb,MAAM,sBAAsB,CAAC;AA4D9B,KAAK,oBAAoB,GAAG;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAsCF,QAAA,MAAM,SAAS,EAAE,YAAY,CAAC,oBAAoB,CAiGjD,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=appLanguage.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"appLanguage.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/appLanguage.test.ts"],"names":[],"mappings":"AAySA,OAAO,EAAE,CAAC"}
@@ -1,211 +0,0 @@
1
- function createNativeModule() {
2
- let initialized = false;
3
- return {
4
- initialize: jest.fn(async () => {
5
- initialized = true;
6
- }),
7
- isInitialized: jest.fn(() => initialized),
8
- setAppLanguage: jest.fn(),
9
- setUserId: jest.fn(),
10
- addListener: jest.fn(),
11
- removeListeners: jest.fn(),
12
- onSystemEvent: jest.fn(() => ({ remove: jest.fn() })),
13
- onDeepLink: jest.fn(() => ({ remove: jest.fn() })),
14
- onCampaignPresent: jest.fn(() => ({ remove: jest.fn() })),
15
- /** Test-only: pretend the SDK is (or is not) up without going through initialize. */
16
- setInitialized(value) {
17
- initialized = value;
18
- },
19
- };
20
- }
21
- const KEYS = { appId: 'id', apiKeyPublic: 'public', apiKeySecret: 'secret' };
22
- function load() {
23
- let Amply;
24
- const native = createNativeModule();
25
- jest.isolateModules(() => {
26
- // eslint-disable-next-line @typescript-eslint/no-var-requires
27
- require('../nativeModule').__setNativeModule(native);
28
- // eslint-disable-next-line @typescript-eslint/no-var-requires
29
- Amply = require('../index');
30
- });
31
- return { Amply, native };
32
- }
33
- describe('setAppLanguage after initialization', () => {
34
- it.each(['pt_BR', 'zh-TW', 'FR', 'Français'])('forwards %p to the native SDK verbatim — parsing and the warning for junk are the SDK’s job', tag => {
35
- const { Amply, native } = load();
36
- native.setInitialized(true);
37
- Amply.setAppLanguage(tag);
38
- expect(native.setAppLanguage).toHaveBeenCalledTimes(1);
39
- expect(native.setAppLanguage).toHaveBeenCalledWith(tag);
40
- });
41
- it('forwards null, which returns the SDK to automatic detection', () => {
42
- const { Amply, native } = load();
43
- native.setInitialized(true);
44
- Amply.setAppLanguage(null);
45
- expect(native.setAppLanguage).toHaveBeenCalledWith(null);
46
- });
47
- it('is on the default export as well', () => {
48
- const { Amply, native } = load();
49
- native.setInitialized(true);
50
- Amply.default.setAppLanguage('de');
51
- expect(native.setAppLanguage).toHaveBeenCalledWith('de');
52
- });
53
- });
54
- describe('appLanguage in the initialization config', () => {
55
- it('is passed through to the native initialize', async () => {
56
- const { Amply, native } = load();
57
- await Amply.initialize({ ...KEYS, appLanguage: 'pt_BR' });
58
- expect(native.initialize).toHaveBeenCalledWith(expect.objectContaining({ appLanguage: 'pt_BR' }));
59
- expect(native.setAppLanguage).not.toHaveBeenCalled();
60
- });
61
- it('is left out of the native config when the caller did not give one', async () => {
62
- const { Amply, native } = load();
63
- await Amply.initialize(KEYS);
64
- const [config] = native.initialize.mock.calls[0];
65
- expect(config).not.toHaveProperty('appLanguage');
66
- });
67
- });
68
- describe('setAppLanguage before initialization', () => {
69
- it('is not sent to a native SDK that is not up yet', () => {
70
- const { Amply, native } = load();
71
- Amply.setAppLanguage('fr');
72
- expect(native.setAppLanguage).not.toHaveBeenCalled();
73
- });
74
- it('reaches the SDK as the config appLanguage when initialize names none', async () => {
75
- const { Amply, native } = load();
76
- Amply.setAppLanguage('fr');
77
- await Amply.initialize(KEYS);
78
- expect(native.initialize).toHaveBeenCalledWith(expect.objectContaining({ appLanguage: 'fr' }));
79
- expect(native.setAppLanguage).not.toHaveBeenCalled();
80
- });
81
- it('keeps only the last of several calls', async () => {
82
- const { Amply, native } = load();
83
- Amply.setAppLanguage('fr');
84
- Amply.setAppLanguage('de');
85
- await Amply.initialize(KEYS);
86
- expect(native.initialize).toHaveBeenCalledWith(expect.objectContaining({ appLanguage: 'de' }));
87
- });
88
- it('loses to an appLanguage given to the later initialize call', async () => {
89
- const { Amply, native } = load();
90
- Amply.setAppLanguage('fr');
91
- await Amply.initialize({ ...KEYS, appLanguage: 'de' });
92
- expect(native.initialize).toHaveBeenCalledWith(expect.objectContaining({ appLanguage: 'de' }));
93
- expect(native.setAppLanguage).not.toHaveBeenCalled();
94
- });
95
- it('wins over a blank appLanguage in the config, which names no language', async () => {
96
- const { Amply, native } = load();
97
- Amply.setAppLanguage('fr');
98
- await Amply.initialize({ ...KEYS, appLanguage: ' ' });
99
- expect(native.initialize).toHaveBeenCalledWith(expect.objectContaining({ appLanguage: 'fr' }));
100
- });
101
- // null cannot travel in the config — there it means "leave the setting alone" — so a parked
102
- // clear is applied as a call once the SDK is up.
103
- it('applies a parked null right after initialization', async () => {
104
- const { Amply, native } = load();
105
- Amply.setAppLanguage(null);
106
- await Amply.initialize(KEYS);
107
- const [config] = native.initialize.mock.calls[0];
108
- expect(config).not.toHaveProperty('appLanguage');
109
- expect(native.setAppLanguage).toHaveBeenCalledTimes(1);
110
- expect(native.setAppLanguage).toHaveBeenCalledWith(null);
111
- });
112
- it('drops a parked null when the later initialize names a language', async () => {
113
- const { Amply, native } = load();
114
- Amply.setAppLanguage(null);
115
- await Amply.initialize({ ...KEYS, appLanguage: 'de' });
116
- expect(native.initialize).toHaveBeenCalledWith(expect.objectContaining({ appLanguage: 'de' }));
117
- expect(native.setAppLanguage).not.toHaveBeenCalled();
118
- });
119
- it('survives an initialize that fails, and is used by the retry', async () => {
120
- const { Amply, native } = load();
121
- Amply.setAppLanguage('fr');
122
- native.initialize.mockImplementationOnce(async () => {
123
- throw new Error('AMP_INIT_FAILED');
124
- });
125
- await expect(Amply.initialize(KEYS)).rejects.toThrow('AMP_INIT_FAILED');
126
- await Amply.initialize(KEYS);
127
- expect(native.initialize).toHaveBeenLastCalledWith(expect.objectContaining({ appLanguage: 'fr' }));
128
- });
129
- it('survives an initialize rejected for a missing key', async () => {
130
- const { Amply, native } = load();
131
- const error = jest.spyOn(console, 'error').mockImplementation(() => { });
132
- Amply.setAppLanguage('fr');
133
- await expect(Amply.initialize({ ...KEYS, apiKeySecret: '' })).rejects.toMatchObject({
134
- code: 'AMP_INVALID_CONFIG',
135
- });
136
- await Amply.initialize(KEYS);
137
- expect(native.initialize).toHaveBeenCalledTimes(1);
138
- expect(native.initialize).toHaveBeenCalledWith(expect.objectContaining({ appLanguage: 'fr' }));
139
- error.mockRestore();
140
- });
141
- });
142
- describe('setAppLanguage while initialize is in flight', () => {
143
- it('is applied after initialization, so it wins over the config value it came after', async () => {
144
- const { Amply, native } = load();
145
- let finishInit;
146
- native.initialize.mockImplementationOnce(() => new Promise(resolve => {
147
- finishInit = () => {
148
- native.setInitialized(true);
149
- resolve();
150
- };
151
- }));
152
- const init = Amply.initialize({ ...KEYS, appLanguage: 'de' });
153
- Amply.setAppLanguage('fr');
154
- expect(native.setAppLanguage).not.toHaveBeenCalled();
155
- finishInit();
156
- await init;
157
- expect(native.initialize).toHaveBeenCalledWith(expect.objectContaining({ appLanguage: 'de' }));
158
- expect(native.setAppLanguage).toHaveBeenCalledTimes(1);
159
- expect(native.setAppLanguage).toHaveBeenCalledWith('fr');
160
- });
161
- // The native SDK reports itself up before the initialize promise settles, so a call made in
162
- // that window goes straight through. A value held from before initialize is older than it and
163
- // must not be replayed over it when the promise finally resolves.
164
- function hangInitialize(native) {
165
- const control = { comeUp: () => { }, resolve: () => { }, reject: (_error) => { } };
166
- native.initialize.mockImplementationOnce(() => new Promise((resolve, reject) => {
167
- control.comeUp = () => native.setInitialized(true);
168
- control.resolve = resolve;
169
- control.reject = reject;
170
- }));
171
- return control;
172
- }
173
- it('does not replay an older held null over a call the SDK already received', async () => {
174
- const { Amply, native } = load();
175
- Amply.setAppLanguage(null);
176
- const init = hangInitialize(native);
177
- const pending = Amply.initialize(KEYS);
178
- init.comeUp();
179
- Amply.setAppLanguage('fr');
180
- init.resolve();
181
- await pending;
182
- expect(native.setAppLanguage.mock.calls).toEqual([['fr']]);
183
- });
184
- it('does not replay an older held tag over a call the SDK already received', async () => {
185
- const { Amply, native } = load();
186
- const init = hangInitialize(native);
187
- const pending = Amply.initialize(KEYS);
188
- Amply.setAppLanguage('de');
189
- init.comeUp();
190
- Amply.setAppLanguage('fr');
191
- init.resolve();
192
- await pending;
193
- expect(native.setAppLanguage.mock.calls).toEqual([['fr']]);
194
- });
195
- it('does not hand a superseded held tag to the retry of a failed initialize', async () => {
196
- const { Amply, native } = load();
197
- Amply.setAppLanguage('de');
198
- const init = hangInitialize(native);
199
- const pending = Amply.initialize(KEYS);
200
- init.comeUp();
201
- Amply.setAppLanguage('fr');
202
- init.reject(new Error('AMP_INIT_FAILED'));
203
- await expect(pending).rejects.toThrow('AMP_INIT_FAILED');
204
- native.setInitialized(false);
205
- await Amply.initialize(KEYS);
206
- const [retryConfig] = native.initialize.mock.calls[1];
207
- expect(retryConfig).not.toHaveProperty('appLanguage');
208
- expect(native.setAppLanguage.mock.calls).toEqual([['fr']]);
209
- });
210
- });
211
- export {};
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=campaignResolved.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"campaignResolved.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/campaignResolved.test.ts"],"names":[],"mappings":""}