brave-real-launcher 1.2.45 โ 1.2.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/scripts/chrome-launcher-sync.cjs +137 -135
package/package.json
CHANGED
|
@@ -21,36 +21,36 @@ class ChromeLauncherSyncManager {
|
|
|
21
21
|
|
|
22
22
|
async run(targetVersion = 'latest') {
|
|
23
23
|
console.log('๐ Starting Chrome-launcher Comprehensive Sync...\n');
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
try {
|
|
26
26
|
// Step 1: Prepare environment
|
|
27
27
|
await this.prepareEnvironment();
|
|
28
|
-
|
|
28
|
+
|
|
29
29
|
// Step 2: Fetch chrome-launcher
|
|
30
30
|
await this.fetchChromeLauncher(targetVersion);
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
// Step 3: Backup Brave-specific files
|
|
33
33
|
await this.backupBraveFiles();
|
|
34
|
-
|
|
34
|
+
|
|
35
35
|
// Step 4: Integrate chrome-launcher code
|
|
36
36
|
await this.integrateChromeLauncher();
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
// Step 5: Restore and enhance Brave features
|
|
39
39
|
await this.restoreBraveFeatures();
|
|
40
|
-
|
|
40
|
+
|
|
41
41
|
// Step 6: Smart version increment
|
|
42
42
|
await this.incrementVersion();
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
// Step 7: Update configurations
|
|
45
45
|
await this.updateConfigurations();
|
|
46
|
-
|
|
46
|
+
|
|
47
47
|
// Step 8: Verify integration
|
|
48
48
|
await this.verifyIntegration();
|
|
49
|
-
|
|
49
|
+
|
|
50
50
|
console.log('\n๐ Chrome-launcher sync completed successfully!');
|
|
51
51
|
console.log(`โ
Updated to chrome-launcher v${this.chromeVersion}`);
|
|
52
52
|
console.log(`๐ฆ All Brave features preserved and enhanced`);
|
|
53
|
-
|
|
53
|
+
|
|
54
54
|
} catch (error) {
|
|
55
55
|
console.error('\nโ Sync failed:', error.message);
|
|
56
56
|
process.exit(1);
|
|
@@ -62,7 +62,7 @@ class ChromeLauncherSyncManager {
|
|
|
62
62
|
|
|
63
63
|
async prepareEnvironment() {
|
|
64
64
|
console.log('๐ Preparing sync environment...');
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
// Remove old temp directories
|
|
67
67
|
if (fs.existsSync(this.tempDir)) {
|
|
68
68
|
execSync(`rm -rf "${this.tempDir}"`);
|
|
@@ -70,22 +70,22 @@ class ChromeLauncherSyncManager {
|
|
|
70
70
|
if (fs.existsSync(this.backupDir)) {
|
|
71
71
|
execSync(`rm -rf "${this.backupDir}"`);
|
|
72
72
|
}
|
|
73
|
-
|
|
73
|
+
|
|
74
74
|
// Create temp directories
|
|
75
75
|
fs.mkdirSync(this.tempDir, { recursive: true });
|
|
76
76
|
fs.mkdirSync(this.backupDir, { recursive: true });
|
|
77
|
-
|
|
77
|
+
|
|
78
78
|
console.log('โ
Environment prepared');
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
async fetchChromeLauncher(targetVersion) {
|
|
82
82
|
console.log(`๐ฅ Fetching chrome-launcher ${targetVersion}...`);
|
|
83
|
-
|
|
83
|
+
|
|
84
84
|
process.chdir(this.tempDir);
|
|
85
|
-
|
|
85
|
+
|
|
86
86
|
// Clone chrome-launcher
|
|
87
87
|
execSync('git clone https://github.com/GoogleChrome/chrome-launcher.git .');
|
|
88
|
-
|
|
88
|
+
|
|
89
89
|
// Get version info
|
|
90
90
|
if (targetVersion !== 'latest') {
|
|
91
91
|
try {
|
|
@@ -105,19 +105,19 @@ class ChromeLauncherSyncManager {
|
|
|
105
105
|
console.log('Using main branch');
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
|
-
|
|
108
|
+
|
|
109
109
|
this.chromeCommit = execSync('git rev-parse --short HEAD').toString().trim();
|
|
110
|
-
|
|
110
|
+
|
|
111
111
|
console.log(`โ
Fetched chrome-launcher v${this.chromeVersion} (${this.chromeCommit})`);
|
|
112
112
|
process.chdir(this.projectRoot);
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
async backupBraveFiles() {
|
|
116
116
|
console.log('๐พ Backing up Brave-specific files...');
|
|
117
|
-
|
|
117
|
+
|
|
118
118
|
const braveFiles = [
|
|
119
119
|
'src/brave-finder.ts',
|
|
120
|
-
'src/brave-launcher.ts',
|
|
120
|
+
'src/brave-launcher.ts',
|
|
121
121
|
'src/flags.ts',
|
|
122
122
|
'src/utils.ts',
|
|
123
123
|
'src/index.ts',
|
|
@@ -132,168 +132,170 @@ class ChromeLauncherSyncManager {
|
|
|
132
132
|
'CHANGELOG.md',
|
|
133
133
|
'GITHUB_SETUP.md'
|
|
134
134
|
];
|
|
135
|
-
|
|
135
|
+
|
|
136
136
|
braveFiles.forEach(file => {
|
|
137
137
|
const srcPath = path.join(this.projectRoot, file);
|
|
138
138
|
const destPath = path.join(this.backupDir, file);
|
|
139
|
-
|
|
139
|
+
|
|
140
140
|
if (fs.existsSync(srcPath)) {
|
|
141
141
|
// Create directory if needed
|
|
142
142
|
const destDir = path.dirname(destPath);
|
|
143
143
|
if (!fs.existsSync(destDir)) {
|
|
144
144
|
fs.mkdirSync(destDir, { recursive: true });
|
|
145
145
|
}
|
|
146
|
-
|
|
146
|
+
|
|
147
147
|
// Copy file/directory
|
|
148
148
|
execSync(`cp -r "${srcPath}" "${destPath}"`);
|
|
149
149
|
console.log(` โ
Backed up: ${file}`);
|
|
150
150
|
}
|
|
151
151
|
});
|
|
152
|
-
|
|
152
|
+
|
|
153
153
|
console.log('โ
Brave files backed up');
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
async integrateChromeLauncher() {
|
|
157
157
|
console.log('๐ Integrating chrome-launcher code...');
|
|
158
|
-
|
|
159
|
-
// Clean up any existing chrome-chrome-* files
|
|
158
|
+
|
|
159
|
+
// Clean up any existing chrome-chrome-* files
|
|
160
160
|
await this.cleanupDuplicateFiles();
|
|
161
|
-
|
|
162
|
-
//
|
|
163
|
-
// we'll just copy essential reference files and update dependencies
|
|
164
|
-
|
|
165
|
-
// Copy package.json for dependency reference
|
|
161
|
+
|
|
162
|
+
// 1. Copy Reference Files
|
|
166
163
|
const chromePkgSrc = path.join(this.tempDir, 'package.json');
|
|
167
164
|
const chromePkgDest = path.join(this.projectRoot, 'chrome-launcher-package.json');
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
fs.copyFileSync(chromePkgSrc, chromePkgDest);
|
|
171
|
-
console.log(` โ
Reference: package.json โ chrome-launcher-package.json`);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// Copy README for reference
|
|
165
|
+
if (fs.existsSync(chromePkgSrc)) fs.copyFileSync(chromePkgSrc, chromePkgDest);
|
|
166
|
+
|
|
175
167
|
const chromeReadmeSrc = path.join(this.tempDir, 'README.md');
|
|
176
168
|
const chromeReadmeDest = path.join(this.projectRoot, 'chrome-launcher-README.md');
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
169
|
+
if (fs.existsSync(chromeReadmeSrc)) fs.copyFileSync(chromeReadmeSrc, chromeReadmeDest);
|
|
170
|
+
|
|
171
|
+
// 2. Copy Safe Files (Utilities that change rarely and can be synced)
|
|
172
|
+
const safeFiles = [
|
|
173
|
+
'src/random-port.ts',
|
|
174
|
+
'src/utils.ts' // Warning: Check if Brave utils has changes. Assuming upstream utils are better/newer.
|
|
175
|
+
// Note: Brave-Real-Launcher utils.ts has Brave specific code?
|
|
176
|
+
// If so, we should NOT overwrite utils.ts without checking.
|
|
177
|
+
// For safety, we ONLY merge flags.ts automatically for now.
|
|
178
|
+
];
|
|
179
|
+
|
|
180
|
+
// safeFiles.forEach... (Skipped for safety as per analysis, only flags is safe to merge if smart)
|
|
181
|
+
|
|
183
182
|
console.log('โ
Chrome-launcher reference files integrated');
|
|
184
|
-
console.log('โน๏ธ Full code integration skipped - using version increment approach');
|
|
185
183
|
}
|
|
186
184
|
|
|
187
185
|
async restoreBraveFeatures() {
|
|
188
186
|
console.log('๐ฆ Restoring and enhancing Brave features...');
|
|
189
|
-
|
|
190
|
-
// Store current version before restoring
|
|
187
|
+
|
|
191
188
|
const currentVersion = this.getCurrentVersion();
|
|
192
189
|
console.log(` ๐ฆ Preserving current version: ${currentVersion}`);
|
|
193
|
-
|
|
194
|
-
// Restore
|
|
190
|
+
|
|
191
|
+
// Restore backup
|
|
195
192
|
if (fs.existsSync(this.backupDir)) {
|
|
196
193
|
const backupFiles = fs.readdirSync(this.backupDir);
|
|
197
194
|
backupFiles.forEach(file => {
|
|
198
|
-
if (file !== 'package.json') {
|
|
195
|
+
if (file !== 'package.json') { // package.json handled separately
|
|
199
196
|
const srcPath = path.join(this.backupDir, file);
|
|
200
197
|
const destPath = path.join(this.projectRoot, file);
|
|
201
198
|
execSync(`cp -r "${srcPath}" "${destPath}"`);
|
|
202
|
-
console.log(` โ
Restored: ${file}`);
|
|
203
199
|
}
|
|
204
200
|
});
|
|
205
201
|
}
|
|
206
|
-
|
|
207
|
-
// Merge package.json
|
|
202
|
+
|
|
203
|
+
// Merge package.json
|
|
208
204
|
await this.mergePackageJsonDependencies(currentVersion);
|
|
209
|
-
|
|
210
|
-
//
|
|
211
|
-
await this.
|
|
212
|
-
|
|
205
|
+
|
|
206
|
+
// SMART MERGE: Flags
|
|
207
|
+
await this.mergeFlags();
|
|
208
|
+
|
|
213
209
|
console.log('โ
Brave features restored and enhanced');
|
|
214
210
|
}
|
|
215
211
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
212
|
+
async mergeFlags() {
|
|
213
|
+
console.log('๐ฉ Smart Merging flags.ts...');
|
|
214
|
+
const chromeFlagsPath = path.join(this.tempDir, 'src/flags.ts');
|
|
215
|
+
const braveFlagsPath = path.join(this.projectRoot, 'src/flags.ts');
|
|
216
|
+
|
|
217
|
+
if (fs.existsSync(chromeFlagsPath) && fs.existsSync(braveFlagsPath)) {
|
|
218
|
+
let chromeContent = fs.readFileSync(chromeFlagsPath, 'utf8');
|
|
219
|
+
|
|
220
|
+
// Inject Brave-specific flags
|
|
221
|
+
// We hardcode the essential Brave flags to ensure they are always present even if backup is weird
|
|
222
|
+
// But we should also respect the file structure.
|
|
223
|
+
|
|
224
|
+
const braveFeaturesToAdd = [
|
|
225
|
+
' // Brave-specific: disable Brave Ads',
|
|
226
|
+
" 'BraveAds',",
|
|
227
|
+
" 'BraveRewards',",
|
|
228
|
+
" 'BraveNews',",
|
|
229
|
+
" 'BraveWallet',",
|
|
230
|
+
" 'BraveP3A',",
|
|
231
|
+
" 'BraveP3ANotice',",
|
|
232
|
+
" 'BraveAnalyticsConsent',"
|
|
233
|
+
].join('\n');
|
|
234
|
+
|
|
235
|
+
const braveFlagsToAdd = [
|
|
236
|
+
' // Brave-specific flags',
|
|
237
|
+
" '--disable-brave-secure-dns',",
|
|
238
|
+
" '--disable-brave-update',",
|
|
239
|
+
" '--disable-tor-client-updater',",
|
|
240
|
+
" '--disable-brave-p3a',",
|
|
241
|
+
" '--disable-brave-p3a-notice',",
|
|
242
|
+
" '--disable-brave-stats-updater',",
|
|
243
|
+
" '--disable-brave-referral-ping',"
|
|
244
|
+
].join('\n');
|
|
228
245
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
if (chromePkg.engines) {
|
|
247
|
-
bravePkg.engines = { ...bravePkg.engines, ...chromePkg.engines };
|
|
246
|
+
// Inject Features
|
|
247
|
+
if (chromeContent.includes('.join(\',\')')) {
|
|
248
|
+
// Look for the end of the features array
|
|
249
|
+
chromeContent = chromeContent.replace(
|
|
250
|
+
/(\s*)\/\/ Disable all extensions/i,
|
|
251
|
+
`\n${braveFeaturesToAdd}\n$1// Disable all extensions` // Rough injection point before array close usually?
|
|
252
|
+
// Actually flags.ts structure is:
|
|
253
|
+
// array join(',') ...
|
|
254
|
+
// We need to inject BEFORE .join(',')
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
// Better regex finding the array end
|
|
258
|
+
// array of features ends with ].join(',')
|
|
259
|
+
chromeContent = chromeContent.replace(
|
|
260
|
+
/(\s*)\]\.join\(/,
|
|
261
|
+
`$1$1// Brave Specific Features\n$1$1'BraveAds',\n$1$1'BraveRewards',\n$1$1'BraveNews',\n$1$1'BraveWallet',\n$1$1'BraveP3A',\n$1$1'BraveP3ANotice',\n$1$1'BraveAnalyticsConsent',\n$1].join(`
|
|
262
|
+
);
|
|
248
263
|
}
|
|
249
|
-
|
|
250
|
-
//
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
fs.
|
|
258
|
-
|
|
259
|
-
console.log(' โน๏ธ No chrome-launcher package.json found, skipping dependency merge');
|
|
264
|
+
|
|
265
|
+
// Inject Flags
|
|
266
|
+
// Insert before the last ];
|
|
267
|
+
chromeContent = chromeContent.replace(
|
|
268
|
+
/(\s*)\];\s*$/,
|
|
269
|
+
`\n${braveFlagsToAdd}\n$1];`
|
|
270
|
+
);
|
|
271
|
+
|
|
272
|
+
fs.writeFileSync(braveFlagsPath, chromeContent);
|
|
273
|
+
console.log(' โ
flags.ts merged with Brave features');
|
|
260
274
|
}
|
|
261
275
|
}
|
|
262
276
|
|
|
263
277
|
async enhanceBraveFiles() {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
// This is where we would add intelligent code merging
|
|
267
|
-
// For now, we'll just verify our Brave files are compatible
|
|
268
|
-
|
|
269
|
-
const braveFiles = ['src/brave-launcher.ts', 'src/brave-finder.ts', 'src/flags.ts'];
|
|
270
|
-
|
|
271
|
-
braveFiles.forEach(file => {
|
|
272
|
-
if (fs.existsSync(file)) {
|
|
273
|
-
console.log(` โ
Verified: ${file}`);
|
|
274
|
-
// Here you could add specific merging logic for each file
|
|
275
|
-
}
|
|
276
|
-
});
|
|
278
|
+
// Deprecated by mergeFlags
|
|
277
279
|
}
|
|
278
280
|
|
|
279
281
|
async incrementVersion() {
|
|
280
282
|
console.log('๐ฆ Smart Version Increment...');
|
|
281
|
-
|
|
283
|
+
|
|
282
284
|
try {
|
|
283
285
|
// Use version increment utility
|
|
284
286
|
const VersionManager = require('./version-increment.cjs');
|
|
285
287
|
const versionManager = new VersionManager();
|
|
286
|
-
|
|
288
|
+
|
|
287
289
|
// Always increment with force flag for continuous updates
|
|
288
|
-
const result = await versionManager.run({
|
|
289
|
-
force: true,
|
|
290
|
-
strategy: 'auto'
|
|
290
|
+
const result = await versionManager.run({
|
|
291
|
+
force: true,
|
|
292
|
+
strategy: 'auto'
|
|
291
293
|
});
|
|
292
|
-
|
|
294
|
+
|
|
293
295
|
if (result.success && result.incremented) {
|
|
294
296
|
console.log(` โ
Version incremented: ${result.oldVersion} โ ${result.newVersion}`);
|
|
295
297
|
console.log(` ๐ Reason: ${result.reason}`);
|
|
296
|
-
|
|
298
|
+
|
|
297
299
|
// Update chrome version reference for consistency
|
|
298
300
|
if (result.newVersion !== this.chromeVersion) {
|
|
299
301
|
this.chromeVersion = result.newVersion;
|
|
@@ -301,22 +303,22 @@ class ChromeLauncherSyncManager {
|
|
|
301
303
|
} else {
|
|
302
304
|
console.log(' โน๏ธ Version increment skipped');
|
|
303
305
|
}
|
|
304
|
-
|
|
306
|
+
|
|
305
307
|
} catch (error) {
|
|
306
308
|
console.error(' โ ๏ธ Version increment warning:', error.message);
|
|
307
309
|
console.log(' ๐ Continuing with existing version...');
|
|
308
310
|
}
|
|
309
|
-
|
|
311
|
+
|
|
310
312
|
console.log('โ
Version management completed');
|
|
311
313
|
}
|
|
312
314
|
|
|
313
315
|
async updateConfigurations() {
|
|
314
316
|
console.log('โ๏ธ Updating configurations...');
|
|
315
|
-
|
|
317
|
+
|
|
316
318
|
// Update dependencies
|
|
317
319
|
console.log(' ๐ฆ Installing updated dependencies...');
|
|
318
320
|
execSync('npm install', { cwd: this.projectRoot });
|
|
319
|
-
|
|
321
|
+
|
|
320
322
|
// Update TypeScript build
|
|
321
323
|
console.log(' ๐จ Updating TypeScript build...');
|
|
322
324
|
try {
|
|
@@ -324,13 +326,13 @@ class ChromeLauncherSyncManager {
|
|
|
324
326
|
} catch (e) {
|
|
325
327
|
console.log(' โ ๏ธ Build will be handled later');
|
|
326
328
|
}
|
|
327
|
-
|
|
329
|
+
|
|
328
330
|
console.log('โ
Configurations updated');
|
|
329
331
|
}
|
|
330
332
|
|
|
331
333
|
async verifyIntegration() {
|
|
332
334
|
console.log('๐งช Verifying integration...');
|
|
333
|
-
|
|
335
|
+
|
|
334
336
|
const checks = [
|
|
335
337
|
{ name: 'Package.json', file: 'package.json' },
|
|
336
338
|
{ name: 'Brave Launcher', file: 'src/brave-launcher.ts' },
|
|
@@ -340,9 +342,9 @@ class ChromeLauncherSyncManager {
|
|
|
340
342
|
{ name: 'Utils', file: 'src/utils.ts' },
|
|
341
343
|
{ name: 'Chrome Reference', file: 'chrome-launcher-package.json', optional: true }
|
|
342
344
|
];
|
|
343
|
-
|
|
345
|
+
|
|
344
346
|
let allGood = true;
|
|
345
|
-
|
|
347
|
+
|
|
346
348
|
checks.forEach(check => {
|
|
347
349
|
if (fs.existsSync(path.join(this.projectRoot, check.file))) {
|
|
348
350
|
console.log(` โ
${check.name}`);
|
|
@@ -353,23 +355,23 @@ class ChromeLauncherSyncManager {
|
|
|
353
355
|
allGood = false;
|
|
354
356
|
}
|
|
355
357
|
});
|
|
356
|
-
|
|
358
|
+
|
|
357
359
|
if (!allGood) {
|
|
358
360
|
throw new Error('Integration verification failed - some files are missing');
|
|
359
361
|
}
|
|
360
|
-
|
|
362
|
+
|
|
361
363
|
console.log('โ
Integration verified');
|
|
362
364
|
}
|
|
363
365
|
|
|
364
366
|
async cleanupDuplicateFiles() {
|
|
365
367
|
console.log('๐งน Cleaning up duplicate chrome files...');
|
|
366
|
-
|
|
368
|
+
|
|
367
369
|
const srcDir = path.join(this.projectRoot, 'src');
|
|
368
370
|
const duplicatePatterns = [
|
|
369
371
|
'chrome-chrome-*.ts',
|
|
370
372
|
'chrome-chrome-*.js'
|
|
371
373
|
];
|
|
372
|
-
|
|
374
|
+
|
|
373
375
|
try {
|
|
374
376
|
duplicatePatterns.forEach(pattern => {
|
|
375
377
|
const files = require('glob').sync(pattern, { cwd: srcDir });
|
|
@@ -381,7 +383,7 @@ class ChromeLauncherSyncManager {
|
|
|
381
383
|
}
|
|
382
384
|
});
|
|
383
385
|
});
|
|
384
|
-
|
|
386
|
+
|
|
385
387
|
console.log('โ
Duplicate files cleaned up');
|
|
386
388
|
} catch (e) {
|
|
387
389
|
// If glob is not available, use alternative approach
|
|
@@ -389,10 +391,10 @@ class ChromeLauncherSyncManager {
|
|
|
389
391
|
this.alternativeCleanup();
|
|
390
392
|
}
|
|
391
393
|
}
|
|
392
|
-
|
|
394
|
+
|
|
393
395
|
alternativeCleanup() {
|
|
394
396
|
const srcDir = path.join(this.projectRoot, 'src');
|
|
395
|
-
|
|
397
|
+
|
|
396
398
|
try {
|
|
397
399
|
const files = fs.readdirSync(srcDir);
|
|
398
400
|
files.forEach(file => {
|
|
@@ -409,7 +411,7 @@ class ChromeLauncherSyncManager {
|
|
|
409
411
|
|
|
410
412
|
async cleanup() {
|
|
411
413
|
console.log('๐งน Cleaning up...');
|
|
412
|
-
|
|
414
|
+
|
|
413
415
|
try {
|
|
414
416
|
if (fs.existsSync(this.tempDir)) {
|
|
415
417
|
execSync(`rm -rf "${this.tempDir}"`);
|