@l4yercak3/cli 1.3.1 → 2.0.0-alpha.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/README.md +10 -220
- package/dist/api/client.d.ts +12 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +37 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/platform.d.ts +161 -0
- package/dist/api/platform.d.ts.map +1 -0
- package/dist/api/platform.js +70 -0
- package/dist/api/platform.js.map +1 -0
- package/dist/bin/sevenlayers.d.ts +3 -0
- package/dist/bin/sevenlayers.d.ts.map +1 -0
- package/dist/bin/sevenlayers.js +198 -0
- package/dist/bin/sevenlayers.js.map +1 -0
- package/dist/commands/agent/catalog.d.ts +5 -0
- package/dist/commands/agent/catalog.d.ts.map +1 -0
- package/dist/commands/agent/catalog.js +142 -0
- package/dist/commands/agent/catalog.js.map +1 -0
- package/dist/commands/agent/drift.d.ts +5 -0
- package/dist/commands/agent/drift.d.ts.map +1 -0
- package/dist/commands/agent/drift.js +113 -0
- package/dist/commands/agent/drift.js.map +1 -0
- package/dist/commands/agent/init.d.ts +5 -0
- package/dist/commands/agent/init.d.ts.map +1 -0
- package/dist/commands/agent/init.js +75 -0
- package/dist/commands/agent/init.js.map +1 -0
- package/dist/commands/agent/permissions.d.ts +5 -0
- package/dist/commands/agent/permissions.d.ts.map +1 -0
- package/dist/commands/agent/permissions.js +88 -0
- package/dist/commands/agent/permissions.js.map +1 -0
- package/dist/commands/agent/runner.d.ts +14 -0
- package/dist/commands/agent/runner.d.ts.map +1 -0
- package/dist/commands/agent/runner.js +59 -0
- package/dist/commands/agent/runner.js.map +1 -0
- package/dist/commands/agent/shared.d.ts +13 -0
- package/dist/commands/agent/shared.d.ts.map +1 -0
- package/dist/commands/agent/shared.js +31 -0
- package/dist/commands/agent/shared.js.map +1 -0
- package/dist/commands/agent/template.d.ts +5 -0
- package/dist/commands/agent/template.d.ts.map +1 -0
- package/dist/commands/agent/template.js +104 -0
- package/dist/commands/agent/template.js.map +1 -0
- package/dist/commands/app/connect.d.ts +7 -0
- package/dist/commands/app/connect.d.ts.map +1 -0
- package/dist/commands/app/connect.js +12 -0
- package/dist/commands/app/connect.js.map +1 -0
- package/dist/commands/app/init.d.ts +7 -0
- package/dist/commands/app/init.d.ts.map +1 -0
- package/dist/commands/app/init.js +12 -0
- package/dist/commands/app/init.js.map +1 -0
- package/dist/commands/app/link.d.ts +3 -0
- package/dist/commands/app/link.d.ts.map +1 -0
- package/dist/commands/app/link.js +92 -0
- package/dist/commands/app/link.js.map +1 -0
- package/dist/commands/app/pages.d.ts +15 -0
- package/dist/commands/app/pages.d.ts.map +1 -0
- package/dist/commands/app/pages.js +180 -0
- package/dist/commands/app/pages.js.map +1 -0
- package/dist/commands/app/register.d.ts +3 -0
- package/dist/commands/app/register.d.ts.map +1 -0
- package/dist/commands/app/register.js +120 -0
- package/dist/commands/app/register.js.map +1 -0
- package/dist/commands/app/remote.d.ts +14 -0
- package/dist/commands/app/remote.d.ts.map +1 -0
- package/dist/commands/app/remote.js +44 -0
- package/dist/commands/app/remote.js.map +1 -0
- package/dist/commands/app/setup.d.ts +3 -0
- package/dist/commands/app/setup.d.ts.map +1 -0
- package/dist/commands/app/setup.js +299 -0
- package/dist/commands/app/setup.js.map +1 -0
- package/dist/commands/app/shared.d.ts +9 -0
- package/dist/commands/app/shared.d.ts.map +1 -0
- package/dist/commands/app/shared.js +122 -0
- package/dist/commands/app/shared.js.map +1 -0
- package/dist/commands/app/sync.d.ts +7 -0
- package/dist/commands/app/sync.d.ts.map +1 -0
- package/dist/commands/app/sync.js +107 -0
- package/dist/commands/app/sync.js.map +1 -0
- package/dist/commands/booking/check.d.ts +3 -0
- package/dist/commands/booking/check.d.ts.map +1 -0
- package/dist/commands/booking/check.js +68 -0
- package/dist/commands/booking/check.js.map +1 -0
- package/dist/commands/booking/setup.d.ts +3 -0
- package/dist/commands/booking/setup.d.ts.map +1 -0
- package/dist/commands/booking/setup.js +95 -0
- package/dist/commands/booking/setup.js.map +1 -0
- package/dist/commands/booking/shared.d.ts +31 -0
- package/dist/commands/booking/shared.d.ts.map +1 -0
- package/dist/commands/booking/shared.js +112 -0
- package/dist/commands/booking/shared.js.map +1 -0
- package/dist/commands/booking/smoke.d.ts +3 -0
- package/dist/commands/booking/smoke.d.ts.map +1 -0
- package/dist/commands/booking/smoke.js +101 -0
- package/dist/commands/booking/smoke.js.map +1 -0
- package/dist/commands/cms/bind.d.ts +3 -0
- package/dist/commands/cms/bind.d.ts.map +1 -0
- package/dist/commands/cms/bind.js +212 -0
- package/dist/commands/cms/bind.js.map +1 -0
- package/dist/commands/cms/content.d.ts +40 -0
- package/dist/commands/cms/content.d.ts.map +1 -0
- package/dist/commands/cms/content.js +169 -0
- package/dist/commands/cms/content.js.map +1 -0
- package/dist/commands/cms/doctor.d.ts +3 -0
- package/dist/commands/cms/doctor.d.ts.map +1 -0
- package/dist/commands/cms/doctor.js +69 -0
- package/dist/commands/cms/doctor.js.map +1 -0
- package/dist/commands/cms/migrate.d.ts +3 -0
- package/dist/commands/cms/migrate.d.ts.map +1 -0
- package/dist/commands/cms/migrate.js +78 -0
- package/dist/commands/cms/migrate.js.map +1 -0
- package/dist/commands/cms/registry.d.ts +3 -0
- package/dist/commands/cms/registry.d.ts.map +1 -0
- package/dist/commands/cms/registry.js +161 -0
- package/dist/commands/cms/registry.js.map +1 -0
- package/dist/commands/cms/seed.d.ts +3 -0
- package/dist/commands/cms/seed.d.ts.map +1 -0
- package/dist/commands/cms/seed.js +102 -0
- package/dist/commands/cms/seed.js.map +1 -0
- package/dist/commands/cms/shared.d.ts +22 -0
- package/dist/commands/cms/shared.d.ts.map +1 -0
- package/dist/commands/cms/shared.js +82 -0
- package/dist/commands/cms/shared.js.map +1 -0
- package/dist/commands/doctor/target.d.ts +3 -0
- package/dist/commands/doctor/target.d.ts.map +1 -0
- package/dist/commands/doctor/target.js +46 -0
- package/dist/commands/doctor/target.js.map +1 -0
- package/dist/commands/env/list.d.ts +3 -0
- package/dist/commands/env/list.d.ts.map +1 -0
- package/dist/commands/env/list.js +28 -0
- package/dist/commands/env/list.js.map +1 -0
- package/dist/commands/env/set.d.ts +3 -0
- package/dist/commands/env/set.d.ts.map +1 -0
- package/dist/commands/env/set.js +36 -0
- package/dist/commands/env/set.js.map +1 -0
- package/dist/commands/env/use.d.ts +3 -0
- package/dist/commands/env/use.d.ts.map +1 -0
- package/dist/commands/env/use.js +15 -0
- package/dist/commands/env/use.js.map +1 -0
- package/dist/commands/legacy/connect.d.ts +3 -0
- package/dist/commands/legacy/connect.d.ts.map +1 -0
- package/dist/commands/legacy/connect.js +8 -0
- package/dist/commands/legacy/connect.js.map +1 -0
- package/dist/commands/legacy/pages.d.ts +3 -0
- package/dist/commands/legacy/pages.d.ts.map +1 -0
- package/dist/commands/legacy/pages.js +16 -0
- package/dist/commands/legacy/pages.js.map +1 -0
- package/dist/commands/legacy/spread.d.ts +3 -0
- package/dist/commands/legacy/spread.d.ts.map +1 -0
- package/dist/commands/legacy/spread.js +8 -0
- package/dist/commands/legacy/spread.js.map +1 -0
- package/dist/commands/legacy/sync.d.ts +3 -0
- package/dist/commands/legacy/sync.d.ts.map +1 -0
- package/dist/commands/legacy/sync.js +8 -0
- package/dist/commands/legacy/sync.js.map +1 -0
- package/dist/config/env-diff.d.ts +10 -0
- package/dist/config/env-diff.d.ts.map +1 -0
- package/dist/config/env-diff.js +24 -0
- package/dist/config/env-diff.js.map +1 -0
- package/dist/config/env-parser.d.ts +20 -0
- package/dist/config/env-parser.d.ts.map +1 -0
- package/dist/config/env-parser.js +70 -0
- package/dist/config/env-parser.js.map +1 -0
- package/dist/config/env-writer.d.ts +22 -0
- package/dist/config/env-writer.d.ts.map +1 -0
- package/dist/config/env-writer.js +172 -0
- package/dist/config/env-writer.js.map +1 -0
- package/dist/config/profile-store.d.ts +29 -0
- package/dist/config/profile-store.d.ts.map +1 -0
- package/dist/config/profile-store.js +257 -0
- package/dist/config/profile-store.js.map +1 -0
- package/dist/core/args.d.ts +11 -0
- package/dist/core/args.d.ts.map +1 -0
- package/dist/core/args.js +106 -0
- package/dist/core/args.js.map +1 -0
- package/dist/core/colors.d.ts +6 -0
- package/dist/core/colors.d.ts.map +1 -0
- package/dist/core/colors.js +29 -0
- package/dist/core/colors.js.map +1 -0
- package/dist/safety/target-guard.d.ts +16 -0
- package/dist/safety/target-guard.d.ts.map +1 -0
- package/dist/safety/target-guard.js +55 -0
- package/dist/safety/target-guard.js.map +1 -0
- package/dist/testing/booking-smoke.d.ts +17 -0
- package/dist/testing/booking-smoke.d.ts.map +1 -0
- package/dist/testing/booking-smoke.js +43 -0
- package/dist/testing/booking-smoke.js.map +1 -0
- package/dist/tests/agent-commands.test.d.ts +2 -0
- package/dist/tests/agent-commands.test.d.ts.map +1 -0
- package/dist/tests/agent-commands.test.js +180 -0
- package/dist/tests/agent-commands.test.js.map +1 -0
- package/dist/tests/agent-governance.test.d.ts +2 -0
- package/dist/tests/agent-governance.test.d.ts.map +1 -0
- package/dist/tests/agent-governance.test.js +233 -0
- package/dist/tests/agent-governance.test.js.map +1 -0
- package/dist/tests/app-commands.test.d.ts +2 -0
- package/dist/tests/app-commands.test.d.ts.map +1 -0
- package/dist/tests/app-commands.test.js +462 -0
- package/dist/tests/app-commands.test.js.map +1 -0
- package/dist/tests/booking-commands.test.d.ts +2 -0
- package/dist/tests/booking-commands.test.d.ts.map +1 -0
- package/dist/tests/booking-commands.test.js +204 -0
- package/dist/tests/booking-commands.test.js.map +1 -0
- package/dist/tests/booking-smoke.test.d.ts +2 -0
- package/dist/tests/booking-smoke.test.d.ts.map +1 -0
- package/dist/tests/booking-smoke.test.js +183 -0
- package/dist/tests/booking-smoke.test.js.map +1 -0
- package/dist/tests/cms-commands.test.d.ts +2 -0
- package/dist/tests/cms-commands.test.d.ts.map +1 -0
- package/dist/tests/cms-commands.test.js +254 -0
- package/dist/tests/cms-commands.test.js.map +1 -0
- package/dist/tests/cms-ops.test.d.ts +2 -0
- package/dist/tests/cms-ops.test.d.ts.map +1 -0
- package/dist/tests/cms-ops.test.js +125 -0
- package/dist/tests/cms-ops.test.js.map +1 -0
- package/dist/tests/env-writer.test.d.ts +2 -0
- package/dist/tests/env-writer.test.d.ts.map +1 -0
- package/dist/tests/env-writer.test.js +90 -0
- package/dist/tests/env-writer.test.js.map +1 -0
- package/dist/tests/profile-store.test.d.ts +2 -0
- package/dist/tests/profile-store.test.d.ts.map +1 -0
- package/dist/tests/profile-store.test.js +88 -0
- package/dist/tests/profile-store.test.js.map +1 -0
- package/dist/tests/target-guard.test.d.ts +2 -0
- package/dist/tests/target-guard.test.d.ts.map +1 -0
- package/dist/tests/target-guard.test.js +132 -0
- package/dist/tests/target-guard.test.js.map +1 -0
- package/dist/ui/logo.d.ts +2 -0
- package/dist/ui/logo.d.ts.map +1 -0
- package/dist/ui/logo.js +22 -0
- package/dist/ui/logo.js.map +1 -0
- package/package.json +17 -53
- package/.claude/settings.local.json +0 -36
- package/.cursor/rules.md +0 -203
- package/.eslintrc.js +0 -31
- package/CLAUDE.md +0 -100
- package/bin/cli.js +0 -116
- package/docs/ADDING_FRAMEWORK_DETECTORS.md +0 -391
- package/docs/ADDING_NEW_PROJECT_TYPE.md +0 -156
- package/docs/ARCHITECTURE_RELATIONSHIPS.md +0 -411
- package/docs/CLI_AUTHENTICATION.md +0 -214
- package/docs/CLI_PAGE_DETECTION_REQUIREMENTS.md +0 -519
- package/docs/CRM-PIPELINES-SEQUENCES-SPEC.md +0 -429
- package/docs/DETECTOR_ARCHITECTURE.md +0 -326
- package/docs/DEVELOPMENT.md +0 -194
- package/docs/IMPLEMENTATION_PHASES.md +0 -468
- package/docs/INTEGRATION_PATHS_ARCHITECTURE.md +0 -1543
- package/docs/OAUTH_CLARIFICATION.md +0 -258
- package/docs/OAUTH_SETUP_GUIDE_TEMPLATE.md +0 -211
- package/docs/PHASE_0_PROGRESS.md +0 -120
- package/docs/PHASE_1_COMPLETE.md +0 -366
- package/docs/PHASE_SUMMARY.md +0 -149
- package/docs/PLAN.md +0 -511
- package/docs/README.md +0 -56
- package/docs/STRIPE_INTEGRATION.md +0 -447
- package/docs/SUMMARY.md +0 -230
- package/docs/UPDATED_PLAN.md +0 -447
- package/docs/mcp_server/MCP_EXTENSION_GUIDE.md +0 -1313
- package/docs/mcp_server/MCP_SERVER_ARCHITECTURE.md +0 -1481
- package/docs/mcp_server/applicationOntology.ts +0 -817
- package/docs/mcp_server/cliApplications.ts +0 -639
- package/docs/mcp_server/crmOntology.ts +0 -1063
- package/docs/mcp_server/eventOntology.ts +0 -1183
- package/docs/mcp_server/formsOntology.ts +0 -1401
- package/docs/mcp_server/ontologySchemas.ts +0 -185
- package/docs/mcp_server/schema.ts +0 -250
- package/docs/microsass_production_machine/CLI_API_REFERENCE.md +0 -1197
- package/docs/microsass_production_machine/CLI_PRODUCT_VISION.md +0 -676
- package/docs/microsass_production_machine/CLI_REQUIREMENTS.md +0 -606
- package/docs/microsass_production_machine/CONNECTED_APPLICATIONS_SPEC.md +0 -390
- package/docs/microsass_production_machine/IMPLEMENTATION_ROADMAP.md +0 -725
- package/docs/microsass_production_machine/OBJECT_MAPPINGS.md +0 -808
- package/docs/microsass_production_machine/REFERENCE_IMPLEMENTATION.md +0 -532
- package/src/api/backend-client.js +0 -449
- package/src/commands/api-keys.js +0 -119
- package/src/commands/connect.js +0 -243
- package/src/commands/login.js +0 -332
- package/src/commands/logout.js +0 -30
- package/src/commands/mcp-server.js +0 -85
- package/src/commands/mcp-setup.js +0 -686
- package/src/commands/pages.js +0 -317
- package/src/commands/scaffold.js +0 -409
- package/src/commands/spread.js +0 -861
- package/src/commands/status.js +0 -62
- package/src/commands/sync.js +0 -169
- package/src/commands/upgrade.js +0 -48
- package/src/config/config-manager.js +0 -206
- package/src/detectors/api-client-detector.js +0 -85
- package/src/detectors/base-detector.js +0 -77
- package/src/detectors/database-detector.js +0 -245
- package/src/detectors/expo-detector.js +0 -166
- package/src/detectors/github-detector.js +0 -74
- package/src/detectors/index.js +0 -106
- package/src/detectors/mapping-suggestor.js +0 -119
- package/src/detectors/model-detector.js +0 -318
- package/src/detectors/nextjs-detector.js +0 -139
- package/src/detectors/oauth-detector.js +0 -122
- package/src/detectors/page-detector.js +0 -480
- package/src/detectors/registry.js +0 -121
- package/src/generators/api-client-generator.js +0 -223
- package/src/generators/api-only/client.js +0 -683
- package/src/generators/api-only/index.js +0 -96
- package/src/generators/api-only/types.js +0 -618
- package/src/generators/api-only/webhooks.js +0 -377
- package/src/generators/env-generator.js +0 -191
- package/src/generators/expo-auth-generator.js +0 -1009
- package/src/generators/gitignore-generator.js +0 -92
- package/src/generators/index.js +0 -166
- package/src/generators/manifest-generator.js +0 -154
- package/src/generators/mcp-guide-generator.js +0 -256
- package/src/generators/nextauth-generator.js +0 -247
- package/src/generators/oauth-guide-generator.js +0 -277
- package/src/generators/quickstart/components/index.js +0 -1699
- package/src/generators/quickstart/components-mobile/index.js +0 -1440
- package/src/generators/quickstart/database/convex.js +0 -1257
- package/src/generators/quickstart/database/index.js +0 -34
- package/src/generators/quickstart/database/supabase.js +0 -1132
- package/src/generators/quickstart/hooks/index.js +0 -1065
- package/src/generators/quickstart/index.js +0 -191
- package/src/generators/quickstart/pages/index.js +0 -1466
- package/src/generators/quickstart/screens/index.js +0 -1498
- package/src/logo.js +0 -116
- package/src/mcp/auth.js +0 -127
- package/src/mcp/registry/domains/applications.js +0 -516
- package/src/mcp/registry/domains/benefits.js +0 -798
- package/src/mcp/registry/domains/codegen.js +0 -894
- package/src/mcp/registry/domains/core.js +0 -324
- package/src/mcp/registry/domains/crm.js +0 -591
- package/src/mcp/registry/domains/events.js +0 -649
- package/src/mcp/registry/domains/forms.js +0 -696
- package/src/mcp/registry/index.js +0 -164
- package/src/mcp/server.js +0 -116
- package/src/utils/file-utils.js +0 -117
- package/src/utils/init-helpers.js +0 -243
- package/src/utils/prompt-utils.js +0 -195
- package/templates/CLAUDE.md +0 -86
- package/tests/api-client-detector.test.js +0 -214
- package/tests/api-client-generator.test.js +0 -176
- package/tests/backend-client.test.js +0 -640
- package/tests/base-detector.test.js +0 -101
- package/tests/commands/login.test.js +0 -143
- package/tests/commands/logout.test.js +0 -84
- package/tests/commands/status.test.js +0 -167
- package/tests/config-manager.test.js +0 -321
- package/tests/database-detector.test.js +0 -221
- package/tests/detector-index.test.js +0 -209
- package/tests/detector-registry.test.js +0 -93
- package/tests/env-generator.test.js +0 -278
- package/tests/expo-detector.test.js +0 -263
- package/tests/file-utils.test.js +0 -194
- package/tests/generators-index.test.js +0 -454
- package/tests/github-detector.test.js +0 -145
- package/tests/gitignore-generator.test.js +0 -109
- package/tests/logo.test.js +0 -96
- package/tests/nextauth-generator.test.js +0 -255
- package/tests/nextjs-detector.test.js +0 -235
- package/tests/oauth-detector.test.js +0 -264
- package/tests/oauth-guide-generator.test.js +0 -273
- package/tests/page-detector.test.js +0 -371
package/src/commands/status.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Status Command
|
|
3
|
-
* Shows authentication status and user info
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
const configManager = require('../config/config-manager');
|
|
7
|
-
const backendClient = require('../api/backend-client');
|
|
8
|
-
const chalk = require('chalk');
|
|
9
|
-
|
|
10
|
-
async function handleStatus() {
|
|
11
|
-
const isLoggedIn = configManager.isLoggedIn();
|
|
12
|
-
const session = configManager.getSession();
|
|
13
|
-
|
|
14
|
-
console.log(chalk.bold(' Authentication Status\n'));
|
|
15
|
-
|
|
16
|
-
if (!isLoggedIn) {
|
|
17
|
-
console.log(chalk.red(' ❌ Not logged in'));
|
|
18
|
-
console.log(chalk.gray('\n Run "l4yercak3 login" to authenticate\n'));
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
console.log(chalk.green(' ✅ Logged in\n'));
|
|
23
|
-
|
|
24
|
-
if (session) {
|
|
25
|
-
if (session.email) {
|
|
26
|
-
console.log(chalk.gray(` Email: ${session.email}`));
|
|
27
|
-
}
|
|
28
|
-
if (session.expiresAt) {
|
|
29
|
-
const expiresDate = new Date(session.expiresAt);
|
|
30
|
-
const now = Date.now();
|
|
31
|
-
const daysLeft = Math.floor((session.expiresAt - now) / (24 * 60 * 60 * 1000));
|
|
32
|
-
|
|
33
|
-
if (daysLeft > 0) {
|
|
34
|
-
console.log(chalk.gray(` Session expires: ${expiresDate.toLocaleString()} (${daysLeft} days)`));
|
|
35
|
-
} else {
|
|
36
|
-
console.log(chalk.yellow(` ⚠️ Session expired: ${expiresDate.toLocaleString()}`));
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// Try to validate session with backend
|
|
42
|
-
try {
|
|
43
|
-
const userInfo = await backendClient.validateSession();
|
|
44
|
-
if (userInfo) {
|
|
45
|
-
console.log(chalk.gray(`\n Backend URL: ${configManager.getBackendUrl()}`));
|
|
46
|
-
if (userInfo.organizations && userInfo.organizations.length > 0) {
|
|
47
|
-
console.log(chalk.gray(` Organizations: ${userInfo.organizations.length}`));
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
} catch (error) {
|
|
51
|
-
console.log(chalk.yellow(`\n ⚠️ Could not validate session: ${error.message}`));
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
console.log('');
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
module.exports = {
|
|
58
|
-
command: 'status',
|
|
59
|
-
description: 'Show authentication status',
|
|
60
|
-
handler: handleStatus,
|
|
61
|
-
};
|
|
62
|
-
|
package/src/commands/sync.js
DELETED
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sync Command
|
|
3
|
-
* Re-detects project structure and syncs the manifest with the L4YERCAK3 platform
|
|
4
|
-
*
|
|
5
|
-
* Flow:
|
|
6
|
-
* 1. Re-run all detectors (models, routes, pages)
|
|
7
|
-
* 2. Re-compute suggested mappings
|
|
8
|
-
* 3. Diff old manifest vs new detection results
|
|
9
|
-
* 4. Write updated .l4yercak3.json
|
|
10
|
-
* 5. Push manifest to platform if connected
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
const configManager = require('../config/config-manager');
|
|
14
|
-
const backendClient = require('../api/backend-client');
|
|
15
|
-
const projectDetector = require('../detectors');
|
|
16
|
-
const pageDetector = require('../detectors/page-detector');
|
|
17
|
-
const { suggestMappings } = require('../detectors/mapping-suggestor');
|
|
18
|
-
const manifestGenerator = require('../generators/manifest-generator');
|
|
19
|
-
const { requireAuth } = require('../utils/init-helpers');
|
|
20
|
-
const chalk = require('chalk');
|
|
21
|
-
|
|
22
|
-
async function handleSync() {
|
|
23
|
-
requireAuth(configManager);
|
|
24
|
-
|
|
25
|
-
console.log(chalk.cyan(' 🔄 Syncing project structure...\n'));
|
|
26
|
-
|
|
27
|
-
try {
|
|
28
|
-
const projectPath = process.cwd();
|
|
29
|
-
|
|
30
|
-
// Step 1: Load existing manifest
|
|
31
|
-
const existingManifest = manifestGenerator.loadManifest(projectPath);
|
|
32
|
-
if (!existingManifest) {
|
|
33
|
-
console.log(chalk.yellow(' ⚠️ No .l4yercak3.json manifest found.'));
|
|
34
|
-
console.log(chalk.gray(' Run "l4yercak3 init" first to scan your project.\n'));
|
|
35
|
-
process.exit(1);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
console.log(chalk.gray(' Loading existing manifest...'));
|
|
39
|
-
console.log(chalk.gray(` Framework: ${existingManifest.framework}`));
|
|
40
|
-
console.log(chalk.gray(` Models: ${existingManifest.detectedModels?.length || 0}`));
|
|
41
|
-
console.log(chalk.gray(` Routes: ${existingManifest.detectedRoutes?.length || 0}`));
|
|
42
|
-
console.log(chalk.gray(` Last synced: ${existingManifest.lastSyncedAt || 'never'}\n`));
|
|
43
|
-
|
|
44
|
-
// Step 2: Re-run detection
|
|
45
|
-
console.log(chalk.gray(' 🔍 Re-scanning project...\n'));
|
|
46
|
-
const detection = projectDetector.detect(projectPath);
|
|
47
|
-
|
|
48
|
-
// Step 3: Re-scan routes with methods
|
|
49
|
-
const detectedRoutes = pageDetector.detect(
|
|
50
|
-
projectPath,
|
|
51
|
-
detection.framework.type,
|
|
52
|
-
detection.framework.metadata || {}
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
// Step 4: Re-compute mappings
|
|
56
|
-
const models = detection.models ? detection.models.models : [];
|
|
57
|
-
const mappings = suggestMappings(models);
|
|
58
|
-
|
|
59
|
-
// Step 5: Build new manifest data for diff
|
|
60
|
-
const newManifestData = {
|
|
61
|
-
version: existingManifest.version || '1.0.0',
|
|
62
|
-
framework: detection.framework.type || existingManifest.framework,
|
|
63
|
-
routerType: detection.framework.metadata?.routerType || existingManifest.routerType,
|
|
64
|
-
typescript: detection.framework.metadata?.hasTypeScript || existingManifest.typescript,
|
|
65
|
-
database: detection.database?.primary?.type || existingManifest.database,
|
|
66
|
-
detectedModels: models.map(m => ({
|
|
67
|
-
name: m.name,
|
|
68
|
-
source: m.source,
|
|
69
|
-
fields: m.fields || [],
|
|
70
|
-
})),
|
|
71
|
-
detectedRoutes: detectedRoutes
|
|
72
|
-
.filter(r => r.pageType === 'api_route')
|
|
73
|
-
.map(r => ({
|
|
74
|
-
path: r.path,
|
|
75
|
-
methods: r.methods || ['GET', 'POST'],
|
|
76
|
-
})),
|
|
77
|
-
suggestedMappings: mappings.map(m => ({
|
|
78
|
-
localModel: m.localModel,
|
|
79
|
-
platformType: m.platformType,
|
|
80
|
-
confidence: m.confidence,
|
|
81
|
-
})),
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
// Step 6: Compute diff
|
|
85
|
-
const diff = manifestGenerator.diff(existingManifest, newManifestData);
|
|
86
|
-
|
|
87
|
-
if (!diff.hasChanges) {
|
|
88
|
-
console.log(chalk.green(' ✅ No changes detected. Your manifest is up to date.\n'));
|
|
89
|
-
} else {
|
|
90
|
-
console.log(chalk.cyan(' 📊 Changes detected:\n'));
|
|
91
|
-
|
|
92
|
-
if (diff.modelsAdded.length > 0) {
|
|
93
|
-
console.log(chalk.green(` + ${diff.modelsAdded.length} new model(s)`));
|
|
94
|
-
for (const m of diff.modelsAdded) {
|
|
95
|
-
console.log(chalk.gray(` • ${m.name} (${m.source})`));
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
if (diff.modelsRemoved.length > 0) {
|
|
100
|
-
console.log(chalk.red(` - ${diff.modelsRemoved.length} removed model(s)`));
|
|
101
|
-
for (const m of diff.modelsRemoved) {
|
|
102
|
-
console.log(chalk.gray(` • ${m.name} (${m.source})`));
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
if (diff.routesAdded.length > 0) {
|
|
107
|
-
console.log(chalk.green(` + ${diff.routesAdded.length} new route(s)`));
|
|
108
|
-
for (const r of diff.routesAdded) {
|
|
109
|
-
console.log(chalk.gray(` • ${r.path} [${(r.methods || []).join(', ')}]`));
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
if (diff.routesRemoved.length > 0) {
|
|
114
|
-
console.log(chalk.red(` - ${diff.routesRemoved.length} removed route(s)`));
|
|
115
|
-
for (const r of diff.routesRemoved) {
|
|
116
|
-
console.log(chalk.gray(` • ${r.path}`));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
console.log('');
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Step 7: Write updated manifest
|
|
124
|
-
manifestGenerator.generate({
|
|
125
|
-
projectPath,
|
|
126
|
-
detection,
|
|
127
|
-
models,
|
|
128
|
-
routes: detectedRoutes,
|
|
129
|
-
mappings,
|
|
130
|
-
});
|
|
131
|
-
console.log(chalk.green(` ✅ Manifest updated: .l4yercak3.json`));
|
|
132
|
-
|
|
133
|
-
// Step 8: Summary
|
|
134
|
-
console.log(chalk.gray(` Models: ${newManifestData.detectedModels.length}`));
|
|
135
|
-
console.log(chalk.gray(` Routes: ${newManifestData.detectedRoutes.length}`));
|
|
136
|
-
console.log(chalk.gray(` Mappings: ${newManifestData.suggestedMappings.length}\n`));
|
|
137
|
-
|
|
138
|
-
// Step 9: Push to platform if connected
|
|
139
|
-
const projectConfig = configManager.getProjectConfig(projectPath);
|
|
140
|
-
if (projectConfig && projectConfig.applicationId) {
|
|
141
|
-
console.log(chalk.gray(' Syncing to platform...'));
|
|
142
|
-
try {
|
|
143
|
-
const updatedManifest = manifestGenerator.loadManifest(projectPath);
|
|
144
|
-
await backendClient.syncManifest(projectConfig.applicationId, updatedManifest);
|
|
145
|
-
console.log(chalk.green(' ✅ Manifest synced to L4YERCAK3 platform\n'));
|
|
146
|
-
} catch (syncError) {
|
|
147
|
-
console.log(chalk.yellow(` ⚠️ Could not sync to platform: ${syncError.message}`));
|
|
148
|
-
console.log(chalk.gray(' The manifest was updated locally. Platform sync may not be available yet.\n'));
|
|
149
|
-
}
|
|
150
|
-
} else {
|
|
151
|
-
console.log(chalk.gray(' ℹ️ Not connected to platform. Run "l4yercak3 connect" to enable remote sync.\n'));
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
console.log(chalk.cyan(' 🎉 Sync complete!\n'));
|
|
155
|
-
|
|
156
|
-
} catch (error) {
|
|
157
|
-
console.error(chalk.red(`\n ❌ Error: ${error.message}\n`));
|
|
158
|
-
if (process.env.L4YERCAK3_DEBUG && error.stack) {
|
|
159
|
-
console.error(chalk.gray(error.stack));
|
|
160
|
-
}
|
|
161
|
-
process.exit(1);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
module.exports = {
|
|
166
|
-
command: 'sync',
|
|
167
|
-
description: 'Re-detect project structure and sync with L4YERCAK3',
|
|
168
|
-
handler: handleSync,
|
|
169
|
-
};
|
package/src/commands/upgrade.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Upgrade Command
|
|
3
|
-
* Opens the upgrade page in the browser for plan upgrades
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
const configManager = require('../config/config-manager');
|
|
7
|
-
const chalk = require('chalk');
|
|
8
|
-
const { default: open } = require('open');
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Upgrade command handler
|
|
12
|
-
*/
|
|
13
|
-
async function handleUpgrade() {
|
|
14
|
-
// Check if logged in
|
|
15
|
-
if (!configManager.isLoggedIn()) {
|
|
16
|
-
console.log(chalk.yellow(' ⚠️ You must be logged in first'));
|
|
17
|
-
console.log(chalk.gray('\n Run "l4yercak3 login" to authenticate\n'));
|
|
18
|
-
process.exit(1);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const session = configManager.getSession();
|
|
22
|
-
const backendUrl = configManager.getBackendUrl();
|
|
23
|
-
|
|
24
|
-
console.log(chalk.cyan(' 🚀 Opening upgrade page...\n'));
|
|
25
|
-
|
|
26
|
-
// Build upgrade URL with CLI token for seamless authentication
|
|
27
|
-
const upgradeUrl = `${backendUrl}/upgrade?token=${encodeURIComponent(session.token)}&reason=cli_upgrade`;
|
|
28
|
-
|
|
29
|
-
console.log(chalk.gray(` URL: ${upgradeUrl}\n`));
|
|
30
|
-
|
|
31
|
-
try {
|
|
32
|
-
await open(upgradeUrl);
|
|
33
|
-
console.log(chalk.green(' ✅ Upgrade page opened in your browser\n'));
|
|
34
|
-
console.log(chalk.gray(' Select a plan to unlock more features:'));
|
|
35
|
-
console.log(chalk.gray(' • More API keys'));
|
|
36
|
-
console.log(chalk.gray(' • Priority support'));
|
|
37
|
-
console.log(chalk.gray(' • Advanced features\n'));
|
|
38
|
-
} catch (error) {
|
|
39
|
-
console.log(chalk.yellow(' ⚠️ Could not open browser automatically'));
|
|
40
|
-
console.log(chalk.gray(`\n Please visit: ${upgradeUrl}\n`));
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
module.exports = {
|
|
45
|
-
command: 'upgrade',
|
|
46
|
-
description: 'Upgrade your L4YERCAK3 plan',
|
|
47
|
-
handler: handleUpgrade,
|
|
48
|
-
};
|
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Configuration Manager
|
|
3
|
-
* Handles storing and retrieving CLI configuration and session data
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
const fs = require('fs');
|
|
7
|
-
const path = require('path');
|
|
8
|
-
const os = require('os');
|
|
9
|
-
|
|
10
|
-
class ConfigManager {
|
|
11
|
-
constructor() {
|
|
12
|
-
this.configDir = path.join(os.homedir(), '.l4yercak3');
|
|
13
|
-
this.configFile = path.join(this.configDir, 'config.json');
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Ensure config directory exists
|
|
18
|
-
*/
|
|
19
|
-
ensureConfigDir() {
|
|
20
|
-
if (!fs.existsSync(this.configDir)) {
|
|
21
|
-
fs.mkdirSync(this.configDir, { recursive: true, mode: 0o700 });
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Get full config object
|
|
27
|
-
*/
|
|
28
|
-
getConfig() {
|
|
29
|
-
this.ensureConfigDir();
|
|
30
|
-
|
|
31
|
-
if (!fs.existsSync(this.configFile)) {
|
|
32
|
-
return {
|
|
33
|
-
session: null,
|
|
34
|
-
organizations: [],
|
|
35
|
-
settings: {
|
|
36
|
-
backendUrl: process.env.L4YERCAK3_BACKEND_URL || 'https://agreeable-lion-828.convex.site',
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
try {
|
|
42
|
-
const data = fs.readFileSync(this.configFile, 'utf8');
|
|
43
|
-
return JSON.parse(data);
|
|
44
|
-
} catch (error) {
|
|
45
|
-
console.error('Error reading config file:', error.message);
|
|
46
|
-
return {
|
|
47
|
-
session: null,
|
|
48
|
-
organizations: [],
|
|
49
|
-
settings: {},
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Save config object
|
|
56
|
-
*/
|
|
57
|
-
saveConfig(config) {
|
|
58
|
-
this.ensureConfigDir();
|
|
59
|
-
|
|
60
|
-
try {
|
|
61
|
-
fs.writeFileSync(
|
|
62
|
-
this.configFile,
|
|
63
|
-
JSON.stringify(config, null, 2),
|
|
64
|
-
{ mode: 0o600 } // Read/write for owner only
|
|
65
|
-
);
|
|
66
|
-
return true;
|
|
67
|
-
} catch (error) {
|
|
68
|
-
console.error('Error saving config file:', error.message);
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Get current session
|
|
75
|
-
*/
|
|
76
|
-
getSession() {
|
|
77
|
-
const config = this.getConfig();
|
|
78
|
-
return config.session;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Save session
|
|
83
|
-
*/
|
|
84
|
-
saveSession(session) {
|
|
85
|
-
const config = this.getConfig();
|
|
86
|
-
config.session = session;
|
|
87
|
-
return this.saveConfig(config);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Clear session (logout)
|
|
92
|
-
*/
|
|
93
|
-
clearSession() {
|
|
94
|
-
const config = this.getConfig();
|
|
95
|
-
config.session = null;
|
|
96
|
-
return this.saveConfig(config);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Check if user is logged in
|
|
101
|
-
*/
|
|
102
|
-
isLoggedIn() {
|
|
103
|
-
const session = this.getSession();
|
|
104
|
-
if (!session || !session.token) {
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Check expiration
|
|
109
|
-
if (session.expiresAt && session.expiresAt < Date.now()) {
|
|
110
|
-
return false;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
return true;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Get backend URL from config or env
|
|
118
|
-
* This is the Convex HTTP URL for all API calls
|
|
119
|
-
*/
|
|
120
|
-
getBackendUrl() {
|
|
121
|
-
const config = this.getConfig();
|
|
122
|
-
return config.settings?.backendUrl || process.env.L4YERCAK3_BACKEND_URL || 'https://agreeable-lion-828.convex.site';
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Set backend URL
|
|
127
|
-
*/
|
|
128
|
-
setBackendUrl(url) {
|
|
129
|
-
const config = this.getConfig();
|
|
130
|
-
if (!config.settings) {
|
|
131
|
-
config.settings = {};
|
|
132
|
-
}
|
|
133
|
-
config.settings.backendUrl = url;
|
|
134
|
-
return this.saveConfig(config);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Add organization to config
|
|
139
|
-
*/
|
|
140
|
-
addOrganization(org) {
|
|
141
|
-
const config = this.getConfig();
|
|
142
|
-
if (!config.organizations) {
|
|
143
|
-
config.organizations = [];
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// Remove if exists
|
|
147
|
-
config.organizations = config.organizations.filter(o => o.id !== org.id);
|
|
148
|
-
|
|
149
|
-
// Add new
|
|
150
|
-
config.organizations.push(org);
|
|
151
|
-
|
|
152
|
-
return this.saveConfig(config);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Get organizations
|
|
157
|
-
*/
|
|
158
|
-
getOrganizations() {
|
|
159
|
-
const config = this.getConfig();
|
|
160
|
-
return config.organizations || [];
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/**
|
|
164
|
-
* Save project configuration
|
|
165
|
-
* Stores configuration for a specific project (by project path)
|
|
166
|
-
*/
|
|
167
|
-
saveProjectConfig(projectPath, projectConfig) {
|
|
168
|
-
const config = this.getConfig();
|
|
169
|
-
if (!config.projects) {
|
|
170
|
-
config.projects = {};
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// Normalize project path (use absolute path)
|
|
174
|
-
const normalizedPath = path.resolve(projectPath);
|
|
175
|
-
config.projects[normalizedPath] = {
|
|
176
|
-
...projectConfig,
|
|
177
|
-
updatedAt: Date.now(),
|
|
178
|
-
};
|
|
179
|
-
|
|
180
|
-
return this.saveConfig(config);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* Get project configuration
|
|
185
|
-
*/
|
|
186
|
-
getProjectConfig(projectPath) {
|
|
187
|
-
const config = this.getConfig();
|
|
188
|
-
if (!config.projects) {
|
|
189
|
-
return null;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
const normalizedPath = path.resolve(projectPath);
|
|
193
|
-
return config.projects[normalizedPath] || null;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* Get all project configurations
|
|
198
|
-
*/
|
|
199
|
-
getAllProjectConfigs() {
|
|
200
|
-
const config = this.getConfig();
|
|
201
|
-
return config.projects || {};
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
module.exports = new ConfigManager();
|
|
206
|
-
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* API Client Pattern Detector
|
|
3
|
-
* Detects existing API client implementations
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
const fs = require('fs');
|
|
7
|
-
const path = require('path');
|
|
8
|
-
|
|
9
|
-
class ApiClientDetector {
|
|
10
|
-
/**
|
|
11
|
-
* Detect existing API client patterns
|
|
12
|
-
*/
|
|
13
|
-
detect(projectPath = process.cwd()) {
|
|
14
|
-
const results = {
|
|
15
|
-
hasApiClient: false,
|
|
16
|
-
clientPath: null,
|
|
17
|
-
clientType: null, // 'fetch', 'axios', 'custom'
|
|
18
|
-
hasEnvFile: false,
|
|
19
|
-
envFilePath: null,
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
// Common API client locations
|
|
23
|
-
const clientPaths = [
|
|
24
|
-
'lib/api-client.ts',
|
|
25
|
-
'lib/api-client.js',
|
|
26
|
-
'lib/api.ts',
|
|
27
|
-
'lib/api.js',
|
|
28
|
-
'src/lib/api-client.ts',
|
|
29
|
-
'src/lib/api-client.js',
|
|
30
|
-
'src/lib/api.ts',
|
|
31
|
-
'src/lib/api.js',
|
|
32
|
-
'utils/api-client.ts',
|
|
33
|
-
'utils/api-client.js',
|
|
34
|
-
'utils/api.ts',
|
|
35
|
-
'utils/api.js',
|
|
36
|
-
'src/utils/api-client.ts',
|
|
37
|
-
'src/utils/api-client.js',
|
|
38
|
-
];
|
|
39
|
-
|
|
40
|
-
// Check for existing API client
|
|
41
|
-
for (const clientPath of clientPaths) {
|
|
42
|
-
const fullPath = path.join(projectPath, clientPath);
|
|
43
|
-
if (fs.existsSync(fullPath)) {
|
|
44
|
-
results.hasApiClient = true;
|
|
45
|
-
results.clientPath = clientPath;
|
|
46
|
-
|
|
47
|
-
// Try to detect client type
|
|
48
|
-
try {
|
|
49
|
-
const content = fs.readFileSync(fullPath, 'utf8');
|
|
50
|
-
if (content.includes('axios')) {
|
|
51
|
-
results.clientType = 'axios';
|
|
52
|
-
} else if (content.includes('fetch')) {
|
|
53
|
-
results.clientType = 'fetch';
|
|
54
|
-
} else {
|
|
55
|
-
results.clientType = 'custom';
|
|
56
|
-
}
|
|
57
|
-
} catch (error) {
|
|
58
|
-
results.clientType = 'unknown';
|
|
59
|
-
}
|
|
60
|
-
break;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Check for environment files
|
|
65
|
-
const envFiles = [
|
|
66
|
-
'.env.local',
|
|
67
|
-
'.env',
|
|
68
|
-
'.env.development',
|
|
69
|
-
'.env.production',
|
|
70
|
-
];
|
|
71
|
-
|
|
72
|
-
for (const envFile of envFiles) {
|
|
73
|
-
const fullPath = path.join(projectPath, envFile);
|
|
74
|
-
if (fs.existsSync(fullPath)) {
|
|
75
|
-
results.hasEnvFile = true;
|
|
76
|
-
results.envFilePath = envFile;
|
|
77
|
-
break;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return results;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
module.exports = new ApiClientDetector();
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Base Detector Class
|
|
3
|
-
*
|
|
4
|
-
* All project type detectors should extend this class or implement its interface.
|
|
5
|
-
* This provides a consistent API for detection across all project types.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
class BaseDetector {
|
|
9
|
-
/**
|
|
10
|
-
* Unique identifier for this project type
|
|
11
|
-
* @returns {string} Detector name (e.g., 'nextjs', 'react', 'vue')
|
|
12
|
-
*/
|
|
13
|
-
get name() {
|
|
14
|
-
throw new Error('Detector must implement name getter');
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Detection priority (higher = checked first)
|
|
19
|
-
* Range: 0-100
|
|
20
|
-
*
|
|
21
|
-
* Priority guidelines:
|
|
22
|
-
* - 100: Very specific frameworks (Next.js, Nuxt, SvelteKit)
|
|
23
|
-
* - 75: Framework with build tool (Vite + React, Webpack + Vue)
|
|
24
|
-
* - 50: Pure frameworks (React, Vue, Svelte)
|
|
25
|
-
* - 25: Generic JavaScript/TypeScript projects
|
|
26
|
-
*
|
|
27
|
-
* @returns {number} Priority value
|
|
28
|
-
*/
|
|
29
|
-
get priority() {
|
|
30
|
-
return 50; // Default priority
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Detect if project matches this type
|
|
35
|
-
*
|
|
36
|
-
* @param {string} projectPath - Path to project directory (defaults to process.cwd())
|
|
37
|
-
* @returns {object} Detection result with:
|
|
38
|
-
* - detected: {boolean} Is this the project type?
|
|
39
|
-
* - confidence: {number} 0-1, how sure are we?
|
|
40
|
-
* - metadata: {object} Type-specific information
|
|
41
|
-
*/
|
|
42
|
-
detect(_projectPath = process.cwd()) {
|
|
43
|
-
throw new Error('Detector must implement detect() method');
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Get supported features for this project type
|
|
48
|
-
*
|
|
49
|
-
* @returns {object} Feature support matrix:
|
|
50
|
-
* - oauth: {boolean|'manual'} true = full support, 'manual' = guide only, false = not supported
|
|
51
|
-
* - stripe: {boolean} Stripe integration support
|
|
52
|
-
* - crm: {boolean} CRM features support
|
|
53
|
-
* - projects: {boolean} Projects feature support
|
|
54
|
-
* - invoices: {boolean} Invoices feature support
|
|
55
|
-
*/
|
|
56
|
-
getSupportedFeatures() {
|
|
57
|
-
return {
|
|
58
|
-
oauth: false,
|
|
59
|
-
stripe: false,
|
|
60
|
-
crm: false,
|
|
61
|
-
projects: false,
|
|
62
|
-
invoices: false,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Get available generators for this project type
|
|
68
|
-
*
|
|
69
|
-
* @returns {string[]} List of generator names that work with this project type
|
|
70
|
-
*/
|
|
71
|
-
getAvailableGenerators() {
|
|
72
|
-
return ['api-client', 'env']; // Default: shared generators only
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
module.exports = BaseDetector;
|
|
77
|
-
|