react-native-notify-kit 9.7.0 → 10.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/README.md +140 -6
  2. package/RNNotifeeCore.podspec +2 -0
  3. package/android/src/androidTest/java/app/notifee/core/RebootRecoveryTest.java +94 -2
  4. package/android/src/main/AndroidManifest.xml +8 -7
  5. package/android/src/main/java/app/notifee/core/NotificationManager.java +2 -0
  6. package/android/src/main/java/app/notifee/core/model/NotificationAndroidModel.java +8 -3
  7. package/android/src/main/java/app/notifee/core/utility/ResourceUtils.java +28 -0
  8. package/android/src/test/java/app/notifee/core/model/NotificationAndroidModelSmallIconFallbackTest.java +74 -0
  9. package/android/src/test/java/app/notifee/core/utility/ResourceUtilsFallbackIconTest.java +116 -0
  10. package/cli/bin/react-native-notify-kit +2 -0
  11. package/cli/dist/cli.bundle.js +20834 -0
  12. package/cli/dist/cli.d.ts +2 -0
  13. package/cli/dist/cli.js +87 -0
  14. package/cli/dist/cli.js.map +1 -0
  15. package/cli/dist/commands/initNse.d.ts +12 -0
  16. package/cli/dist/commands/initNse.js +212 -0
  17. package/cli/dist/commands/initNse.js.map +1 -0
  18. package/cli/dist/lib/detectProject.d.ts +15 -0
  19. package/cli/dist/lib/detectProject.js +156 -0
  20. package/cli/dist/lib/detectProject.js.map +1 -0
  21. package/cli/dist/lib/logger.d.ts +4 -0
  22. package/cli/dist/lib/logger.js +24 -0
  23. package/cli/dist/lib/logger.js.map +1 -0
  24. package/cli/dist/lib/patchPodfile.d.ts +12 -0
  25. package/cli/dist/lib/patchPodfile.js +143 -0
  26. package/cli/dist/lib/patchPodfile.js.map +1 -0
  27. package/cli/dist/lib/patchXcodeProject.d.ts +25 -0
  28. package/cli/dist/lib/patchXcodeProject.js +239 -0
  29. package/cli/dist/lib/patchXcodeProject.js.map +1 -0
  30. package/cli/dist/lib/writeTemplates.d.ts +11 -0
  31. package/cli/dist/lib/writeTemplates.js +82 -0
  32. package/cli/dist/lib/writeTemplates.js.map +1 -0
  33. package/cli/dist/templates/Info.plist.tmpl +29 -0
  34. package/cli/dist/templates/NotificationService.swift.tmpl +32 -0
  35. package/cli/dist/templates/NotifyKitNSE.entitlements.tmpl +6 -0
  36. package/cli/dist/templates/templates/Info.plist.tmpl +29 -0
  37. package/cli/dist/templates/templates/NotificationService.swift.tmpl +73 -0
  38. package/cli/dist/templates/templates/NotifyKitNSE.entitlements.tmpl +6 -0
  39. package/dist/NotifeeApiModule.d.ts +17 -0
  40. package/dist/NotifeeApiModule.js +66 -1
  41. package/dist/NotifeeApiModule.js.map +1 -1
  42. package/dist/fcm/index.d.ts +4 -0
  43. package/dist/fcm/index.js +3 -0
  44. package/dist/fcm/index.js.map +1 -0
  45. package/dist/fcm/parseFcmPayload.d.ts +16 -0
  46. package/dist/fcm/parseFcmPayload.js +37 -0
  47. package/dist/fcm/parseFcmPayload.js.map +1 -0
  48. package/dist/fcm/reconstructNotification.d.ts +8 -0
  49. package/dist/fcm/reconstructNotification.js +167 -0
  50. package/dist/fcm/reconstructNotification.js.map +1 -0
  51. package/dist/fcm/types.d.ts +51 -0
  52. package/dist/fcm/types.js +6 -0
  53. package/dist/fcm/types.js.map +1 -0
  54. package/dist/index.d.ts +2 -0
  55. package/dist/index.js +1 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/types/Module.d.ts +21 -0
  58. package/dist/validators/validateTrigger.js +16 -0
  59. package/dist/validators/validateTrigger.js.map +1 -1
  60. package/dist/version.d.ts +1 -1
  61. package/dist/version.js +1 -1
  62. package/dist/version.js.map +1 -1
  63. package/package.json +38 -3
  64. package/server/README.md +129 -0
  65. package/server/dist/android.d.ts +8 -0
  66. package/server/dist/android.d.ts.map +1 -0
  67. package/server/dist/android.js +20 -0
  68. package/server/dist/android.js.map +1 -0
  69. package/server/dist/buildPayload.d.ts +3 -0
  70. package/server/dist/buildPayload.d.ts.map +1 -0
  71. package/server/dist/buildPayload.js +82 -0
  72. package/server/dist/buildPayload.js.map +1 -0
  73. package/server/dist/index.d.ts +6 -0
  74. package/server/dist/index.d.ts.map +1 -0
  75. package/server/dist/index.js +12 -0
  76. package/server/dist/index.js.map +1 -0
  77. package/server/dist/ios.d.ts +11 -0
  78. package/server/dist/ios.d.ts.map +1 -0
  79. package/server/dist/ios.js +61 -0
  80. package/server/dist/ios.js.map +1 -0
  81. package/server/dist/serialize.d.ts +11 -0
  82. package/server/dist/serialize.d.ts.map +1 -0
  83. package/server/dist/serialize.js +32 -0
  84. package/server/dist/serialize.js.map +1 -0
  85. package/server/dist/types.d.ts +2 -0
  86. package/server/dist/types.d.ts.map +1 -0
  87. package/server/dist/types.js +3 -0
  88. package/server/dist/types.js.map +1 -0
  89. package/server/dist/validation.d.ts +3 -0
  90. package/server/dist/validation.d.ts.map +1 -0
  91. package/server/dist/validation.js +101 -0
  92. package/server/dist/validation.js.map +1 -0
  93. package/server/package.json +5 -0
  94. package/server/src/android.ts +27 -0
  95. package/server/src/buildPayload.ts +91 -0
  96. package/server/src/index.ts +12 -0
  97. package/server/src/ios.ts +88 -0
  98. package/server/src/serialize.ts +39 -0
  99. package/server/src/types.ts +24 -0
  100. package/server/src/validation.ts +134 -0
  101. package/server/tsconfig.json +25 -0
  102. package/src/NotifeeApiModule.ts +80 -1
  103. package/src/fcm/index.ts +4 -0
  104. package/src/fcm/parseFcmPayload.ts +56 -0
  105. package/src/fcm/reconstructNotification.ts +201 -0
  106. package/src/fcm/types.ts +57 -0
  107. package/src/index.ts +2 -0
  108. package/src/internal/fcmContract.d.ts +150 -0
  109. package/src/types/Module.ts +23 -0
  110. package/src/validators/validateTrigger.ts +24 -0
  111. package/src/version.ts +1 -1
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const commander_1 = require("commander");
40
+ const initNse_1 = require("./commands/initNse");
41
+ const logger = __importStar(require("./lib/logger"));
42
+ // Resolve version from whichever package.json is reachable: the CLI's own
43
+ // (dev context) or the parent RN package's (prepack/published context).
44
+ function resolveVersion() {
45
+ for (const rel of ['../package.json', '../../../package.json']) {
46
+ try {
47
+ const p = path.resolve(__dirname, rel);
48
+ if (fs.existsSync(p)) {
49
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
50
+ return require(p).version;
51
+ }
52
+ }
53
+ catch {
54
+ // continue
55
+ }
56
+ }
57
+ return '0.0.0';
58
+ }
59
+ const program = new commander_1.Command();
60
+ program
61
+ .name('react-native-notify-kit')
62
+ .description('CLI tools for react-native-notify-kit')
63
+ .version(resolveVersion());
64
+ program
65
+ .command('init-nse')
66
+ .description('Scaffold an iOS Notification Service Extension')
67
+ .option('--ios-path <path>', 'Path to iOS project directory')
68
+ .option('--target-name <name>', 'NSE target name', 'NotifyKitNSE')
69
+ .option('--bundle-suffix <str>', 'Bundle ID suffix', '.NotifyKitNSE')
70
+ .option('-f, --force', 'Overwrite existing NSE files')
71
+ .option('-n, --dry-run', 'Print actions without writing')
72
+ .action(async (cmdOpts) => {
73
+ await (0, initNse_1.initNse)({
74
+ iosPath: cmdOpts.iosPath,
75
+ targetName: cmdOpts.targetName ?? 'NotifyKitNSE',
76
+ bundleSuffix: cmdOpts.bundleSuffix ?? '.NotifyKitNSE',
77
+ force: Boolean(cmdOpts.force),
78
+ dryRun: Boolean(cmdOpts.dryRun),
79
+ });
80
+ });
81
+ (async () => {
82
+ await program.parseAsync();
83
+ })().catch((err) => {
84
+ logger.error(err.message ?? String(err));
85
+ process.exit(2);
86
+ });
87
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,uCAAyB;AACzB,2CAA6B;AAC7B,yCAAoC;AACpC,gDAA6C;AAC7C,qDAAuC;AAEvC,0EAA0E;AAC1E,wEAAwE;AACxE,SAAS,cAAc;IACrB,KAAK,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACvC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,iEAAiE;gBACjE,OAAQ,OAAO,CAAC,CAAC,CAAyB,CAAC,OAAO,CAAC;YACrD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,WAAW;QACb,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,yBAAyB,CAAC;KAC/B,WAAW,CAAC,uCAAuC,CAAC;KACpD,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;AAE7B,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,mBAAmB,EAAE,+BAA+B,CAAC;KAC5D,MAAM,CAAC,sBAAsB,EAAE,iBAAiB,EAAE,cAAc,CAAC;KACjE,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,EAAE,eAAe,CAAC;KACpE,MAAM,CAAC,aAAa,EAAE,8BAA8B,CAAC;KACrD,MAAM,CAAC,eAAe,EAAE,+BAA+B,CAAC;KACxD,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;IACjD,MAAM,IAAA,iBAAO,EAAC;QACZ,OAAO,EAAE,OAAO,CAAC,OAA6B;QAC9C,UAAU,EAAG,OAAO,CAAC,UAAqB,IAAI,cAAc;QAC5D,YAAY,EAAG,OAAO,CAAC,YAAuB,IAAI,eAAe;QACjE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7B,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;KAChC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,CAAC,KAAK,IAAI,EAAE;IACV,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;IACxB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface InitNseOptions {
2
+ iosPath?: string;
3
+ targetName: string;
4
+ bundleSuffix: string;
5
+ force: boolean;
6
+ dryRun: boolean;
7
+ }
8
+ /**
9
+ * Orchestrates the init-nse command: detect project → check existing →
10
+ * backup → write templates → patch Podfile → patch .pbxproj → summary.
11
+ */
12
+ export declare function initNse(opts: InitNseOptions): Promise<void>;
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.initNse = initNse;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const xcode_1 = __importDefault(require("xcode"));
43
+ const detectProject_1 = require("../lib/detectProject");
44
+ const writeTemplates_1 = require("../lib/writeTemplates");
45
+ const patchPodfile_1 = require("../lib/patchPodfile");
46
+ const patchXcodeProject_1 = require("../lib/patchXcodeProject");
47
+ const logger = __importStar(require("../lib/logger"));
48
+ /**
49
+ * Orchestrates the init-nse command: detect project → check existing →
50
+ * backup → write templates → patch Podfile → patch .pbxproj → summary.
51
+ */
52
+ async function initNse(opts) {
53
+ const { targetName = 'NotifyKitNSE', bundleSuffix = '.NotifyKitNSE', force = false, dryRun = false, } = opts;
54
+ // 0. Validate target name (prevents Podfile/pbxproj injection via special chars)
55
+ if (!/^[A-Za-z0-9_\-.]+$/.test(targetName)) {
56
+ logger.error(`Invalid target name '${targetName}'. Must match [A-Za-z0-9_-.]\n` +
57
+ ' Target names can only contain letters, digits, underscores, hyphens, and dots.');
58
+ process.exit(1);
59
+ }
60
+ // 0b. Validate bundle suffix (prevents pbxproj injection via quotes/newlines)
61
+ if (!/^\.[A-Za-z0-9\-.]+$/.test(bundleSuffix)) {
62
+ logger.error(`Invalid bundle suffix '${bundleSuffix}'. Must start with '.' and contain only letters, digits, hyphens, and dots.`);
63
+ process.exit(1);
64
+ }
65
+ // 1. Detect project
66
+ let projectInfo;
67
+ try {
68
+ projectInfo = (0, detectProject_1.detectIosProject)(opts.iosPath);
69
+ }
70
+ catch (e) {
71
+ logger.error(e instanceof Error ? e.message : String(e));
72
+ process.exit(1);
73
+ }
74
+ const absIosDir = path.resolve(projectInfo.iosDir);
75
+ logger.success(`Detected iOS project at ${projectInfo.xcodeProjectPath}`);
76
+ // 2. Derive bundle ID
77
+ const bundleId = (0, detectProject_1.deriveBundleId)(projectInfo.parentBundleId, bundleSuffix, projectInfo.parentTargetName);
78
+ if (projectInfo.parentBundleId?.includes('$(') &&
79
+ (bundleId.includes('$(') || bundleId.includes('${'))) {
80
+ logger.warn(`Parent bundle ID uses a variable: ${projectInfo.parentBundleId}\n` +
81
+ ' The NSE bundle ID will need to be set manually in Xcode.');
82
+ }
83
+ logger.success(`Bundle ID: ${projectInfo.parentBundleId ?? '(variable)'} → ${bundleId}`);
84
+ // 3. Check existing NSE — check BOTH filesystem AND pbxproj (Rule F3)
85
+ const targetDir = path.join(projectInfo.iosDir, targetName);
86
+ const dirExists = fs.existsSync(targetDir);
87
+ const pbxprojHasTarget = checkPbxprojTarget(projectInfo.pbxprojPath, targetName);
88
+ if ((dirExists || pbxprojHasTarget) && !force) {
89
+ const where = dirExists && pbxprojHasTarget
90
+ ? `directory ${targetDir} and .pbxproj`
91
+ : dirExists
92
+ ? `directory ${targetDir}`
93
+ : '.pbxproj';
94
+ logger.error(`NSE target '${targetName}' already exists in ${where}.\n` +
95
+ ' Use --force to overwrite or --target-name to use a different name.');
96
+ process.exit(1);
97
+ }
98
+ if (dryRun) {
99
+ logger.info('[DRY RUN] Would perform the following actions:');
100
+ logger.info(` iOS project: ${absIosDir}`);
101
+ logger.info(` Target name: ${targetName}`);
102
+ logger.info(` NSE bundle ID: ${bundleId}`);
103
+ logger.info(` Create: ${path.join(absIosDir, targetName, 'NotificationService.swift')}`);
104
+ logger.info(` Create: ${path.join(absIosDir, targetName, 'Info.plist')}`);
105
+ logger.info(` Create: ${path.join(absIosDir, targetName, `${targetName}.entitlements`)}`);
106
+ logger.info(` Patch: ${path.join(absIosDir, 'Podfile')}`);
107
+ logger.info(` Patch: ${projectInfo.pbxprojPath}`);
108
+ return;
109
+ }
110
+ // 4. Create backups (PID-stamped to avoid collision with parallel runs)
111
+ const podfilePath = path.join(projectInfo.iosDir, 'Podfile');
112
+ const backups = [];
113
+ const templateDirCreated = !dirExists; // Track if WE created the dir (for rollback)
114
+ const bakSuffix = `.bak.${process.pid}.${Date.now()}`;
115
+ try {
116
+ if (fs.existsSync(podfilePath)) {
117
+ const podfileBackup = podfilePath + bakSuffix;
118
+ fs.copyFileSync(podfilePath, podfileBackup);
119
+ backups.push({ original: podfilePath, backup: podfileBackup });
120
+ }
121
+ const pbxprojBackup = projectInfo.pbxprojPath + bakSuffix;
122
+ fs.copyFileSync(projectInfo.pbxprojPath, pbxprojBackup);
123
+ backups.push({ original: projectInfo.pbxprojPath, backup: pbxprojBackup });
124
+ // 5. Write templates
125
+ const written = (0, writeTemplates_1.writeTemplates)({
126
+ iosDir: projectInfo.iosDir,
127
+ targetName,
128
+ bundleId,
129
+ force,
130
+ });
131
+ for (const f of written) {
132
+ logger.success(`Created ${f}`);
133
+ }
134
+ // 6. Patch Podfile
135
+ if (fs.existsSync(podfilePath)) {
136
+ const patched = (0, patchPodfile_1.patchPodfile)(podfilePath, targetName, dryRun);
137
+ if (patched) {
138
+ logger.success(`Updated ${podfilePath} (added ${targetName} target)`);
139
+ }
140
+ else {
141
+ logger.info(`Podfile already contains ${targetName} target (skipped)`);
142
+ }
143
+ }
144
+ else {
145
+ logger.warn('No Podfile found — skipping Podfile patch');
146
+ }
147
+ // 7. Patch .pbxproj
148
+ const xcodePatched = (0, patchXcodeProject_1.patchXcodeProject)({
149
+ pbxprojPath: projectInfo.pbxprojPath,
150
+ targetName,
151
+ bundleId,
152
+ iosDir: projectInfo.iosDir,
153
+ dryRun,
154
+ });
155
+ if (xcodePatched) {
156
+ logger.success(`Updated ${projectInfo.xcodeProjectPath} (added ${targetName} target, signing inherited)`);
157
+ }
158
+ else {
159
+ logger.info(`.pbxproj already contains ${targetName} target (skipped)`);
160
+ }
161
+ // 8. Success — delete backups (guard against concurrent removal)
162
+ for (const { backup } of backups) {
163
+ if (fs.existsSync(backup)) {
164
+ fs.unlinkSync(backup);
165
+ }
166
+ }
167
+ // 9. Print next steps
168
+ console.log('');
169
+ console.log('Next steps:');
170
+ console.log(' 1. cd ios && pod install');
171
+ console.log(' 2. Open the .xcworkspace in Xcode');
172
+ console.log(` 3. Verify signing: Targets → ${targetName} → Signing & Capabilities`);
173
+ console.log(' 4. Build and run');
174
+ console.log('');
175
+ console.log('Docs: https://github.com/marcocrupi/react-native-notify-kit#nse-setup');
176
+ }
177
+ catch (e) {
178
+ // Rollback: remove template dir first (C3), then restore backups
179
+ if (templateDirCreated && fs.existsSync(targetDir)) {
180
+ fs.rmSync(targetDir, { recursive: true, force: true });
181
+ logger.warn(`Removed ${targetDir} (rollback)`);
182
+ }
183
+ for (const { original, backup } of backups) {
184
+ if (fs.existsSync(backup)) {
185
+ fs.copyFileSync(backup, original);
186
+ fs.unlinkSync(backup);
187
+ logger.warn(`Restored ${original} from backup`);
188
+ }
189
+ }
190
+ logger.error(`Failed during NSE scaffolding: ${e instanceof Error ? e.message : String(e)}`);
191
+ process.exit(2);
192
+ }
193
+ }
194
+ function checkPbxprojTarget(pbxprojPath, targetName) {
195
+ try {
196
+ const proj = xcode_1.default.project(pbxprojPath);
197
+ proj.parseSync();
198
+ const targets = proj.pbxNativeTargetSection();
199
+ for (const [, value] of Object.entries(targets)) {
200
+ if (typeof value !== 'object')
201
+ continue;
202
+ const name = String(value.name ?? '').replace(/"/g, '');
203
+ if (name === targetName)
204
+ return true;
205
+ }
206
+ }
207
+ catch {
208
+ // If we can't parse, let the later patchXcodeProject step handle the error
209
+ }
210
+ return false;
211
+ }
212
+ //# sourceMappingURL=initNse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initNse.js","sourceRoot":"","sources":["../../src/commands/initNse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface ProjectInfo {
2
+ xcodeProjectPath: string;
3
+ pbxprojPath: string;
4
+ iosDir: string;
5
+ parentBundleId: string | null;
6
+ parentTargetName: string;
7
+ }
8
+ /**
9
+ * Detects the iOS project directory and parses key metadata.
10
+ */
11
+ export declare function detectIosProject(iosPath?: string): ProjectInfo;
12
+ /**
13
+ * Derives the NSE bundle ID from the parent target.
14
+ */
15
+ export declare function deriveBundleId(parentBundleId: string | null, suffix: string, parentTargetName?: string): string;
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.detectIosProject = detectIosProject;
40
+ exports.deriveBundleId = deriveBundleId;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const xcode_1 = __importDefault(require("xcode"));
44
+ /**
45
+ * Detects the iOS project directory and parses key metadata.
46
+ */
47
+ function detectIosProject(iosPath) {
48
+ const iosDir = iosPath ?? path.join(process.cwd(), 'ios');
49
+ if (!fs.existsSync(iosDir)) {
50
+ throw new Error(`Could not find iOS directory at ${iosDir}\n` +
51
+ ' Run this command from the root of your React Native project, or use --ios-path.');
52
+ }
53
+ const entries = fs.readdirSync(iosDir);
54
+ const xcodeProjects = entries.filter(e => e.endsWith('.xcodeproj'));
55
+ if (xcodeProjects.length === 0) {
56
+ throw new Error(`Could not find .xcodeproj under ${iosDir}\n` +
57
+ ' Run this command from the root of your React Native project, or use --ios-path.');
58
+ }
59
+ if (xcodeProjects.length > 1) {
60
+ throw new Error(`Multiple .xcodeproj found under ${iosDir}:\n` +
61
+ xcodeProjects.map(p => ` - ${p}`).join('\n') +
62
+ '\n Use --ios-path to specify the correct project.');
63
+ }
64
+ const xcodeProjectPath = path.join(iosDir, xcodeProjects[0]);
65
+ const pbxprojPath = path.join(xcodeProjectPath, 'project.pbxproj');
66
+ if (!fs.existsSync(pbxprojPath)) {
67
+ throw new Error(`project.pbxproj not found at ${pbxprojPath}`);
68
+ }
69
+ const { bundleId, targetName } = readParentTarget(pbxprojPath);
70
+ return {
71
+ xcodeProjectPath,
72
+ pbxprojPath,
73
+ iosDir,
74
+ parentBundleId: bundleId,
75
+ parentTargetName: targetName,
76
+ };
77
+ }
78
+ /**
79
+ * Derives the NSE bundle ID from the parent target.
80
+ */
81
+ function deriveBundleId(parentBundleId, suffix, parentTargetName) {
82
+ if (!parentBundleId) {
83
+ return `$(PRODUCT_BUNDLE_IDENTIFIER:default)${suffix}`;
84
+ }
85
+ if (!parentBundleId.includes('$(') && !parentBundleId.includes('${')) {
86
+ return parentBundleId + suffix;
87
+ }
88
+ const expandedBundleId = expandKnownBundleIdVariables(parentBundleId, parentTargetName);
89
+ if (expandedBundleId && !expandedBundleId.includes('$(') && !expandedBundleId.includes('${')) {
90
+ return expandedBundleId + suffix;
91
+ }
92
+ // Variable-based bundle ID we could not fully resolve statically.
93
+ return `$(PRODUCT_BUNDLE_IDENTIFIER:default)${suffix}`;
94
+ }
95
+ function expandKnownBundleIdVariables(bundleId, parentTargetName) {
96
+ if (!parentTargetName) {
97
+ return null;
98
+ }
99
+ const normalizedTargetName = toRfc1034Identifier(parentTargetName);
100
+ return bundleId
101
+ .replace(/\$\((?:PRODUCT_NAME|TARGET_NAME):rfc1034identifier\)/g, normalizedTargetName)
102
+ .replace(/\$\{(?:PRODUCT_NAME|TARGET_NAME):rfc1034identifier\}/g, normalizedTargetName)
103
+ .replace(/\$\((?:PRODUCT_NAME|TARGET_NAME)\)/g, parentTargetName)
104
+ .replace(/\$\{(?:PRODUCT_NAME|TARGET_NAME)\}/g, parentTargetName);
105
+ }
106
+ function toRfc1034Identifier(value) {
107
+ return value.replace(/[^A-Za-z0-9.-]/g, '-');
108
+ }
109
+ function readParentTarget(pbxprojPath) {
110
+ const proj = xcode_1.default.project(pbxprojPath);
111
+ proj.parseSync();
112
+ const targets = proj.pbxNativeTargetSection();
113
+ let targetName = 'MyApp';
114
+ let bundleId = null;
115
+ for (const [, value] of Object.entries(targets)) {
116
+ if (typeof value !== 'object' || !value.name) {
117
+ continue;
118
+ }
119
+ const target = value;
120
+ const name = String(target.name).replace(/"/g, '');
121
+ const productType = String(target.productType ?? '');
122
+ // Only look at the main app target (not extensions, test targets)
123
+ if (productType.includes('application')) {
124
+ targetName = name;
125
+ // Read bundle ID scoped to THIS target's build configuration list
126
+ const configListRef = target.buildConfigurationList;
127
+ if (configListRef) {
128
+ const configListSection = proj.hash.project.objects.XCConfigurationList;
129
+ const configList = configListSection?.[configListRef];
130
+ const configUuids = new Set();
131
+ if (configList?.buildConfigurations && Array.isArray(configList.buildConfigurations)) {
132
+ for (const entry of configList.buildConfigurations) {
133
+ if (entry?.value)
134
+ configUuids.add(entry.value);
135
+ }
136
+ }
137
+ const configs = proj.pbxXCBuildConfigurationSection();
138
+ for (const [cfgKey, cfg] of Object.entries(configs)) {
139
+ if (typeof cfg !== 'object' || cfgKey.endsWith('_comment'))
140
+ continue;
141
+ if (!configUuids.has(cfgKey))
142
+ continue;
143
+ const config = cfg;
144
+ const settings = config.buildSettings;
145
+ if (settings?.PRODUCT_BUNDLE_IDENTIFIER) {
146
+ bundleId = settings.PRODUCT_BUNDLE_IDENTIFIER.replace(/"/g, '');
147
+ break;
148
+ }
149
+ }
150
+ }
151
+ break;
152
+ }
153
+ }
154
+ return { bundleId, targetName };
155
+ }
156
+ //# sourceMappingURL=detectProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detectProject.js","sourceRoot":"","sources":["../../src/lib/detectProject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const success: (msg: string) => void;
2
+ export declare const error: (msg: string) => void;
3
+ export declare const warn: (msg: string) => void;
4
+ export declare const info: (msg: string) => void;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.info = exports.warn = exports.error = exports.success = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const success = (msg) => {
9
+ console.log(chalk_1.default.green('✓') + ' ' + msg);
10
+ };
11
+ exports.success = success;
12
+ const error = (msg) => {
13
+ console.error(chalk_1.default.red('✗') + ' ' + msg);
14
+ };
15
+ exports.error = error;
16
+ const warn = (msg) => {
17
+ console.warn(chalk_1.default.yellow('⚠') + ' ' + msg);
18
+ };
19
+ exports.warn = warn;
20
+ const info = (msg) => {
21
+ console.log(chalk_1.default.cyan('ℹ') + ' ' + msg);
22
+ };
23
+ exports.info = info;
24
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAEnB,MAAM,OAAO,GAAG,CAAC,GAAW,EAAQ,EAAE;IAC3C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC5C,CAAC,CAAC;AAFW,QAAA,OAAO,WAElB;AAEK,MAAM,KAAK,GAAG,CAAC,GAAW,EAAQ,EAAE;IACzC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC5C,CAAC,CAAC;AAFW,QAAA,KAAK,SAEhB;AAEK,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;IACxC,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC9C,CAAC,CAAC;AAFW,QAAA,IAAI,QAEf;AAEK,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;IACxC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC3C,CAAC,CAAC;AAFW,QAAA,IAAI,QAEf"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Patches the Podfile to add the NSE target with RNNotifeeCore pod.
3
+ * The NSE target is nested inside the main app target so CocoaPods can
4
+ * detect the host→extension relationship. Uses `inherit! :search_paths`.
5
+ * Idempotent: if the target already exists, returns false.
6
+ */
7
+ export declare function patchPodfile(podfilePath: string, targetName: string, dryRun: boolean): boolean;
8
+ /**
9
+ * Returns the patched Podfile content without writing to disk (for dry-run
10
+ * preview or testing).
11
+ */
12
+ export declare function getPatchedPodfile(content: string, targetName: string): string | null;