@take-out/cli 0.2.9 → 0.3.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.
- package/dist/cjs/cli.cjs +0 -0
- package/dist/esm/cli.mjs +0 -0
- package/dist/esm/index.js +1 -3
- package/dist/esm/index.js.map +1 -6
- package/package.json +7 -6
- package/src/commands/changed.ts +6 -6
- package/src/commands/onboard.ts +63 -63
- package/src/commands/run.ts +1 -1
- package/src/commands/script.ts +3 -3
- package/src/commands/skills.ts +6 -6
- package/src/commands/sync.ts +3 -3
- package/src/utils/env-setup.ts +8 -8
- package/src/utils/env.ts +3 -3
- package/src/utils/files.ts +6 -6
- package/src/utils/parallel-runner.ts +1 -1
- package/src/utils/prompts.ts +6 -6
- package/src/utils/script-listing.ts +5 -5
- package/src/utils/script-utils.ts +1 -1
- package/src/utils/sync.ts +1 -1
- package/src/withExpoModulesCoreSwift6Fix.cjs +58 -0
- package/dist/cjs/cli.js +0 -123
- package/dist/cjs/cli.js.map +0 -6
- package/dist/cjs/commands/changed.js +0 -214
- package/dist/cjs/commands/changed.js.map +0 -6
- package/dist/cjs/commands/docs.js +0 -174
- package/dist/cjs/commands/docs.js.map +0 -6
- package/dist/cjs/commands/env-setup.js +0 -78
- package/dist/cjs/commands/env-setup.js.map +0 -6
- package/dist/cjs/commands/onboard.js +0 -641
- package/dist/cjs/commands/onboard.js.map +0 -6
- package/dist/cjs/commands/run-all.js +0 -74
- package/dist/cjs/commands/run-all.js.map +0 -6
- package/dist/cjs/commands/run.js +0 -95
- package/dist/cjs/commands/run.js.map +0 -6
- package/dist/cjs/commands/script.js +0 -261
- package/dist/cjs/commands/script.js.map +0 -6
- package/dist/cjs/commands/skills.js +0 -168
- package/dist/cjs/commands/skills.js.map +0 -6
- package/dist/cjs/commands/sync.js +0 -187
- package/dist/cjs/commands/sync.js.map +0 -6
- package/dist/cjs/constants/ascii.js +0 -30
- package/dist/cjs/constants/ascii.js.map +0 -6
- package/dist/cjs/index.js +0 -21
- package/dist/cjs/index.js.map +0 -6
- package/dist/cjs/types.js +0 -14
- package/dist/cjs/types.js.map +0 -6
- package/dist/cjs/utils/env-categories.js +0 -296
- package/dist/cjs/utils/env-categories.js.map +0 -6
- package/dist/cjs/utils/env-setup.js +0 -190
- package/dist/cjs/utils/env-setup.js.map +0 -6
- package/dist/cjs/utils/env.js +0 -97
- package/dist/cjs/utils/env.js.map +0 -6
- package/dist/cjs/utils/files.js +0 -164
- package/dist/cjs/utils/files.js.map +0 -6
- package/dist/cjs/utils/parallel-runner.js +0 -113
- package/dist/cjs/utils/parallel-runner.js.map +0 -6
- package/dist/cjs/utils/ports.js +0 -81
- package/dist/cjs/utils/ports.js.map +0 -6
- package/dist/cjs/utils/prerequisites.js +0 -107
- package/dist/cjs/utils/prerequisites.js.map +0 -6
- package/dist/cjs/utils/prompts.js +0 -162
- package/dist/cjs/utils/prompts.js.map +0 -6
- package/dist/cjs/utils/script-listing.js +0 -97
- package/dist/cjs/utils/script-listing.js.map +0 -6
- package/dist/cjs/utils/script-utils.js +0 -82
- package/dist/cjs/utils/script-utils.js.map +0 -6
- package/dist/cjs/utils/sync.js +0 -70
- package/dist/cjs/utils/sync.js.map +0 -6
- package/dist/esm/cli.js +0 -106
- package/dist/esm/cli.js.map +0 -6
- package/dist/esm/commands/changed.js +0 -194
- package/dist/esm/commands/changed.js.map +0 -6
- package/dist/esm/commands/docs.js +0 -159
- package/dist/esm/commands/docs.js.map +0 -6
- package/dist/esm/commands/env-setup.js +0 -56
- package/dist/esm/commands/env-setup.js.map +0 -6
- package/dist/esm/commands/onboard.js +0 -655
- package/dist/esm/commands/onboard.js.map +0 -6
- package/dist/esm/commands/run-all.js +0 -53
- package/dist/esm/commands/run-all.js.map +0 -6
- package/dist/esm/commands/run.js +0 -74
- package/dist/esm/commands/run.js.map +0 -6
- package/dist/esm/commands/script.js +0 -255
- package/dist/esm/commands/script.js.map +0 -6
- package/dist/esm/commands/skills.js +0 -159
- package/dist/esm/commands/skills.js.map +0 -6
- package/dist/esm/commands/sync.js +0 -177
- package/dist/esm/commands/sync.js.map +0 -6
- package/dist/esm/constants/ascii.js +0 -14
- package/dist/esm/constants/ascii.js.map +0 -6
- package/dist/esm/types.js +0 -1
- package/dist/esm/types.js.map +0 -6
- package/dist/esm/utils/env-categories.js +0 -272
- package/dist/esm/utils/env-categories.js.map +0 -6
- package/dist/esm/utils/env-setup.js +0 -171
- package/dist/esm/utils/env-setup.js.map +0 -6
- package/dist/esm/utils/env.js +0 -83
- package/dist/esm/utils/env.js.map +0 -6
- package/dist/esm/utils/files.js +0 -150
- package/dist/esm/utils/files.js.map +0 -6
- package/dist/esm/utils/parallel-runner.js +0 -98
- package/dist/esm/utils/parallel-runner.js.map +0 -6
- package/dist/esm/utils/ports.js +0 -65
- package/dist/esm/utils/ports.js.map +0 -6
- package/dist/esm/utils/prerequisites.js +0 -91
- package/dist/esm/utils/prerequisites.js.map +0 -6
- package/dist/esm/utils/prompts.js +0 -139
- package/dist/esm/utils/prompts.js.map +0 -6
- package/dist/esm/utils/script-listing.js +0 -80
- package/dist/esm/utils/script-listing.js.map +0 -6
- package/dist/esm/utils/script-utils.js +0 -68
- package/dist/esm/utils/script-utils.js.map +0 -6
- package/dist/esm/utils/sync.js +0 -50
- package/dist/esm/utils/sync.js.map +0 -6
package/dist/cjs/cli.cjs
CHANGED
|
File without changes
|
package/dist/esm/cli.mjs
CHANGED
|
File without changes
|
package/dist/esm/index.js
CHANGED
package/dist/esm/index.js.map
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@take-out/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "CLI tools for Takeout starter kit - interactive onboarding and project setup",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -37,7 +37,8 @@
|
|
|
37
37
|
"import": "./dist/esm/constants/*.mjs",
|
|
38
38
|
"require": "./dist/cjs/constants/*.cjs"
|
|
39
39
|
},
|
|
40
|
-
"./withOpSqliteStatic": "./src/withOpSqliteStatic.cjs"
|
|
40
|
+
"./withOpSqliteStatic": "./src/withOpSqliteStatic.cjs",
|
|
41
|
+
"./withExpoModulesCoreSwift6Fix": "./src/withExpoModulesCoreSwift6Fix.cjs"
|
|
41
42
|
},
|
|
42
43
|
"scripts": {
|
|
43
44
|
"build": "tamagui-build --skip-native --skip-types",
|
|
@@ -51,9 +52,9 @@
|
|
|
51
52
|
},
|
|
52
53
|
"dependencies": {
|
|
53
54
|
"@clack/prompts": "^0.8.2",
|
|
54
|
-
"@take-out/docs": "0.
|
|
55
|
-
"@take-out/run": "0.
|
|
56
|
-
"@take-out/scripts": "0.
|
|
55
|
+
"@take-out/docs": "0.3.0",
|
|
56
|
+
"@take-out/run": "0.3.0",
|
|
57
|
+
"@take-out/scripts": "0.3.0",
|
|
57
58
|
"citty": "^0.1.6",
|
|
58
59
|
"picocolors": "^1.1.1"
|
|
59
60
|
},
|
|
@@ -66,7 +67,7 @@
|
|
|
66
67
|
}
|
|
67
68
|
},
|
|
68
69
|
"devDependencies": {
|
|
69
|
-
"@tamagui/build": "2.0.0-rc.
|
|
70
|
+
"@tamagui/build": "2.0.0-rc.36",
|
|
70
71
|
"@types/node": "24.0.3",
|
|
71
72
|
"bun-types": "latest",
|
|
72
73
|
"oxfmt": "^0.16.0",
|
package/src/commands/changed.ts
CHANGED
|
@@ -67,7 +67,7 @@ function readTakeoutConfig(): TakeoutConfig | null {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
function parseConventionalCommit(
|
|
70
|
-
message: string
|
|
70
|
+
message: string,
|
|
71
71
|
): { type: string; scope?: string; message: string; breaking: boolean } | null {
|
|
72
72
|
// match conventional commit format: type(scope)!: message or type!: message
|
|
73
73
|
const match = message.match(/^(\w+)(?:\(([^)]+)\))?(!)?: (.+)$/)
|
|
@@ -126,7 +126,7 @@ function getCommitsBetween(fromSha: string, toRef: string): CommitInfo[] {
|
|
|
126
126
|
// format: hash|date|message
|
|
127
127
|
const result = execSync(
|
|
128
128
|
`git log ${fromSha}..${toRef} --pretty=format:"%H|%ad|%s" --date=short 2>/dev/null`,
|
|
129
|
-
{ encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 }
|
|
129
|
+
{ encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 },
|
|
130
130
|
)
|
|
131
131
|
|
|
132
132
|
const lines = result.trim().split('\n').filter(Boolean)
|
|
@@ -183,7 +183,7 @@ function formatChangelog(commits: CommitInfo[]): void {
|
|
|
183
183
|
for (const commit of breakingChanges) {
|
|
184
184
|
const scope = commit.scope ? pc.cyan(`(${commit.scope})`) : ''
|
|
185
185
|
console.info(
|
|
186
|
-
` ${pc.red('!')} ${scope} ${commit.message} ${pc.dim(`(${commit.hash})`)}
|
|
186
|
+
` ${pc.red('!')} ${scope} ${commit.message} ${pc.dim(`(${commit.hash})`)}`,
|
|
187
187
|
)
|
|
188
188
|
}
|
|
189
189
|
}
|
|
@@ -229,7 +229,7 @@ function formatChangelog(commits: CommitInfo[]): void {
|
|
|
229
229
|
for (const commit of typeCommits) {
|
|
230
230
|
const scope = commit.scope ? pc.cyan(`(${commit.scope}) `) : ''
|
|
231
231
|
console.info(
|
|
232
|
-
` ${pc.dim('-')} ${scope}${commit.message} ${pc.dim(`(${commit.hash})`)}
|
|
232
|
+
` ${pc.dim('-')} ${scope}${commit.message} ${pc.dim(`(${commit.hash})`)}`,
|
|
233
233
|
)
|
|
234
234
|
}
|
|
235
235
|
}
|
|
@@ -300,8 +300,8 @@ export const changedCommand = defineCommand({
|
|
|
300
300
|
console.info()
|
|
301
301
|
console.info(
|
|
302
302
|
pc.bold(
|
|
303
|
-
`${commits.length} commit${commits.length === 1 ? '' : 's'} since last sync
|
|
304
|
-
)
|
|
303
|
+
`${commits.length} commit${commits.length === 1 ? '' : 's'} since last sync:`,
|
|
304
|
+
),
|
|
305
305
|
)
|
|
306
306
|
|
|
307
307
|
formatChangelog(commits)
|
package/src/commands/onboard.ts
CHANGED
|
@@ -140,8 +140,8 @@ export const onboardCommand = defineCommand({
|
|
|
140
140
|
|
|
141
141
|
console.info(
|
|
142
142
|
pc.gray(
|
|
143
|
-
"We've included a variety of packages we found useful building apps with this stack:"
|
|
144
|
-
)
|
|
143
|
+
"We've included a variety of packages we found useful building apps with this stack:",
|
|
144
|
+
),
|
|
145
145
|
)
|
|
146
146
|
console.info(pc.gray(' • @take-out/cli - CLI tools and onboarding'))
|
|
147
147
|
console.info(pc.gray(' • @take-out/helpers - Utility functions'))
|
|
@@ -153,7 +153,7 @@ export const onboardCommand = defineCommand({
|
|
|
153
153
|
|
|
154
154
|
const shouldEject = await confirmContinue(
|
|
155
155
|
'Eject from monorepo setup? (removes ./packages, uses published versions)',
|
|
156
|
-
true
|
|
156
|
+
true,
|
|
157
157
|
)
|
|
158
158
|
|
|
159
159
|
if (shouldEject) {
|
|
@@ -238,7 +238,7 @@ export const onboardCommand = defineCommand({
|
|
|
238
238
|
|
|
239
239
|
if (!hasRequired) {
|
|
240
240
|
showWarning(
|
|
241
|
-
'Some required prerequisites are missing. You can continue, but setup may fail.'
|
|
241
|
+
'Some required prerequisites are missing. You can continue, but setup may fail.',
|
|
242
242
|
)
|
|
243
243
|
const shouldContinue = await confirmContinue('Continue anyway?', false)
|
|
244
244
|
if (!shouldContinue) {
|
|
@@ -262,7 +262,7 @@ export const onboardCommand = defineCommand({
|
|
|
262
262
|
|
|
263
263
|
const shouldCustomize = await confirmContinue(
|
|
264
264
|
'Customize project name and bundle identifier?',
|
|
265
|
-
false
|
|
265
|
+
false,
|
|
266
266
|
)
|
|
267
267
|
|
|
268
268
|
if (shouldCustomize) {
|
|
@@ -288,14 +288,14 @@ export const onboardCommand = defineCommand({
|
|
|
288
288
|
showInfo('Default web port: 8081 (TAMA in T9)')
|
|
289
289
|
const shouldCustomizePort = await confirmContinue(
|
|
290
290
|
'Customize web server port?',
|
|
291
|
-
false
|
|
291
|
+
false,
|
|
292
292
|
)
|
|
293
293
|
|
|
294
294
|
if (shouldCustomizePort) {
|
|
295
295
|
const newPort = await promptText(
|
|
296
296
|
'Web server port:',
|
|
297
297
|
'8081',
|
|
298
|
-
'3000, 8080, 8081, etc.'
|
|
298
|
+
'3000, 8080, 8081, etc.',
|
|
299
299
|
)
|
|
300
300
|
|
|
301
301
|
if (newPort && newPort !== '8081') {
|
|
@@ -334,7 +334,7 @@ export const onboardCommand = defineCommand({
|
|
|
334
334
|
|
|
335
335
|
const shouldConfigureCI = await confirmContinue(
|
|
336
336
|
'Configure GitHub Actions CI runners?',
|
|
337
|
-
true
|
|
337
|
+
true,
|
|
338
338
|
)
|
|
339
339
|
|
|
340
340
|
if (shouldConfigureCI) {
|
|
@@ -342,7 +342,7 @@ export const onboardCommand = defineCommand({
|
|
|
342
342
|
} else {
|
|
343
343
|
showInfo('Skipping CI runner configuration')
|
|
344
344
|
showWarning(
|
|
345
|
-
'Default CI uses ARM64 Docker builds. If not using ARM runners, update scripts/web/build-docker.ts'
|
|
345
|
+
'Default CI uses ARM64 Docker builds. If not using ARM runners, update scripts/web/build-docker.ts',
|
|
346
346
|
)
|
|
347
347
|
}
|
|
348
348
|
|
|
@@ -379,8 +379,8 @@ export const onboardCommand = defineCommand({
|
|
|
379
379
|
|
|
380
380
|
console.info(
|
|
381
381
|
pc.gray(
|
|
382
|
-
"We've included a variety of packages we found useful building apps with this stack:"
|
|
383
|
-
)
|
|
382
|
+
"We've included a variety of packages we found useful building apps with this stack:",
|
|
383
|
+
),
|
|
384
384
|
)
|
|
385
385
|
console.info(pc.gray(' • @take-out/cli - CLI tools and onboarding'))
|
|
386
386
|
console.info(pc.gray(' • @take-out/helpers - Utility functions'))
|
|
@@ -391,23 +391,23 @@ export const onboardCommand = defineCommand({
|
|
|
391
391
|
console.info()
|
|
392
392
|
console.info(pc.gray('These packages are included locally for two reasons:'))
|
|
393
393
|
console.info(
|
|
394
|
-
pc.gray(' 1. You can see their source and decide if you want to keep them')
|
|
394
|
+
pc.gray(' 1. You can see their source and decide if you want to keep them'),
|
|
395
395
|
)
|
|
396
396
|
console.info(
|
|
397
|
-
pc.gray(' 2. Anyone can easily submit fixes or improvements back to our repo')
|
|
397
|
+
pc.gray(' 2. Anyone can easily submit fixes or improvements back to our repo'),
|
|
398
398
|
)
|
|
399
399
|
console.info()
|
|
400
400
|
console.info(
|
|
401
401
|
pc.gray(
|
|
402
|
-
"Over time we'll publish new versions. You can sync with 'bun tko sync' (monorepo)"
|
|
403
|
-
)
|
|
402
|
+
"Over time we'll publish new versions. You can sync with 'bun tko sync' (monorepo)",
|
|
403
|
+
),
|
|
404
404
|
)
|
|
405
405
|
console.info(pc.gray("or if you eject, use 'bun up takeout' for package updates."))
|
|
406
406
|
console.info()
|
|
407
407
|
|
|
408
408
|
const shouldEject = await confirmContinue(
|
|
409
409
|
'Eject from monorepo setup? (removes ./packages, uses published versions)',
|
|
410
|
-
false
|
|
410
|
+
false,
|
|
411
411
|
)
|
|
412
412
|
|
|
413
413
|
if (shouldEject) {
|
|
@@ -510,19 +510,19 @@ async function customizeProject(cwd: string): Promise<void> {
|
|
|
510
510
|
const slug = await promptText(
|
|
511
511
|
'Project slug (URL-friendly):',
|
|
512
512
|
projectName.toLowerCase().replace(/\s+/g, '-'),
|
|
513
|
-
'my-awesome-app'
|
|
513
|
+
'my-awesome-app',
|
|
514
514
|
)
|
|
515
515
|
|
|
516
516
|
const bundleId = await promptText(
|
|
517
517
|
'Bundle identifier:',
|
|
518
518
|
`com.${slug}.app`,
|
|
519
|
-
'com.example.app'
|
|
519
|
+
'com.example.app',
|
|
520
520
|
)
|
|
521
521
|
|
|
522
522
|
const domain = await promptText(
|
|
523
523
|
'Development domain:',
|
|
524
524
|
'localhost:8081',
|
|
525
|
-
'localhost:8081'
|
|
525
|
+
'localhost:8081',
|
|
526
526
|
)
|
|
527
527
|
|
|
528
528
|
// Update package.json
|
|
@@ -591,8 +591,8 @@ async function setupUncloudDeployment(cwd: string): Promise<void> {
|
|
|
591
591
|
console.info()
|
|
592
592
|
console.info(
|
|
593
593
|
pc.gray(
|
|
594
|
-
'Uncloud provides:\n • Managed PostgreSQL with logical replication\n • Free subdomain (your-app.uncld.dev)\n • Automatic SSL certificates\n • Easy scaling'
|
|
595
|
-
)
|
|
594
|
+
'Uncloud provides:\n • Managed PostgreSQL with logical replication\n • Free subdomain (your-app.uncld.dev)\n • Automatic SSL certificates\n • Easy scaling',
|
|
595
|
+
),
|
|
596
596
|
)
|
|
597
597
|
console.info()
|
|
598
598
|
|
|
@@ -615,7 +615,7 @@ async function setupUncloudDeployment(cwd: string): Promise<void> {
|
|
|
615
615
|
label: 'ARM64 (Apple Silicon)',
|
|
616
616
|
hint: 'Hetzner ARM, Oracle ARM, Bare metal ARM servers',
|
|
617
617
|
},
|
|
618
|
-
]
|
|
618
|
+
],
|
|
619
619
|
)
|
|
620
620
|
|
|
621
621
|
if (architecture === 'cancel') {
|
|
@@ -653,7 +653,7 @@ async function setupUncloudDeployment(cwd: string): Promise<void> {
|
|
|
653
653
|
const appName = await promptText(
|
|
654
654
|
'App name for subdomain:',
|
|
655
655
|
defaultAppName,
|
|
656
|
-
defaultAppName
|
|
656
|
+
defaultAppName,
|
|
657
657
|
)
|
|
658
658
|
domain = `https://${appName}.uncld.dev`
|
|
659
659
|
zeroUrl = `https://zero-${appName}.uncld.dev`
|
|
@@ -661,12 +661,12 @@ async function setupUncloudDeployment(cwd: string): Promise<void> {
|
|
|
661
661
|
domain = await promptText(
|
|
662
662
|
'Enter your custom domain:',
|
|
663
663
|
undefined,
|
|
664
|
-
'https://yourapp.com'
|
|
664
|
+
'https://yourapp.com',
|
|
665
665
|
)
|
|
666
666
|
zeroUrl = await promptText(
|
|
667
667
|
'Enter your Zero sync domain:',
|
|
668
668
|
undefined,
|
|
669
|
-
'https://zero.yourapp.com'
|
|
669
|
+
'https://zero.yourapp.com',
|
|
670
670
|
)
|
|
671
671
|
console.info()
|
|
672
672
|
showWarning('Custom domain setup requires DNS configuration after deployment')
|
|
@@ -693,13 +693,13 @@ async function setupUncloudDeployment(cwd: string): Promise<void> {
|
|
|
693
693
|
const dbHost = await promptText(
|
|
694
694
|
'Database host (e.g., db-xxx.ondigitalocean.com):',
|
|
695
695
|
undefined,
|
|
696
|
-
'localhost'
|
|
696
|
+
'localhost',
|
|
697
697
|
)
|
|
698
698
|
const dbPort = await promptText('Database port:', '5432', '5432')
|
|
699
699
|
const dbName = await promptText(
|
|
700
700
|
'Main database name (will derive Zero databases from this):',
|
|
701
701
|
'postgres',
|
|
702
|
-
'postgres'
|
|
702
|
+
'postgres',
|
|
703
703
|
)
|
|
704
704
|
|
|
705
705
|
// Construct database URL (deployment script will derive Zero databases from this)
|
|
@@ -762,7 +762,7 @@ async function setupUncloudDeployment(cwd: string): Promise<void> {
|
|
|
762
762
|
const sshKeyPath = await promptText(
|
|
763
763
|
'Path to SSH private key:',
|
|
764
764
|
`${homedir()}/.ssh/id_rsa`,
|
|
765
|
-
`${homedir()}/.ssh/id_rsa
|
|
765
|
+
`${homedir()}/.ssh/id_rsa`,
|
|
766
766
|
)
|
|
767
767
|
|
|
768
768
|
if (sshKeyPath) {
|
|
@@ -773,8 +773,8 @@ async function setupUncloudDeployment(cwd: string): Promise<void> {
|
|
|
773
773
|
console.info()
|
|
774
774
|
showInfo(
|
|
775
775
|
pc.gray(
|
|
776
|
-
"For CI/CD, you'll need to add the SSH private key content as a GitHub secret"
|
|
777
|
-
)
|
|
776
|
+
"For CI/CD, you'll need to add the SSH private key content as a GitHub secret",
|
|
777
|
+
),
|
|
778
778
|
)
|
|
779
779
|
showInfo(pc.gray('The sync script will help with this'))
|
|
780
780
|
} else {
|
|
@@ -793,18 +793,18 @@ async function setupUncloudDeployment(cwd: string): Promise<void> {
|
|
|
793
793
|
console.info(pc.gray(` ${deployHost} (cluster subdomain from Uncloud DNS)`))
|
|
794
794
|
console.info()
|
|
795
795
|
console.info(
|
|
796
|
-
pc.gray('You can optionally configure custom domains (e.g., app.yourdomain.com) by:')
|
|
796
|
+
pc.gray('You can optionally configure custom domains (e.g., app.yourdomain.com) by:'),
|
|
797
797
|
)
|
|
798
798
|
console.info(pc.gray(' 1. Adding CNAME records in your DNS provider'))
|
|
799
799
|
console.info(pc.gray(` 2. Pointing to your cluster subdomain`))
|
|
800
800
|
console.info(
|
|
801
|
-
pc.gray(' 3. Setting VITE_WEB_HOSTNAME and VITE_ZERO_HOSTNAME in .env.production')
|
|
801
|
+
pc.gray(' 3. Setting VITE_WEB_HOSTNAME and VITE_ZERO_HOSTNAME in .env.production'),
|
|
802
802
|
)
|
|
803
803
|
console.info()
|
|
804
804
|
|
|
805
805
|
const configureCustomDomain = await confirmContinue(
|
|
806
806
|
'Configure custom domain now?',
|
|
807
|
-
false
|
|
807
|
+
false,
|
|
808
808
|
)
|
|
809
809
|
|
|
810
810
|
if (configureCustomDomain) {
|
|
@@ -816,27 +816,27 @@ async function setupUncloudDeployment(cwd: string): Promise<void> {
|
|
|
816
816
|
const clusterSubdomain = await promptText(
|
|
817
817
|
'Enter your cluster subdomain from uc dns show:',
|
|
818
818
|
'',
|
|
819
|
-
''
|
|
819
|
+
'',
|
|
820
820
|
)
|
|
821
821
|
|
|
822
822
|
if (clusterSubdomain) {
|
|
823
823
|
console.info()
|
|
824
824
|
showInfo('DNS Setup Instructions:')
|
|
825
825
|
console.info(
|
|
826
|
-
pc.gray('Add these CNAME records in your DNS provider (e.g., Cloudflare):')
|
|
826
|
+
pc.gray('Add these CNAME records in your DNS provider (e.g., Cloudflare):'),
|
|
827
827
|
)
|
|
828
828
|
console.info()
|
|
829
829
|
|
|
830
830
|
const webDomain = await promptText(
|
|
831
831
|
'Custom domain for web app (e.g., app.yourdomain.com):',
|
|
832
832
|
'',
|
|
833
|
-
''
|
|
833
|
+
'',
|
|
834
834
|
)
|
|
835
835
|
|
|
836
836
|
const zeroDomain = await promptText(
|
|
837
837
|
'Custom domain for zero sync (e.g., zero.yourdomain.com):',
|
|
838
838
|
'',
|
|
839
|
-
''
|
|
839
|
+
'',
|
|
840
840
|
)
|
|
841
841
|
|
|
842
842
|
if (webDomain) {
|
|
@@ -866,7 +866,7 @@ async function setupUncloudDeployment(cwd: string): Promise<void> {
|
|
|
866
866
|
console.info()
|
|
867
867
|
showInfo('SSL Certificate Options')
|
|
868
868
|
console.info(
|
|
869
|
-
pc.gray("By default, Caddy will use Let's Encrypt for SSL certificates.")
|
|
869
|
+
pc.gray("By default, Caddy will use Let's Encrypt for SSL certificates."),
|
|
870
870
|
)
|
|
871
871
|
console.info(pc.gray('If using Cloudflare, you can use Origin CA instead to:'))
|
|
872
872
|
console.info(pc.gray(" • Bypass Let's Encrypt rate limits"))
|
|
@@ -875,7 +875,7 @@ async function setupUncloudDeployment(cwd: string): Promise<void> {
|
|
|
875
875
|
|
|
876
876
|
const useOriginCA = await confirmContinue(
|
|
877
877
|
'Use Cloudflare Origin CA? (requires Cloudflare account)',
|
|
878
|
-
false
|
|
878
|
+
false,
|
|
879
879
|
)
|
|
880
880
|
|
|
881
881
|
if (useOriginCA) {
|
|
@@ -885,8 +885,8 @@ async function setupUncloudDeployment(cwd: string): Promise<void> {
|
|
|
885
885
|
console.info(pc.gray('2. Click "Create Certificate"'))
|
|
886
886
|
console.info(
|
|
887
887
|
pc.gray(
|
|
888
|
-
`3. Add hostnames: ${webDomain}${zeroDomain ? `, ${zeroDomain}` : ''}
|
|
889
|
-
)
|
|
888
|
+
`3. Add hostnames: ${webDomain}${zeroDomain ? `, ${zeroDomain}` : ''}`,
|
|
889
|
+
),
|
|
890
890
|
)
|
|
891
891
|
console.info(pc.gray('4. Choose 15 year validity'))
|
|
892
892
|
console.info(pc.gray('5. Save certificate to: certs/origin.pem'))
|
|
@@ -896,13 +896,13 @@ async function setupUncloudDeployment(cwd: string): Promise<void> {
|
|
|
896
896
|
const certPath = await promptText(
|
|
897
897
|
'Path to Origin CA certificate:',
|
|
898
898
|
'certs/origin.pem',
|
|
899
|
-
'certs/origin.pem'
|
|
899
|
+
'certs/origin.pem',
|
|
900
900
|
)
|
|
901
901
|
|
|
902
902
|
const keyPath = await promptText(
|
|
903
903
|
'Path to Origin CA private key:',
|
|
904
904
|
'certs/origin.key',
|
|
905
|
-
'certs/origin.key'
|
|
905
|
+
'certs/origin.key',
|
|
906
906
|
)
|
|
907
907
|
|
|
908
908
|
if (certPath && keyPath) {
|
|
@@ -945,7 +945,7 @@ async function setupUncloudDeployment(cwd: string): Promise<void> {
|
|
|
945
945
|
console.info()
|
|
946
946
|
const syncToGitHub = await confirmContinue(
|
|
947
947
|
'Sync environment to GitHub secrets for CI/CD?',
|
|
948
|
-
true
|
|
948
|
+
true,
|
|
949
949
|
)
|
|
950
950
|
|
|
951
951
|
if (syncToGitHub) {
|
|
@@ -992,8 +992,8 @@ async function setupSSTDeployment(cwd: string): Promise<void> {
|
|
|
992
992
|
console.info()
|
|
993
993
|
console.info(
|
|
994
994
|
pc.gray(
|
|
995
|
-
'SST provides:\n • AWS infrastructure (ECS, Aurora, ALB)\n • Auto-scaling\n • Full control over resources\n • Higher setup complexity'
|
|
996
|
-
)
|
|
995
|
+
'SST provides:\n • AWS infrastructure (ECS, Aurora, ALB)\n • Auto-scaling\n • Full control over resources\n • Higher setup complexity',
|
|
996
|
+
),
|
|
997
997
|
)
|
|
998
998
|
console.info()
|
|
999
999
|
|
|
@@ -1002,7 +1002,7 @@ async function setupSSTDeployment(cwd: string): Promise<void> {
|
|
|
1002
1002
|
showInfo('AWS ECS Architecture')
|
|
1003
1003
|
console.info(pc.gray('AWS Graviton (ARM64) is ~40% cheaper than x86_64'))
|
|
1004
1004
|
console.info(
|
|
1005
|
-
pc.gray('Both have excellent performance, ARM recommended for cost savings')
|
|
1005
|
+
pc.gray('Both have excellent performance, ARM recommended for cost savings'),
|
|
1006
1006
|
)
|
|
1007
1007
|
console.info()
|
|
1008
1008
|
|
|
@@ -1019,7 +1019,7 @@ async function setupSSTDeployment(cwd: string): Promise<void> {
|
|
|
1019
1019
|
label: 'AMD64/x86_64 (Intel/AMD)',
|
|
1020
1020
|
hint: 'Standard option if you need specific x86 dependencies',
|
|
1021
1021
|
},
|
|
1022
|
-
]
|
|
1022
|
+
],
|
|
1023
1023
|
)
|
|
1024
1024
|
|
|
1025
1025
|
if (architecture === 'cancel') {
|
|
@@ -1034,7 +1034,7 @@ async function setupSSTDeployment(cwd: string): Promise<void> {
|
|
|
1034
1034
|
|
|
1035
1035
|
const shouldContinue = await confirmContinue(
|
|
1036
1036
|
'Continue with AWS SST setup? (requires AWS account)',
|
|
1037
|
-
false
|
|
1037
|
+
false,
|
|
1038
1038
|
)
|
|
1039
1039
|
|
|
1040
1040
|
if (!shouldContinue) {
|
|
@@ -1066,11 +1066,11 @@ async function setupSSTDeployment(cwd: string): Promise<void> {
|
|
|
1066
1066
|
const archValue = architecture === 'arm64' ? 'arm64' : 'x86_64'
|
|
1067
1067
|
sstConfig = sstConfig.replace(
|
|
1068
1068
|
/architecture:\s*['"]arm64['"]/g,
|
|
1069
|
-
`architecture: '${archValue}'
|
|
1069
|
+
`architecture: '${archValue}'`,
|
|
1070
1070
|
)
|
|
1071
1071
|
sstConfig = sstConfig.replace(
|
|
1072
1072
|
/architecture:\s*['"]x86_64['"]/g,
|
|
1073
|
-
`architecture: '${archValue}'
|
|
1073
|
+
`architecture: '${archValue}'`,
|
|
1074
1074
|
)
|
|
1075
1075
|
|
|
1076
1076
|
writeFileSync(sstConfigPath, sstConfig)
|
|
@@ -1103,7 +1103,7 @@ async function setupSSTDeployment(cwd: string): Promise<void> {
|
|
|
1103
1103
|
console.info()
|
|
1104
1104
|
const syncToGitHub = await confirmContinue(
|
|
1105
1105
|
'Sync environment to GitHub secrets for CI/CD?',
|
|
1106
|
-
true
|
|
1106
|
+
true,
|
|
1107
1107
|
)
|
|
1108
1108
|
|
|
1109
1109
|
if (syncToGitHub) {
|
|
@@ -1119,7 +1119,7 @@ async function setupSSTDeployment(cwd: string): Promise<void> {
|
|
|
1119
1119
|
|
|
1120
1120
|
console.info()
|
|
1121
1121
|
showInfo(
|
|
1122
|
-
'For complete AWS deployment guide, see: https://docs.yourapp.com/deployment/sst'
|
|
1122
|
+
'For complete AWS deployment guide, see: https://docs.yourapp.com/deployment/sst',
|
|
1123
1123
|
)
|
|
1124
1124
|
}
|
|
1125
1125
|
|
|
@@ -1129,8 +1129,8 @@ async function configureCIRunners(cwd: string): Promise<void> {
|
|
|
1129
1129
|
console.info(
|
|
1130
1130
|
pc.gray(
|
|
1131
1131
|
'Your project uses ARM64 (Apple Silicon) architecture for Docker builds.\n' +
|
|
1132
|
-
'GitHub Actions requires compatible runners for CI/CD to work properly.'
|
|
1133
|
-
)
|
|
1132
|
+
'GitHub Actions requires compatible runners for CI/CD to work properly.',
|
|
1133
|
+
),
|
|
1134
1134
|
)
|
|
1135
1135
|
console.info()
|
|
1136
1136
|
|
|
@@ -1157,13 +1157,13 @@ async function configureCIRunners(cwd: string): Promise<void> {
|
|
|
1157
1157
|
label: 'Configure Later',
|
|
1158
1158
|
hint: 'Skip for now (CI will fail until configured)',
|
|
1159
1159
|
},
|
|
1160
|
-
]
|
|
1160
|
+
],
|
|
1161
1161
|
)
|
|
1162
1162
|
|
|
1163
1163
|
if (runnerChoice === 'cancel' || runnerChoice === 'skip') {
|
|
1164
1164
|
showInfo('Skipping CI runner configuration')
|
|
1165
1165
|
showWarning(
|
|
1166
|
-
'CI/CD will fail until you configure runners. Update .github/workflows/ci.yml'
|
|
1166
|
+
'CI/CD will fail until you configure runners. Update .github/workflows/ci.yml',
|
|
1167
1167
|
)
|
|
1168
1168
|
return
|
|
1169
1169
|
}
|
|
@@ -1195,7 +1195,7 @@ async function configureCIRunners(cwd: string): Promise<void> {
|
|
|
1195
1195
|
// Update CI to use GitHub ARM runners
|
|
1196
1196
|
ciContent = ciContent.replace(
|
|
1197
1197
|
/runs-on:.*warp-ubuntu-latest-arm64.*/,
|
|
1198
|
-
'runs-on: ubuntu-24.04-arm'
|
|
1198
|
+
'runs-on: ubuntu-24.04-arm',
|
|
1199
1199
|
)
|
|
1200
1200
|
writeFileSync(ciConfigPath, ciContent)
|
|
1201
1201
|
|
|
@@ -1207,7 +1207,7 @@ async function configureCIRunners(cwd: string): Promise<void> {
|
|
|
1207
1207
|
// Update CI to use standard GitHub runners
|
|
1208
1208
|
ciContent = ciContent.replace(
|
|
1209
1209
|
/runs-on:.*warp-ubuntu-latest-arm64.*/,
|
|
1210
|
-
'runs-on: ubuntu-latest'
|
|
1210
|
+
'runs-on: ubuntu-latest',
|
|
1211
1211
|
)
|
|
1212
1212
|
writeFileSync(ciConfigPath, ciContent)
|
|
1213
1213
|
|
|
@@ -1219,7 +1219,7 @@ async function configureCIRunners(cwd: string): Promise<void> {
|
|
|
1219
1219
|
showSuccess('✓ Updated CI to use free GitHub x64 runners')
|
|
1220
1220
|
showSuccess('✓ Updated Docker builds to x64 architecture')
|
|
1221
1221
|
showWarning(
|
|
1222
|
-
"Note: Docker images built on x64 won't run on ARM64 machines without emulation"
|
|
1222
|
+
"Note: Docker images built on x64 won't run on ARM64 machines without emulation",
|
|
1223
1223
|
)
|
|
1224
1224
|
}
|
|
1225
1225
|
|
|
@@ -1228,7 +1228,7 @@ async function configureCIRunners(cwd: string): Promise<void> {
|
|
|
1228
1228
|
} catch (error) {
|
|
1229
1229
|
showError('Failed to update CI configuration')
|
|
1230
1230
|
showInfo(
|
|
1231
|
-
'Please manually update .github/workflows/ci.yml and scripts/web/build-docker.ts'
|
|
1231
|
+
'Please manually update .github/workflows/ci.yml and scripts/web/build-docker.ts',
|
|
1232
1232
|
)
|
|
1233
1233
|
}
|
|
1234
1234
|
}
|
|
@@ -1279,10 +1279,10 @@ async function startServices(cwd: string): Promise<void> {
|
|
|
1279
1279
|
async function replacePortInProject(
|
|
1280
1280
|
cwd: string,
|
|
1281
1281
|
oldPort: string,
|
|
1282
|
-
newPort: string
|
|
1282
|
+
newPort: string,
|
|
1283
1283
|
): Promise<void> {
|
|
1284
1284
|
const spinner = showSpinner(
|
|
1285
|
-
`Replacing port ${oldPort} with ${newPort} throughout project
|
|
1285
|
+
`Replacing port ${oldPort} with ${newPort} throughout project...`,
|
|
1286
1286
|
)
|
|
1287
1287
|
|
|
1288
1288
|
// directories to skip
|
package/src/commands/run.ts
CHANGED
package/src/commands/script.ts
CHANGED
|
@@ -119,7 +119,7 @@ const newCommand = defineCommand({
|
|
|
119
119
|
// check if file exists
|
|
120
120
|
if (existsSync(fullPath)) {
|
|
121
121
|
console.error(
|
|
122
|
-
pc.red(`✗ Script already exists: ${relative(process.cwd(), fullPath)}`)
|
|
122
|
+
pc.red(`✗ Script already exists: ${relative(process.cwd(), fullPath)}`),
|
|
123
123
|
)
|
|
124
124
|
process.exit(1)
|
|
125
125
|
}
|
|
@@ -218,8 +218,8 @@ const ejectCommand = defineCommand({
|
|
|
218
218
|
if (!sourceScriptsDir) {
|
|
219
219
|
console.error(
|
|
220
220
|
pc.red(
|
|
221
|
-
'✗ Built-in scripts package (@take-out/scripts) not found or not installed'
|
|
222
|
-
)
|
|
221
|
+
'✗ Built-in scripts package (@take-out/scripts) not found or not installed',
|
|
222
|
+
),
|
|
223
223
|
)
|
|
224
224
|
console.info()
|
|
225
225
|
console.info(pc.dim('Install with: bun add -d @take-out/scripts'))
|
package/src/commands/skills.ts
CHANGED
|
@@ -59,7 +59,7 @@ function toSkillName(name: string): string {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
function collectAllDocs(
|
|
62
|
-
cwd: string
|
|
62
|
+
cwd: string,
|
|
63
63
|
): Array<{ name: string; path: string; source: 'package' | 'local' }> {
|
|
64
64
|
const docs: Array<{ name: string; path: string; source: 'package' | 'local' }> = []
|
|
65
65
|
const seen = new Set<string>()
|
|
@@ -89,7 +89,7 @@ function collectAllDocs(
|
|
|
89
89
|
|
|
90
90
|
async function generateDocSkills(
|
|
91
91
|
cwd: string,
|
|
92
|
-
clean: boolean
|
|
92
|
+
clean: boolean,
|
|
93
93
|
): Promise<{
|
|
94
94
|
symlinked: number
|
|
95
95
|
generated: number
|
|
@@ -173,13 +173,13 @@ async function generateDocSkills(
|
|
|
173
173
|
|
|
174
174
|
const sourceLabel = doc.source === 'local' ? pc.blue('local') : pc.dim('package')
|
|
175
175
|
console.info(
|
|
176
|
-
` ${pc.green('⟷')} ${skillName} ${sourceLabel} ${pc.dim('(symlink)')}
|
|
176
|
+
` ${pc.green('⟷')} ${skillName} ${sourceLabel} ${pc.dim('(symlink)')}`,
|
|
177
177
|
)
|
|
178
178
|
} else {
|
|
179
179
|
if (!hasFrontmatter) {
|
|
180
180
|
skipped++
|
|
181
181
|
console.info(
|
|
182
|
-
` ${pc.yellow('!')} skipped ${pc.dim(doc.name)} ${pc.dim('(missing skill frontmatter)')}
|
|
182
|
+
` ${pc.yellow('!')} skipped ${pc.dim(doc.name)} ${pc.dim('(missing skill frontmatter)')}`,
|
|
183
183
|
)
|
|
184
184
|
continue
|
|
185
185
|
}
|
|
@@ -277,11 +277,11 @@ const generateCommand = defineCommand({
|
|
|
277
277
|
if (symlinked > 0) console.info(` ${pc.green(`${symlinked} symlinked`)}`)
|
|
278
278
|
if (generated > 0)
|
|
279
279
|
console.info(
|
|
280
|
-
` ${pc.yellow(`${generated} generated`)} ${pc.dim('(add frontmatter to enable symlink)')}
|
|
280
|
+
` ${pc.yellow(`${generated} generated`)} ${pc.dim('(add frontmatter to enable symlink)')}`,
|
|
281
281
|
)
|
|
282
282
|
if (skipped > 0)
|
|
283
283
|
console.info(
|
|
284
|
-
` ${pc.yellow(`${skipped} skipped`)} ${pc.dim('(missing skill frontmatter)')}
|
|
284
|
+
` ${pc.yellow(`${skipped} skipped`)} ${pc.dim('(missing skill frontmatter)')}`,
|
|
285
285
|
)
|
|
286
286
|
if (unchanged > 0) console.info(` ${pc.dim(`${unchanged} unchanged`)}`)
|
|
287
287
|
if (removed > 0) console.info(` ${pc.red(`${removed} removed`)}`)
|
package/src/commands/sync.ts
CHANGED
|
@@ -42,7 +42,7 @@ function getSyncPrompt(): string {
|
|
|
42
42
|
throw new Error('Could not find sync-prompt.md in packages/docs')
|
|
43
43
|
} catch (error) {
|
|
44
44
|
throw new Error(
|
|
45
|
-
`Could not load sync prompt: ${error instanceof Error ? error.message : 'Unknown error'}
|
|
45
|
+
`Could not load sync prompt: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
46
46
|
)
|
|
47
47
|
}
|
|
48
48
|
}
|
|
@@ -230,8 +230,8 @@ export const syncCommand = defineCommand({
|
|
|
230
230
|
if (!isAuto) {
|
|
231
231
|
console.info(
|
|
232
232
|
pc.dim(
|
|
233
|
-
'Note: Claude Code will run in headless mode and make changes automatically.'
|
|
234
|
-
)
|
|
233
|
+
'Note: Claude Code will run in headless mode and make changes automatically.',
|
|
234
|
+
),
|
|
235
235
|
)
|
|
236
236
|
console.info(pc.dim('You will be asked to confirm important decisions.'))
|
|
237
237
|
console.info()
|