|
1 | 1 | #! /usr/bin/env bun
|
2 |
| - |
3 |
| -import path from 'path'; |
4 |
| -import fs from 'fs'; |
5 |
| -import debug from 'debug'; |
6 |
| -import chalk from 'chalk'; |
7 |
| -import type { BunFile } from 'bun'; |
8 |
| -import { getMonorepoRoot, getPackageJson } from './-utils'; |
9 |
| - |
10 |
| -const log = debug('wd:sync-logos'); |
11 |
| - |
12 |
| -async function copyFiles({ |
13 |
| - packageDir, |
14 |
| - packageLogosDir, |
15 |
| - logosDir, |
16 |
| - isCopied, |
17 |
| -}: { |
18 |
| - packageDir: string; |
19 |
| - packageLogosDir: string; |
20 |
| - logosDir: string; |
21 |
| - isCopied: boolean; |
22 |
| -}) { |
23 |
| - // if we are in copy mode, remove any existing symlink and copy the files |
24 |
| - if (isCopied) { |
25 |
| - fs.rmSync(packageLogosDir, { recursive: true, force: true }); |
26 |
| - log(`\t\t\t🗑️ Deleted existing copy of ${packageDir}/logos`); |
27 |
| - } |
28 |
| - fs.mkdirSync(packageLogosDir, { recursive: true }); |
29 |
| - log(`\t\t\t📁 Created ${packageDir}/logos`); |
30 |
| - |
31 |
| - for (const logo of fs.readdirSync(logosDir, { recursive: true, encoding: 'utf-8' })) { |
32 |
| - const logoPath = path.join(logosDir, logo); |
33 |
| - const destPath = path.join(packageLogosDir, logo); |
34 |
| - fs.copyFileSync(logoPath, destPath); |
35 |
| - log(`\t\t\t📁 Copied ${logo} to ${packageDir}/logos`); |
36 |
| - } |
37 |
| -} |
38 |
| - |
39 |
| -async function updatePackageJson({ pkg, file, nicePath }: { pkg: any; file: BunFile; path: string; nicePath: string }) { |
40 |
| - // ensure "files" field in package.json includes "logos" |
41 |
| - if (!pkg.files) { |
42 |
| - pkg.files = ['logos']; |
43 |
| - await file.write(JSON.stringify(pkg, null, 2)); |
44 |
| - log(`\t\t📝 Added "logos" to "files" in ${nicePath}`); |
45 |
| - } else if (!pkg.files.includes('logos')) { |
46 |
| - pkg.files.push('logos'); |
47 |
| - await file.write(JSON.stringify(pkg, null, 2)); |
48 |
| - log(`\t\t📝 Added "logos" to "files" in ${nicePath}`); |
49 |
| - } |
50 |
| -} |
51 |
| - |
52 |
| -async function main() { |
53 |
| - log( |
54 |
| - `\n\t${chalk.gray('=').repeat(60)}\n\t\t${chalk.magentaBright('@warp-drive/')}${chalk.greenBright('internal-tooling')} Sync Logos\n\t${chalk.gray('=').repeat(60)}\n\n\t\t${chalk.gray(`Syncing logo files from monorepo root to each public package`)}\n\n` |
55 |
| - ); |
56 |
| - const monorepoRoot = await getMonorepoRoot(); |
57 |
| - |
58 |
| - // sync the logos from the monorepo root to each |
59 |
| - // package directory that has a logos directory |
60 |
| - |
61 |
| - const logosDir = path.join(monorepoRoot, 'logos'); |
62 |
| - const packagesDir = path.join(monorepoRoot, 'packages'); |
63 |
| - |
64 |
| - for (const packageDir of fs.readdirSync(packagesDir)) { |
65 |
| - const packageLogosDir = path.join(packagesDir, packageDir, 'logos'); |
66 |
| - const isCopied = fs.existsSync(packageLogosDir); |
67 |
| - const details = await getPackageJson({ packageDir, packagesDir }); |
68 |
| - |
69 |
| - if (details.pkg.private) { |
70 |
| - log(`\t\t🔒 Skipping private package ${details.nicePath}`); |
71 |
| - continue; |
72 |
| - } |
73 |
| - |
74 |
| - log(`\t\t🔁 Syncing logos to ${packageDir}`); |
75 |
| - |
76 |
| - await copyFiles({ |
77 |
| - packageDir, |
78 |
| - packageLogosDir, |
79 |
| - logosDir, |
80 |
| - isCopied, |
81 |
| - }); |
82 |
| - |
83 |
| - await updatePackageJson(details); |
84 |
| - } |
85 |
| -} |
| 2 | +import { main } from './tasks/sync-logos'; |
86 | 3 |
|
87 | 4 | main();
|
0 commit comments