@codyswann/lisa 1.0.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/LICENSE +21 -0
- package/README.md +867 -0
- package/all/copy-overwrite/.claude/README.md +205 -0
- package/all/copy-overwrite/.claude/agents/agent-architect.md +311 -0
- package/all/copy-overwrite/.claude/agents/codebase-analyzer.md +146 -0
- package/all/copy-overwrite/.claude/agents/codebase-locator.md +125 -0
- package/all/copy-overwrite/.claude/agents/codebase-pattern-finder.md +237 -0
- package/all/copy-overwrite/.claude/agents/git-history-analyzer.md +183 -0
- package/all/copy-overwrite/.claude/agents/hooks-expert.md +74 -0
- package/all/copy-overwrite/.claude/agents/skill-evaluator.md +246 -0
- package/all/copy-overwrite/.claude/agents/slash-command-architect.md +87 -0
- package/all/copy-overwrite/.claude/agents/web-search-researcher.md +112 -0
- package/all/copy-overwrite/.claude/commands/git/commit-and-submit-pr.md +8 -0
- package/all/copy-overwrite/.claude/commands/git/commit.md +44 -0
- package/all/copy-overwrite/.claude/commands/git/prune.md +34 -0
- package/all/copy-overwrite/.claude/commands/git/submit-pr.md +50 -0
- package/all/copy-overwrite/.claude/commands/jira/create.md +50 -0
- package/all/copy-overwrite/.claude/commands/jira/verify.md +34 -0
- package/all/copy-overwrite/.claude/commands/project/archive.md +8 -0
- package/all/copy-overwrite/.claude/commands/project/bootstrap.md +49 -0
- package/all/copy-overwrite/.claude/commands/project/complete-task.md +7 -0
- package/all/copy-overwrite/.claude/commands/project/debrief.md +65 -0
- package/all/copy-overwrite/.claude/commands/project/execute.md +94 -0
- package/all/copy-overwrite/.claude/commands/project/implement.md +42 -0
- package/all/copy-overwrite/.claude/commands/project/local-code-review.md +88 -0
- package/all/copy-overwrite/.claude/commands/project/lower-code-complexity.md +74 -0
- package/all/copy-overwrite/.claude/commands/project/plan.md +314 -0
- package/all/copy-overwrite/.claude/commands/project/research.md +248 -0
- package/all/copy-overwrite/.claude/commands/project/review.md +63 -0
- package/all/copy-overwrite/.claude/commands/project/setup.md +19 -0
- package/all/copy-overwrite/.claude/commands/project/verify.md +38 -0
- package/all/copy-overwrite/.claude/commands/pull-request/review.md +12 -0
- package/all/copy-overwrite/.claude/commands/rules/format-md.md +72 -0
- package/all/copy-overwrite/.claude/commands/sonarqube/check.md +6 -0
- package/all/copy-overwrite/.claude/commands/sonarqube/fix.md +3 -0
- package/all/copy-overwrite/.claude/hooks/README.md +301 -0
- package/all/copy-overwrite/.claude/hooks/notify-ntfy.sh +181 -0
- package/all/copy-overwrite/.claude/settings.json +41 -0
- package/all/copy-overwrite/.claude/settings.local.json.example +14 -0
- package/all/copy-overwrite/.claude/skills/coding-philosophy/SKILL.md +405 -0
- package/all/copy-overwrite/.claude/skills/coding-philosophy/references/function-structure.md +416 -0
- package/all/copy-overwrite/.claude/skills/coding-philosophy/references/immutable-patterns.md +316 -0
- package/all/copy-overwrite/.claude/skills/prompt-complexity-scorer/SKILL.md +118 -0
- package/all/copy-overwrite/.claude/skills/skill-creator/LICENSE.txt +202 -0
- package/all/copy-overwrite/.claude/skills/skill-creator/SKILL.md +210 -0
- package/all/copy-overwrite/.claude/skills/skill-creator/scripts/__pycache__/quick_validate.cpython-312.pyc +0 -0
- package/all/copy-overwrite/.claude/skills/skill-creator/scripts/init_skill.py +303 -0
- package/all/copy-overwrite/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
- package/all/copy-overwrite/.claude/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/all/copy-overwrite/CLAUDE.md +77 -0
- package/all/copy-overwrite/HUMAN.md +17 -0
- package/all/copy-overwrite/specs/.keep +0 -0
- package/all/create-only/PROJECT_RULES.md +0 -0
- package/cdk/merge/package.json +20 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +107 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/prompts.d.ts +45 -0
- package/dist/cli/prompts.d.ts.map +1 -0
- package/dist/cli/prompts.js +58 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/core/config.d.ts +73 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +36 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lisa.d.ts +81 -0
- package/dist/core/lisa.d.ts.map +1 -0
- package/dist/core/lisa.js +459 -0
- package/dist/core/lisa.js.map +1 -0
- package/dist/core/manifest.d.ts +58 -0
- package/dist/core/manifest.d.ts.map +1 -0
- package/dist/core/manifest.js +104 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/detection/detector.interface.d.ts +15 -0
- package/dist/detection/detector.interface.d.ts.map +1 -0
- package/dist/detection/detector.interface.js +2 -0
- package/dist/detection/detector.interface.js.map +1 -0
- package/dist/detection/detectors/cdk.d.ts +10 -0
- package/dist/detection/detectors/cdk.d.ts.map +1 -0
- package/dist/detection/detectors/cdk.js +34 -0
- package/dist/detection/detectors/cdk.js.map +1 -0
- package/dist/detection/detectors/expo.d.ts +10 -0
- package/dist/detection/detectors/expo.d.ts.map +1 -0
- package/dist/detection/detectors/expo.js +30 -0
- package/dist/detection/detectors/expo.js.map +1 -0
- package/dist/detection/detectors/nestjs.d.ts +10 -0
- package/dist/detection/detectors/nestjs.d.ts.map +1 -0
- package/dist/detection/detectors/nestjs.js +34 -0
- package/dist/detection/detectors/nestjs.js.map +1 -0
- package/dist/detection/detectors/npm-package.d.ts +13 -0
- package/dist/detection/detectors/npm-package.d.ts.map +1 -0
- package/dist/detection/detectors/npm-package.js +30 -0
- package/dist/detection/detectors/npm-package.js.map +1 -0
- package/dist/detection/detectors/typescript.d.ts +10 -0
- package/dist/detection/detectors/typescript.d.ts.map +1 -0
- package/dist/detection/detectors/typescript.js +25 -0
- package/dist/detection/detectors/typescript.js.map +1 -0
- package/dist/detection/index.d.ts +24 -0
- package/dist/detection/index.d.ts.map +1 -0
- package/dist/detection/index.js +57 -0
- package/dist/detection/index.js.map +1 -0
- package/dist/errors/index.d.ts +69 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +110 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/console-logger.d.ts +12 -0
- package/dist/logging/console-logger.d.ts.map +1 -0
- package/dist/logging/console-logger.js +22 -0
- package/dist/logging/console-logger.js.map +1 -0
- package/dist/logging/index.d.ts +4 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +3 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/logger.interface.d.ts +20 -0
- package/dist/logging/logger.interface.d.ts.map +1 -0
- package/dist/logging/logger.interface.js +2 -0
- package/dist/logging/logger.interface.js.map +1 -0
- package/dist/logging/silent-logger.d.ts +12 -0
- package/dist/logging/silent-logger.d.ts.map +1 -0
- package/dist/logging/silent-logger.js +21 -0
- package/dist/logging/silent-logger.js.map +1 -0
- package/dist/strategies/copy-contents.d.ts +14 -0
- package/dist/strategies/copy-contents.d.ts.map +1 -0
- package/dist/strategies/copy-contents.js +69 -0
- package/dist/strategies/copy-contents.js.map +1 -0
- package/dist/strategies/copy-overwrite.d.ts +14 -0
- package/dist/strategies/copy-overwrite.d.ts.map +1 -0
- package/dist/strategies/copy-overwrite.js +47 -0
- package/dist/strategies/copy-overwrite.js.map +1 -0
- package/dist/strategies/create-only.d.ts +13 -0
- package/dist/strategies/create-only.d.ts.map +1 -0
- package/dist/strategies/create-only.js +30 -0
- package/dist/strategies/create-only.js.map +1 -0
- package/dist/strategies/index.d.ts +31 -0
- package/dist/strategies/index.d.ts.map +1 -0
- package/dist/strategies/index.js +52 -0
- package/dist/strategies/index.js.map +1 -0
- package/dist/strategies/merge.d.ts +13 -0
- package/dist/strategies/merge.d.ts.map +1 -0
- package/dist/strategies/merge.js +60 -0
- package/dist/strategies/merge.js.map +1 -0
- package/dist/strategies/strategy.interface.d.ts +31 -0
- package/dist/strategies/strategy.interface.d.ts.map +1 -0
- package/dist/strategies/strategy.interface.js +2 -0
- package/dist/strategies/strategy.interface.js.map +1 -0
- package/dist/transaction/backup.d.ts +38 -0
- package/dist/transaction/backup.d.ts.map +1 -0
- package/dist/transaction/backup.js +97 -0
- package/dist/transaction/backup.js.map +1 -0
- package/dist/transaction/index.d.ts +4 -0
- package/dist/transaction/index.d.ts.map +1 -0
- package/dist/transaction/index.js +3 -0
- package/dist/transaction/index.js.map +1 -0
- package/dist/transaction/transaction.d.ts +34 -0
- package/dist/transaction/transaction.d.ts.map +1 -0
- package/dist/transaction/transaction.js +68 -0
- package/dist/transaction/transaction.js.map +1 -0
- package/dist/utils/file-operations.d.ts +29 -0
- package/dist/utils/file-operations.d.ts.map +1 -0
- package/dist/utils/file-operations.js +84 -0
- package/dist/utils/file-operations.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 +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json-utils.d.ts +22 -0
- package/dist/utils/json-utils.d.ts.map +1 -0
- package/dist/utils/json-utils.js +57 -0
- package/dist/utils/json-utils.js.map +1 -0
- package/dist/utils/path-utils.d.ts +21 -0
- package/dist/utils/path-utils.d.ts.map +1 -0
- package/dist/utils/path-utils.js +35 -0
- package/dist/utils/path-utils.js.map +1 -0
- package/eslint-plugin-code-organization/README.md +149 -0
- package/eslint-plugin-code-organization/__tests__/enforce-statement-order.test.js +468 -0
- package/eslint-plugin-code-organization/index.js +23 -0
- package/eslint-plugin-code-organization/package.json +10 -0
- package/eslint-plugin-code-organization/rules/enforce-statement-order.js +157 -0
- package/expo/copy-overwrite/.claude/skills/apollo-client/SKILL.md +238 -0
- package/expo/copy-overwrite/.claude/skills/apollo-client/references/mutation-patterns.md +360 -0
- package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/SKILL.md +360 -0
- package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/references/atomic-levels.md +417 -0
- package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/references/folder-structure.md +257 -0
- package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/references/gluestack-mapping.md +233 -0
- package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +327 -0
- package/expo/copy-overwrite/.claude/skills/container-view-pattern/SKILL.md +299 -0
- package/expo/copy-overwrite/.claude/skills/container-view-pattern/references/examples.md +749 -0
- package/expo/copy-overwrite/.claude/skills/container-view-pattern/references/patterns.md +318 -0
- package/expo/copy-overwrite/.claude/skills/container-view-pattern/scripts/create_component.py +198 -0
- package/expo/copy-overwrite/.claude/skills/container-view-pattern/scripts/validate_component.py +207 -0
- package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/SKILL.md +268 -0
- package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/references/common-issues.md +619 -0
- package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/references/file-extensions.md +340 -0
- package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/references/platform-api.md +276 -0
- package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +414 -0
- package/expo/copy-overwrite/.claude/skills/directory-structure/SKILL.md +202 -0
- package/expo/copy-overwrite/.claude/skills/directory-structure/scripts/validate_structure.py +443 -0
- package/expo/copy-overwrite/.claude/skills/expo-env-config/SKILL.md +309 -0
- package/expo/copy-overwrite/.claude/skills/expo-env-config/references/validation-patterns.md +417 -0
- package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/SKILL.md +431 -0
- package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/references/official-docs.md +290 -0
- package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/scripts/generate-route.py +169 -0
- package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/SKILL.md +411 -0
- package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/references/color-tokens.md +343 -0
- package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/references/component-mapping.md +307 -0
- package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/references/spacing-scale.md +300 -0
- package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/scripts/validate_styling.py +354 -0
- package/expo/copy-overwrite/.claude/skills/local-state/SKILL.md +362 -0
- package/expo/copy-overwrite/.claude/skills/local-state/references/async-storage.md +505 -0
- package/expo/copy-overwrite/.claude/skills/local-state/references/persistence-patterns.md +711 -0
- package/expo/copy-overwrite/.claude/skills/local-state/references/reactive-variables.md +446 -0
- package/expo/copy-overwrite/.claude/skills/playwright-selectors/SKILL.md +223 -0
- package/expo/copy-overwrite/.claude/skills/testing-library/SKILL.md +319 -0
- package/expo/copy-overwrite/.claude/skills/testing-library/references/async-patterns.md +420 -0
- package/expo/copy-overwrite/.claude/skills/testing-library/references/expo-router-testing.md +556 -0
- package/expo/copy-overwrite/.claude/skills/testing-library/references/mocking-patterns.md +590 -0
- package/expo/copy-overwrite/.claude/skills/testing-library/references/query-priority.md +291 -0
- package/expo/copy-overwrite/.easignore.extra +2 -0
- package/expo/copy-overwrite/.mcp.json +33 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/README.md +234 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/plugin-index.test.js +84 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/require-memo-in-view.test.js +196 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/single-component-per-file.test.js +289 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/index.js +32 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/package.json +10 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/rules/enforce-component-structure.js +230 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/rules/no-return-in-view.js +91 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/rules/require-memo-in-view.js +178 -0
- package/expo/copy-overwrite/eslint-plugin-component-structure/rules/single-component-per-file.js +238 -0
- package/expo/copy-overwrite/eslint-plugin-ui-standards/README.md +260 -0
- package/expo/copy-overwrite/eslint-plugin-ui-standards/index.js +29 -0
- package/expo/copy-overwrite/eslint-plugin-ui-standards/package.json +10 -0
- package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-classname-outside-ui.js +51 -0
- package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-direct-rn-imports.js +55 -0
- package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-inline-styles.js +73 -0
- package/expo/copy-overwrite/eslint.config.mjs +560 -0
- package/expo/copy-overwrite/lighthouserc.js +194 -0
- package/expo/create-only/lighthouserc-config.json +28 -0
- package/expo/merge/package.json +132 -0
- package/lisa.sh +35 -0
- package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/SKILL.md +176 -0
- package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/advanced-features.md +527 -0
- package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/project-patterns.md +483 -0
- package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/quick-start.md +257 -0
- package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/resolvers-mutations.md +413 -0
- package/nestjs/copy-overwrite/.claude/skills/nestjs-graphql/references/types-scalars.md +513 -0
- package/nestjs/copy-overwrite/.claude/skills/nestjs-rules/SKILL.md +536 -0
- package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/SKILL.md +275 -0
- package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/references/configuration-patterns.md +487 -0
- package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/references/entity-patterns.md +450 -0
- package/nestjs/copy-overwrite/.claude/skills/typeorm-patterns/references/observability-patterns.md +536 -0
- package/nestjs/merge/package.json +75 -0
- package/package.json +124 -0
- package/typescript/copy-contents/.husky/commit-msg +91 -0
- package/typescript/copy-contents/.husky/pre-commit +96 -0
- package/typescript/copy-contents/.husky/pre-push +211 -0
- package/typescript/copy-overwrite/.claude/hooks/format-on-edit.sh +74 -0
- package/typescript/copy-overwrite/.claude/hooks/install_pkgs.sh +59 -0
- package/typescript/copy-overwrite/.claude/hooks/lint-on-edit.sh +103 -0
- package/typescript/copy-overwrite/.claude/skills/jsdoc-best-practices/SKILL.md +388 -0
- package/typescript/copy-overwrite/.github/README.md +455 -0
- package/typescript/copy-overwrite/.github/dependabot.yml +40 -0
- package/typescript/copy-overwrite/.github/k6/BROWSER_TESTING_NOTE.md +129 -0
- package/typescript/copy-overwrite/.github/k6/INTEGRATION_GUIDE.md +354 -0
- package/typescript/copy-overwrite/.github/k6/README.md +386 -0
- package/typescript/copy-overwrite/.github/k6/SCENARIO_SELECTION_GUIDE.md +264 -0
- package/typescript/copy-overwrite/.github/k6/examples/customer-deploy-integration.yml +115 -0
- package/typescript/copy-overwrite/.github/k6/examples/data-driven-test.js +268 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/load.js +142 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/load.json +27 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/smoke.js +26 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/smoke.json +20 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/soak.js +244 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/soak.json +29 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/spike.js +180 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/spike.json +32 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/stress.js +206 -0
- package/typescript/copy-overwrite/.github/k6/scenarios/stress.json +38 -0
- package/typescript/copy-overwrite/.github/k6/scripts/api-test.js +452 -0
- package/typescript/copy-overwrite/.github/k6/scripts/default-test.js +185 -0
- package/typescript/copy-overwrite/.github/k6/thresholds/normal.json +30 -0
- package/typescript/copy-overwrite/.github/k6/thresholds/relaxed.json +21 -0
- package/typescript/copy-overwrite/.github/k6/thresholds/strict.json +29 -0
- package/typescript/copy-overwrite/.github/workflows/build.yml +72 -0
- package/typescript/copy-overwrite/.github/workflows/ci.yml +49 -0
- package/typescript/copy-overwrite/.github/workflows/claude.yml +51 -0
- package/typescript/copy-overwrite/.github/workflows/create-github-issue-on-failure.yml +113 -0
- package/typescript/copy-overwrite/.github/workflows/create-jira-issue-on-failure.yml +195 -0
- package/typescript/copy-overwrite/.github/workflows/create-sentry-issue-on-failure.yml +267 -0
- package/typescript/copy-overwrite/.github/workflows/deploy.yml +228 -0
- package/typescript/copy-overwrite/.github/workflows/k6-load-test-README.md +230 -0
- package/typescript/copy-overwrite/.github/workflows/lighthouse.yml +68 -0
- package/typescript/copy-overwrite/.github/workflows/load-test.yml +282 -0
- package/typescript/copy-overwrite/.github/workflows/quality.yml +1737 -0
- package/typescript/copy-overwrite/.github/workflows/release.yml +1599 -0
- package/typescript/copy-overwrite/.gitleaksignore +28 -0
- package/typescript/copy-overwrite/.nvmrc +1 -0
- package/typescript/copy-overwrite/.prettierignore +23 -0
- package/typescript/copy-overwrite/.prettierrc.json +22 -0
- package/typescript/copy-overwrite/.versionrc +42 -0
- package/typescript/copy-overwrite/.yamllint +20 -0
- package/typescript/copy-overwrite/commitlint.config.js +11 -0
- package/typescript/copy-overwrite/eslint-plugin-code-organization/README.md +149 -0
- package/typescript/copy-overwrite/eslint-plugin-code-organization/__tests__/enforce-statement-order.test.js +468 -0
- package/typescript/copy-overwrite/eslint-plugin-code-organization/index.js +23 -0
- package/typescript/copy-overwrite/eslint-plugin-code-organization/package.json +10 -0
- package/typescript/copy-overwrite/eslint-plugin-code-organization/rules/enforce-statement-order.js +157 -0
- package/typescript/copy-overwrite/eslint.config.mjs +390 -0
- package/typescript/copy-overwrite/eslint.ignore.config.json +57 -0
- package/typescript/copy-overwrite/eslint.thresholds.config.json +5 -0
- package/typescript/github-rulesets/base.json +106 -0
- package/typescript/merge/.claude/settings.json +28 -0
- package/typescript/merge/package.json +71 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { Lisa } from '../core/lisa.js';
|
|
5
|
+
import { DetectorRegistry } from '../detection/index.js';
|
|
6
|
+
import { StrategyRegistry } from '../strategies/index.js';
|
|
7
|
+
import { ManifestService, DryRunManifestService } from '../core/manifest.js';
|
|
8
|
+
import { BackupService, DryRunBackupService } from '../transaction/index.js';
|
|
9
|
+
import { ConsoleLogger } from '../logging/index.js';
|
|
10
|
+
import { createPrompter } from './prompts.js';
|
|
11
|
+
import { toAbsolutePath } from '../utils/path-utils.js';
|
|
12
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
/**
|
|
14
|
+
* Get Lisa directory (where configs are stored)
|
|
15
|
+
*/
|
|
16
|
+
function getLisaDir() {
|
|
17
|
+
// Go up from dist/cli to project root
|
|
18
|
+
return path.resolve(__dirname, '..', '..');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Create and configure the CLI program
|
|
22
|
+
*/
|
|
23
|
+
export function createProgram() {
|
|
24
|
+
const program = new Command();
|
|
25
|
+
program
|
|
26
|
+
.name('lisa')
|
|
27
|
+
.description('Claude Code governance framework - apply guardrails and guidance to projects')
|
|
28
|
+
.version('1.0.0')
|
|
29
|
+
.argument('[destination]', 'Path to the project directory')
|
|
30
|
+
.option('-n, --dry-run', 'Show what would be done without making changes')
|
|
31
|
+
.option('-y, --yes', 'Non-interactive mode (auto-accept defaults, overwrite on conflict)')
|
|
32
|
+
.option('-v, --validate', 'Validate project compatibility without applying changes')
|
|
33
|
+
.option('-u, --uninstall', 'Remove Lisa-managed files from the project')
|
|
34
|
+
.action(async (destination, options) => {
|
|
35
|
+
await runLisa(destination, options);
|
|
36
|
+
});
|
|
37
|
+
return program;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Run Lisa with the given options
|
|
41
|
+
*/
|
|
42
|
+
async function runLisa(destination, options) {
|
|
43
|
+
// Check for destination
|
|
44
|
+
if (!destination) {
|
|
45
|
+
console.error('Error: destination path is required');
|
|
46
|
+
console.log('');
|
|
47
|
+
console.log('Usage: lisa [options] <destination-path>');
|
|
48
|
+
console.log('');
|
|
49
|
+
console.log('Options:');
|
|
50
|
+
console.log(' -n, --dry-run Show what would be done without making changes');
|
|
51
|
+
console.log(' -y, --yes Non-interactive mode (auto-accept defaults, overwrite on conflict)');
|
|
52
|
+
console.log(' -v, --validate Validate project compatibility without applying changes');
|
|
53
|
+
console.log(' -u, --uninstall Remove Lisa-managed files from the project');
|
|
54
|
+
console.log(' -h, --help Show this help message');
|
|
55
|
+
console.log('');
|
|
56
|
+
console.log('Examples:');
|
|
57
|
+
console.log(' lisa /path/to/my-project');
|
|
58
|
+
console.log(' lisa --dry-run .');
|
|
59
|
+
console.log(' lisa --yes /path/to/project # CI/CD pipeline usage');
|
|
60
|
+
console.log(' lisa --validate . # Check compatibility only');
|
|
61
|
+
console.log(' lisa --uninstall . # Remove Lisa configurations');
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
const lisaDir = getLisaDir();
|
|
65
|
+
const destDir = toAbsolutePath(destination);
|
|
66
|
+
const dryRun = options.dryRun ?? options.validate ?? false;
|
|
67
|
+
const yesMode = options.yes ?? false;
|
|
68
|
+
const validateOnly = options.validate ?? false;
|
|
69
|
+
const config = {
|
|
70
|
+
lisaDir,
|
|
71
|
+
destDir,
|
|
72
|
+
dryRun,
|
|
73
|
+
yesMode,
|
|
74
|
+
validateOnly,
|
|
75
|
+
};
|
|
76
|
+
const logger = new ConsoleLogger();
|
|
77
|
+
const deps = {
|
|
78
|
+
logger,
|
|
79
|
+
prompter: createPrompter(yesMode),
|
|
80
|
+
manifestService: dryRun ? new DryRunManifestService() : new ManifestService(),
|
|
81
|
+
backupService: dryRun ? new DryRunBackupService() : new BackupService(logger),
|
|
82
|
+
detectorRegistry: new DetectorRegistry(),
|
|
83
|
+
strategyRegistry: new StrategyRegistry(),
|
|
84
|
+
};
|
|
85
|
+
const lisa = new Lisa(config, deps);
|
|
86
|
+
try {
|
|
87
|
+
let result;
|
|
88
|
+
if (options.uninstall) {
|
|
89
|
+
result = await lisa.uninstall();
|
|
90
|
+
}
|
|
91
|
+
else if (options.validate) {
|
|
92
|
+
result = await lisa.validate();
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
result = await lisa.apply();
|
|
96
|
+
}
|
|
97
|
+
if (!result.success) {
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
export { createPrompter } from './prompts.js';
|
|
107
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ProjectType } from '../core/config.js';
|
|
2
|
+
/**
|
|
3
|
+
* Overwrite decision options
|
|
4
|
+
*/
|
|
5
|
+
export type OverwriteDecision = 'yes' | 'no' | 'diff';
|
|
6
|
+
/**
|
|
7
|
+
* Interface for user prompts
|
|
8
|
+
*/
|
|
9
|
+
export interface IPrompter {
|
|
10
|
+
/**
|
|
11
|
+
* Prompt for file overwrite decision
|
|
12
|
+
* @param relativePath Path to the conflicting file
|
|
13
|
+
* @returns User's decision
|
|
14
|
+
*/
|
|
15
|
+
promptOverwrite(relativePath: string): Promise<OverwriteDecision>;
|
|
16
|
+
/**
|
|
17
|
+
* Confirm detected project types with user
|
|
18
|
+
* @param detected Array of detected project types
|
|
19
|
+
* @returns Confirmed/modified project types
|
|
20
|
+
*/
|
|
21
|
+
confirmProjectTypes(detected: readonly ProjectType[]): Promise<readonly ProjectType[]>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Interactive prompter using @inquirer/prompts
|
|
25
|
+
*/
|
|
26
|
+
export declare class InteractivePrompter implements IPrompter {
|
|
27
|
+
promptOverwrite(relativePath: string): Promise<OverwriteDecision>;
|
|
28
|
+
confirmProjectTypes(detected: readonly ProjectType[]): Promise<readonly ProjectType[]>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Auto-accepting prompter for non-interactive mode
|
|
32
|
+
*/
|
|
33
|
+
export declare class AutoAcceptPrompter implements IPrompter {
|
|
34
|
+
promptOverwrite(_relativePath: string): Promise<OverwriteDecision>;
|
|
35
|
+
confirmProjectTypes(detected: readonly ProjectType[]): Promise<readonly ProjectType[]>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Check if running in interactive mode (TTY available)
|
|
39
|
+
*/
|
|
40
|
+
export declare function isInteractive(): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Create appropriate prompter based on mode and TTY
|
|
43
|
+
*/
|
|
44
|
+
export declare function createPrompter(yesMode: boolean): IPrompter;
|
|
45
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/cli/prompts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAElE;;;;OAIG;IACH,mBAAmB,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;CACxF;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,SAAS;IAC7C,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAYjE,mBAAmB,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC;CAiB7F;AAED;;GAEG;AACH,qBAAa,kBAAmB,YAAW,SAAS;IAC5C,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIlE,mBAAmB,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC;CAG7F;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAK1D"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { confirm, select } from '@inquirer/prompts';
|
|
2
|
+
/**
|
|
3
|
+
* Interactive prompter using @inquirer/prompts
|
|
4
|
+
*/
|
|
5
|
+
export class InteractivePrompter {
|
|
6
|
+
async promptOverwrite(relativePath) {
|
|
7
|
+
const choice = await select({
|
|
8
|
+
message: `File differs: ${relativePath}\nOverwrite?`,
|
|
9
|
+
choices: [
|
|
10
|
+
{ name: 'Yes - overwrite', value: 'yes' },
|
|
11
|
+
{ name: 'No - skip', value: 'no' },
|
|
12
|
+
{ name: 'Diff - show differences', value: 'diff' },
|
|
13
|
+
],
|
|
14
|
+
});
|
|
15
|
+
return choice;
|
|
16
|
+
}
|
|
17
|
+
async confirmProjectTypes(detected) {
|
|
18
|
+
const typesDisplay = detected.length > 0 ? detected.join(', ') : '(none detected)';
|
|
19
|
+
const confirmed = await confirm({
|
|
20
|
+
message: `Detected project types: ${typesDisplay}\nContinue with these types?`,
|
|
21
|
+
default: true,
|
|
22
|
+
});
|
|
23
|
+
if (confirmed) {
|
|
24
|
+
return detected;
|
|
25
|
+
}
|
|
26
|
+
// Allow user to specify types manually
|
|
27
|
+
// For simplicity, just return detected types for now
|
|
28
|
+
// Full implementation would allow type selection
|
|
29
|
+
return detected;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Auto-accepting prompter for non-interactive mode
|
|
34
|
+
*/
|
|
35
|
+
export class AutoAcceptPrompter {
|
|
36
|
+
async promptOverwrite(_relativePath) {
|
|
37
|
+
return 'yes';
|
|
38
|
+
}
|
|
39
|
+
async confirmProjectTypes(detected) {
|
|
40
|
+
return detected;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Check if running in interactive mode (TTY available)
|
|
45
|
+
*/
|
|
46
|
+
export function isInteractive() {
|
|
47
|
+
return process.stdin.isTTY === true;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Create appropriate prompter based on mode and TTY
|
|
51
|
+
*/
|
|
52
|
+
export function createPrompter(yesMode) {
|
|
53
|
+
if (yesMode || !isInteractive()) {
|
|
54
|
+
return new AutoAcceptPrompter();
|
|
55
|
+
}
|
|
56
|
+
return new InteractivePrompter();
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/cli/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AA2BpD;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAC9B,KAAK,CAAC,eAAe,CAAC,YAAoB;QACxC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;YAC1B,OAAO,EAAE,iBAAiB,YAAY,cAAc;YACpD,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAc,EAAE;gBAClD,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAa,EAAE;gBAC3C,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAe,EAAE;aAC5D;SACF,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,QAAgC;QACxD,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;QAEnF,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;YAC9B,OAAO,EAAE,2BAA2B,YAAY,8BAA8B;YAC9E,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,uCAAuC;QACvC,qDAAqD;QACrD,iDAAiD;QACjD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAC7B,KAAK,CAAC,eAAe,CAAC,aAAqB;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,QAAgC;QACxD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,IAAI,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QAChC,OAAO,IAAI,kBAAkB,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,mBAAmB,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copy strategy types for handling file operations
|
|
3
|
+
*/
|
|
4
|
+
export type CopyStrategy = 'copy-overwrite' | 'copy-contents' | 'create-only' | 'merge';
|
|
5
|
+
/**
|
|
6
|
+
* Available project types that Lisa can detect and configure
|
|
7
|
+
*/
|
|
8
|
+
export type ProjectType = 'typescript' | 'expo' | 'nestjs' | 'cdk' | 'npm-package';
|
|
9
|
+
/**
|
|
10
|
+
* Project type hierarchy - child types include their parent types
|
|
11
|
+
*/
|
|
12
|
+
export declare const PROJECT_TYPE_HIERARCHY: Readonly<Record<string, ProjectType | undefined>>;
|
|
13
|
+
/**
|
|
14
|
+
* Canonical order for processing project types (parents before children)
|
|
15
|
+
*/
|
|
16
|
+
export declare const PROJECT_TYPE_ORDER: readonly ProjectType[];
|
|
17
|
+
/**
|
|
18
|
+
* All available copy strategies in processing order
|
|
19
|
+
*/
|
|
20
|
+
export declare const COPY_STRATEGIES: readonly CopyStrategy[];
|
|
21
|
+
/**
|
|
22
|
+
* Runtime configuration for Lisa operations
|
|
23
|
+
*/
|
|
24
|
+
export interface LisaConfig {
|
|
25
|
+
/** Path to Lisa installation directory (containing configs) */
|
|
26
|
+
readonly lisaDir: string;
|
|
27
|
+
/** Path to destination project directory */
|
|
28
|
+
readonly destDir: string;
|
|
29
|
+
/** If true, show what would be done without making changes */
|
|
30
|
+
readonly dryRun: boolean;
|
|
31
|
+
/** If true, auto-accept all prompts (non-interactive mode) */
|
|
32
|
+
readonly yesMode: boolean;
|
|
33
|
+
/** If true, only validate compatibility without applying */
|
|
34
|
+
readonly validateOnly: boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Operation mode for Lisa execution
|
|
38
|
+
*/
|
|
39
|
+
export type OperationMode = 'apply' | 'validate' | 'uninstall';
|
|
40
|
+
/**
|
|
41
|
+
* Result of a single file operation
|
|
42
|
+
*/
|
|
43
|
+
export interface FileOperationResult {
|
|
44
|
+
readonly relativePath: string;
|
|
45
|
+
readonly strategy: CopyStrategy;
|
|
46
|
+
readonly action: 'copied' | 'skipped' | 'overwritten' | 'appended' | 'merged' | 'created';
|
|
47
|
+
readonly linesAdded?: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Counters for operation summary
|
|
51
|
+
*/
|
|
52
|
+
export interface OperationCounters {
|
|
53
|
+
copied: number;
|
|
54
|
+
skipped: number;
|
|
55
|
+
overwritten: number;
|
|
56
|
+
appended: number;
|
|
57
|
+
merged: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Result of a Lisa operation
|
|
61
|
+
*/
|
|
62
|
+
export interface LisaResult {
|
|
63
|
+
readonly success: boolean;
|
|
64
|
+
readonly counters: OperationCounters;
|
|
65
|
+
readonly detectedTypes: readonly ProjectType[];
|
|
66
|
+
readonly mode: OperationMode;
|
|
67
|
+
readonly errors: readonly string[];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Create initial operation counters with all values at zero
|
|
71
|
+
*/
|
|
72
|
+
export declare function createInitialCounters(): OperationCounters;
|
|
73
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG,eAAe,GAAG,aAAa,GAAG,OAAO,CAAC;AAExF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,aAAa,CAAC;AAEnF;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC,CAM3E,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,WAAW,EAAoE,CAAC;AAE1H;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,YAAY,EAKzC,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzB,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,4DAA4D;IAC5D,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC1F,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,SAAS,WAAW,EAAE,CAAC;IAC/C,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,iBAAiB,CAQzD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project type hierarchy - child types include their parent types
|
|
3
|
+
*/
|
|
4
|
+
export const PROJECT_TYPE_HIERARCHY = {
|
|
5
|
+
expo: 'typescript',
|
|
6
|
+
nestjs: 'typescript',
|
|
7
|
+
cdk: 'typescript',
|
|
8
|
+
'npm-package': 'typescript',
|
|
9
|
+
typescript: undefined,
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Canonical order for processing project types (parents before children)
|
|
13
|
+
*/
|
|
14
|
+
export const PROJECT_TYPE_ORDER = ['typescript', 'npm-package', 'expo', 'nestjs', 'cdk'];
|
|
15
|
+
/**
|
|
16
|
+
* All available copy strategies in processing order
|
|
17
|
+
*/
|
|
18
|
+
export const COPY_STRATEGIES = [
|
|
19
|
+
'copy-overwrite',
|
|
20
|
+
'copy-contents',
|
|
21
|
+
'create-only',
|
|
22
|
+
'merge',
|
|
23
|
+
];
|
|
24
|
+
/**
|
|
25
|
+
* Create initial operation counters with all values at zero
|
|
26
|
+
*/
|
|
27
|
+
export function createInitialCounters() {
|
|
28
|
+
return {
|
|
29
|
+
copied: 0,
|
|
30
|
+
skipped: 0,
|
|
31
|
+
overwritten: 0,
|
|
32
|
+
appended: 0,
|
|
33
|
+
merged: 0,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAsD;IACvF,IAAI,EAAE,YAAY;IAClB,MAAM,EAAE,YAAY;IACpB,GAAG,EAAE,YAAY;IACjB,aAAa,EAAE,YAAY;IAC3B,UAAU,EAAE,SAAS;CACb,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA2B,CAAC,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAU,CAAC;AAE1H;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAA4B;IACtD,gBAAgB;IAChB,eAAe;IACf,aAAa;IACb,OAAO;CACC,CAAC;AA2DX;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,CAAC;KACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './config.js';
|
|
2
|
+
export { Lisa, type LisaDependencies } from './lisa.js';
|
|
3
|
+
export { ManifestService, DryRunManifestService, ManifestNotFoundError, MANIFEST_FILENAME, type IManifestService, type ManifestEntry, } from './manifest.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAyB,MAAM,WAAW,CAAC;AACxD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,GAGlB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { LisaConfig, LisaResult } from './config.js';
|
|
2
|
+
import { DetectorRegistry } from '../detection/index.js';
|
|
3
|
+
import { StrategyRegistry } from '../strategies/index.js';
|
|
4
|
+
import type { IManifestService } from './manifest.js';
|
|
5
|
+
import type { IBackupService } from '../transaction/index.js';
|
|
6
|
+
import type { ILogger } from '../logging/index.js';
|
|
7
|
+
import type { IPrompter } from '../cli/prompts.js';
|
|
8
|
+
/**
|
|
9
|
+
* Dependencies for Lisa operations
|
|
10
|
+
*/
|
|
11
|
+
export interface LisaDependencies {
|
|
12
|
+
readonly logger: ILogger;
|
|
13
|
+
readonly prompter: IPrompter;
|
|
14
|
+
readonly manifestService: IManifestService;
|
|
15
|
+
readonly backupService: IBackupService;
|
|
16
|
+
readonly detectorRegistry: DetectorRegistry;
|
|
17
|
+
readonly strategyRegistry: StrategyRegistry;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Main Lisa orchestrator
|
|
21
|
+
*/
|
|
22
|
+
export declare class Lisa {
|
|
23
|
+
private readonly config;
|
|
24
|
+
private readonly deps;
|
|
25
|
+
private counters;
|
|
26
|
+
private detectedTypes;
|
|
27
|
+
constructor(config: LisaConfig, deps: LisaDependencies);
|
|
28
|
+
/**
|
|
29
|
+
* Apply Lisa configurations to the destination project
|
|
30
|
+
*/
|
|
31
|
+
apply(): Promise<LisaResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Validate compatibility without applying changes
|
|
34
|
+
*/
|
|
35
|
+
validate(): Promise<LisaResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Uninstall Lisa-managed files from the project
|
|
38
|
+
*/
|
|
39
|
+
uninstall(): Promise<LisaResult>;
|
|
40
|
+
/**
|
|
41
|
+
* Process all files for a given project type
|
|
42
|
+
*/
|
|
43
|
+
private processProjectType;
|
|
44
|
+
/**
|
|
45
|
+
* Process all files in a directory with the given strategy
|
|
46
|
+
*/
|
|
47
|
+
private processDirectory;
|
|
48
|
+
/**
|
|
49
|
+
* Handle overwrite prompt for conflicting files
|
|
50
|
+
*/
|
|
51
|
+
private handleOverwritePrompt;
|
|
52
|
+
/**
|
|
53
|
+
* Show diff between two files
|
|
54
|
+
*/
|
|
55
|
+
private showDiff;
|
|
56
|
+
/**
|
|
57
|
+
* Update counters based on operation result
|
|
58
|
+
*/
|
|
59
|
+
private updateCounters;
|
|
60
|
+
/**
|
|
61
|
+
* Log operation result
|
|
62
|
+
*/
|
|
63
|
+
private logResult;
|
|
64
|
+
/**
|
|
65
|
+
* Validate destination directory exists and is a directory
|
|
66
|
+
*/
|
|
67
|
+
private validateDestination;
|
|
68
|
+
/**
|
|
69
|
+
* Print header banner
|
|
70
|
+
*/
|
|
71
|
+
private printHeader;
|
|
72
|
+
/**
|
|
73
|
+
* Print summary
|
|
74
|
+
*/
|
|
75
|
+
private printSummary;
|
|
76
|
+
/**
|
|
77
|
+
* Remove empty directories after uninstall
|
|
78
|
+
*/
|
|
79
|
+
private removeEmptyDirectories;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=lisa.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lisa.d.ts","sourceRoot":"","sources":["../../src/core/lisa.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EAKX,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAwB,MAAM,wBAAwB,CAAC;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAInD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;IACvC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;CAC7C;AAED;;GAEG;AACH,qBAAa,IAAI;IAKb,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IALvB,OAAO,CAAC,QAAQ,CAA8C;IAC9D,OAAO,CAAC,aAAa,CAAqB;gBAGvB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,gBAAgB;IAGzC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC;IAuElC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAKrC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;IAuGtC;;OAEG;YACW,kBAAkB;IAahC;;OAEG;YACW,gBAAgB;IA6B9B;;OAEG;YACW,qBAAqB;IAuBnC;;OAEG;YACW,QAAQ;IAatB;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;OAEG;IACH,OAAO,CAAC,SAAS;IA6CjB;;OAEG;YACW,mBAAmB;IAajC;;OAEG;IACH,OAAO,CAAC,WAAW;IA4BnB;;OAEG;IACH,OAAO,CAAC,YAAY;IA2DpB;;OAEG;YACW,sBAAsB;CA2BrC"}
|