@bobfrankston/npmglobalize 1.0.39 → 1.0.41

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/check-build.js CHANGED
@@ -53,8 +53,8 @@ function isExcluded(relativePath, excludePatterns) {
53
53
  function getTypeScriptFiles(tsconfig) {
54
54
  const files = [];
55
55
  const excludePatterns = tsconfig?.exclude || [];
56
- // Always exclude node_modules and .git
57
- const alwaysExclude = ['node_modules', '.git'];
56
+ // Always exclude node_modules, .git, and recover (sensitive credentials)
57
+ const alwaysExclude = ['node_modules', '.git', 'recover'];
58
58
  const allExcludes = [...alwaysExclude, ...excludePatterns];
59
59
  function scanDir(dir, relativePath = '') {
60
60
  const entries = fs.readdirSync(dir, { withFileTypes: true });
@@ -136,4 +136,369 @@ if (!checkBuildStatus()) {
136
136
  //# sourceMappingURL=check-build.js.map
137
137
  //# sourceMappingURL=check-build.js.map
138
138
  //# sourceMappingURL=check-build.js.map
139
+ //# sourceMappingURL=check-build.js.map
140
+ //# sourceMappingURL=check-build.js.map
141
+ //# sourceMappingURL=check-build.js.map
142
+ //# sourceMappingURL=check-build.js.map
143
+ //# sourceMappingURL=check-build.js.map
144
+ //# sourceMappingURL=check-build.js.map
145
+ //# sourceMappingURL=check-build.js.map
146
+ //# sourceMappingURL=check-build.js.map
147
+ //# sourceMappingURL=check-build.js.map
148
+ //# sourceMappingURL=check-build.js.map
149
+ //# sourceMappingURL=check-build.js.map
150
+ //# sourceMappingURL=check-build.js.map
151
+ //# sourceMappingURL=check-build.js.map
152
+ //# sourceMappingURL=check-build.js.map
153
+ //# sourceMappingURL=check-build.js.map
154
+ //# sourceMappingURL=check-build.js.map
155
+ //# sourceMappingURL=check-build.js.map
156
+ //# sourceMappingURL=check-build.js.map
157
+ //# sourceMappingURL=check-build.js.map
158
+ //# sourceMappingURL=check-build.js.map
159
+ //# sourceMappingURL=check-build.js.map
160
+ //# sourceMappingURL=check-build.js.map
161
+ //# sourceMappingURL=check-build.js.map
162
+ //# sourceMappingURL=check-build.js.map
163
+ //# sourceMappingURL=check-build.js.map
164
+ //# sourceMappingURL=check-build.js.map
165
+ //# sourceMappingURL=check-build.js.map
166
+ //# sourceMappingURL=check-build.js.map
167
+ //# sourceMappingURL=check-build.js.map
168
+ //# sourceMappingURL=check-build.js.map
169
+ //# sourceMappingURL=check-build.js.map
170
+ //# sourceMappingURL=check-build.js.map
171
+ //# sourceMappingURL=check-build.js.map
172
+ //# sourceMappingURL=check-build.js.map
173
+ //# sourceMappingURL=check-build.js.map
174
+ //# sourceMappingURL=check-build.js.map
175
+ //# sourceMappingURL=check-build.js.map
176
+ //# sourceMappingURL=check-build.js.map
177
+ //# sourceMappingURL=check-build.js.map
178
+ //# sourceMappingURL=check-build.js.map
179
+ //# sourceMappingURL=check-build.js.map
180
+ //# sourceMappingURL=check-build.js.map
181
+ //# sourceMappingURL=check-build.js.map
182
+ //# sourceMappingURL=check-build.js.map
183
+ //# sourceMappingURL=check-build.js.map
184
+ //# sourceMappingURL=check-build.js.map
185
+ //# sourceMappingURL=check-build.js.map
186
+ //# sourceMappingURL=check-build.js.map
187
+ //# sourceMappingURL=check-build.js.map
188
+ //# sourceMappingURL=check-build.js.map
189
+ //# sourceMappingURL=check-build.js.map
190
+ //# sourceMappingURL=check-build.js.map
191
+ //# sourceMappingURL=check-build.js.map
192
+ //# sourceMappingURL=check-build.js.map
193
+ //# sourceMappingURL=check-build.js.map
194
+ //# sourceMappingURL=check-build.js.map
195
+ //# sourceMappingURL=check-build.js.map
196
+ //# sourceMappingURL=check-build.js.map
197
+ //# sourceMappingURL=check-build.js.map
198
+ //# sourceMappingURL=check-build.js.map
199
+ //# sourceMappingURL=check-build.js.map
200
+ //# sourceMappingURL=check-build.js.map
201
+ //# sourceMappingURL=check-build.js.map
202
+ //# sourceMappingURL=check-build.js.map
203
+ //# sourceMappingURL=check-build.js.map
204
+ //# sourceMappingURL=check-build.js.map
205
+ //# sourceMappingURL=check-build.js.map
206
+ //# sourceMappingURL=check-build.js.map
207
+ //# sourceMappingURL=check-build.js.map
208
+ //# sourceMappingURL=check-build.js.map
209
+ //# sourceMappingURL=check-build.js.map
210
+ //# sourceMappingURL=check-build.js.map
211
+ //# sourceMappingURL=check-build.js.map
212
+ //# sourceMappingURL=check-build.js.map
213
+ //# sourceMappingURL=check-build.js.map
214
+ //# sourceMappingURL=check-build.js.map
215
+ //# sourceMappingURL=check-build.js.map
216
+ //# sourceMappingURL=check-build.js.map
217
+ //# sourceMappingURL=check-build.js.map
218
+ //# sourceMappingURL=check-build.js.map
219
+ //# sourceMappingURL=check-build.js.map
220
+ //# sourceMappingURL=check-build.js.map
221
+ //# sourceMappingURL=check-build.js.map
222
+ //# sourceMappingURL=check-build.js.map
223
+ //# sourceMappingURL=check-build.js.map
224
+ //# sourceMappingURL=check-build.js.map
225
+ //# sourceMappingURL=check-build.js.map
226
+ //# sourceMappingURL=check-build.js.map
227
+ //# sourceMappingURL=check-build.js.map
228
+ //# sourceMappingURL=check-build.js.map
229
+ //# sourceMappingURL=check-build.js.map
230
+ //# sourceMappingURL=check-build.js.map
231
+ //# sourceMappingURL=check-build.js.map
232
+ //# sourceMappingURL=check-build.js.map
233
+ //# sourceMappingURL=check-build.js.map
234
+ //# sourceMappingURL=check-build.js.map
235
+ //# sourceMappingURL=check-build.js.map
236
+ //# sourceMappingURL=check-build.js.map
237
+ //# sourceMappingURL=check-build.js.map
238
+ //# sourceMappingURL=check-build.js.map
239
+ //# sourceMappingURL=check-build.js.map
240
+ //# sourceMappingURL=check-build.js.map
241
+ //# sourceMappingURL=check-build.js.map
242
+ //# sourceMappingURL=check-build.js.map
243
+ //# sourceMappingURL=check-build.js.map
244
+ //# sourceMappingURL=check-build.js.map
245
+ //# sourceMappingURL=check-build.js.map
246
+ //# sourceMappingURL=check-build.js.map
247
+ //# sourceMappingURL=check-build.js.map
248
+ //# sourceMappingURL=check-build.js.map
249
+ //# sourceMappingURL=check-build.js.map
250
+ //# sourceMappingURL=check-build.js.map
251
+ //# sourceMappingURL=check-build.js.map
252
+ //# sourceMappingURL=check-build.js.map
253
+ //# sourceMappingURL=check-build.js.map
254
+ //# sourceMappingURL=check-build.js.map
255
+ //# sourceMappingURL=check-build.js.map
256
+ //# sourceMappingURL=check-build.js.map
257
+ //# sourceMappingURL=check-build.js.map
258
+ //# sourceMappingURL=check-build.js.map
259
+ //# sourceMappingURL=check-build.js.map
260
+ //# sourceMappingURL=check-build.js.map
261
+ //# sourceMappingURL=check-build.js.map
262
+ //# sourceMappingURL=check-build.js.map
263
+ //# sourceMappingURL=check-build.js.map
264
+ //# sourceMappingURL=check-build.js.map
265
+ //# sourceMappingURL=check-build.js.map
266
+ //# sourceMappingURL=check-build.js.map
267
+ //# sourceMappingURL=check-build.js.map
268
+ //# sourceMappingURL=check-build.js.map
269
+ //# sourceMappingURL=check-build.js.map
270
+ //# sourceMappingURL=check-build.js.map
271
+ //# sourceMappingURL=check-build.js.map
272
+ //# sourceMappingURL=check-build.js.map
273
+ //# sourceMappingURL=check-build.js.map
274
+ //# sourceMappingURL=check-build.js.map
275
+ //# sourceMappingURL=check-build.js.map
276
+ //# sourceMappingURL=check-build.js.map
277
+ //# sourceMappingURL=check-build.js.map
278
+ //# sourceMappingURL=check-build.js.map
279
+ //# sourceMappingURL=check-build.js.map
280
+ //# sourceMappingURL=check-build.js.map
281
+ //# sourceMappingURL=check-build.js.map
282
+ //# sourceMappingURL=check-build.js.map
283
+ //# sourceMappingURL=check-build.js.map
284
+ //# sourceMappingURL=check-build.js.map
285
+ //# sourceMappingURL=check-build.js.map
286
+ //# sourceMappingURL=check-build.js.map
287
+ //# sourceMappingURL=check-build.js.map
288
+ //# sourceMappingURL=check-build.js.map
289
+ //# sourceMappingURL=check-build.js.map
290
+ //# sourceMappingURL=check-build.js.map
291
+ //# sourceMappingURL=check-build.js.map
292
+ //# sourceMappingURL=check-build.js.map
293
+ //# sourceMappingURL=check-build.js.map
294
+ //# sourceMappingURL=check-build.js.map
295
+ //# sourceMappingURL=check-build.js.map
296
+ //# sourceMappingURL=check-build.js.map
297
+ //# sourceMappingURL=check-build.js.map
298
+ //# sourceMappingURL=check-build.js.map
299
+ //# sourceMappingURL=check-build.js.map
300
+ //# sourceMappingURL=check-build.js.map
301
+ //# sourceMappingURL=check-build.js.map
302
+ //# sourceMappingURL=check-build.js.map
303
+ //# sourceMappingURL=check-build.js.map
304
+ //# sourceMappingURL=check-build.js.map
305
+ //# sourceMappingURL=check-build.js.map
306
+ //# sourceMappingURL=check-build.js.map
307
+ //# sourceMappingURL=check-build.js.map
308
+ //# sourceMappingURL=check-build.js.map
309
+ //# sourceMappingURL=check-build.js.map
310
+ //# sourceMappingURL=check-build.js.map
311
+ //# sourceMappingURL=check-build.js.map
312
+ //# sourceMappingURL=check-build.js.map
313
+ //# sourceMappingURL=check-build.js.map
314
+ //# sourceMappingURL=check-build.js.map
315
+ //# sourceMappingURL=check-build.js.map
316
+ //# sourceMappingURL=check-build.js.map
317
+ //# sourceMappingURL=check-build.js.map
318
+ //# sourceMappingURL=check-build.js.map
319
+ //# sourceMappingURL=check-build.js.map
320
+ //# sourceMappingURL=check-build.js.map
321
+ //# sourceMappingURL=check-build.js.map
322
+ //# sourceMappingURL=check-build.js.map
323
+ //# sourceMappingURL=check-build.js.map
324
+ //# sourceMappingURL=check-build.js.map
325
+ //# sourceMappingURL=check-build.js.map
326
+ //# sourceMappingURL=check-build.js.map
327
+ //# sourceMappingURL=check-build.js.map
328
+ //# sourceMappingURL=check-build.js.map
329
+ //# sourceMappingURL=check-build.js.map
330
+ //# sourceMappingURL=check-build.js.map
331
+ //# sourceMappingURL=check-build.js.map
332
+ //# sourceMappingURL=check-build.js.map
333
+ //# sourceMappingURL=check-build.js.map
334
+ //# sourceMappingURL=check-build.js.map
335
+ //# sourceMappingURL=check-build.js.map
336
+ //# sourceMappingURL=check-build.js.map
337
+ //# sourceMappingURL=check-build.js.map
338
+ //# sourceMappingURL=check-build.js.map
339
+ //# sourceMappingURL=check-build.js.map
340
+ //# sourceMappingURL=check-build.js.map
341
+ //# sourceMappingURL=check-build.js.map
342
+ //# sourceMappingURL=check-build.js.map
343
+ //# sourceMappingURL=check-build.js.map
344
+ //# sourceMappingURL=check-build.js.map
345
+ //# sourceMappingURL=check-build.js.map
346
+ //# sourceMappingURL=check-build.js.map
347
+ //# sourceMappingURL=check-build.js.map
348
+ //# sourceMappingURL=check-build.js.map
349
+ //# sourceMappingURL=check-build.js.map
350
+ //# sourceMappingURL=check-build.js.map
351
+ //# sourceMappingURL=check-build.js.map
352
+ //# sourceMappingURL=check-build.js.map
353
+ //# sourceMappingURL=check-build.js.map
354
+ //# sourceMappingURL=check-build.js.map
355
+ //# sourceMappingURL=check-build.js.map
356
+ //# sourceMappingURL=check-build.js.map
357
+ //# sourceMappingURL=check-build.js.map
358
+ //# sourceMappingURL=check-build.js.map
359
+ //# sourceMappingURL=check-build.js.map
360
+ //# sourceMappingURL=check-build.js.map
361
+ //# sourceMappingURL=check-build.js.map
362
+ //# sourceMappingURL=check-build.js.map
363
+ //# sourceMappingURL=check-build.js.map
364
+ //# sourceMappingURL=check-build.js.map
365
+ //# sourceMappingURL=check-build.js.map
366
+ //# sourceMappingURL=check-build.js.map
367
+ //# sourceMappingURL=check-build.js.map
368
+ //# sourceMappingURL=check-build.js.map
369
+ //# sourceMappingURL=check-build.js.map
370
+ //# sourceMappingURL=check-build.js.map
371
+ //# sourceMappingURL=check-build.js.map
372
+ //# sourceMappingURL=check-build.js.map
373
+ //# sourceMappingURL=check-build.js.map
374
+ //# sourceMappingURL=check-build.js.map
375
+ //# sourceMappingURL=check-build.js.map
376
+ //# sourceMappingURL=check-build.js.map
377
+ //# sourceMappingURL=check-build.js.map
378
+ //# sourceMappingURL=check-build.js.map
379
+ //# sourceMappingURL=check-build.js.map
380
+ //# sourceMappingURL=check-build.js.map
381
+ //# sourceMappingURL=check-build.js.map
382
+ //# sourceMappingURL=check-build.js.map
383
+ //# sourceMappingURL=check-build.js.map
384
+ //# sourceMappingURL=check-build.js.map
385
+ //# sourceMappingURL=check-build.js.map
386
+ //# sourceMappingURL=check-build.js.map
387
+ //# sourceMappingURL=check-build.js.map
388
+ //# sourceMappingURL=check-build.js.map
389
+ //# sourceMappingURL=check-build.js.map
390
+ //# sourceMappingURL=check-build.js.map
391
+ //# sourceMappingURL=check-build.js.map
392
+ //# sourceMappingURL=check-build.js.map
393
+ //# sourceMappingURL=check-build.js.map
394
+ //# sourceMappingURL=check-build.js.map
395
+ //# sourceMappingURL=check-build.js.map
396
+ //# sourceMappingURL=check-build.js.map
397
+ //# sourceMappingURL=check-build.js.map
398
+ //# sourceMappingURL=check-build.js.map
399
+ //# sourceMappingURL=check-build.js.map
400
+ //# sourceMappingURL=check-build.js.map
401
+ //# sourceMappingURL=check-build.js.map
402
+ //# sourceMappingURL=check-build.js.map
403
+ //# sourceMappingURL=check-build.js.map
404
+ //# sourceMappingURL=check-build.js.map
405
+ //# sourceMappingURL=check-build.js.map
406
+ //# sourceMappingURL=check-build.js.map
407
+ //# sourceMappingURL=check-build.js.map
408
+ //# sourceMappingURL=check-build.js.map
409
+ //# sourceMappingURL=check-build.js.map
410
+ //# sourceMappingURL=check-build.js.map
411
+ //# sourceMappingURL=check-build.js.map
412
+ //# sourceMappingURL=check-build.js.map
413
+ //# sourceMappingURL=check-build.js.map
414
+ //# sourceMappingURL=check-build.js.map
415
+ //# sourceMappingURL=check-build.js.map
416
+ //# sourceMappingURL=check-build.js.map
417
+ //# sourceMappingURL=check-build.js.map
418
+ //# sourceMappingURL=check-build.js.map
419
+ //# sourceMappingURL=check-build.js.map
420
+ //# sourceMappingURL=check-build.js.map
421
+ //# sourceMappingURL=check-build.js.map
422
+ //# sourceMappingURL=check-build.js.map
423
+ //# sourceMappingURL=check-build.js.map
424
+ //# sourceMappingURL=check-build.js.map
425
+ //# sourceMappingURL=check-build.js.map
426
+ //# sourceMappingURL=check-build.js.map
427
+ //# sourceMappingURL=check-build.js.map
428
+ //# sourceMappingURL=check-build.js.map
429
+ //# sourceMappingURL=check-build.js.map
430
+ //# sourceMappingURL=check-build.js.map
431
+ //# sourceMappingURL=check-build.js.map
432
+ //# sourceMappingURL=check-build.js.map
433
+ //# sourceMappingURL=check-build.js.map
434
+ //# sourceMappingURL=check-build.js.map
435
+ //# sourceMappingURL=check-build.js.map
436
+ //# sourceMappingURL=check-build.js.map
437
+ //# sourceMappingURL=check-build.js.map
438
+ //# sourceMappingURL=check-build.js.map
439
+ //# sourceMappingURL=check-build.js.map
440
+ //# sourceMappingURL=check-build.js.map
441
+ //# sourceMappingURL=check-build.js.map
442
+ //# sourceMappingURL=check-build.js.map
443
+ //# sourceMappingURL=check-build.js.map
444
+ //# sourceMappingURL=check-build.js.map
445
+ //# sourceMappingURL=check-build.js.map
446
+ //# sourceMappingURL=check-build.js.map
447
+ //# sourceMappingURL=check-build.js.map
448
+ //# sourceMappingURL=check-build.js.map
449
+ //# sourceMappingURL=check-build.js.map
450
+ //# sourceMappingURL=check-build.js.map
451
+ //# sourceMappingURL=check-build.js.map
452
+ //# sourceMappingURL=check-build.js.map
453
+ //# sourceMappingURL=check-build.js.map
454
+ //# sourceMappingURL=check-build.js.map
455
+ //# sourceMappingURL=check-build.js.map
456
+ //# sourceMappingURL=check-build.js.map
457
+ //# sourceMappingURL=check-build.js.map
458
+ //# sourceMappingURL=check-build.js.map
459
+ //# sourceMappingURL=check-build.js.map
460
+ //# sourceMappingURL=check-build.js.map
461
+ //# sourceMappingURL=check-build.js.map
462
+ //# sourceMappingURL=check-build.js.map
463
+ //# sourceMappingURL=check-build.js.map
464
+ //# sourceMappingURL=check-build.js.map
465
+ //# sourceMappingURL=check-build.js.map
466
+ //# sourceMappingURL=check-build.js.map
467
+ //# sourceMappingURL=check-build.js.map
468
+ //# sourceMappingURL=check-build.js.map
469
+ //# sourceMappingURL=check-build.js.map
470
+ //# sourceMappingURL=check-build.js.map
471
+ //# sourceMappingURL=check-build.js.map
472
+ //# sourceMappingURL=check-build.js.map
473
+ //# sourceMappingURL=check-build.js.map
474
+ //# sourceMappingURL=check-build.js.map
475
+ //# sourceMappingURL=check-build.js.map
476
+ //# sourceMappingURL=check-build.js.map
477
+ //# sourceMappingURL=check-build.js.map
478
+ //# sourceMappingURL=check-build.js.map
479
+ //# sourceMappingURL=check-build.js.map
480
+ //# sourceMappingURL=check-build.js.map
481
+ //# sourceMappingURL=check-build.js.map
482
+ //# sourceMappingURL=check-build.js.map
483
+ //# sourceMappingURL=check-build.js.map
484
+ //# sourceMappingURL=check-build.js.map
485
+ //# sourceMappingURL=check-build.js.map
486
+ //# sourceMappingURL=check-build.js.map
487
+ //# sourceMappingURL=check-build.js.map
488
+ //# sourceMappingURL=check-build.js.map
489
+ //# sourceMappingURL=check-build.js.map
490
+ //# sourceMappingURL=check-build.js.map
491
+ //# sourceMappingURL=check-build.js.map
492
+ //# sourceMappingURL=check-build.js.map
493
+ //# sourceMappingURL=check-build.js.map
494
+ //# sourceMappingURL=check-build.js.map
495
+ //# sourceMappingURL=check-build.js.map
496
+ //# sourceMappingURL=check-build.js.map
497
+ //# sourceMappingURL=check-build.js.map
498
+ //# sourceMappingURL=check-build.js.map
499
+ //# sourceMappingURL=check-build.js.map
500
+ //# sourceMappingURL=check-build.js.map
501
+ //# sourceMappingURL=check-build.js.map
502
+ //# sourceMappingURL=check-build.js.map
503
+ //# sourceMappingURL=check-build.js.map
139
504
  //# sourceMappingURL=check-build.js.map
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=check-links.d.ts.map
package/check-links.js ADDED
@@ -0,0 +1,203 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Check for symbolic links and junctions in the project
4
+ * Prompts user to add them to .globalize.json5 exclude/include lists
5
+ * Prevents accidental exposure of linked directories
6
+ */
7
+
8
+ import fs from 'fs';
9
+ import path from 'path';
10
+ import { fileURLToPath } from 'url';
11
+ import JSON5 from 'json5';
12
+ import readline from 'readline';
13
+
14
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
15
+
16
+ // Create readline interface for prompts
17
+ const rl = readline.createInterface({
18
+ input: process.stdin,
19
+ output: process.stdout
20
+ });
21
+
22
+ // Promisified question
23
+ function question(prompt) {
24
+ return new Promise((resolve) => {
25
+ rl.question(prompt, resolve);
26
+ });
27
+ }
28
+
29
+ // Check if path is a symbolic link or junction
30
+ function isSymbolicLink(fullPath) {
31
+ try {
32
+ const stats = fs.lstatSync(fullPath);
33
+ return stats.isSymbolicLink();
34
+ } catch (error) {
35
+ return false;
36
+ }
37
+ }
38
+
39
+ // Read .globalize.json5 config
40
+ function readConfig() {
41
+ const configPath = path.join(__dirname, '.globalize.json5');
42
+ try {
43
+ if (fs.existsSync(configPath)) {
44
+ const content = fs.readFileSync(configPath, 'utf8');
45
+ return JSON5.parse(content);
46
+ }
47
+ } catch (error) {
48
+ console.warn('Warning: Could not read .globalize.json5');
49
+ }
50
+ return {};
51
+ }
52
+
53
+ // Write .globalize.json5 config
54
+ function writeConfig(config) {
55
+ const configPath = path.join(__dirname, '.globalize.json5');
56
+
57
+ // Format nicely with comments
58
+ let output = '{\n';
59
+
60
+ if (config.exclude && config.exclude.length > 0) {
61
+ output += ' // Directories to exclude from processing\n';
62
+ output += ' exclude: [\n';
63
+ config.exclude.forEach((item, idx) => {
64
+ const comma = idx < config.exclude.length - 1 ? ',' : '';
65
+ output += ` "${item}"${comma}\n`;
66
+ });
67
+ output += ' ],\n';
68
+ }
69
+
70
+ if (config.include && config.include.length > 0) {
71
+ output += ' // Directories to explicitly include (overrides exclude)\n';
72
+ output += ' include: [\n';
73
+ config.include.forEach((item, idx) => {
74
+ const comma = idx < config.include.length - 1 ? ',' : '';
75
+ output += ` "${item}"${comma}\n`;
76
+ });
77
+ output += ' ],\n';
78
+ }
79
+
80
+ // Add other config properties
81
+ for (const [key, value] of Object.entries(config)) {
82
+ if (key !== 'exclude' && key !== 'include') {
83
+ output += ` ${key}: ${JSON.stringify(value)},\n`;
84
+ }
85
+ }
86
+
87
+ output = output.replace(/,\n$/, '\n'); // Remove trailing comma
88
+ output += '}\n';
89
+
90
+ fs.writeFileSync(configPath, output, 'utf8');
91
+ }
92
+
93
+ // Find all symbolic links/junctions
94
+ function findSymbolicLinks() {
95
+ const links = [];
96
+ const alwaysExclude = ['node_modules', '.git', 'recover'];
97
+
98
+ function scanDir(dir, relativePath = '') {
99
+ try {
100
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
101
+
102
+ for (const entry of entries) {
103
+ const fullPath = path.join(dir, entry.name);
104
+ const relPath = relativePath ? path.join(relativePath, entry.name) : entry.name;
105
+
106
+ // Skip always-excluded directories
107
+ if (alwaysExclude.includes(entry.name)) {
108
+ continue;
109
+ }
110
+
111
+ // Check if it's a symbolic link
112
+ if (isSymbolicLink(fullPath)) {
113
+ const target = fs.readlinkSync(fullPath);
114
+ links.push({
115
+ path: relPath,
116
+ fullPath: fullPath,
117
+ target: target,
118
+ isDirectory: entry.isDirectory()
119
+ });
120
+ } else if (entry.isDirectory()) {
121
+ scanDir(fullPath, relPath);
122
+ }
123
+ }
124
+ } catch (error) {
125
+ // Skip directories we can't read
126
+ }
127
+ }
128
+
129
+ scanDir(__dirname);
130
+ return links;
131
+ }
132
+
133
+ // Main function
134
+ async function main() {
135
+ console.log('🔍 Scanning for symbolic links and junctions...\n');
136
+
137
+ const links = findSymbolicLinks();
138
+
139
+ if (links.length === 0) {
140
+ console.log('✓ No symbolic links or junctions found');
141
+ rl.close();
142
+ return;
143
+ }
144
+
145
+ console.log(`Found ${links.length} symbolic link(s):\n`);
146
+
147
+ const config = readConfig();
148
+ const exclude = new Set(config.exclude || []);
149
+ const include = new Set(config.include || []);
150
+
151
+ let modified = false;
152
+
153
+ for (const link of links) {
154
+ console.log(`\n📁 ${link.path}`);
155
+ console.log(` → Links to: ${link.target}`);
156
+
157
+ // Check if already configured
158
+ if (exclude.has(link.path)) {
159
+ console.log(` ✓ Already in exclude list`);
160
+ continue;
161
+ }
162
+ if (include.has(link.path)) {
163
+ console.log(` ✓ Already in include list`);
164
+ continue;
165
+ }
166
+
167
+ // Prompt user
168
+ const answer = await question(
169
+ ' Action? (e)xclude, (i)nclude, (s)kip: '
170
+ );
171
+
172
+ if (answer.toLowerCase() === 'e') {
173
+ exclude.add(link.path);
174
+ console.log(` ✓ Added to exclude list`);
175
+ modified = true;
176
+ } else if (answer.toLowerCase() === 'i') {
177
+ include.add(link.path);
178
+ console.log(` ✓ Added to include list`);
179
+ modified = true;
180
+ } else {
181
+ console.log(` ⊘ Skipped`);
182
+ }
183
+ }
184
+
185
+ if (modified) {
186
+ config.exclude = Array.from(exclude).sort();
187
+ config.include = Array.from(include).sort();
188
+
189
+ writeConfig(config);
190
+ console.log('\n✓ Updated .globalize.json5');
191
+ } else {
192
+ console.log('\n⊘ No changes made');
193
+ }
194
+
195
+ rl.close();
196
+ }
197
+
198
+ // Run the check
199
+ main().catch(error => {
200
+ console.error('Error:', error.message);
201
+ rl.close();
202
+ process.exit(1);
203
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bobfrankston/npmglobalize",
3
- "version": "1.0.39",
3
+ "version": "1.0.41",
4
4
  "description": "Transform file: dependencies to npm versions for publishing",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -11,7 +11,8 @@
11
11
  "build": "tsc",
12
12
  "watch": "tsc -w",
13
13
  "prestart": "node check-build.js",
14
- "check": "node check-build.js"
14
+ "check": "node check-build.js",
15
+ "check-links": "node check-links.js"
15
16
  },
16
17
  "keywords": [
17
18
  "npm",
package/set-npm-token.ps1 DELETED
@@ -1,139 +0,0 @@
1
- # Set npm token on Windows and WSL
2
- # Usage: .\set-npm-token.ps1
3
- # Reads token from token.env file
4
-
5
- $tokenFile = Join-Path $PSScriptRoot "token.env"
6
-
7
- if (-not (Test-Path $tokenFile)) {
8
- Write-Host "ERROR: token.env file not found" -ForegroundColor Red
9
- Write-Host ""
10
- Write-Host "Create a token.env file with your npm token:" -ForegroundColor Yellow
11
- Write-Host " NPM_TOKEN=npm_YOUR_TOKEN_HERE"
12
- Write-Host ""
13
- Write-Host "Get your token from: https://www.npmjs.com/settings/[username]/tokens" -ForegroundColor Cyan
14
- Write-Host " 1. Click 'Generate New Token' -> 'Granular Access Token'"
15
- Write-Host " 2. Set permissions: Read and write"
16
- Write-Host " 3. Enable 'Bypass 2FA requirement'"
17
- Write-Host ""
18
- exit 1
19
- }
20
-
21
- # Read token from file
22
- $tokenContent = Get-Content $tokenFile -Raw
23
- if ($tokenContent -match 'NPM_TOKEN\s*=\s*(.+)') {
24
- $Token = $matches[1].Trim()
25
- } else {
26
- Write-Host "ERROR: Could not find NPM_TOKEN in token.env" -ForegroundColor Red
27
- Write-Host "Expected format: NPM_TOKEN=npm_YOUR_TOKEN_HERE" -ForegroundColor Yellow
28
- exit 1
29
- }
30
-
31
- if (-not $Token.StartsWith("npm_")) {
32
- Write-Host "WARNING: Token should start with 'npm_'" -ForegroundColor Yellow
33
- Write-Host "Current token: $($Token.Substring(0, [Math]::Min(10, $Token.Length)))..." -ForegroundColor Yellow
34
- Write-Host ""
35
- $continue = Read-Host "Continue anyway? (y/N)"
36
- if ($continue -ne "y" -and $continue -ne "Y") {
37
- exit 1
38
- }
39
- }
40
-
41
- Write-Host "Setting npm token on Windows..." -ForegroundColor Cyan
42
- Write-Host ""
43
-
44
- # Method 1: Set in Windows Registry (permanent, user-level)
45
- Write-Host "Setting NPM_TOKEN in registry (permanent)..." -ForegroundColor Cyan
46
- try {
47
- # Using setx to set user environment variable permanently
48
- $process = Start-Process -FilePath "setx" -ArgumentList "NPM_TOKEN", $Token -NoNewWindow -Wait -PassThru
49
- if ($process.ExitCode -eq 0) {
50
- Write-Host "✓ NPM_TOKEN set in registry via setx" -ForegroundColor Green
51
- } else {
52
- Write-Host "✗ setx failed with exit code $($process.ExitCode)" -ForegroundColor Red
53
- }
54
- } catch {
55
- Write-Host "✗ Failed to set registry value: $_" -ForegroundColor Red
56
- }
57
-
58
- # Set in current session
59
- $env:NPM_TOKEN = $Token
60
- Write-Host "✓ NPM_TOKEN set for this PowerShell session" -ForegroundColor Green
61
- Write-Host ""
62
-
63
- # Method 2: Use npm config set (recommended by npm)
64
- Write-Host "Setting auth token via npm config..." -ForegroundColor Cyan
65
- try {
66
- npm config set //registry.npmjs.org/:_authToken $Token 2>&1 | Out-Null
67
- if ($LASTEXITCODE -eq 0) {
68
- Write-Host "✓ Auth token set via 'npm config set'" -ForegroundColor Green
69
- } else {
70
- Write-Host "✗ npm config set failed" -ForegroundColor Red
71
- }
72
- } catch {
73
- Write-Host "✗ npm config set failed: $_" -ForegroundColor Red
74
- }
75
- Write-Host ""
76
-
77
- # Test Windows npm authentication
78
- Write-Host "Testing Windows npm authentication..."
79
- try {
80
- $username = npm whoami 2>&1
81
- if ($LASTEXITCODE -eq 0) {
82
- Write-Host "✓ Windows authentication successful: $username" -ForegroundColor Green
83
- } else {
84
- Write-Host "✗ Windows authentication failed" -ForegroundColor Red
85
- Write-Host "Error: $username" -ForegroundColor Red
86
- }
87
- } catch {
88
- Write-Host "✗ Windows authentication failed: $_" -ForegroundColor Red
89
- }
90
- Write-Host ""
91
-
92
- # Method 3: Set in WSL if available
93
- if (Get-Command wsl -ErrorAction SilentlyContinue) {
94
- Write-Host "Setting npm token in WSL..." -ForegroundColor Cyan
95
-
96
- # Export token to WSL and use npm config set
97
- $wslScript = @"
98
- export NPM_TOKEN='$Token'
99
- npm config set //registry.npmjs.org/:_authToken '$Token' 2>/dev/null
100
- if [ \$? -eq 0 ]; then
101
- echo '✓ WSL auth token set via npm config'
102
- if command -v npm >/dev/null 2>&1; then
103
- username=\$(npm whoami 2>&1)
104
- if [ \$? -eq 0 ]; then
105
- echo '✓ WSL authentication successful:' \$username
106
- else
107
- echo '✗ WSL authentication failed'
108
- fi
109
- fi
110
- else
111
- echo '⚠ npm not installed in WSL or npm config failed'
112
- fi
113
- "@
114
-
115
- wsl bash -c $wslScript
116
- Write-Host ""
117
- } else {
118
- Write-Host "WSL not found - skipping WSL setup" -ForegroundColor Yellow
119
- Write-Host ""
120
- }
121
-
122
- Write-Host ""
123
- Write-Host "=== Setup Complete ===" -ForegroundColor Green
124
- Write-Host ""
125
- Write-Host "Methods used:" -ForegroundColor Cyan
126
- Write-Host " 1. setx NPM_TOKEN (permanent in Windows registry)" -ForegroundColor Yellow
127
- Write-Host " 2. `$env:NPM_TOKEN (current PowerShell session)" -ForegroundColor Yellow
128
- Write-Host " 3. npm config set (adds to .npmrc)" -ForegroundColor Yellow
129
- Write-Host ""
130
- Write-Host "Differences from manual approach:" -ForegroundColor Cyan
131
- Write-Host " Your method: setx + set + npm set" -ForegroundColor Gray
132
- Write-Host " This script: Same thing, automated + WSL support" -ForegroundColor Gray
133
- Write-Host ""
134
- Write-Host "To verify authentication:"
135
- Write-Host " Windows: npm whoami" -ForegroundColor Green
136
- Write-Host " WSL: wsl npm whoami" -ForegroundColor Green
137
- Write-Host ""
138
- Write-Host "Note: Close and reopen PowerShell for setx changes to take effect in new sessions" -ForegroundColor Yellow
139
- Write-Host ""
package/set-npm-token.sh DELETED
@@ -1,123 +0,0 @@
1
- #!/bin/bash
2
- # Set npm token on Linux/WSL
3
- # Usage: ./set-npm-token.sh
4
- # Reads token from token.env file
5
-
6
- set -e # Exit on error
7
-
8
- # Colors
9
- RED='\033[0;31m'
10
- GREEN='\033[0;32m'
11
- YELLOW='\033[1;33m'
12
- CYAN='\033[0;36m'
13
- NC='\033[0m' # No Color
14
-
15
- # Get script directory
16
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
17
- TOKEN_FILE="$SCRIPT_DIR/token.env"
18
-
19
- if [ ! -f "$TOKEN_FILE" ]; then
20
- echo -e "${RED}ERROR: token.env file not found${NC}"
21
- echo ""
22
- echo -e "${YELLOW}Create a token.env file with your npm token:${NC}"
23
- echo " NPM_TOKEN=npm_YOUR_TOKEN_HERE"
24
- echo ""
25
- echo -e "${CYAN}Get your token from: https://www.npmjs.com/settings/[username]/tokens${NC}"
26
- echo " 1. Click 'Generate New Token' -> 'Granular Access Token'"
27
- echo " 2. Set permissions: Read and write"
28
- echo " 3. Enable 'Bypass 2FA requirement'"
29
- echo ""
30
- exit 1
31
- fi
32
-
33
- # Read token from file
34
- if grep -q "NPM_TOKEN" "$TOKEN_FILE"; then
35
- TOKEN=$(grep "NPM_TOKEN" "$TOKEN_FILE" | cut -d '=' -f 2- | tr -d ' \r\n')
36
- else
37
- echo -e "${RED}ERROR: Could not find NPM_TOKEN in token.env${NC}"
38
- echo -e "${YELLOW}Expected format: NPM_TOKEN=npm_YOUR_TOKEN_HERE${NC}"
39
- exit 1
40
- fi
41
-
42
- if [[ ! "$TOKEN" =~ ^npm_ ]]; then
43
- echo -e "${YELLOW}WARNING: Token should start with 'npm_'${NC}"
44
- echo -e "${YELLOW}Current token: ${TOKEN:0:10}...${NC}"
45
- echo ""
46
- read -p "Continue anyway? (y/N) " -n 1 -r
47
- echo
48
- if [[ ! $REPLY =~ ^[Yy]$ ]]; then
49
- exit 1
50
- fi
51
- fi
52
-
53
- echo -e "${CYAN}Setting npm token on Linux/WSL...${NC}"
54
- echo ""
55
-
56
- # Method 1: Export for current session
57
- export NPM_TOKEN="$TOKEN"
58
- echo -e "${GREEN}✓ NPM_TOKEN set for this shell session${NC}"
59
-
60
- # Method 2: Add to shell profile for persistence
61
- SHELL_RC=""
62
- if [ -n "$BASH_VERSION" ]; then
63
- if [ -f "$HOME/.bashrc" ]; then
64
- SHELL_RC="$HOME/.bashrc"
65
- elif [ -f "$HOME/.bash_profile" ]; then
66
- SHELL_RC="$HOME/.bash_profile"
67
- fi
68
- elif [ -n "$ZSH_VERSION" ]; then
69
- SHELL_RC="$HOME/.zshrc"
70
- fi
71
-
72
- if [ -n "$SHELL_RC" ]; then
73
- # Check if NPM_TOKEN is already in the file
74
- if grep -q "^export NPM_TOKEN=" "$SHELL_RC"; then
75
- # Update existing line
76
- sed -i.bak "s|^export NPM_TOKEN=.*|export NPM_TOKEN=\"$TOKEN\"|" "$SHELL_RC"
77
- echo -e "${GREEN}✓ Updated NPM_TOKEN in $SHELL_RC${NC}"
78
- else
79
- # Add new line
80
- echo "" >> "$SHELL_RC"
81
- echo "# npm authentication token (added by set-npm-token.sh)" >> "$SHELL_RC"
82
- echo "export NPM_TOKEN=\"$TOKEN\"" >> "$SHELL_RC"
83
- echo -e "${GREEN}✓ Added NPM_TOKEN to $SHELL_RC${NC}"
84
- fi
85
- fi
86
- echo ""
87
-
88
- # Method 3: Use npm config set (recommended)
89
- echo -e "${CYAN}Setting auth token via npm config...${NC}"
90
- if npm config set //registry.npmjs.org/:_authToken "$TOKEN" 2>/dev/null; then
91
- echo -e "${GREEN}✓ Auth token set via 'npm config set'${NC}"
92
- else
93
- echo -e "${RED}✗ npm config set failed${NC}"
94
- fi
95
- echo ""
96
-
97
- # Test authentication
98
- echo -e "${CYAN}Testing npm authentication...${NC}"
99
- if username=$(npm whoami 2>&1); then
100
- echo -e "${GREEN}✓ Authentication successful: $username${NC}"
101
- else
102
- echo -e "${RED}✗ Authentication failed${NC}"
103
- echo -e "${RED}$username${NC}"
104
- fi
105
- echo ""
106
-
107
- echo ""
108
- echo -e "${GREEN}=== Setup Complete ===${NC}"
109
- echo ""
110
- echo -e "${CYAN}Methods used:${NC}"
111
- echo -e " ${YELLOW}1. export NPM_TOKEN (current shell session)${NC}"
112
- if [ -n "$SHELL_RC" ]; then
113
- echo -e " ${YELLOW}2. Added to $SHELL_RC (permanent)${NC}"
114
- fi
115
- echo -e " ${YELLOW}3. npm config set (adds to ~/.npmrc)${NC}"
116
- echo ""
117
- echo -e "${CYAN}To verify authentication:${NC}"
118
- echo -e " ${GREEN}npm whoami${NC}"
119
- echo ""
120
- if [ -n "$SHELL_RC" ]; then
121
- echo -e "${YELLOW}Note: Reopen terminal or run 'source $SHELL_RC' for permanent changes${NC}"
122
- echo ""
123
- fi