workos 0.0.24 → 0.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.
- package/.claude-plugin/plugin.json +13 -0
- package/LICENSE +47 -0
- package/README.md +154 -1
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +163 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli.config.d.ts +52 -0
- package/dist/cli.config.js +70 -0
- package/dist/cli.config.js.map +1 -0
- package/dist/package.json +87 -0
- package/dist/src/commands/install-skill.d.ts +20 -0
- package/dist/src/commands/install-skill.js +130 -0
- package/dist/src/commands/install-skill.js.map +1 -0
- package/dist/src/commands/install.d.ts +22 -0
- package/dist/src/commands/install.js +57 -0
- package/dist/src/commands/install.js.map +1 -0
- package/dist/src/commands/login.d.ts +1 -0
- package/dist/src/commands/login.js +141 -0
- package/dist/src/commands/login.js.map +1 -0
- package/dist/src/commands/logout.d.ts +1 -0
- package/dist/src/commands/logout.js +17 -0
- package/dist/src/commands/logout.js.map +1 -0
- package/dist/src/dashboard/components/AnimatedLogo.d.ts +8 -0
- package/dist/src/dashboard/components/AnimatedLogo.js +16 -0
- package/dist/src/dashboard/components/AnimatedLogo.js.map +1 -0
- package/dist/src/dashboard/components/CompletionView.d.ts +13 -0
- package/dist/src/dashboard/components/CompletionView.js +21 -0
- package/dist/src/dashboard/components/CompletionView.js.map +1 -0
- package/dist/src/dashboard/components/ConfirmPrompt.d.ts +9 -0
- package/dist/src/dashboard/components/ConfirmPrompt.js +25 -0
- package/dist/src/dashboard/components/ConfirmPrompt.js.map +1 -0
- package/dist/src/dashboard/components/CredentialsForm.d.ts +10 -0
- package/dist/src/dashboard/components/CredentialsForm.js +47 -0
- package/dist/src/dashboard/components/CredentialsForm.js.map +1 -0
- package/dist/src/dashboard/components/Dashboard.d.ts +3 -0
- package/dist/src/dashboard/components/Dashboard.js +100 -0
- package/dist/src/dashboard/components/Dashboard.js.map +1 -0
- package/dist/src/dashboard/components/DashboardLayout.d.ts +24 -0
- package/dist/src/dashboard/components/DashboardLayout.js +25 -0
- package/dist/src/dashboard/components/DashboardLayout.js.map +1 -0
- package/dist/src/dashboard/components/DiffPanel.d.ts +9 -0
- package/dist/src/dashboard/components/DiffPanel.js +136 -0
- package/dist/src/dashboard/components/DiffPanel.js.map +1 -0
- package/dist/src/dashboard/components/InlinePrompt.d.ts +8 -0
- package/dist/src/dashboard/components/InlinePrompt.js +19 -0
- package/dist/src/dashboard/components/InlinePrompt.js.map +1 -0
- package/dist/src/dashboard/components/OutputPanel.d.ts +10 -0
- package/dist/src/dashboard/components/OutputPanel.js +100 -0
- package/dist/src/dashboard/components/OutputPanel.js.map +1 -0
- package/dist/src/dashboard/components/Panel.d.ts +12 -0
- package/dist/src/dashboard/components/Panel.js +6 -0
- package/dist/src/dashboard/components/Panel.js.map +1 -0
- package/dist/src/dashboard/components/TextInput.d.ts +13 -0
- package/dist/src/dashboard/components/TextInput.js +57 -0
- package/dist/src/dashboard/components/TextInput.js.map +1 -0
- package/dist/src/dashboard/components/WelcomeArt.d.ts +2 -0
- package/dist/src/dashboard/components/WelcomeArt.js +9 -0
- package/dist/src/dashboard/components/WelcomeArt.js.map +1 -0
- package/dist/src/dashboard/hooks/useAnimation.d.ts +7 -0
- package/dist/src/dashboard/hooks/useAnimation.js +24 -0
- package/dist/src/dashboard/hooks/useAnimation.js.map +1 -0
- package/dist/src/dashboard/hooks/useKeyboard.d.ts +8 -0
- package/dist/src/dashboard/hooks/useKeyboard.js +18 -0
- package/dist/src/dashboard/hooks/useKeyboard.js.map +1 -0
- package/dist/src/dashboard/hooks/useTerminalSize.d.ts +8 -0
- package/dist/src/dashboard/hooks/useTerminalSize.js +23 -0
- package/dist/src/dashboard/hooks/useTerminalSize.js.map +1 -0
- package/dist/src/dashboard/index.d.ts +6 -0
- package/dist/src/dashboard/index.js +36 -0
- package/dist/src/dashboard/index.js.map +1 -0
- package/dist/src/dashboard/lib/diff-utils.d.ts +21 -0
- package/dist/src/dashboard/lib/diff-utils.js +271 -0
- package/dist/src/dashboard/lib/diff-utils.js.map +1 -0
- package/dist/src/dashboard/lib/logo-frames.d.ts +20 -0
- package/dist/src/dashboard/lib/logo-frames.js +109 -0
- package/dist/src/dashboard/lib/logo-frames.js.map +1 -0
- package/dist/src/dashboard/lib/welcome-art.d.ts +1 -0
- package/dist/src/dashboard/lib/welcome-art.js +5 -0
- package/dist/src/dashboard/lib/welcome-art.js.map +1 -0
- package/dist/src/dashboard/types.d.ts +5 -0
- package/dist/src/dashboard/types.js +2 -0
- package/dist/src/dashboard/types.js.map +1 -0
- package/dist/src/lib/__tests__/test-utils.d.ts +40 -0
- package/dist/src/lib/__tests__/test-utils.js +108 -0
- package/dist/src/lib/__tests__/test-utils.js.map +1 -0
- package/dist/src/lib/adapters/cli-adapter.d.ts +56 -0
- package/dist/src/lib/adapters/cli-adapter.js +318 -0
- package/dist/src/lib/adapters/cli-adapter.js.map +1 -0
- package/dist/src/lib/adapters/dashboard-adapter.d.ts +30 -0
- package/dist/src/lib/adapters/dashboard-adapter.js +97 -0
- package/dist/src/lib/adapters/dashboard-adapter.js.map +1 -0
- package/dist/src/lib/adapters/index.d.ts +3 -0
- package/dist/src/lib/adapters/index.js +3 -0
- package/dist/src/lib/adapters/index.js.map +1 -0
- package/dist/src/lib/adapters/types.d.ts +41 -0
- package/dist/src/lib/adapters/types.js +2 -0
- package/dist/src/lib/adapters/types.js.map +1 -0
- package/dist/src/lib/agent-interface.d.ts +75 -0
- package/dist/src/lib/agent-interface.js +563 -0
- package/dist/src/lib/agent-interface.js.map +1 -0
- package/dist/src/lib/agent-runner.d.ts +9 -0
- package/dist/src/lib/agent-runner.js +213 -0
- package/dist/src/lib/agent-runner.js.map +1 -0
- package/dist/src/lib/api.d.ts +25 -0
- package/dist/src/lib/api.js +120 -0
- package/dist/src/lib/api.js.map +1 -0
- package/dist/src/lib/config.d.ts +60 -0
- package/dist/src/lib/config.js +88 -0
- package/dist/src/lib/config.js.map +1 -0
- package/dist/src/lib/constants.d.ts +32 -0
- package/dist/src/lib/constants.js +53 -0
- package/dist/src/lib/constants.js.map +1 -0
- package/dist/src/lib/credentials.d.ts +19 -0
- package/dist/src/lib/credentials.js +55 -0
- package/dist/src/lib/credentials.js.map +1 -0
- package/dist/src/lib/env-writer.d.ts +14 -0
- package/dist/src/lib/env-writer.js +39 -0
- package/dist/src/lib/env-writer.js.map +1 -0
- package/dist/src/lib/events.d.ts +114 -0
- package/dist/src/lib/events.js +19 -0
- package/dist/src/lib/events.js.map +1 -0
- package/dist/src/lib/framework-config.d.ts +108 -0
- package/dist/src/lib/framework-config.js +11 -0
- package/dist/src/lib/framework-config.js.map +1 -0
- package/dist/src/lib/helper-functions.d.ts +1 -0
- package/dist/src/lib/helper-functions.js +2 -0
- package/dist/src/lib/helper-functions.js.map +1 -0
- package/dist/src/lib/port-detection.d.ts +7 -0
- package/dist/src/lib/port-detection.js +112 -0
- package/dist/src/lib/port-detection.js.map +1 -0
- package/dist/src/lib/progress-tracker.d.ts +22 -0
- package/dist/src/lib/progress-tracker.js +47 -0
- package/dist/src/lib/progress-tracker.js.map +1 -0
- package/dist/src/lib/run-with-core.d.ts +2 -0
- package/dist/src/lib/run-with-core.js +266 -0
- package/dist/src/lib/run-with-core.js.map +1 -0
- package/dist/src/lib/safe-tools.d.ts +2 -0
- package/dist/src/lib/safe-tools.js +212 -0
- package/dist/src/lib/safe-tools.js.map +1 -0
- package/dist/src/lib/settings.d.ts +59 -0
- package/dist/src/lib/settings.js +36 -0
- package/dist/src/lib/settings.js.map +1 -0
- package/dist/src/lib/token-refresh.d.ts +12 -0
- package/dist/src/lib/token-refresh.js +26 -0
- package/dist/src/lib/token-refresh.js.map +1 -0
- package/dist/src/lib/validation/build-validator.d.ts +9 -0
- package/dist/src/lib/validation/build-validator.js +118 -0
- package/dist/src/lib/validation/build-validator.js.map +1 -0
- package/dist/src/lib/validation/index.d.ts +3 -0
- package/dist/src/lib/validation/index.js +3 -0
- package/dist/src/lib/validation/index.js.map +1 -0
- package/dist/src/lib/validation/types.d.ts +41 -0
- package/dist/src/lib/validation/types.js +2 -0
- package/dist/src/lib/validation/types.js.map +1 -0
- package/dist/src/lib/validation/validator.d.ts +6 -0
- package/dist/src/lib/validation/validator.js +647 -0
- package/dist/src/lib/validation/validator.js.map +1 -0
- package/dist/src/lib/wizard-core.d.ts +200 -0
- package/dist/src/lib/wizard-core.js +392 -0
- package/dist/src/lib/wizard-core.js.map +1 -0
- package/dist/src/lib/wizard-core.types.d.ts +73 -0
- package/dist/src/lib/wizard-core.types.js +2 -0
- package/dist/src/lib/wizard-core.types.js.map +1 -0
- package/dist/src/lib/workos-management.d.ts +32 -0
- package/dist/src/lib/workos-management.js +142 -0
- package/dist/src/lib/workos-management.js.map +1 -0
- package/dist/src/nextjs/nextjs-wizard-agent.d.ts +6 -0
- package/dist/src/nextjs/nextjs-wizard-agent.js +97 -0
- package/dist/src/nextjs/nextjs-wizard-agent.js.map +1 -0
- package/dist/src/nextjs/utils.d.ts +8 -0
- package/dist/src/nextjs/utils.js +53 -0
- package/dist/src/nextjs/utils.js.map +1 -0
- package/dist/src/react/react-wizard-agent.d.ts +2 -0
- package/dist/src/react/react-wizard-agent.js +47 -0
- package/dist/src/react/react-wizard-agent.js.map +1 -0
- package/dist/src/react-router/react-router-wizard-agent.d.ts +6 -0
- package/dist/src/react-router/react-router-wizard-agent.js +103 -0
- package/dist/src/react-router/react-router-wizard-agent.js.map +1 -0
- package/dist/src/react-router/utils.d.ts +19 -0
- package/dist/src/react-router/utils.js +210 -0
- package/dist/src/react-router/utils.js.map +1 -0
- package/dist/src/run.d.ts +24 -0
- package/dist/src/run.js +48 -0
- package/dist/src/run.js.map +1 -0
- package/dist/src/steps/add-or-update-environment-variables.d.ts +10 -0
- package/dist/src/steps/add-or-update-environment-variables.js +155 -0
- package/dist/src/steps/add-or-update-environment-variables.js.map +1 -0
- package/dist/src/steps/index.d.ts +3 -0
- package/dist/src/steps/index.js +4 -0
- package/dist/src/steps/index.js.map +1 -0
- package/dist/src/steps/run-prettier.d.ts +5 -0
- package/dist/src/steps/run-prettier.js +54 -0
- package/dist/src/steps/run-prettier.js.map +1 -0
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.d.ts +8 -0
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js +7 -0
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js.map +1 -0
- package/dist/src/steps/upload-environment-variables/index.d.ts +6 -0
- package/dist/src/steps/upload-environment-variables/index.js +57 -0
- package/dist/src/steps/upload-environment-variables/index.js.map +1 -0
- package/dist/src/steps/upload-environment-variables/providers/vercel.d.ts +14 -0
- package/dist/src/steps/upload-environment-variables/providers/vercel.js +104 -0
- package/dist/src/steps/upload-environment-variables/providers/vercel.js.map +1 -0
- package/dist/src/tanstack-start/tanstack-start-wizard-agent.d.ts +2 -0
- package/dist/src/tanstack-start/tanstack-start-wizard-agent.js +49 -0
- package/dist/src/tanstack-start/tanstack-start-wizard-agent.js.map +1 -0
- package/dist/src/telemetry.d.ts +2 -0
- package/dist/src/telemetry.js +29 -0
- package/dist/src/telemetry.js.map +1 -0
- package/dist/src/utils/analytics.d.ts +24 -0
- package/dist/src/utils/analytics.js +139 -0
- package/dist/src/utils/analytics.js.map +1 -0
- package/dist/src/utils/bash.d.ts +2 -0
- package/dist/src/utils/bash.js +17 -0
- package/dist/src/utils/bash.js.map +1 -0
- package/dist/src/utils/clack-utils.d.ts +93 -0
- package/dist/src/utils/clack-utils.js +397 -0
- package/dist/src/utils/clack-utils.js.map +1 -0
- package/dist/src/utils/clack.d.ts +5 -0
- package/dist/src/utils/clack.js +34 -0
- package/dist/src/utils/clack.js.map +1 -0
- package/dist/src/utils/cli-symbols.d.ts +32 -0
- package/dist/src/utils/cli-symbols.js +46 -0
- package/dist/src/utils/cli-symbols.js.map +1 -0
- package/dist/src/utils/debug.d.ts +7 -0
- package/dist/src/utils/debug.js +88 -0
- package/dist/src/utils/debug.js.map +1 -0
- package/dist/src/utils/env-parser.d.ts +5 -0
- package/dist/src/utils/env-parser.js +18 -0
- package/dist/src/utils/env-parser.js.map +1 -0
- package/dist/src/utils/environment.d.ts +4 -0
- package/dist/src/utils/environment.js +69 -0
- package/dist/src/utils/environment.js.map +1 -0
- package/dist/src/utils/errors.d.ts +3 -0
- package/dist/src/utils/errors.js +7 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/logging.d.ts +9 -0
- package/dist/src/utils/logging.js +36 -0
- package/dist/src/utils/logging.js.map +1 -0
- package/dist/src/utils/package-json.d.ts +25 -0
- package/dist/src/utils/package-json.js +21 -0
- package/dist/src/utils/package-json.js.map +1 -0
- package/dist/src/utils/package-manager.d.ts +21 -0
- package/dist/src/utils/package-manager.js +167 -0
- package/dist/src/utils/package-manager.js.map +1 -0
- package/dist/src/utils/redact.d.ts +5 -0
- package/dist/src/utils/redact.js +29 -0
- package/dist/src/utils/redact.js.map +1 -0
- package/dist/src/utils/semver.d.ts +10 -0
- package/dist/src/utils/semver.js +43 -0
- package/dist/src/utils/semver.js.map +1 -0
- package/dist/src/utils/string.d.ts +1 -0
- package/dist/src/utils/string.js +6 -0
- package/dist/src/utils/string.js.map +1 -0
- package/dist/src/utils/telemetry-client.d.ts +15 -0
- package/dist/src/utils/telemetry-client.js +57 -0
- package/dist/src/utils/telemetry-client.js.map +1 -0
- package/dist/src/utils/telemetry-types.d.ts +51 -0
- package/dist/src/utils/telemetry-types.js +6 -0
- package/dist/src/utils/telemetry-types.js.map +1 -0
- package/dist/src/utils/types.d.ts +80 -0
- package/dist/src/utils/types.js +2 -0
- package/dist/src/utils/types.js.map +1 -0
- package/dist/src/utils/urls.d.ts +7 -0
- package/dist/src/utils/urls.js +8 -0
- package/dist/src/utils/urls.js.map +1 -0
- package/dist/src/utils/vendor/is-unicorn-supported.d.ts +1 -0
- package/dist/src/utils/vendor/is-unicorn-supported.js +21 -0
- package/dist/src/utils/vendor/is-unicorn-supported.js.map +1 -0
- package/dist/src/vanilla-js/vanilla-js-wizard-agent.d.ts +2 -0
- package/dist/src/vanilla-js/vanilla-js-wizard-agent.js +47 -0
- package/dist/src/vanilla-js/vanilla-js-wizard-agent.js.map +1 -0
- package/package.json +76 -84
- package/skills/workos-authkit-base/SKILL.md +113 -0
- package/skills/workos-authkit-nextjs/SKILL.md +115 -0
- package/skills/workos-authkit-react/SKILL.md +91 -0
- package/skills/workos-authkit-react-router/SKILL.md +106 -0
- package/skills/workos-authkit-tanstack-start/SKILL.md +104 -0
- package/skills/workos-authkit-vanilla-js/SKILL.md +81 -0
- package/build/apps/index.js +0 -50
- package/build/apps/slack.js +0 -151
- package/build/cli.js +0 -42
- package/build/config.js +0 -34
- package/build/dev.js +0 -5
- package/build/enable-api-access.png +0 -0
- package/build/groups.js +0 -480
- package/build/index.js +0 -3
- package/build/info.js +0 -69
- package/build/login.js +0 -161
- package/build/main.js +0 -214
- package/build/users.js +0 -402
- package/build/util.js +0 -157
- package/coverage/clover.xml +0 -66
- package/coverage/coverage-final.json +0 -4
- package/coverage/lcov-report/base.css +0 -212
- package/coverage/lcov-report/cli.ts.html +0 -329
- package/coverage/lcov-report/config.ts.html +0 -152
- package/coverage/lcov-report/index.html +0 -119
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -1
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -158
- package/coverage/lcov-report/util.ts.html +0 -350
- package/coverage/lcov.info +0 -121
- package/package-lock.json +0 -7617
- package/tests/util.test.ts +0 -35
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { appendFileSync, existsSync, mkdirSync, readdirSync, unlinkSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { prepareMessage } from './logging.js';
|
|
6
|
+
import { redactCredentials } from './redact.js';
|
|
7
|
+
import clack from './clack.js';
|
|
8
|
+
let debugEnabled = false;
|
|
9
|
+
let sessionLogPath = null;
|
|
10
|
+
const LOG_DIR = join(homedir(), '.workos', 'logs');
|
|
11
|
+
const MAX_LOG_FILES = 10;
|
|
12
|
+
function ensureLogDir() {
|
|
13
|
+
if (!existsSync(LOG_DIR)) {
|
|
14
|
+
mkdirSync(LOG_DIR, { recursive: true });
|
|
15
|
+
}
|
|
16
|
+
return LOG_DIR;
|
|
17
|
+
}
|
|
18
|
+
function getSafeTimestamp() {
|
|
19
|
+
return new Date().toISOString().replace(/:/g, '-');
|
|
20
|
+
}
|
|
21
|
+
function rotateLogFiles() {
|
|
22
|
+
try {
|
|
23
|
+
const dir = ensureLogDir();
|
|
24
|
+
const files = readdirSync(dir)
|
|
25
|
+
.filter((f) => f.startsWith('workos-') && f.endsWith('.log'))
|
|
26
|
+
.sort();
|
|
27
|
+
const toDelete = files.slice(0, Math.max(0, files.length - MAX_LOG_FILES + 1));
|
|
28
|
+
for (const file of toDelete) {
|
|
29
|
+
try {
|
|
30
|
+
unlinkSync(join(dir, file));
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Ignore deletion failures
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Ignore rotation failures
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function initLogFile() {
|
|
42
|
+
try {
|
|
43
|
+
rotateLogFiles();
|
|
44
|
+
const dir = ensureLogDir();
|
|
45
|
+
const timestamp = getSafeTimestamp();
|
|
46
|
+
sessionLogPath = join(dir, `workos-${timestamp}.log`);
|
|
47
|
+
const header = `${'='.repeat(60)}\nWorkOS AuthKit Wizard Run: ${new Date().toISOString()}\n${'='.repeat(60)}\n`;
|
|
48
|
+
appendFileSync(sessionLogPath, header);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
sessionLogPath = null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export function getLogFilePath() {
|
|
55
|
+
return sessionLogPath;
|
|
56
|
+
}
|
|
57
|
+
function writeLog(level, emoji, args) {
|
|
58
|
+
if (!sessionLogPath)
|
|
59
|
+
return;
|
|
60
|
+
try {
|
|
61
|
+
const timestamp = new Date().toISOString();
|
|
62
|
+
const redactedArgs = args.map((a) => (typeof a === 'object' && a !== null ? redactCredentials(a) : a));
|
|
63
|
+
const msg = redactedArgs.map((a) => prepareMessage(a)).join(' ');
|
|
64
|
+
appendFileSync(sessionLogPath, `[${timestamp}] ${emoji} ${level}: ${msg}\n`);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Ignore write failures
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export function logInfo(...args) {
|
|
71
|
+
writeLog('INFO', 'ℹ️ ', args);
|
|
72
|
+
}
|
|
73
|
+
export function logWarn(...args) {
|
|
74
|
+
writeLog('WARN', '⚠️ ', args);
|
|
75
|
+
}
|
|
76
|
+
export function logError(...args) {
|
|
77
|
+
writeLog('ERROR', '❌', args);
|
|
78
|
+
}
|
|
79
|
+
export function debug(...args) {
|
|
80
|
+
if (!debugEnabled)
|
|
81
|
+
return;
|
|
82
|
+
const msg = args.map((a) => prepareMessage(a)).join(' ');
|
|
83
|
+
clack.log.info(chalk.dim(msg));
|
|
84
|
+
}
|
|
85
|
+
export function enableDebugLogs() {
|
|
86
|
+
debugEnabled = true;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../src/utils/debug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACpF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,IAAI,YAAY,GAAG,KAAK,CAAC;AACzB,IAAI,cAAc,GAAkB,IAAI,CAAC;AAEzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AACnD,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,SAAS,YAAY;IACnB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC;aAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aAC5D,IAAI,EAAE,CAAC;QAEV,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/E,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,2BAA2B;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC;QACH,cAAc,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;QACrC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,SAAS,MAAM,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,gCAAgC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;QAChH,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAgC,EAAE,KAAa,EAAE,IAAe;IAChF,IAAI,CAAC,cAAc;QAAE,OAAO;IAE5B,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvG,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjE,cAAc,CAAC,cAAc,EAAE,IAAI,SAAS,KAAK,KAAK,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAG,IAAe;IACxC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAG,IAAe;IACxC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAG,IAAe;IACzC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAG,IAAe;IACtC,IAAI,CAAC,YAAY;QAAE,OAAO;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC","sourcesContent":["import { appendFileSync, existsSync, mkdirSync, readdirSync, unlinkSync } from 'fs';\nimport { join } from 'path';\nimport { homedir } from 'os';\nimport chalk from 'chalk';\nimport { prepareMessage } from './logging.js';\nimport { redactCredentials } from './redact.js';\nimport clack from './clack.js';\n\nlet debugEnabled = false;\nlet sessionLogPath: string | null = null;\n\nconst LOG_DIR = join(homedir(), '.workos', 'logs');\nconst MAX_LOG_FILES = 10;\n\nfunction ensureLogDir(): string {\n if (!existsSync(LOG_DIR)) {\n mkdirSync(LOG_DIR, { recursive: true });\n }\n return LOG_DIR;\n}\n\nfunction getSafeTimestamp(): string {\n return new Date().toISOString().replace(/:/g, '-');\n}\n\nfunction rotateLogFiles(): void {\n try {\n const dir = ensureLogDir();\n const files = readdirSync(dir)\n .filter((f) => f.startsWith('workos-') && f.endsWith('.log'))\n .sort();\n\n const toDelete = files.slice(0, Math.max(0, files.length - MAX_LOG_FILES + 1));\n for (const file of toDelete) {\n try {\n unlinkSync(join(dir, file));\n } catch {\n // Ignore deletion failures\n }\n }\n } catch {\n // Ignore rotation failures\n }\n}\n\nexport function initLogFile(): void {\n try {\n rotateLogFiles();\n const dir = ensureLogDir();\n const timestamp = getSafeTimestamp();\n sessionLogPath = join(dir, `workos-${timestamp}.log`);\n\n const header = `${'='.repeat(60)}\\nWorkOS AuthKit Wizard Run: ${new Date().toISOString()}\\n${'='.repeat(60)}\\n`;\n appendFileSync(sessionLogPath, header);\n } catch {\n sessionLogPath = null;\n }\n}\n\nexport function getLogFilePath(): string | null {\n return sessionLogPath;\n}\n\nfunction writeLog(level: 'INFO' | 'WARN' | 'ERROR', emoji: string, args: unknown[]): void {\n if (!sessionLogPath) return;\n\n try {\n const timestamp = new Date().toISOString();\n const redactedArgs = args.map((a) => (typeof a === 'object' && a !== null ? redactCredentials(a) : a));\n const msg = redactedArgs.map((a) => prepareMessage(a)).join(' ');\n appendFileSync(sessionLogPath, `[${timestamp}] ${emoji} ${level}: ${msg}\\n`);\n } catch {\n // Ignore write failures\n }\n}\n\nexport function logInfo(...args: unknown[]): void {\n writeLog('INFO', 'ℹ️ ', args);\n}\n\nexport function logWarn(...args: unknown[]): void {\n writeLog('WARN', '⚠️ ', args);\n}\n\nexport function logError(...args: unknown[]): void {\n writeLog('ERROR', '❌', args);\n}\n\nexport function debug(...args: unknown[]): void {\n if (!debugEnabled) return;\n const msg = args.map((a) => prepareMessage(a)).join(' ');\n clack.log.info(chalk.dim(msg));\n}\n\nexport function enableDebugLogs(): void {\n debugEnabled = true;\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a .env file into key-value pairs.
|
|
3
|
+
* Handles comments, empty lines, and values containing '='.
|
|
4
|
+
*/
|
|
5
|
+
export function parseEnvFile(content) {
|
|
6
|
+
const result = {};
|
|
7
|
+
for (const line of content.split('\n')) {
|
|
8
|
+
const trimmed = line.trim();
|
|
9
|
+
if (trimmed && !trimmed.startsWith('#')) {
|
|
10
|
+
const [key, ...valueParts] = trimmed.split('=');
|
|
11
|
+
if (key) {
|
|
12
|
+
result[key] = valueParts.join('=');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return result;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=env-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-parser.js","sourceRoot":"","sources":["../../../src/utils/env-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChD,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["/**\n * Parse a .env file into key-value pairs.\n * Handles comments, empty lines, and values containing '='.\n */\nexport function parseEnvFile(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#')) {\n const [key, ...valueParts] = trimmed.split('=');\n if (key) {\n result[key] = valueParts.join('=');\n }\n }\n }\n return result;\n}\n"]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { getPackageDotJson } from './clack-utils.js';
|
|
2
|
+
import fg from 'fast-glob';
|
|
3
|
+
import { IS_DEV } from '../lib/constants.js';
|
|
4
|
+
export function isNonInteractiveEnvironment() {
|
|
5
|
+
if (IS_DEV) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
if (!process.stdout.isTTY || !process.stderr.isTTY) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
export function readEnvironment() {
|
|
14
|
+
const prefix = 'WORKOS_WIZARD_';
|
|
15
|
+
const result = {};
|
|
16
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
17
|
+
if (key.startsWith(prefix)) {
|
|
18
|
+
const envKey = key.slice(prefix.length).toLowerCase();
|
|
19
|
+
result[envKey] = value;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
export async function detectEnvVarPrefix(options) {
|
|
25
|
+
const packageJson = await getPackageDotJson(options);
|
|
26
|
+
const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };
|
|
27
|
+
const has = (name) => name in deps;
|
|
28
|
+
const hasAnyFile = async (patterns) => {
|
|
29
|
+
const matches = await fg(patterns, {
|
|
30
|
+
cwd: options.installDir,
|
|
31
|
+
absolute: false,
|
|
32
|
+
onlyFiles: true,
|
|
33
|
+
ignore: ['**/node_modules/**'],
|
|
34
|
+
});
|
|
35
|
+
return matches.length > 0;
|
|
36
|
+
};
|
|
37
|
+
// --- Next.js
|
|
38
|
+
if (has('next') || (await hasAnyFile(['**/next.config.{js,ts,mjs,cjs}']))) {
|
|
39
|
+
return 'NEXT_PUBLIC_';
|
|
40
|
+
}
|
|
41
|
+
// --- Create React App
|
|
42
|
+
if (has('react-scripts') || has('create-react-app') || (await hasAnyFile(['**/config-overrides.js']))) {
|
|
43
|
+
return 'REACT_APP_';
|
|
44
|
+
}
|
|
45
|
+
// --- Vite (vanilla, TanStack, Solid, etc.)
|
|
46
|
+
// Note: Vite does not need PUBLIC_ but we use it to follow the docs, to improve the chances of an LLM getting it right.
|
|
47
|
+
if (has('vite') || (await hasAnyFile(['**/vite.config.{js,ts,mjs,cjs}']))) {
|
|
48
|
+
return 'VITE_PUBLIC_';
|
|
49
|
+
}
|
|
50
|
+
// --- SvelteKit
|
|
51
|
+
if (has('@sveltejs/kit') || (await hasAnyFile(['**/svelte.config.{js,ts}']))) {
|
|
52
|
+
return 'PUBLIC_';
|
|
53
|
+
}
|
|
54
|
+
// --- TanStack Start (uses Vite)
|
|
55
|
+
if (has('@tanstack/start') || (await hasAnyFile(['**/tanstack.config.{js,ts}']))) {
|
|
56
|
+
return 'VITE_PUBLIC_';
|
|
57
|
+
}
|
|
58
|
+
// --- SolidStart (uses Vite)
|
|
59
|
+
if (has('solid-start') || (await hasAnyFile(['**/solid.config.{js,ts}']))) {
|
|
60
|
+
return 'VITE_PUBLIC_';
|
|
61
|
+
}
|
|
62
|
+
// --- Astro
|
|
63
|
+
if (has('astro') || (await hasAnyFile(['**/astro.config.{js,ts,mjs}']))) {
|
|
64
|
+
return 'PUBLIC_';
|
|
65
|
+
}
|
|
66
|
+
// We default to Vite if we can't detect a specific framework, since it's the most commonly used.
|
|
67
|
+
return 'VITE_PUBLIC_';
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/utils/environment.ts"],"names":[],"mappings":"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","sourcesContent":["import { getPackageDotJson } from './clack-utils.js';\nimport type { WizardOptions } from './types.js';\nimport fg from 'fast-glob';\nimport { IS_DEV } from '../lib/constants.js';\n\nexport function isNonInteractiveEnvironment(): boolean {\n if (IS_DEV) {\n return false;\n }\n\n if (!process.stdout.isTTY || !process.stderr.isTTY) {\n return true;\n }\n\n return false;\n}\n\nexport function readEnvironment(): Record<string, unknown> {\n const prefix = 'WORKOS_WIZARD_';\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(process.env)) {\n if (key.startsWith(prefix)) {\n const envKey = key.slice(prefix.length).toLowerCase();\n result[envKey] = value;\n }\n }\n\n return result;\n}\n\nexport async function detectEnvVarPrefix(options: WizardOptions): Promise<string> {\n const packageJson = await getPackageDotJson(options);\n\n const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };\n const has = (name: string) => name in deps;\n const hasAnyFile = async (patterns: string[]) => {\n const matches = await fg(patterns, {\n cwd: options.installDir,\n absolute: false,\n onlyFiles: true,\n ignore: ['**/node_modules/**'],\n });\n return matches.length > 0;\n };\n\n // --- Next.js\n if (has('next') || (await hasAnyFile(['**/next.config.{js,ts,mjs,cjs}']))) {\n return 'NEXT_PUBLIC_';\n }\n\n // --- Create React App\n if (has('react-scripts') || has('create-react-app') || (await hasAnyFile(['**/config-overrides.js']))) {\n return 'REACT_APP_';\n }\n\n // --- Vite (vanilla, TanStack, Solid, etc.)\n // Note: Vite does not need PUBLIC_ but we use it to follow the docs, to improve the chances of an LLM getting it right.\n if (has('vite') || (await hasAnyFile(['**/vite.config.{js,ts,mjs,cjs}']))) {\n return 'VITE_PUBLIC_';\n }\n\n // --- SvelteKit\n if (has('@sveltejs/kit') || (await hasAnyFile(['**/svelte.config.{js,ts}']))) {\n return 'PUBLIC_';\n }\n\n // --- TanStack Start (uses Vite)\n if (has('@tanstack/start') || (await hasAnyFile(['**/tanstack.config.{js,ts}']))) {\n return 'VITE_PUBLIC_';\n }\n\n // --- SolidStart (uses Vite)\n if (has('solid-start') || (await hasAnyFile(['**/solid.config.{js,ts}']))) {\n return 'VITE_PUBLIC_';\n }\n\n // --- Astro\n if (has('astro') || (await hasAnyFile(['**/astro.config.{js,ts,mjs}']))) {\n return 'PUBLIC_';\n }\n\n // We default to Vite if we can't detect a specific framework, since it's the most commonly used.\n return 'VITE_PUBLIC_';\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC;QACE,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF","sourcesContent":["export class RateLimitError extends Error {\n constructor() {\n super('Wizard usage limit reached.');\n this.name = 'RateLimitError';\n }\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function prepareMessage(msg: unknown): string;
|
|
2
|
+
export declare function l(msg: string): void;
|
|
3
|
+
export declare function nl(): void;
|
|
4
|
+
export declare function green(msg: string): void;
|
|
5
|
+
export declare function red(msg: string): void;
|
|
6
|
+
export declare function dim(msg: string): void;
|
|
7
|
+
export declare function yellow(msg: string): void;
|
|
8
|
+
export declare function cyan(msg: string): void;
|
|
9
|
+
export declare function debug(msg: any): void;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import Chalk from 'chalk';
|
|
2
|
+
export function prepareMessage(msg) {
|
|
3
|
+
if (typeof msg === 'string') {
|
|
4
|
+
return msg;
|
|
5
|
+
}
|
|
6
|
+
if (msg instanceof Error) {
|
|
7
|
+
return `${msg.stack || ''}`;
|
|
8
|
+
}
|
|
9
|
+
return JSON.stringify(msg, null, '\t');
|
|
10
|
+
}
|
|
11
|
+
export function l(msg) {
|
|
12
|
+
// eslint-disable-next-line no-console
|
|
13
|
+
console.log(msg);
|
|
14
|
+
}
|
|
15
|
+
export function nl() {
|
|
16
|
+
return l('');
|
|
17
|
+
}
|
|
18
|
+
export function green(msg) {
|
|
19
|
+
return l(Chalk.green(prepareMessage(msg)));
|
|
20
|
+
}
|
|
21
|
+
export function red(msg) {
|
|
22
|
+
return l(Chalk.red(prepareMessage(msg)));
|
|
23
|
+
}
|
|
24
|
+
export function dim(msg) {
|
|
25
|
+
return l(Chalk.dim(prepareMessage(msg)));
|
|
26
|
+
}
|
|
27
|
+
export function yellow(msg) {
|
|
28
|
+
return l(Chalk.yellow(prepareMessage(msg)));
|
|
29
|
+
}
|
|
30
|
+
export function cyan(msg) {
|
|
31
|
+
return l(Chalk.cyan(prepareMessage(msg)));
|
|
32
|
+
}
|
|
33
|
+
export function debug(msg) {
|
|
34
|
+
return l(Chalk.italic.yellow(prepareMessage(msg)));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=logging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../src/utils/logging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,CAAC,CAAC,GAAW;IAC3B,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,EAAE;IAChB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,GAAW;IAC7B,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,GAAW;IAC7B,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAQ;IAC5B,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC","sourcesContent":["import Chalk from 'chalk';\n\nexport function prepareMessage(msg: unknown): string {\n if (typeof msg === 'string') {\n return msg;\n }\n if (msg instanceof Error) {\n return `${msg.stack || ''}`;\n }\n return JSON.stringify(msg, null, '\\t');\n}\n\nexport function l(msg: string): void {\n // eslint-disable-next-line no-console\n console.log(msg);\n}\n\nexport function nl(): void {\n return l('');\n}\n\nexport function green(msg: string): void {\n return l(Chalk.green(prepareMessage(msg)));\n}\n\nexport function red(msg: string): void {\n return l(Chalk.red(prepareMessage(msg)));\n}\n\nexport function dim(msg: string): void {\n return l(Chalk.dim(prepareMessage(msg)));\n}\n\nexport function yellow(msg: string): void {\n return l(Chalk.yellow(prepareMessage(msg)));\n}\n\nexport function cyan(msg: string): void {\n return l(Chalk.cyan(prepareMessage(msg)));\n}\n\nexport function debug(msg: any): void {\n return l(Chalk.italic.yellow(prepareMessage(msg)));\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type PackageDotJson = {
|
|
2
|
+
version?: string;
|
|
3
|
+
scripts?: Record<string, string | undefined>;
|
|
4
|
+
dependencies?: Record<string, string>;
|
|
5
|
+
devDependencies?: Record<string, string>;
|
|
6
|
+
resolutions?: Record<string, string>;
|
|
7
|
+
overrides?: Record<string, string>;
|
|
8
|
+
pnpm?: {
|
|
9
|
+
overrides?: Record<string, string>;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
type NpmPackage = {
|
|
13
|
+
name: string;
|
|
14
|
+
version: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Checks if @param packageJson has any of the @param packageNamesList package names
|
|
18
|
+
* listed as a dependency or devDependency.
|
|
19
|
+
* If so, it returns the first package name that is found, including the
|
|
20
|
+
* version (range) specified in the package.json.
|
|
21
|
+
*/
|
|
22
|
+
export declare function findInstalledPackageFromList(packageNamesList: string[], packageJson: PackageDotJson): NpmPackage | undefined;
|
|
23
|
+
export declare function hasPackageInstalled(packageName: string, packageJson: PackageDotJson): boolean;
|
|
24
|
+
export declare function getPackageVersion(packageName: string, packageJson: PackageDotJson): string | undefined;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if @param packageJson has any of the @param packageNamesList package names
|
|
3
|
+
* listed as a dependency or devDependency.
|
|
4
|
+
* If so, it returns the first package name that is found, including the
|
|
5
|
+
* version (range) specified in the package.json.
|
|
6
|
+
*/
|
|
7
|
+
export function findInstalledPackageFromList(packageNamesList, packageJson) {
|
|
8
|
+
return packageNamesList
|
|
9
|
+
.map((packageName) => ({
|
|
10
|
+
name: packageName,
|
|
11
|
+
version: getPackageVersion(packageName, packageJson),
|
|
12
|
+
}))
|
|
13
|
+
.find((sdkPackage) => !!sdkPackage.version);
|
|
14
|
+
}
|
|
15
|
+
export function hasPackageInstalled(packageName, packageJson) {
|
|
16
|
+
return getPackageVersion(packageName, packageJson) !== undefined;
|
|
17
|
+
}
|
|
18
|
+
export function getPackageVersion(packageName, packageJson) {
|
|
19
|
+
return packageJson?.dependencies?.[packageName] || packageJson?.devDependencies?.[packageName];
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=package-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../../src/utils/package-json.ts"],"names":[],"mappings":"AAiBA;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAC1C,gBAA0B,EAC1B,WAA2B;IAE3B,OAAO,gBAAgB;SACpB,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACrB,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC;KACrD,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,UAAU,EAA4B,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,WAA2B;IAClF,OAAO,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC,KAAK,SAAS,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,WAA2B;IAChF,OAAO,WAAW,EAAE,YAAY,EAAE,CAAC,WAAW,CAAC,IAAI,WAAW,EAAE,eAAe,EAAE,CAAC,WAAW,CAAC,CAAC;AACjG,CAAC","sourcesContent":["export type PackageDotJson = {\n version?: string;\n scripts?: Record<string, string | undefined>;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n resolutions?: Record<string, string>;\n overrides?: Record<string, string>;\n pnpm?: {\n overrides?: Record<string, string>;\n };\n};\n\ntype NpmPackage = {\n name: string;\n version: string;\n};\n\n/**\n * Checks if @param packageJson has any of the @param packageNamesList package names\n * listed as a dependency or devDependency.\n * If so, it returns the first package name that is found, including the\n * version (range) specified in the package.json.\n */\nexport function findInstalledPackageFromList(\n packageNamesList: string[],\n packageJson: PackageDotJson,\n): NpmPackage | undefined {\n return packageNamesList\n .map((packageName) => ({\n name: packageName,\n version: getPackageVersion(packageName, packageJson),\n }))\n .find((sdkPackage): sdkPackage is NpmPackage => !!sdkPackage.version);\n}\n\nexport function hasPackageInstalled(packageName: string, packageJson: PackageDotJson): boolean {\n return getPackageVersion(packageName, packageJson) !== undefined;\n}\n\nexport function getPackageVersion(packageName: string, packageJson: PackageDotJson): string | undefined {\n return packageJson?.dependencies?.[packageName] || packageJson?.devDependencies?.[packageName];\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { WizardOptions } from './types.js';
|
|
2
|
+
export interface PackageManager {
|
|
3
|
+
name: string;
|
|
4
|
+
label: string;
|
|
5
|
+
installCommand: string;
|
|
6
|
+
buildCommand: string;
|
|
7
|
+
runScriptCommand: string;
|
|
8
|
+
flags: string;
|
|
9
|
+
forceInstallFlag: string;
|
|
10
|
+
detect: ({ installDir }: Pick<WizardOptions, 'installDir'>) => boolean;
|
|
11
|
+
addOverride: (pkgName: string, pkgVersion: string, { installDir }: Pick<WizardOptions, 'installDir'>) => Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export declare const BUN: PackageManager;
|
|
14
|
+
export declare const YARN_V1: PackageManager;
|
|
15
|
+
/** YARN V2/3/4 */
|
|
16
|
+
export declare const YARN_V2: PackageManager;
|
|
17
|
+
export declare const PNPM: PackageManager;
|
|
18
|
+
export declare const NPM: PackageManager;
|
|
19
|
+
export declare const EXPO: PackageManager;
|
|
20
|
+
export declare const packageManagers: PackageManager[];
|
|
21
|
+
export declare function detectAllPackageManagers({ installDir }: Pick<WizardOptions, 'installDir'>): PackageManager[];
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/typedef */
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { traceStep } from '../telemetry.js';
|
|
5
|
+
import { getPackageDotJson, updatePackageDotJson } from './clack-utils.js';
|
|
6
|
+
import { analytics } from './analytics.js';
|
|
7
|
+
export const BUN = {
|
|
8
|
+
name: 'bun',
|
|
9
|
+
label: 'Bun',
|
|
10
|
+
installCommand: 'bun add',
|
|
11
|
+
buildCommand: 'bun run build',
|
|
12
|
+
runScriptCommand: 'bun run',
|
|
13
|
+
flags: '',
|
|
14
|
+
forceInstallFlag: '--force',
|
|
15
|
+
detect: ({ installDir }) => ['bun.lockb', 'bun.lock'].some((lockFile) => fs.existsSync(path.join(installDir, lockFile))),
|
|
16
|
+
addOverride: async (pkgName, pkgVersion, { installDir }) => {
|
|
17
|
+
const packageDotJson = await getPackageDotJson({ installDir });
|
|
18
|
+
const overrides = packageDotJson.overrides || {};
|
|
19
|
+
await updatePackageDotJson({
|
|
20
|
+
...packageDotJson,
|
|
21
|
+
overrides: {
|
|
22
|
+
...overrides,
|
|
23
|
+
[pkgName]: pkgVersion,
|
|
24
|
+
},
|
|
25
|
+
}, { installDir: installDir });
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
export const YARN_V1 = {
|
|
29
|
+
name: 'yarn',
|
|
30
|
+
label: 'Yarn V1',
|
|
31
|
+
installCommand: 'yarn add',
|
|
32
|
+
buildCommand: 'yarn build',
|
|
33
|
+
runScriptCommand: 'yarn',
|
|
34
|
+
flags: '--ignore-workspace-root-check',
|
|
35
|
+
forceInstallFlag: '--force',
|
|
36
|
+
detect: ({ installDir }) => {
|
|
37
|
+
try {
|
|
38
|
+
return fs.readFileSync(path.join(installDir, 'yarn.lock'), 'utf-8').slice(0, 500).includes('yarn lockfile v1');
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
addOverride: async (pkgName, pkgVersion, { installDir }) => {
|
|
45
|
+
const packageDotJson = await getPackageDotJson({ installDir });
|
|
46
|
+
const resolutions = packageDotJson.resolutions || {};
|
|
47
|
+
await updatePackageDotJson({
|
|
48
|
+
...packageDotJson,
|
|
49
|
+
resolutions: {
|
|
50
|
+
...resolutions,
|
|
51
|
+
[pkgName]: pkgVersion,
|
|
52
|
+
},
|
|
53
|
+
}, { installDir });
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
/** YARN V2/3/4 */
|
|
57
|
+
export const YARN_V2 = {
|
|
58
|
+
name: 'yarn',
|
|
59
|
+
label: 'Yarn V2/3/4',
|
|
60
|
+
installCommand: 'yarn add',
|
|
61
|
+
buildCommand: 'yarn build',
|
|
62
|
+
runScriptCommand: 'yarn',
|
|
63
|
+
flags: '',
|
|
64
|
+
forceInstallFlag: '--force',
|
|
65
|
+
detect: ({ installDir }) => {
|
|
66
|
+
try {
|
|
67
|
+
return fs.readFileSync(path.join(installDir, 'yarn.lock'), 'utf-8').slice(0, 500).includes('__metadata');
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
addOverride: async (pkgName, pkgVersion, { installDir }) => {
|
|
74
|
+
const packageDotJson = await getPackageDotJson({ installDir });
|
|
75
|
+
const resolutions = packageDotJson.resolutions || {};
|
|
76
|
+
await updatePackageDotJson({
|
|
77
|
+
...packageDotJson,
|
|
78
|
+
resolutions: {
|
|
79
|
+
...resolutions,
|
|
80
|
+
[pkgName]: pkgVersion,
|
|
81
|
+
},
|
|
82
|
+
}, { installDir });
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
export const PNPM = {
|
|
86
|
+
name: 'pnpm',
|
|
87
|
+
label: 'pnpm',
|
|
88
|
+
installCommand: 'pnpm add',
|
|
89
|
+
buildCommand: 'pnpm build',
|
|
90
|
+
runScriptCommand: 'pnpm',
|
|
91
|
+
flags: '--ignore-workspace-root-check',
|
|
92
|
+
forceInstallFlag: '--force',
|
|
93
|
+
detect: ({ installDir }) => fs.existsSync(path.join(installDir, 'pnpm-lock.yaml')),
|
|
94
|
+
addOverride: async (pkgName, pkgVersion, { installDir }) => {
|
|
95
|
+
const packageDotJson = await getPackageDotJson({ installDir });
|
|
96
|
+
const pnpm = packageDotJson.pnpm || {};
|
|
97
|
+
const overrides = pnpm.overrides || {};
|
|
98
|
+
await updatePackageDotJson({
|
|
99
|
+
...packageDotJson,
|
|
100
|
+
pnpm: {
|
|
101
|
+
...pnpm,
|
|
102
|
+
overrides: {
|
|
103
|
+
...overrides,
|
|
104
|
+
[pkgName]: pkgVersion,
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
}, { installDir });
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
export const NPM = {
|
|
111
|
+
name: 'npm',
|
|
112
|
+
label: 'npm',
|
|
113
|
+
installCommand: 'npm add',
|
|
114
|
+
buildCommand: 'npm run build',
|
|
115
|
+
runScriptCommand: 'npm run',
|
|
116
|
+
flags: '',
|
|
117
|
+
forceInstallFlag: '--force',
|
|
118
|
+
detect: ({ installDir }) => fs.existsSync(path.join(installDir, 'package-lock.json')),
|
|
119
|
+
addOverride: async (pkgName, pkgVersion, { installDir }) => {
|
|
120
|
+
const packageDotJson = await getPackageDotJson({ installDir });
|
|
121
|
+
const overrides = packageDotJson.overrides || {};
|
|
122
|
+
await updatePackageDotJson({
|
|
123
|
+
...packageDotJson,
|
|
124
|
+
overrides: {
|
|
125
|
+
...overrides,
|
|
126
|
+
[pkgName]: pkgVersion,
|
|
127
|
+
},
|
|
128
|
+
}, { installDir });
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
export const EXPO = {
|
|
132
|
+
name: 'expo',
|
|
133
|
+
label: 'Expo',
|
|
134
|
+
installCommand: 'npx expo install',
|
|
135
|
+
buildCommand: 'npx expo build',
|
|
136
|
+
runScriptCommand: 'npx expo run',
|
|
137
|
+
flags: '',
|
|
138
|
+
forceInstallFlag: '--force',
|
|
139
|
+
detect: () => false,
|
|
140
|
+
addOverride: async (pkgName, pkgVersion, { installDir }) => {
|
|
141
|
+
const packageDotJson = await getPackageDotJson({ installDir });
|
|
142
|
+
const overrides = packageDotJson.overrides || {};
|
|
143
|
+
await updatePackageDotJson({
|
|
144
|
+
...packageDotJson,
|
|
145
|
+
overrides: {
|
|
146
|
+
...overrides,
|
|
147
|
+
[pkgName]: pkgVersion,
|
|
148
|
+
},
|
|
149
|
+
}, { installDir });
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
export const packageManagers = [BUN, YARN_V1, YARN_V2, PNPM, NPM, EXPO];
|
|
153
|
+
export function detectAllPackageManagers({ installDir }) {
|
|
154
|
+
return traceStep('detect-package-manager', () => {
|
|
155
|
+
const detectedManagers = [];
|
|
156
|
+
for (const packageManager of packageManagers) {
|
|
157
|
+
if (packageManager.detect({ installDir })) {
|
|
158
|
+
detectedManagers.push(packageManager);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (detectedManagers.length === 0) {
|
|
162
|
+
analytics.setTag('package-manager', 'not-detected');
|
|
163
|
+
}
|
|
164
|
+
return detectedManagers;
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=package-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../src/utils/package-manager.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/typedef */\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { traceStep } from '../telemetry.js';\nimport { getPackageDotJson, updatePackageDotJson } from './clack-utils.js';\nimport { analytics } from './analytics.js';\nimport type { WizardOptions } from './types.js';\n\nexport interface PackageManager {\n name: string;\n label: string;\n installCommand: string;\n buildCommand: string;\n /* The command that the package manager uses to run a script from package.json */\n runScriptCommand: string;\n flags: string;\n forceInstallFlag: string;\n detect: ({ installDir }: Pick<WizardOptions, 'installDir'>) => boolean;\n addOverride: (\n pkgName: string,\n pkgVersion: string,\n { installDir }: Pick<WizardOptions, 'installDir'>,\n ) => Promise<void>;\n}\n\nexport const BUN: PackageManager = {\n name: 'bun',\n label: 'Bun',\n installCommand: 'bun add',\n buildCommand: 'bun run build',\n runScriptCommand: 'bun run',\n flags: '',\n forceInstallFlag: '--force',\n detect: ({ installDir }: Pick<WizardOptions, 'installDir'>) =>\n ['bun.lockb', 'bun.lock'].some((lockFile) => fs.existsSync(path.join(installDir, lockFile))),\n addOverride: async (pkgName, pkgVersion, { installDir }: Pick<WizardOptions, 'installDir'>): Promise<void> => {\n const packageDotJson = await getPackageDotJson({ installDir });\n const overrides = packageDotJson.overrides || {};\n\n await updatePackageDotJson(\n {\n ...packageDotJson,\n overrides: {\n ...overrides,\n [pkgName]: pkgVersion,\n },\n },\n { installDir: installDir },\n );\n },\n};\nexport const YARN_V1: PackageManager = {\n name: 'yarn',\n label: 'Yarn V1',\n installCommand: 'yarn add',\n buildCommand: 'yarn build',\n runScriptCommand: 'yarn',\n flags: '--ignore-workspace-root-check',\n forceInstallFlag: '--force',\n detect: ({ installDir }: Pick<WizardOptions, 'installDir'>) => {\n try {\n return fs.readFileSync(path.join(installDir, 'yarn.lock'), 'utf-8').slice(0, 500).includes('yarn lockfile v1');\n } catch (e) {\n return false;\n }\n },\n addOverride: async (pkgName, pkgVersion, { installDir }: Pick<WizardOptions, 'installDir'>): Promise<void> => {\n const packageDotJson = await getPackageDotJson({ installDir });\n const resolutions = packageDotJson.resolutions || {};\n\n await updatePackageDotJson(\n {\n ...packageDotJson,\n resolutions: {\n ...resolutions,\n [pkgName]: pkgVersion,\n },\n },\n { installDir },\n );\n },\n};\n/** YARN V2/3/4 */\nexport const YARN_V2: PackageManager = {\n name: 'yarn',\n label: 'Yarn V2/3/4',\n installCommand: 'yarn add',\n buildCommand: 'yarn build',\n runScriptCommand: 'yarn',\n flags: '',\n forceInstallFlag: '--force',\n detect: ({ installDir }: Pick<WizardOptions, 'installDir'>) => {\n try {\n return fs.readFileSync(path.join(installDir, 'yarn.lock'), 'utf-8').slice(0, 500).includes('__metadata');\n } catch (e) {\n return false;\n }\n },\n addOverride: async (pkgName, pkgVersion, { installDir }: Pick<WizardOptions, 'installDir'>): Promise<void> => {\n const packageDotJson = await getPackageDotJson({ installDir });\n const resolutions = packageDotJson.resolutions || {};\n\n await updatePackageDotJson(\n {\n ...packageDotJson,\n resolutions: {\n ...resolutions,\n [pkgName]: pkgVersion,\n },\n },\n { installDir },\n );\n },\n};\nexport const PNPM: PackageManager = {\n name: 'pnpm',\n label: 'pnpm',\n installCommand: 'pnpm add',\n buildCommand: 'pnpm build',\n runScriptCommand: 'pnpm',\n flags: '--ignore-workspace-root-check',\n forceInstallFlag: '--force',\n detect: ({ installDir }: Pick<WizardOptions, 'installDir'>) => fs.existsSync(path.join(installDir, 'pnpm-lock.yaml')),\n addOverride: async (pkgName, pkgVersion, { installDir }: Pick<WizardOptions, 'installDir'>): Promise<void> => {\n const packageDotJson = await getPackageDotJson({ installDir });\n const pnpm = packageDotJson.pnpm || {};\n const overrides = pnpm.overrides || {};\n\n await updatePackageDotJson(\n {\n ...packageDotJson,\n pnpm: {\n ...pnpm,\n overrides: {\n ...overrides,\n [pkgName]: pkgVersion,\n },\n },\n },\n { installDir },\n );\n },\n};\nexport const NPM: PackageManager = {\n name: 'npm',\n label: 'npm',\n installCommand: 'npm add',\n buildCommand: 'npm run build',\n runScriptCommand: 'npm run',\n flags: '',\n forceInstallFlag: '--force',\n detect: ({ installDir }: Pick<WizardOptions, 'installDir'>) =>\n fs.existsSync(path.join(installDir, 'package-lock.json')),\n addOverride: async (pkgName, pkgVersion, { installDir }: Pick<WizardOptions, 'installDir'>): Promise<void> => {\n const packageDotJson = await getPackageDotJson({ installDir });\n const overrides = packageDotJson.overrides || {};\n\n await updatePackageDotJson(\n {\n ...packageDotJson,\n overrides: {\n ...overrides,\n [pkgName]: pkgVersion,\n },\n },\n { installDir },\n );\n },\n};\n\nexport const EXPO: PackageManager = {\n name: 'expo',\n label: 'Expo',\n installCommand: 'npx expo install',\n buildCommand: 'npx expo build',\n runScriptCommand: 'npx expo run',\n flags: '',\n forceInstallFlag: '--force',\n detect: () => false,\n addOverride: async (pkgName, pkgVersion, { installDir }: Pick<WizardOptions, 'installDir'>): Promise<void> => {\n const packageDotJson = await getPackageDotJson({ installDir });\n const overrides = packageDotJson.overrides || {};\n\n await updatePackageDotJson(\n {\n ...packageDotJson,\n overrides: {\n ...overrides,\n [pkgName]: pkgVersion,\n },\n },\n { installDir },\n );\n },\n};\n\nexport const packageManagers = [BUN, YARN_V1, YARN_V2, PNPM, NPM, EXPO];\n\nexport function detectAllPackageManagers({ installDir }: Pick<WizardOptions, 'installDir'>): PackageManager[] {\n return traceStep('detect-package-manager', () => {\n const detectedManagers: PackageManager[] = [];\n for (const packageManager of packageManagers) {\n if (packageManager.detect({ installDir })) {\n detectedManagers.push(packageManager);\n }\n }\n\n if (detectedManagers.length === 0) {\n analytics.setTag('package-manager', 'not-detected');\n }\n return detectedManagers;\n });\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redact sensitive values from logs
|
|
3
|
+
*/
|
|
4
|
+
export function redactApiKey(apiKey) {
|
|
5
|
+
if (!apiKey || apiKey.length < 12)
|
|
6
|
+
return '[REDACTED]';
|
|
7
|
+
// Show format: sk_test_xxx...xxx (first 8 chars + last 3 chars)
|
|
8
|
+
const prefix = apiKey.substring(0, 8);
|
|
9
|
+
const suffix = apiKey.substring(apiKey.length - 3);
|
|
10
|
+
return `${prefix}...${suffix}`;
|
|
11
|
+
}
|
|
12
|
+
export function redactCredentials(obj) {
|
|
13
|
+
if (typeof obj !== 'object' || obj === null)
|
|
14
|
+
return obj;
|
|
15
|
+
const redacted = Array.isArray(obj) ? [...obj] : { ...obj };
|
|
16
|
+
for (const key in redacted) {
|
|
17
|
+
const value = redacted[key];
|
|
18
|
+
// Redact API keys
|
|
19
|
+
if (typeof value === 'string' && value.startsWith('sk_')) {
|
|
20
|
+
redacted[key] = redactApiKey(value);
|
|
21
|
+
}
|
|
22
|
+
// Recursively redact nested objects
|
|
23
|
+
else if (typeof value === 'object' && value !== null) {
|
|
24
|
+
redacted[key] = redactCredentials(value);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return redacted;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=redact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../../src/utils/redact.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,YAAY,CAAC;IAEvD,gEAAgE;IAChE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEnD,OAAO,GAAG,MAAM,MAAM,MAAM,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAQ;IACxC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IAExD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;IAE5D,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAE5B,kBAAkB;QAClB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,QAAQ,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QACD,oCAAoC;aAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACrD,QAAQ,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["/**\n * Redact sensitive values from logs\n */\n\nexport function redactApiKey(apiKey: string): string {\n if (!apiKey || apiKey.length < 12) return '[REDACTED]';\n\n // Show format: sk_test_xxx...xxx (first 8 chars + last 3 chars)\n const prefix = apiKey.substring(0, 8);\n const suffix = apiKey.substring(apiKey.length - 3);\n\n return `${prefix}...${suffix}`;\n}\n\nexport function redactCredentials(obj: any): any {\n if (typeof obj !== 'object' || obj === null) return obj;\n\n const redacted = Array.isArray(obj) ? [...obj] : { ...obj };\n\n for (const key in redacted) {\n const value = redacted[key];\n\n // Redact API keys\n if (typeof value === 'string' && value.startsWith('sk_')) {\n redacted[key] = redactApiKey(value);\n }\n // Recursively redact nested objects\n else if (typeof value === 'object' && value !== null) {\n redacted[key] = redactCredentials(value);\n }\n }\n\n return redacted;\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function fulfillsVersionRange({ version, acceptableVersions, canBeLatest, }: {
|
|
2
|
+
version: string;
|
|
3
|
+
acceptableVersions: string;
|
|
4
|
+
canBeLatest: boolean;
|
|
5
|
+
}): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Get a version bucket string for analytics.
|
|
8
|
+
* Returns format like "15.x" for versions >= minimumMajor, or "<{minimumMajor}.0.0" otherwise.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getVersionBucket(version: string | undefined, minimumMajor: number): string;
|