devcache-hub 0.1.3 → 0.3.1
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/analyzers/ArchitectureAnalyzer.d.ts +17 -0
- package/dist/analyzers/ArchitectureAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/ArchitectureAnalyzer.js +217 -0
- package/dist/analyzers/ArchitectureAnalyzer.js.map +1 -0
- package/dist/analyzers/FeaturesAnalyzer.d.ts +18 -0
- package/dist/analyzers/FeaturesAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/FeaturesAnalyzer.js +258 -0
- package/dist/analyzers/FeaturesAnalyzer.js.map +1 -0
- package/dist/analyzers/ImpactAnalyzer.d.ts +16 -0
- package/dist/analyzers/ImpactAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/ImpactAnalyzer.js +165 -0
- package/dist/analyzers/ImpactAnalyzer.js.map +1 -0
- package/dist/analyzers/ProjectAnalyzer.d.ts +14 -0
- package/dist/analyzers/ProjectAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/ProjectAnalyzer.js +142 -0
- package/dist/analyzers/ProjectAnalyzer.js.map +1 -0
- package/dist/analyzers/StackAnalyzer.d.ts +28 -0
- package/dist/analyzers/StackAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/StackAnalyzer.js +320 -0
- package/dist/analyzers/StackAnalyzer.js.map +1 -0
- package/dist/analyzers/base/BaseAnalyzer.d.ts +39 -0
- package/dist/analyzers/base/BaseAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/base/BaseAnalyzer.js +64 -0
- package/dist/analyzers/base/BaseAnalyzer.js.map +1 -0
- package/dist/analyzers/index.d.ts +7 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +23 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +32 -19
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/login.d.ts.map +1 -1
- package/dist/cli/commands/login.js +89 -19
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/push.d.ts.map +1 -1
- package/dist/cli/commands/push.js +81 -10
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/orchestrator/FileSystemHandler.d.ts +35 -0
- package/dist/orchestrator/FileSystemHandler.d.ts.map +1 -0
- package/dist/orchestrator/FileSystemHandler.js +138 -0
- package/dist/orchestrator/FileSystemHandler.js.map +1 -0
- package/dist/orchestrator/Orchestrator.d.ts +31 -0
- package/dist/orchestrator/Orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/Orchestrator.js +141 -0
- package/dist/orchestrator/Orchestrator.js.map +1 -0
- package/dist/orchestrator/TemplateManager.d.ts +35 -0
- package/dist/orchestrator/TemplateManager.d.ts.map +1 -0
- package/dist/orchestrator/TemplateManager.js +116 -0
- package/dist/orchestrator/TemplateManager.js.map +1 -0
- package/dist/orchestrator/index.d.ts +4 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +20 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/supabase/client.d.ts +54 -0
- package/dist/supabase/client.d.ts.map +1 -0
- package/dist/supabase/client.js +181 -0
- package/dist/supabase/client.js.map +1 -0
- package/dist/supabase/index.d.ts +3 -0
- package/dist/supabase/index.d.ts.map +1 -0
- package/dist/supabase/index.js +19 -0
- package/dist/supabase/index.js.map +1 -0
- package/dist/supabase/oauth.d.ts +25 -0
- package/dist/supabase/oauth.d.ts.map +1 -0
- package/dist/supabase/oauth.js +218 -0
- package/dist/supabase/oauth.js.map +1 -0
- package/dist/supabase/storage.d.ts +46 -0
- package/dist/supabase/storage.d.ts.map +1 -0
- package/dist/supabase/storage.js +179 -0
- package/dist/supabase/storage.js.map +1 -0
- package/dist/types/analyzers.d.ts +51 -0
- package/dist/types/analyzers.d.ts.map +1 -0
- package/dist/types/analyzers.js +3 -0
- package/dist/types/analyzers.js.map +1 -0
- package/dist/types/config.d.ts +27 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +20 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/templates.d.ts +18 -0
- package/dist/types/templates.d.ts.map +1 -0
- package/dist/types/templates.js +3 -0
- package/dist/types/templates.js.map +1 -0
- package/dist/utils/config.d.ts +17 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +46 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/fileParser.d.ts +28 -0
- package/dist/utils/fileParser.d.ts.map +1 -0
- package/dist/utils/fileParser.js +111 -0
- package/dist/utils/fileParser.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +20 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +9 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +31 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +13 -12
- package/templates/general/project-impact.yaml +34 -0
- package/templates/general/project-overview.yaml +34 -0
- package/templates/tech/architecture-project.yaml +42 -0
- package/templates/tech/features.yaml +38 -0
- package/templates/tech/stack-project.yaml +42 -0
|
@@ -6,33 +6,103 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.loginCommand = loginCommand;
|
|
7
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
8
|
const inquirer_1 = __importDefault(require("inquirer"));
|
|
9
|
+
const ora_1 = __importDefault(require("ora"));
|
|
10
|
+
const client_1 = require("../../supabase/client");
|
|
11
|
+
const oauth_1 = require("../../supabase/oauth");
|
|
12
|
+
const utils_1 = require("../../utils");
|
|
13
|
+
const DEFAULT_APP_URL = 'https://devcache.vercel.app'; // Your production URL
|
|
9
14
|
async function loginCommand() {
|
|
10
15
|
console.log(chalk_1.default.blue.bold('\n🔐 DevCache Login\n'));
|
|
11
16
|
try {
|
|
12
|
-
|
|
17
|
+
// Initialize Supabase client
|
|
18
|
+
const supabase = (0, client_1.getSupabaseClient)();
|
|
19
|
+
await supabase.initialize();
|
|
20
|
+
// Check if already logged in
|
|
21
|
+
const existingSession = await supabase.getSession();
|
|
22
|
+
if (existingSession) {
|
|
23
|
+
const { relogin } = await inquirer_1.default.prompt([
|
|
24
|
+
{
|
|
25
|
+
type: 'confirm',
|
|
26
|
+
name: 'relogin',
|
|
27
|
+
message: `Already logged in as ${existingSession.email}. Login with different account?`,
|
|
28
|
+
default: false,
|
|
29
|
+
},
|
|
30
|
+
]);
|
|
31
|
+
if (!relogin) {
|
|
32
|
+
utils_1.Logger.success('Already authenticated');
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
await supabase.clearSession();
|
|
36
|
+
}
|
|
37
|
+
// Ask for authentication method
|
|
38
|
+
const { method } = await inquirer_1.default.prompt([
|
|
13
39
|
{
|
|
14
|
-
type: '
|
|
15
|
-
name: '
|
|
16
|
-
message: '
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
40
|
+
type: 'list',
|
|
41
|
+
name: 'method',
|
|
42
|
+
message: 'Choose authentication method:',
|
|
43
|
+
choices: [
|
|
44
|
+
{ name: 'Browser (OAuth) - Recommended', value: 'oauth' },
|
|
45
|
+
{ name: 'Email & Password', value: 'password' },
|
|
46
|
+
],
|
|
47
|
+
default: 'oauth',
|
|
22
48
|
},
|
|
23
|
-
{
|
|
24
|
-
type: 'password',
|
|
25
|
-
name: 'password',
|
|
26
|
-
message: 'Password:',
|
|
27
|
-
mask: '*'
|
|
28
|
-
}
|
|
29
49
|
]);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
50
|
+
if (method === 'oauth') {
|
|
51
|
+
// OAuth flow
|
|
52
|
+
console.log(chalk_1.default.gray('\nOpening browser for authentication...'));
|
|
53
|
+
console.log(chalk_1.default.gray('If browser doesn\'t open, copy the URL from the terminal.\n'));
|
|
54
|
+
const oauth = new oauth_1.OAuthFlow();
|
|
55
|
+
const appUrl = process.env.NEXT_PUBLIC_APP_URL || DEFAULT_APP_URL;
|
|
56
|
+
const spinner = (0, ora_1.default)('Waiting for authentication...').start();
|
|
57
|
+
try {
|
|
58
|
+
const session = await oauth.startFlow(appUrl);
|
|
59
|
+
// Save session
|
|
60
|
+
await supabase.saveOAuthSession(session);
|
|
61
|
+
spinner.succeed(chalk_1.default.green('Login successful!'));
|
|
62
|
+
console.log(chalk_1.default.gray(`\nLogged in as: ${session.email}`));
|
|
63
|
+
console.log(chalk_1.default.gray('Session stored locally\n'));
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
spinner.fail('Authentication failed');
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// Password flow
|
|
72
|
+
const answers = await inquirer_1.default.prompt([
|
|
73
|
+
{
|
|
74
|
+
type: 'input',
|
|
75
|
+
name: 'email',
|
|
76
|
+
message: 'Email:',
|
|
77
|
+
validate: (input) => {
|
|
78
|
+
if (input.includes('@'))
|
|
79
|
+
return true;
|
|
80
|
+
return 'Please enter a valid email address';
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
type: 'password',
|
|
85
|
+
name: 'password',
|
|
86
|
+
message: 'Password:',
|
|
87
|
+
mask: '*',
|
|
88
|
+
},
|
|
89
|
+
]);
|
|
90
|
+
const spinner = (0, ora_1.default)('Authenticating...').start();
|
|
91
|
+
// Authenticate
|
|
92
|
+
const session = await supabase.login(answers.email, answers.password);
|
|
93
|
+
spinner.succeed(chalk_1.default.green('Login successful!'));
|
|
94
|
+
console.log(chalk_1.default.gray(`\nLogged in as: ${session.email}`));
|
|
95
|
+
console.log(chalk_1.default.gray('Session stored locally\n'));
|
|
96
|
+
}
|
|
33
97
|
}
|
|
34
98
|
catch (error) {
|
|
35
|
-
|
|
99
|
+
utils_1.Logger.error(`Login failed: ${error.message}`);
|
|
100
|
+
if (error.message.includes('timeout')) {
|
|
101
|
+
console.log(chalk_1.default.yellow('\nAuthentication timed out. Please try again.'));
|
|
102
|
+
}
|
|
103
|
+
else if (error.message.includes('credentials')) {
|
|
104
|
+
console.log(chalk_1.default.yellow('\nPlease check your email and password and try again.'));
|
|
105
|
+
}
|
|
36
106
|
process.exit(1);
|
|
37
107
|
}
|
|
38
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":";;;;;AASA,oCA0GC;AAnHD,kDAA0B;AAC1B,wDAAgC;AAChC,8CAAsB;AACtB,kDAA0D;AAC1D,gDAAiD;AACjD,uCAAqC;AAErC,MAAM,eAAe,GAAG,6BAA6B,CAAC,CAAC,sBAAsB;AAEtE,KAAK,UAAU,YAAY;IAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAEtD,IAAI,CAAC;QACH,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,IAAA,0BAAiB,GAAE,CAAC;QACrC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAE5B,6BAA6B;QAC7B,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QACpD,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;gBACxC;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,wBAAwB,eAAe,CAAC,KAAK,iCAAiC;oBACvF,OAAO,EAAE,KAAK;iBACf;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,cAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;QAChC,CAAC;QAED,gCAAgC;QAChC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YACvC;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,+BAA+B;gBACxC,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,OAAO,EAAE;oBACzD,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE;iBAChD;gBACD,OAAO,EAAE,OAAO;aACjB;SACF,CAAC,CAAC;QAEH,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,aAAa;YACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC,CAAC;YAEvF,MAAM,KAAK,GAAG,IAAI,iBAAS,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,eAAe,CAAC;YAElE,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;YAE7D,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAE9C,eAAe;gBACf,MAAM,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAEzC,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACtD,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;gBACtC,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;aAAM,CAAC;YACN,gBAAgB;YAChB,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;gBACpC;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,QAAQ;oBACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;4BAAE,OAAO,IAAI,CAAC;wBACrC,OAAO,oCAAoC,CAAC;oBAC9C,CAAC;iBACF;gBACD;oBACE,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,WAAW;oBACpB,IAAI,EAAE,GAAG;iBACV;aACF,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;YAEjD,eAAe;YACf,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YAEtE,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACtD,CAAC;IAEH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,cAAM,CAAC,KAAK,CAAC,iBAAiB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAE/C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC,CAAC;QAC7E,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,uDAAuD,CAAC,CAAC,CAAC;QACrF,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":"AAQA,wBAAsB,WAAW,kBA6GhC"}
|
|
@@ -6,24 +6,95 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.pushCommand = pushCommand;
|
|
7
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
8
|
const ora_1 = __importDefault(require("ora"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
11
|
+
const client_1 = require("../../supabase/client");
|
|
12
|
+
const storage_1 = require("../../supabase/storage");
|
|
13
|
+
const utils_1 = require("../../utils");
|
|
9
14
|
async function pushCommand() {
|
|
10
|
-
const spinner = (0, ora_1.default)('
|
|
15
|
+
const spinner = (0, ora_1.default)('Initializing...').start();
|
|
11
16
|
try {
|
|
12
|
-
//
|
|
13
|
-
|
|
14
|
-
await
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
// Initialize Supabase client
|
|
18
|
+
const supabase = (0, client_1.getSupabaseClient)();
|
|
19
|
+
await supabase.initialize();
|
|
20
|
+
// Check authentication
|
|
21
|
+
spinner.text = 'Checking authentication...';
|
|
22
|
+
const session = await supabase.getSession();
|
|
23
|
+
if (!session) {
|
|
24
|
+
spinner.fail('Not authenticated');
|
|
25
|
+
console.log(chalk_1.default.yellow('\nPlease run'), chalk_1.default.cyan('devcache-hub login'), chalk_1.default.yellow('first.'));
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
utils_1.Logger.debug(`Authenticated as: ${session.email}`);
|
|
29
|
+
// Load configuration
|
|
30
|
+
spinner.text = 'Loading configuration...';
|
|
31
|
+
const config = await utils_1.ConfigManager.readConfig();
|
|
32
|
+
// Check if documentation exists
|
|
33
|
+
const projectPath = path_1.default.join(process.cwd(), config.outputDir, config.projectName);
|
|
34
|
+
try {
|
|
35
|
+
await promises_1.default.access(projectPath);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
spinner.fail('No documentation found');
|
|
39
|
+
console.log(chalk_1.default.yellow('\nPlease run'), chalk_1.default.cyan('devcache-hub generate'), chalk_1.default.yellow('first.'));
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
// Read index.md file
|
|
43
|
+
spinner.text = 'Reading documentation files...';
|
|
44
|
+
const indexPath = path_1.default.join(projectPath, 'index.md');
|
|
45
|
+
let indexContent;
|
|
46
|
+
try {
|
|
47
|
+
indexContent = await promises_1.default.readFile(indexPath, 'utf-8');
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
spinner.fail('index.md not found');
|
|
51
|
+
console.log(chalk_1.default.yellow('\nPlease run'), chalk_1.default.cyan('devcache-hub generate'), chalk_1.default.yellow('to create documentation.'));
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
// Read all documentation files
|
|
55
|
+
const files = [];
|
|
56
|
+
const categories = ['general', 'tech'];
|
|
57
|
+
for (const category of categories) {
|
|
58
|
+
const categoryPath = path_1.default.join(projectPath, category);
|
|
59
|
+
try {
|
|
60
|
+
const fileNames = await promises_1.default.readdir(categoryPath);
|
|
61
|
+
for (const filename of fileNames) {
|
|
62
|
+
if (filename.endsWith('.md')) {
|
|
63
|
+
const filePath = path_1.default.join(categoryPath, filename);
|
|
64
|
+
const content = await promises_1.default.readFile(filePath, 'utf-8');
|
|
65
|
+
files.push({ category, filename, content });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
utils_1.Logger.warn(`Category folder not found: ${category}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (files.length === 0) {
|
|
74
|
+
spinner.fail('No documentation files found');
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
utils_1.Logger.debug(`Found ${files.length} documentation files + index.md`);
|
|
78
|
+
// Upload to Supabase
|
|
79
|
+
spinner.text = 'Uploading to Supabase...';
|
|
80
|
+
const storage = new storage_1.StorageManager(supabase);
|
|
81
|
+
const projectId = await storage.uploadDocumentation(config.projectName, files, indexContent, config.description);
|
|
19
82
|
spinner.succeed(chalk_1.default.green('Documentation pushed successfully!'));
|
|
83
|
+
// Get project URL
|
|
84
|
+
const appUrl = process.env.NEXT_PUBLIC_APP_URL || 'https://devcache.vercel.app';
|
|
20
85
|
console.log(chalk_1.default.blue('\n✨ View your project at:'));
|
|
21
|
-
console.log(chalk_1.default.cyan(
|
|
86
|
+
console.log(chalk_1.default.cyan(` ${appUrl}/dashboard/projects/file/${projectId}`));
|
|
22
87
|
console.log();
|
|
23
88
|
}
|
|
24
89
|
catch (error) {
|
|
25
90
|
spinner.fail(chalk_1.default.red('Push failed'));
|
|
26
|
-
|
|
91
|
+
utils_1.Logger.error(error.message);
|
|
92
|
+
if (error.message.includes('not initialized')) {
|
|
93
|
+
console.log(chalk_1.default.yellow('\nRun'), chalk_1.default.cyan('devcache-hub init'), chalk_1.default.yellow('first to initialize the project.'));
|
|
94
|
+
}
|
|
95
|
+
else if (error.message.includes('Not authenticated')) {
|
|
96
|
+
console.log(chalk_1.default.yellow('\nRun'), chalk_1.default.cyan('devcache-hub login'), chalk_1.default.yellow('to authenticate.'));
|
|
97
|
+
}
|
|
27
98
|
process.exit(1);
|
|
28
99
|
}
|
|
29
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":";;;;;AAQA,kCA6GC;AArHD,kDAA0B;AAC1B,8CAAsB;AACtB,gDAAwB;AACxB,2DAA6B;AAC7B,kDAA0D;AAC1D,oDAAwD;AACxD,uCAAoD;AAE7C,KAAK,UAAU,WAAW;IAC/B,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;IAE/C,IAAI,CAAC;QACH,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,IAAA,0BAAiB,GAAE,CAAC;QACrC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAE5B,uBAAuB;QACvB,OAAO,CAAC,IAAI,GAAG,4BAA4B,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAE5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,eAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,cAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAEnD,qBAAqB;QACrB,OAAO,CAAC,IAAI,GAAG,0BAA0B,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,qBAAa,CAAC,UAAU,EAAE,CAAC;QAEhD,gCAAgC;QAChC,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAEnF,IAAI,CAAC;YACH,MAAM,kBAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,eAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,qBAAqB;QACrB,OAAO,CAAC,IAAI,GAAG,gCAAgC,CAAC;QAChD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACrD,IAAI,YAAoB,CAAC;QAEzB,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,eAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACzH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,+BAA+B;QAC/B,MAAM,KAAK,GAA+E,EAAE,CAAC;QAE7F,MAAM,UAAU,GAA8B,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAElE,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAEtD,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAEjD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC7B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;wBACnD,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;wBACrD,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;oBAC9C,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,cAAM,CAAC,IAAI,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,cAAM,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,MAAM,iCAAiC,CAAC,CAAC;QAErE,qBAAqB;QACrB,OAAO,CAAC,IAAI,GAAG,0BAA0B,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,wBAAc,CAAC,QAAQ,CAAC,CAAC;QAE7C,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,mBAAmB,CACjD,MAAM,CAAC,WAAW,EAClB,KAAK,EACL,YAAY,EACZ,MAAM,CAAC,WAAW,CACnB,CAAC;QAEF,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAEnE,kBAAkB;QAClB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,6BAA6B,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,MAAM,4BAA4B,SAAS,EAAE,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,EAAE,CAAC;IAEhB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;QACvC,cAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE5B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,eAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC;QACxH,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,eAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACzG,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -4,12 +4,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
5
|
};
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const dotenv_1 = require("dotenv");
|
|
8
|
+
const path_1 = require("path");
|
|
7
9
|
const commander_1 = require("commander");
|
|
8
10
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
11
|
const init_1 = require("./commands/init");
|
|
10
12
|
const generate_1 = require("./commands/generate");
|
|
11
13
|
const push_1 = require("./commands/push");
|
|
12
14
|
const login_1 = require("./commands/login");
|
|
15
|
+
// Load environment variables from multiple possible locations
|
|
16
|
+
// 1. Current working directory .env
|
|
17
|
+
(0, dotenv_1.config)({ path: (0, path_1.resolve)(process.cwd(), '.env') });
|
|
18
|
+
// 2. Current working directory .env.local
|
|
19
|
+
(0, dotenv_1.config)({ path: (0, path_1.resolve)(process.cwd(), '.env.local') });
|
|
20
|
+
// 3. User home directory .devcache/.env
|
|
21
|
+
(0, dotenv_1.config)({ path: (0, path_1.resolve)(process.env.HOME || process.env.USERPROFILE || '', '.devcache', '.env') });
|
|
13
22
|
const program = new commander_1.Command();
|
|
14
23
|
program
|
|
15
24
|
.name('devcache')
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,0CAA8C;AAC9C,kDAAsD;AACtD,0CAA8C;AAC9C,4CAAgD;AAEhD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,6DAA6D,CAAC;KAC1E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,0BAAe,CAAC,CAAC;AAE3B,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;AAEA,mCAAgC;AAChC,+BAA+B;AAC/B,yCAAoC;AACpC,kDAA0B;AAC1B,0CAA8C;AAC9C,kDAAsD;AACtD,0CAA8C;AAC9C,4CAAgD;AAEhD,8DAA8D;AAC9D,oCAAoC;AACpC,IAAA,eAAM,EAAC,EAAE,IAAI,EAAE,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AACjD,0CAA0C;AAC1C,IAAA,eAAM,EAAC,EAAE,IAAI,EAAE,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;AACvD,wCAAwC;AACxC,IAAA,eAAM,EAAC,EAAE,IAAI,EAAE,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AAElG,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,6DAA6D,CAAC;KAC1E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,0BAAe,CAAC,CAAC;AAE3B,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export declare class FileSystemHandler {
|
|
2
|
+
/**
|
|
3
|
+
* Create output directory structure with project name
|
|
4
|
+
*/
|
|
5
|
+
createOutputDirectory(outputPath: string, projectName: string): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Write documentation file inside project folder
|
|
8
|
+
*/
|
|
9
|
+
writeDocumentation(outputPath: string, projectName: string, category: 'general' | 'tech', filename: string, content: string): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Write index.md file with project map
|
|
12
|
+
*/
|
|
13
|
+
writeIndexFile(outputPath: string, projectName: string, projectDescription: string, files: Array<{
|
|
14
|
+
category: string;
|
|
15
|
+
filename: string;
|
|
16
|
+
description: string;
|
|
17
|
+
}>): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Check if file exists
|
|
20
|
+
*/
|
|
21
|
+
fileExists(filePath: string): Promise<boolean>;
|
|
22
|
+
/**
|
|
23
|
+
* Read file content
|
|
24
|
+
*/
|
|
25
|
+
readFile(filePath: string): Promise<string>;
|
|
26
|
+
/**
|
|
27
|
+
* List files in directory
|
|
28
|
+
*/
|
|
29
|
+
listFiles(dirPath: string): Promise<string[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Delete directory recursively
|
|
32
|
+
*/
|
|
33
|
+
deleteDirectory(dirPath: string): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=FileSystemHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileSystemHandler.d.ts","sourceRoot":"","sources":["../../src/orchestrator/FileSystemHandler.ts"],"names":[],"mappings":"AAIA,qBAAa,iBAAiB;IAC5B;;OAEG;IACG,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBnF;;OAEG;IACG,kBAAkB,CACtB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,SAAS,GAAG,MAAM,EAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAWhB;;OAEG;IACG,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,EAC1B,KAAK,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,GACxE,OAAO,CAAC,IAAI,CAAC;IA+ChB;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASpD;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQjD;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAWnD;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQtD"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.FileSystemHandler = void 0;
|
|
7
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const utils_1 = require("../utils");
|
|
10
|
+
class FileSystemHandler {
|
|
11
|
+
/**
|
|
12
|
+
* Create output directory structure with project name
|
|
13
|
+
*/
|
|
14
|
+
async createOutputDirectory(outputPath, projectName) {
|
|
15
|
+
try {
|
|
16
|
+
// Create main output directory
|
|
17
|
+
await promises_1.default.mkdir(outputPath, { recursive: true });
|
|
18
|
+
// Create project-specific directory
|
|
19
|
+
const projectDir = path_1.default.join(outputPath, projectName);
|
|
20
|
+
await promises_1.default.mkdir(projectDir, { recursive: true });
|
|
21
|
+
// Create category directories inside project folder
|
|
22
|
+
await promises_1.default.mkdir(path_1.default.join(projectDir, 'general'), { recursive: true });
|
|
23
|
+
await promises_1.default.mkdir(path_1.default.join(projectDir, 'tech'), { recursive: true });
|
|
24
|
+
utils_1.Logger.debug(`Created output directory structure: ${projectDir}`);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
throw new Error(`Failed to create output directory: ${error}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Write documentation file inside project folder
|
|
32
|
+
*/
|
|
33
|
+
async writeDocumentation(outputPath, projectName, category, filename, content) {
|
|
34
|
+
const filePath = path_1.default.join(outputPath, projectName, category, filename);
|
|
35
|
+
try {
|
|
36
|
+
await promises_1.default.writeFile(filePath, content, 'utf-8');
|
|
37
|
+
utils_1.Logger.debug(`Written file: ${filePath}`);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
throw new Error(`Failed to write file ${filePath}: ${error}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Write index.md file with project map
|
|
45
|
+
*/
|
|
46
|
+
async writeIndexFile(outputPath, projectName, projectDescription, files) {
|
|
47
|
+
const indexPath = path_1.default.join(outputPath, projectName, 'index.md');
|
|
48
|
+
let content = `# ${projectName}\n\n`;
|
|
49
|
+
content += `${projectDescription}\n\n`;
|
|
50
|
+
content += `---\n\n`;
|
|
51
|
+
content += `## 📁 Documentation Structure\n\n`;
|
|
52
|
+
content += `This documentation is organized into the following categories:\n\n`;
|
|
53
|
+
// Group by category
|
|
54
|
+
const general = files.filter(f => f.category === 'general');
|
|
55
|
+
const tech = files.filter(f => f.category === 'tech');
|
|
56
|
+
if (general.length > 0) {
|
|
57
|
+
content += `### 📋 General\n\n`;
|
|
58
|
+
content += `High-level overview and project context:\n\n`;
|
|
59
|
+
for (const file of general) {
|
|
60
|
+
content += `- **[${file.filename}](./general/${file.filename})** - ${file.description}\n`;
|
|
61
|
+
}
|
|
62
|
+
content += `\n`;
|
|
63
|
+
}
|
|
64
|
+
if (tech.length > 0) {
|
|
65
|
+
content += `### 🔧 Technical\n\n`;
|
|
66
|
+
content += `Technical details and implementation:\n\n`;
|
|
67
|
+
for (const file of tech) {
|
|
68
|
+
content += `- **[${file.filename}](./tech/${file.filename})** - ${file.description}\n`;
|
|
69
|
+
}
|
|
70
|
+
content += `\n`;
|
|
71
|
+
}
|
|
72
|
+
content += `---\n\n`;
|
|
73
|
+
content += `## 🚀 Quick Navigation\n\n`;
|
|
74
|
+
content += `- Start with **General** documentation to understand the project's purpose\n`;
|
|
75
|
+
content += `- Dive into **Technical** documentation for implementation details\n`;
|
|
76
|
+
content += `- Each document is self-contained and can be read independently\n\n`;
|
|
77
|
+
content += `---\n\n`;
|
|
78
|
+
content += `*Generated by DevCache on ${new Date().toISOString()}*\n`;
|
|
79
|
+
try {
|
|
80
|
+
await promises_1.default.writeFile(indexPath, content, 'utf-8');
|
|
81
|
+
utils_1.Logger.debug(`Written index file: ${indexPath}`);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
throw new Error(`Failed to write index file: ${error}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check if file exists
|
|
89
|
+
*/
|
|
90
|
+
async fileExists(filePath) {
|
|
91
|
+
try {
|
|
92
|
+
await promises_1.default.access(filePath);
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Read file content
|
|
101
|
+
*/
|
|
102
|
+
async readFile(filePath) {
|
|
103
|
+
try {
|
|
104
|
+
return await promises_1.default.readFile(filePath, 'utf-8');
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
throw new Error(`Failed to read file ${filePath}: ${error}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* List files in directory
|
|
112
|
+
*/
|
|
113
|
+
async listFiles(dirPath) {
|
|
114
|
+
try {
|
|
115
|
+
const entries = await promises_1.default.readdir(dirPath, { withFileTypes: true });
|
|
116
|
+
return entries
|
|
117
|
+
.filter((entry) => entry.isFile())
|
|
118
|
+
.map((entry) => entry.name);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
throw new Error(`Failed to list files in ${dirPath}: ${error}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Delete directory recursively
|
|
126
|
+
*/
|
|
127
|
+
async deleteDirectory(dirPath) {
|
|
128
|
+
try {
|
|
129
|
+
await promises_1.default.rm(dirPath, { recursive: true, force: true });
|
|
130
|
+
utils_1.Logger.debug(`Deleted directory: ${dirPath}`);
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
throw new Error(`Failed to delete directory ${dirPath}: ${error}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.FileSystemHandler = FileSystemHandler;
|
|
138
|
+
//# sourceMappingURL=FileSystemHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileSystemHandler.js","sourceRoot":"","sources":["../../src/orchestrator/FileSystemHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { BaseAnalyzer } from '../analyzers/base/BaseAnalyzer';
|
|
2
|
+
import { AnalysisResult } from '../types';
|
|
3
|
+
export declare class Orchestrator {
|
|
4
|
+
private analyzers;
|
|
5
|
+
private templateManager;
|
|
6
|
+
private fsHandler;
|
|
7
|
+
private config;
|
|
8
|
+
private rootPath;
|
|
9
|
+
constructor(rootPath?: string);
|
|
10
|
+
/**
|
|
11
|
+
* Initialize orchestrator
|
|
12
|
+
*/
|
|
13
|
+
initialize(): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Register an analyzer
|
|
16
|
+
*/
|
|
17
|
+
registerAnalyzer(analyzer: BaseAnalyzer): void;
|
|
18
|
+
/**
|
|
19
|
+
* Main analysis workflow
|
|
20
|
+
*/
|
|
21
|
+
analyze(): Promise<AnalysisResult[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Scan project and build context
|
|
24
|
+
*/
|
|
25
|
+
private scanProject;
|
|
26
|
+
/**
|
|
27
|
+
* Get analysis summary
|
|
28
|
+
*/
|
|
29
|
+
getSummary(results: AnalysisResult[]): string;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=Orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/Orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAI9D,OAAO,EAAkB,cAAc,EAAkB,MAAM,UAAU,CAAC;AAE1E,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,GAAE,MAAsB;IAO5C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAK9C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAoF1C;;OAEG;YACW,WAAW;IA6BzB;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM;CAmB9C"}
|