@liendev/core 0.19.5
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 +336 -0
- package/dist/config/loader.d.ts +12 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +46 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/merge.d.ts +20 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/merge.js +71 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/migration-manager.d.ts +46 -0
- package/dist/config/migration-manager.d.ts.map +1 -0
- package/dist/config/migration-manager.js +119 -0
- package/dist/config/migration-manager.js.map +1 -0
- package/dist/config/migration.d.ts +20 -0
- package/dist/config/migration.d.ts.map +1 -0
- package/dist/config/migration.js +155 -0
- package/dist/config/migration.js.map +1 -0
- package/dist/config/schema.d.ts +101 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +58 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/service.d.ts +122 -0
- package/dist/config/service.d.ts.map +1 -0
- package/dist/config/service.js +477 -0
- package/dist/config/service.js.map +1 -0
- package/dist/constants.d.ts +20 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +43 -0
- package/dist/constants.js.map +1 -0
- package/dist/embeddings/cache.d.ts +45 -0
- package/dist/embeddings/cache.d.ts.map +1 -0
- package/dist/embeddings/cache.js +109 -0
- package/dist/embeddings/cache.js.map +1 -0
- package/dist/embeddings/local.d.ts +10 -0
- package/dist/embeddings/local.d.ts.map +1 -0
- package/dist/embeddings/local.js +63 -0
- package/dist/embeddings/local.js.map +1 -0
- package/dist/embeddings/types.d.ts +9 -0
- package/dist/embeddings/types.d.ts.map +1 -0
- package/dist/embeddings/types.js +5 -0
- package/dist/embeddings/types.js.map +1 -0
- package/dist/errors/codes.d.ts +18 -0
- package/dist/errors/codes.d.ts.map +1 -0
- package/dist/errors/codes.js +25 -0
- package/dist/errors/codes.js.map +1 -0
- package/dist/errors/index.d.ts +85 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +134 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/frameworks/detector-service.d.ts +59 -0
- package/dist/frameworks/detector-service.d.ts.map +1 -0
- package/dist/frameworks/detector-service.js +219 -0
- package/dist/frameworks/detector-service.js.map +1 -0
- package/dist/frameworks/laravel/config.d.ts +6 -0
- package/dist/frameworks/laravel/config.d.ts.map +1 -0
- package/dist/frameworks/laravel/config.js +68 -0
- package/dist/frameworks/laravel/config.js.map +1 -0
- package/dist/frameworks/laravel/detector.d.ts +6 -0
- package/dist/frameworks/laravel/detector.d.ts.map +1 -0
- package/dist/frameworks/laravel/detector.js +96 -0
- package/dist/frameworks/laravel/detector.js.map +1 -0
- package/dist/frameworks/nodejs/config.d.ts +6 -0
- package/dist/frameworks/nodejs/config.d.ts.map +1 -0
- package/dist/frameworks/nodejs/config.js +57 -0
- package/dist/frameworks/nodejs/config.js.map +1 -0
- package/dist/frameworks/nodejs/detector.d.ts +6 -0
- package/dist/frameworks/nodejs/detector.d.ts.map +1 -0
- package/dist/frameworks/nodejs/detector.js +77 -0
- package/dist/frameworks/nodejs/detector.js.map +1 -0
- package/dist/frameworks/php/config.d.ts +6 -0
- package/dist/frameworks/php/config.d.ts.map +1 -0
- package/dist/frameworks/php/config.js +53 -0
- package/dist/frameworks/php/config.js.map +1 -0
- package/dist/frameworks/php/detector.d.ts +7 -0
- package/dist/frameworks/php/detector.d.ts.map +1 -0
- package/dist/frameworks/php/detector.js +101 -0
- package/dist/frameworks/php/detector.js.map +1 -0
- package/dist/frameworks/registry.d.ts +20 -0
- package/dist/frameworks/registry.d.ts.map +1 -0
- package/dist/frameworks/registry.js +38 -0
- package/dist/frameworks/registry.js.map +1 -0
- package/dist/frameworks/shopify/config.d.ts +6 -0
- package/dist/frameworks/shopify/config.d.ts.map +1 -0
- package/dist/frameworks/shopify/config.js +50 -0
- package/dist/frameworks/shopify/config.js.map +1 -0
- package/dist/frameworks/shopify/detector.d.ts +6 -0
- package/dist/frameworks/shopify/detector.d.ts.map +1 -0
- package/dist/frameworks/shopify/detector.js +103 -0
- package/dist/frameworks/shopify/detector.js.map +1 -0
- package/dist/frameworks/types.d.ts +51 -0
- package/dist/frameworks/types.d.ts.map +1 -0
- package/dist/frameworks/types.js +21 -0
- package/dist/frameworks/types.js.map +1 -0
- package/dist/git/tracker.d.ts +56 -0
- package/dist/git/tracker.d.ts.map +1 -0
- package/dist/git/tracker.js +189 -0
- package/dist/git/tracker.js.map +1 -0
- package/dist/git/utils.d.ts +60 -0
- package/dist/git/utils.d.ts.map +1 -0
- package/dist/git/utils.js +152 -0
- package/dist/git/utils.js.map +1 -0
- package/dist/index.d.ts +77 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/ast/chunker.d.ts +28 -0
- package/dist/indexer/ast/chunker.d.ts.map +1 -0
- package/dist/indexer/ast/chunker.js +268 -0
- package/dist/indexer/ast/chunker.js.map +1 -0
- package/dist/indexer/ast/complexity/cognitive.d.ts +16 -0
- package/dist/indexer/ast/complexity/cognitive.d.ts.map +1 -0
- package/dist/indexer/ast/complexity/cognitive.js +106 -0
- package/dist/indexer/ast/complexity/cognitive.js.map +1 -0
- package/dist/indexer/ast/complexity/cyclomatic.d.ts +12 -0
- package/dist/indexer/ast/complexity/cyclomatic.d.ts.map +1 -0
- package/dist/indexer/ast/complexity/cyclomatic.js +61 -0
- package/dist/indexer/ast/complexity/cyclomatic.js.map +1 -0
- package/dist/indexer/ast/complexity/halstead.d.ts +55 -0
- package/dist/indexer/ast/complexity/halstead.d.ts.map +1 -0
- package/dist/indexer/ast/complexity/halstead.js +290 -0
- package/dist/indexer/ast/complexity/halstead.js.map +1 -0
- package/dist/indexer/ast/complexity/index.d.ts +13 -0
- package/dist/indexer/ast/complexity/index.d.ts.map +1 -0
- package/dist/indexer/ast/complexity/index.js +12 -0
- package/dist/indexer/ast/complexity/index.js.map +1 -0
- package/dist/indexer/ast/parser.d.ts +27 -0
- package/dist/indexer/ast/parser.d.ts.map +1 -0
- package/dist/indexer/ast/parser.js +103 -0
- package/dist/indexer/ast/parser.js.map +1 -0
- package/dist/indexer/ast/symbols.d.ts +17 -0
- package/dist/indexer/ast/symbols.d.ts.map +1 -0
- package/dist/indexer/ast/symbols.js +265 -0
- package/dist/indexer/ast/symbols.js.map +1 -0
- package/dist/indexer/ast/traversers/index.d.ts +19 -0
- package/dist/indexer/ast/traversers/index.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/index.js +42 -0
- package/dist/indexer/ast/traversers/index.js.map +1 -0
- package/dist/indexer/ast/traversers/php.d.ts +21 -0
- package/dist/indexer/ast/traversers/php.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/php.js +67 -0
- package/dist/indexer/ast/traversers/php.js.map +1 -0
- package/dist/indexer/ast/traversers/python.d.ts +28 -0
- package/dist/indexer/ast/traversers/python.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/python.js +67 -0
- package/dist/indexer/ast/traversers/python.js.map +1 -0
- package/dist/indexer/ast/traversers/types.d.ts +98 -0
- package/dist/indexer/ast/traversers/types.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/types.js +2 -0
- package/dist/indexer/ast/traversers/types.js.map +1 -0
- package/dist/indexer/ast/traversers/typescript.d.ts +29 -0
- package/dist/indexer/ast/traversers/typescript.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/typescript.js +88 -0
- package/dist/indexer/ast/traversers/typescript.js.map +1 -0
- package/dist/indexer/ast/types.d.ts +59 -0
- package/dist/indexer/ast/types.d.ts.map +1 -0
- package/dist/indexer/ast/types.js +2 -0
- package/dist/indexer/ast/types.js.map +1 -0
- package/dist/indexer/change-detector.d.ts +17 -0
- package/dist/indexer/change-detector.d.ts.map +1 -0
- package/dist/indexer/change-detector.js +207 -0
- package/dist/indexer/change-detector.js.map +1 -0
- package/dist/indexer/chunk-batch-processor.d.ts +103 -0
- package/dist/indexer/chunk-batch-processor.d.ts.map +1 -0
- package/dist/indexer/chunk-batch-processor.js +179 -0
- package/dist/indexer/chunk-batch-processor.js.map +1 -0
- package/dist/indexer/chunker.d.ts +10 -0
- package/dist/indexer/chunker.d.ts.map +1 -0
- package/dist/indexer/chunker.js +96 -0
- package/dist/indexer/chunker.js.map +1 -0
- package/dist/indexer/dependency-analyzer.d.ts +60 -0
- package/dist/indexer/dependency-analyzer.d.ts.map +1 -0
- package/dist/indexer/dependency-analyzer.js +261 -0
- package/dist/indexer/dependency-analyzer.js.map +1 -0
- package/dist/indexer/incremental.d.ts +47 -0
- package/dist/indexer/incremental.d.ts.map +1 -0
- package/dist/indexer/incremental.js +284 -0
- package/dist/indexer/incremental.js.map +1 -0
- package/dist/indexer/index.d.ts +80 -0
- package/dist/indexer/index.d.ts.map +1 -0
- package/dist/indexer/index.js +364 -0
- package/dist/indexer/index.js.map +1 -0
- package/dist/indexer/json-template-chunker.d.ts +9 -0
- package/dist/indexer/json-template-chunker.d.ts.map +1 -0
- package/dist/indexer/json-template-chunker.js +83 -0
- package/dist/indexer/json-template-chunker.js.map +1 -0
- package/dist/indexer/liquid-chunker.d.ts +13 -0
- package/dist/indexer/liquid-chunker.d.ts.map +1 -0
- package/dist/indexer/liquid-chunker.js +272 -0
- package/dist/indexer/liquid-chunker.js.map +1 -0
- package/dist/indexer/manifest.d.ts +122 -0
- package/dist/indexer/manifest.d.ts.map +1 -0
- package/dist/indexer/manifest.js +262 -0
- package/dist/indexer/manifest.js.map +1 -0
- package/dist/indexer/progress-tracker.d.ts +35 -0
- package/dist/indexer/progress-tracker.d.ts.map +1 -0
- package/dist/indexer/progress-tracker.js +33 -0
- package/dist/indexer/progress-tracker.js.map +1 -0
- package/dist/indexer/scanner.d.ts +16 -0
- package/dist/indexer/scanner.d.ts.map +1 -0
- package/dist/indexer/scanner.js +159 -0
- package/dist/indexer/scanner.js.map +1 -0
- package/dist/indexer/symbol-extractor.d.ts +18 -0
- package/dist/indexer/symbol-extractor.d.ts.map +1 -0
- package/dist/indexer/symbol-extractor.js +351 -0
- package/dist/indexer/symbol-extractor.js.map +1 -0
- package/dist/indexer/types.d.ts +34 -0
- package/dist/indexer/types.d.ts.map +1 -0
- package/dist/indexer/types.js +2 -0
- package/dist/indexer/types.js.map +1 -0
- package/dist/insights/complexity-analyzer.d.ts +82 -0
- package/dist/insights/complexity-analyzer.d.ts.map +1 -0
- package/dist/insights/complexity-analyzer.js +356 -0
- package/dist/insights/complexity-analyzer.js.map +1 -0
- package/dist/insights/formatters/index.d.ts +11 -0
- package/dist/insights/formatters/index.d.ts.map +1 -0
- package/dist/insights/formatters/index.js +20 -0
- package/dist/insights/formatters/index.js.map +1 -0
- package/dist/insights/formatters/json.d.ts +7 -0
- package/dist/insights/formatters/json.d.ts.map +1 -0
- package/dist/insights/formatters/json.js +14 -0
- package/dist/insights/formatters/json.js.map +1 -0
- package/dist/insights/formatters/sarif.d.ts +6 -0
- package/dist/insights/formatters/sarif.d.ts.map +1 -0
- package/dist/insights/formatters/sarif.js +113 -0
- package/dist/insights/formatters/sarif.js.map +1 -0
- package/dist/insights/formatters/text.d.ts +6 -0
- package/dist/insights/formatters/text.d.ts.map +1 -0
- package/dist/insights/formatters/text.js +154 -0
- package/dist/insights/formatters/text.js.map +1 -0
- package/dist/insights/types.d.ts +73 -0
- package/dist/insights/types.d.ts.map +1 -0
- package/dist/insights/types.js +9 -0
- package/dist/insights/types.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/path-matching.d.ts +69 -0
- package/dist/utils/path-matching.d.ts.map +1 -0
- package/dist/utils/path-matching.js +123 -0
- package/dist/utils/path-matching.js.map +1 -0
- package/dist/utils/result.d.ts +65 -0
- package/dist/utils/result.d.ts.map +1 -0
- package/dist/utils/result.js +67 -0
- package/dist/utils/result.js.map +1 -0
- package/dist/utils/version.d.ts +22 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +28 -0
- package/dist/utils/version.js.map +1 -0
- package/dist/vectordb/batch-insert.d.ts +14 -0
- package/dist/vectordb/batch-insert.d.ts.map +1 -0
- package/dist/vectordb/batch-insert.js +185 -0
- package/dist/vectordb/batch-insert.js.map +1 -0
- package/dist/vectordb/boosting/composer.d.ts +51 -0
- package/dist/vectordb/boosting/composer.d.ts.map +1 -0
- package/dist/vectordb/boosting/composer.js +65 -0
- package/dist/vectordb/boosting/composer.js.map +1 -0
- package/dist/vectordb/boosting/index.d.ts +22 -0
- package/dist/vectordb/boosting/index.d.ts.map +1 -0
- package/dist/vectordb/boosting/index.js +22 -0
- package/dist/vectordb/boosting/index.js.map +1 -0
- package/dist/vectordb/boosting/strategies.d.ts +40 -0
- package/dist/vectordb/boosting/strategies.d.ts.map +1 -0
- package/dist/vectordb/boosting/strategies.js +174 -0
- package/dist/vectordb/boosting/strategies.js.map +1 -0
- package/dist/vectordb/boosting/types.d.ts +20 -0
- package/dist/vectordb/boosting/types.d.ts.map +1 -0
- package/dist/vectordb/boosting/types.js +2 -0
- package/dist/vectordb/boosting/types.js.map +1 -0
- package/dist/vectordb/intent-classifier.d.ts +99 -0
- package/dist/vectordb/intent-classifier.d.ts.map +1 -0
- package/dist/vectordb/intent-classifier.js +193 -0
- package/dist/vectordb/intent-classifier.js.map +1 -0
- package/dist/vectordb/lancedb.d.ts +45 -0
- package/dist/vectordb/lancedb.d.ts.map +1 -0
- package/dist/vectordb/lancedb.js +203 -0
- package/dist/vectordb/lancedb.js.map +1 -0
- package/dist/vectordb/maintenance.d.ts +18 -0
- package/dist/vectordb/maintenance.d.ts.map +1 -0
- package/dist/vectordb/maintenance.js +87 -0
- package/dist/vectordb/maintenance.js.map +1 -0
- package/dist/vectordb/query.d.ts +34 -0
- package/dist/vectordb/query.d.ts.map +1 -0
- package/dist/vectordb/query.js +303 -0
- package/dist/vectordb/query.js.map +1 -0
- package/dist/vectordb/relevance.d.ts +15 -0
- package/dist/vectordb/relevance.d.ts.map +1 -0
- package/dist/vectordb/relevance.js +19 -0
- package/dist/vectordb/relevance.js.map +1 -0
- package/dist/vectordb/types.d.ts +29 -0
- package/dist/vectordb/types.d.ts.map +1 -0
- package/dist/vectordb/types.js +2 -0
- package/dist/vectordb/types.js.map +1 -0
- package/dist/vectordb/version.d.ts +16 -0
- package/dist/vectordb/version.d.ts.map +1 -0
- package/dist/vectordb/version.js +40 -0
- package/dist/vectordb/version.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate generic PHP framework configuration
|
|
3
|
+
*/
|
|
4
|
+
export async function generatePhpConfig(_rootDir, _relativePath) {
|
|
5
|
+
return {
|
|
6
|
+
include: [
|
|
7
|
+
// PHP source code
|
|
8
|
+
'src/**/*.php',
|
|
9
|
+
'lib/**/*.php',
|
|
10
|
+
'app/**/*.php',
|
|
11
|
+
'tests/**/*.php',
|
|
12
|
+
'*.php',
|
|
13
|
+
// Common PHP project files
|
|
14
|
+
'config/**/*.php',
|
|
15
|
+
'public/**/*.php',
|
|
16
|
+
// Documentation
|
|
17
|
+
'**/*.md',
|
|
18
|
+
'**/*.mdx',
|
|
19
|
+
'docs/**/*.md',
|
|
20
|
+
'README.md',
|
|
21
|
+
'CHANGELOG.md',
|
|
22
|
+
],
|
|
23
|
+
exclude: [
|
|
24
|
+
// Composer dependencies (CRITICAL)
|
|
25
|
+
'**/vendor/**',
|
|
26
|
+
'vendor/**',
|
|
27
|
+
// Node.js dependencies
|
|
28
|
+
'**/node_modules/**',
|
|
29
|
+
'node_modules/**',
|
|
30
|
+
// Build outputs
|
|
31
|
+
'**/dist/**',
|
|
32
|
+
'dist/**',
|
|
33
|
+
'**/build/**',
|
|
34
|
+
'build/**',
|
|
35
|
+
'**/public/build/**',
|
|
36
|
+
'public/build/**',
|
|
37
|
+
// Laravel/PHP system directories
|
|
38
|
+
'storage/**',
|
|
39
|
+
'cache/**',
|
|
40
|
+
'bootstrap/cache/**',
|
|
41
|
+
// Test artifacts
|
|
42
|
+
'coverage/**',
|
|
43
|
+
'test-results/**',
|
|
44
|
+
'.phpunit.cache/**',
|
|
45
|
+
// Build outputs
|
|
46
|
+
'__generated__/**',
|
|
47
|
+
// Minified files
|
|
48
|
+
'**/*.min.js',
|
|
49
|
+
'**/*.min.css',
|
|
50
|
+
],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/frameworks/php/config.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB,EAChB,aAAqB;IAErB,OAAO;QACL,OAAO,EAAE;YACP,kBAAkB;YAClB,cAAc;YACd,cAAc;YACd,cAAc;YACd,gBAAgB;YAChB,OAAO;YAEP,2BAA2B;YAC3B,iBAAiB;YACjB,iBAAiB;YAEjB,gBAAgB;YAChB,SAAS;YACT,UAAU;YACV,cAAc;YACd,WAAW;YACX,cAAc;SACf;QACD,OAAO,EAAE;YACP,mCAAmC;YACnC,cAAc;YACd,WAAW;YAEX,uBAAuB;YACvB,oBAAoB;YACpB,iBAAiB;YAEjB,gBAAgB;YAChB,YAAY;YACZ,SAAS;YACT,aAAa;YACb,UAAU;YACV,oBAAoB;YACpB,iBAAiB;YAEjB,iCAAiC;YACjC,YAAY;YACZ,UAAU;YACV,oBAAoB;YAEpB,iBAAiB;YACjB,aAAa;YACb,iBAAiB;YACjB,mBAAmB;YAEnB,gBAAgB;YAChB,kBAAkB;YAElB,iBAAiB;YACjB,aAAa;YACb,cAAc;SACf;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/frameworks/php/detector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAmB,MAAM,aAAa,CAAC;AAGjE;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,iBA6GzB,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { generatePhpConfig } from './config.js';
|
|
4
|
+
/**
|
|
5
|
+
* Generic PHP framework detector
|
|
6
|
+
* Detects any PHP project with composer.json
|
|
7
|
+
*/
|
|
8
|
+
export const phpDetector = {
|
|
9
|
+
name: 'php',
|
|
10
|
+
priority: 50, // Generic, yields to specific frameworks like Laravel
|
|
11
|
+
async detect(rootDir, relativePath) {
|
|
12
|
+
const fullPath = path.join(rootDir, relativePath);
|
|
13
|
+
const result = {
|
|
14
|
+
detected: false,
|
|
15
|
+
name: 'php',
|
|
16
|
+
path: relativePath,
|
|
17
|
+
confidence: 'low',
|
|
18
|
+
evidence: [],
|
|
19
|
+
};
|
|
20
|
+
// Check for composer.json
|
|
21
|
+
const composerJsonPath = path.join(fullPath, 'composer.json');
|
|
22
|
+
let composerJson = null;
|
|
23
|
+
try {
|
|
24
|
+
const content = await fs.readFile(composerJsonPath, 'utf-8');
|
|
25
|
+
composerJson = JSON.parse(content);
|
|
26
|
+
result.evidence.push('Found composer.json');
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// No composer.json, not a PHP project
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
// Check if this is a Laravel project (Laravel detector should handle it)
|
|
33
|
+
const hasLaravel = composerJson.require?.['laravel/framework'] ||
|
|
34
|
+
composerJson['require-dev']?.['laravel/framework'];
|
|
35
|
+
if (hasLaravel) {
|
|
36
|
+
// This is a Laravel project - let the Laravel detector handle it
|
|
37
|
+
// Return not detected to avoid redundant "php" + "laravel" detection
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
// At this point, we know it's a generic PHP project (not Laravel)
|
|
41
|
+
result.detected = true;
|
|
42
|
+
result.confidence = 'high';
|
|
43
|
+
// Check for common PHP directories
|
|
44
|
+
const phpDirs = ['src', 'lib', 'app', 'tests'];
|
|
45
|
+
let foundDirs = 0;
|
|
46
|
+
for (const dir of phpDirs) {
|
|
47
|
+
try {
|
|
48
|
+
const dirPath = path.join(fullPath, dir);
|
|
49
|
+
const stats = await fs.stat(dirPath);
|
|
50
|
+
if (stats.isDirectory()) {
|
|
51
|
+
foundDirs++;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Directory doesn't exist
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (foundDirs > 0) {
|
|
59
|
+
result.evidence.push(`Found PHP project structure (${foundDirs} directories)`);
|
|
60
|
+
}
|
|
61
|
+
// Check for PHP version
|
|
62
|
+
if (composerJson.require?.php) {
|
|
63
|
+
result.version = composerJson.require.php;
|
|
64
|
+
result.evidence.push(`PHP ${composerJson.require.php}`);
|
|
65
|
+
}
|
|
66
|
+
// Check for testing frameworks
|
|
67
|
+
const testFrameworks = [
|
|
68
|
+
{ name: 'phpunit/phpunit', display: 'PHPUnit' },
|
|
69
|
+
{ name: 'pestphp/pest', display: 'Pest' },
|
|
70
|
+
{ name: 'codeception/codeception', display: 'Codeception' },
|
|
71
|
+
{ name: 'behat/behat', display: 'Behat' },
|
|
72
|
+
];
|
|
73
|
+
for (const framework of testFrameworks) {
|
|
74
|
+
if (composerJson.require?.[framework.name] ||
|
|
75
|
+
composerJson['require-dev']?.[framework.name]) {
|
|
76
|
+
result.evidence.push(`${framework.display} test framework detected`);
|
|
77
|
+
break; // Only mention first test framework found
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Check for common PHP tools/frameworks
|
|
81
|
+
const tools = [
|
|
82
|
+
{ name: 'symfony/framework-bundle', display: 'Symfony' },
|
|
83
|
+
{ name: 'symfony/http-kernel', display: 'Symfony' },
|
|
84
|
+
{ name: 'symfony/symfony', display: 'Symfony (monolithic)' },
|
|
85
|
+
{ name: 'doctrine/orm', display: 'Doctrine ORM' },
|
|
86
|
+
{ name: 'guzzlehttp/guzzle', display: 'Guzzle HTTP' },
|
|
87
|
+
{ name: 'monolog/monolog', display: 'Monolog' },
|
|
88
|
+
];
|
|
89
|
+
for (const tool of tools) {
|
|
90
|
+
if (composerJson.require?.[tool.name]) {
|
|
91
|
+
result.evidence.push(`${tool.display} detected`);
|
|
92
|
+
break; // Only mention first tool found
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
},
|
|
97
|
+
async generateConfig(rootDir, relativePath) {
|
|
98
|
+
return generatePhpConfig(rootDir, relativePath);
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../src/frameworks/php/detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C,IAAI,EAAE,KAAK;IACX,QAAQ,EAAE,EAAE,EAAE,sDAAsD;IAEpE,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,YAAoB;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAClD,MAAM,MAAM,GAAoB;YAC9B,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,EAAE;SACb,CAAC;QAEF,0BAA0B;QAC1B,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAC9D,IAAI,YAAY,GAAQ,IAAI,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;YAC7D,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;YACtC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,yEAAyE;QACzE,MAAM,UAAU,GACd,YAAY,CAAC,OAAO,EAAE,CAAC,mBAAmB,CAAC;YAC3C,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;QAErD,IAAI,UAAU,EAAE,CAAC;YACf,iEAAiE;YACjE,qEAAqE;YACrE,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,kEAAkE;QAClE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;QAE3B,mCAAmC;QACnC,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBACzC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,SAAS,EAAE,CAAC;gBACd,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;YAC5B,CAAC;QACH,CAAC;QAED,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,gCAAgC,SAAS,eAAe,CAAC,CAAC;QACjF,CAAC;QAED,wBAAwB;QACxB,IAAI,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,+BAA+B;QAC/B,MAAM,cAAc,GAAG;YACrB,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE;YAC/C,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE;YACzC,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,aAAa,EAAE;YAC3D,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE;SAC1C,CAAC;QAEF,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;YACvC,IACE,YAAY,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;gBACtC,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAC7C,CAAC;gBACD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,0BAA0B,CAAC,CAAC;gBACrE,MAAM,CAAC,0CAA0C;YACnD,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,MAAM,KAAK,GAAG;YACZ,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,SAAS,EAAE;YACxD,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,SAAS,EAAE;YACnD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,sBAAsB,EAAE;YAC5D,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE;YACjD,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,aAAa,EAAE;YACrD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE;SAChD,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,CAAC,CAAC;gBACjD,MAAM,CAAC,gCAAgC;YACzC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAe,EAAE,YAAoB;QACxD,OAAO,iBAAiB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAClD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { FrameworkDetector } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Registry of all available framework detectors
|
|
4
|
+
* Frameworks will be added as they are implemented
|
|
5
|
+
*
|
|
6
|
+
* Order doesn't matter for detection as priority system handles conflicts,
|
|
7
|
+
* but listed here in order from generic to specific for clarity:
|
|
8
|
+
* - Generic language detectors (Node.js, PHP)
|
|
9
|
+
* - Specific framework detectors (Laravel, Shopify)
|
|
10
|
+
*/
|
|
11
|
+
export declare const frameworkDetectors: FrameworkDetector[];
|
|
12
|
+
/**
|
|
13
|
+
* Register a framework detector
|
|
14
|
+
*/
|
|
15
|
+
export declare function registerFramework(detector: FrameworkDetector): void;
|
|
16
|
+
/**
|
|
17
|
+
* Get a framework detector by name
|
|
18
|
+
*/
|
|
19
|
+
export declare function getFrameworkDetector(name: string): FrameworkDetector | undefined;
|
|
20
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/frameworks/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAM/C;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,EAAE,iBAAiB,EAKjD,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CASnE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEhF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { nodejsDetector } from './nodejs/detector.js';
|
|
2
|
+
import { phpDetector } from './php/detector.js';
|
|
3
|
+
import { laravelDetector } from './laravel/detector.js';
|
|
4
|
+
import { shopifyDetector } from './shopify/detector.js';
|
|
5
|
+
/**
|
|
6
|
+
* Registry of all available framework detectors
|
|
7
|
+
* Frameworks will be added as they are implemented
|
|
8
|
+
*
|
|
9
|
+
* Order doesn't matter for detection as priority system handles conflicts,
|
|
10
|
+
* but listed here in order from generic to specific for clarity:
|
|
11
|
+
* - Generic language detectors (Node.js, PHP)
|
|
12
|
+
* - Specific framework detectors (Laravel, Shopify)
|
|
13
|
+
*/
|
|
14
|
+
export const frameworkDetectors = [
|
|
15
|
+
nodejsDetector,
|
|
16
|
+
phpDetector,
|
|
17
|
+
laravelDetector,
|
|
18
|
+
shopifyDetector,
|
|
19
|
+
];
|
|
20
|
+
/**
|
|
21
|
+
* Register a framework detector
|
|
22
|
+
*/
|
|
23
|
+
export function registerFramework(detector) {
|
|
24
|
+
// Check if already registered
|
|
25
|
+
const existing = frameworkDetectors.find(d => d.name === detector.name);
|
|
26
|
+
if (existing) {
|
|
27
|
+
console.warn(`Framework detector '${detector.name}' is already registered, skipping`);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
frameworkDetectors.push(detector);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get a framework detector by name
|
|
34
|
+
*/
|
|
35
|
+
export function getFrameworkDetector(name) {
|
|
36
|
+
return frameworkDetectors.find(d => d.name === name);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/frameworks/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAwB;IACrD,cAAc;IACd,WAAW;IACX,eAAe;IACf,eAAe;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAA2B;IAC3D,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxE,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,uBAAuB,QAAQ,CAAC,IAAI,mCAAmC,CAAC,CAAC;QACtF,OAAO;IACT,CAAC;IAED,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FrameworkConfig } from '../../config/schema.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate Shopify theme framework configuration
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateShopifyConfig(_rootDir: string, _relativePath: string): Promise<FrameworkConfig>;
|
|
6
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/frameworks/shopify/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,eAAe,CAAC,CAsD1B"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate Shopify theme framework configuration
|
|
3
|
+
*/
|
|
4
|
+
export async function generateShopifyConfig(_rootDir, _relativePath) {
|
|
5
|
+
return {
|
|
6
|
+
include: [
|
|
7
|
+
// Core Liquid templates
|
|
8
|
+
'layout/**/*.liquid',
|
|
9
|
+
'sections/**/*.liquid',
|
|
10
|
+
'snippets/**/*.liquid',
|
|
11
|
+
'templates/**/*.liquid', // Matches any nesting level (e.g., templates/customers/account.liquid)
|
|
12
|
+
'templates/**/*.json', // JSON template definitions (Shopify 2.0+)
|
|
13
|
+
// Theme editor blocks (Online Store 2.0)
|
|
14
|
+
'blocks/**/*.liquid',
|
|
15
|
+
// Assets (CSS, JS with optional Liquid templating)
|
|
16
|
+
'assets/**/*.js',
|
|
17
|
+
'assets/**/*.js.liquid',
|
|
18
|
+
'assets/**/*.css',
|
|
19
|
+
'assets/**/*.css.liquid',
|
|
20
|
+
'assets/**/*.scss',
|
|
21
|
+
'assets/**/*.scss.liquid',
|
|
22
|
+
// Configuration files
|
|
23
|
+
'config/*.json',
|
|
24
|
+
// Locales (i18n)
|
|
25
|
+
'locales/*.json',
|
|
26
|
+
// Documentation
|
|
27
|
+
'*.md',
|
|
28
|
+
'docs/**/*.md',
|
|
29
|
+
// Shopify-specific config files
|
|
30
|
+
'shopify.theme.toml',
|
|
31
|
+
'.shopifyignore',
|
|
32
|
+
],
|
|
33
|
+
exclude: [
|
|
34
|
+
'node_modules/**',
|
|
35
|
+
'dist/**',
|
|
36
|
+
'build/**',
|
|
37
|
+
'.git/**',
|
|
38
|
+
// Playwright/testing artifacts
|
|
39
|
+
'playwright-report/**',
|
|
40
|
+
'test-results/**',
|
|
41
|
+
// Build/generated artifacts
|
|
42
|
+
'__generated__/**',
|
|
43
|
+
// Common frontend build outputs
|
|
44
|
+
'.vite/**',
|
|
45
|
+
'.nuxt/**',
|
|
46
|
+
'.next/**',
|
|
47
|
+
],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/frameworks/shopify/config.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgB,EAChB,aAAqB;IAErB,OAAO;QACL,OAAO,EAAE;YACP,wBAAwB;YACxB,oBAAoB;YACpB,sBAAsB;YACtB,sBAAsB;YACtB,uBAAuB,EAAE,uEAAuE;YAChG,qBAAqB,EAAI,2CAA2C;YAEpE,yCAAyC;YACzC,oBAAoB;YAEpB,mDAAmD;YACnD,gBAAgB;YAChB,uBAAuB;YACvB,iBAAiB;YACjB,wBAAwB;YACxB,kBAAkB;YAClB,yBAAyB;YAEzB,sBAAsB;YACtB,eAAe;YAEf,iBAAiB;YACjB,gBAAgB;YAEhB,gBAAgB;YAChB,MAAM;YACN,cAAc;YAEd,gCAAgC;YAChC,oBAAoB;YACpB,gBAAgB;SACjB;QACD,OAAO,EAAE;YACP,iBAAiB;YACjB,SAAS;YACT,UAAU;YACV,SAAS;YAET,+BAA+B;YAC/B,sBAAsB;YACtB,iBAAiB;YAEjB,4BAA4B;YAC5B,kBAAkB;YAElB,gCAAgC;YAChC,UAAU;YACV,UAAU;YACV,UAAU;SACX;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/frameworks/shopify/detector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAmB,MAAM,aAAa,CAAC;AAGjE;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,iBAyG7B,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { generateShopifyConfig } from './config.js';
|
|
4
|
+
/**
|
|
5
|
+
* Shopify Liquid theme framework detector
|
|
6
|
+
*/
|
|
7
|
+
export const shopifyDetector = {
|
|
8
|
+
name: 'shopify',
|
|
9
|
+
priority: 100, // High priority (same as Laravel)
|
|
10
|
+
async detect(rootDir, relativePath) {
|
|
11
|
+
const fullPath = path.join(rootDir, relativePath);
|
|
12
|
+
const result = {
|
|
13
|
+
detected: false,
|
|
14
|
+
name: 'shopify',
|
|
15
|
+
path: relativePath,
|
|
16
|
+
confidence: 'low',
|
|
17
|
+
evidence: [],
|
|
18
|
+
};
|
|
19
|
+
// 1. Check for config/settings_schema.json (STRONGEST signal)
|
|
20
|
+
const settingsSchemaPath = path.join(fullPath, 'config', 'settings_schema.json');
|
|
21
|
+
let hasSettingsSchema = false;
|
|
22
|
+
try {
|
|
23
|
+
await fs.access(settingsSchemaPath);
|
|
24
|
+
hasSettingsSchema = true;
|
|
25
|
+
result.evidence.push('Found config/settings_schema.json');
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// Not present, continue checking other markers
|
|
29
|
+
}
|
|
30
|
+
// 2. Check for layout/theme.liquid
|
|
31
|
+
const themeLayoutPath = path.join(fullPath, 'layout', 'theme.liquid');
|
|
32
|
+
let hasThemeLayout = false;
|
|
33
|
+
try {
|
|
34
|
+
await fs.access(themeLayoutPath);
|
|
35
|
+
hasThemeLayout = true;
|
|
36
|
+
result.evidence.push('Found layout/theme.liquid');
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Not present
|
|
40
|
+
}
|
|
41
|
+
// 3. Check for typical Shopify directories
|
|
42
|
+
const shopifyDirs = ['sections', 'snippets', 'templates', 'locales'];
|
|
43
|
+
let foundDirs = 0;
|
|
44
|
+
for (const dir of shopifyDirs) {
|
|
45
|
+
try {
|
|
46
|
+
const dirPath = path.join(fullPath, dir);
|
|
47
|
+
const stats = await fs.stat(dirPath);
|
|
48
|
+
if (stats.isDirectory()) {
|
|
49
|
+
foundDirs++;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Directory doesn't exist
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (foundDirs >= 2) {
|
|
57
|
+
result.evidence.push(`Shopify directory structure detected (${foundDirs}/${shopifyDirs.length} dirs)`);
|
|
58
|
+
}
|
|
59
|
+
// 4. Check for shopify.theme.toml (Shopify CLI)
|
|
60
|
+
try {
|
|
61
|
+
const tomlPath = path.join(fullPath, 'shopify.theme.toml');
|
|
62
|
+
await fs.access(tomlPath);
|
|
63
|
+
result.evidence.push('Found shopify.theme.toml');
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Optional file
|
|
67
|
+
}
|
|
68
|
+
// 5. Check for .shopifyignore
|
|
69
|
+
try {
|
|
70
|
+
const ignorePath = path.join(fullPath, '.shopifyignore');
|
|
71
|
+
await fs.access(ignorePath);
|
|
72
|
+
result.evidence.push('Found .shopifyignore');
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Optional file
|
|
76
|
+
}
|
|
77
|
+
// Determine detection confidence with early returns
|
|
78
|
+
// High: Has settings_schema.json + 2+ directories
|
|
79
|
+
if (hasSettingsSchema && foundDirs >= 2) {
|
|
80
|
+
result.detected = true;
|
|
81
|
+
result.confidence = 'high';
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
// Medium: Has settings_schema alone, OR has theme.liquid + 1+ directory
|
|
85
|
+
if (hasSettingsSchema || (hasThemeLayout && foundDirs >= 1)) {
|
|
86
|
+
result.detected = true;
|
|
87
|
+
result.confidence = 'medium';
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
// Medium: Has 3+ typical directories but no strong markers
|
|
91
|
+
if (foundDirs >= 3) {
|
|
92
|
+
result.detected = true;
|
|
93
|
+
result.confidence = 'medium';
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
// Not detected
|
|
97
|
+
return result;
|
|
98
|
+
},
|
|
99
|
+
async generateConfig(rootDir, relativePath) {
|
|
100
|
+
return generateShopifyConfig(rootDir, relativePath);
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../src/frameworks/shopify/detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { FrameworkConfig } from '../config/schema.js';
|
|
2
|
+
/**
|
|
3
|
+
* Result of framework detection
|
|
4
|
+
*/
|
|
5
|
+
export interface DetectionResult {
|
|
6
|
+
detected: boolean;
|
|
7
|
+
name: string;
|
|
8
|
+
path: string;
|
|
9
|
+
confidence: 'high' | 'medium' | 'low';
|
|
10
|
+
evidence: string[];
|
|
11
|
+
version?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Interface for framework detectors
|
|
15
|
+
*/
|
|
16
|
+
export interface FrameworkDetector {
|
|
17
|
+
name: string;
|
|
18
|
+
/**
|
|
19
|
+
* Priority for conflict resolution (higher = takes precedence)
|
|
20
|
+
* - 100: Specific frameworks (Laravel, Rails, Django)
|
|
21
|
+
* - 50: Generic frameworks (Node.js, Python)
|
|
22
|
+
* - 0: Fallback/generic
|
|
23
|
+
*/
|
|
24
|
+
priority?: number;
|
|
25
|
+
/**
|
|
26
|
+
* Detect if this framework exists at the given path
|
|
27
|
+
* @param rootDir - Absolute path to project root
|
|
28
|
+
* @param relativePath - Relative path from root to check (e.g., '.' or 'packages/cli')
|
|
29
|
+
* @returns Detection result with evidence
|
|
30
|
+
*/
|
|
31
|
+
detect(rootDir: string, relativePath: string): Promise<DetectionResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Generate default configuration for this framework
|
|
34
|
+
* @param rootDir - Absolute path to project root
|
|
35
|
+
* @param relativePath - Relative path where framework was detected
|
|
36
|
+
* @returns Framework-specific configuration
|
|
37
|
+
*/
|
|
38
|
+
generateConfig(rootDir: string, relativePath: string): Promise<FrameworkConfig>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Options for framework detection
|
|
42
|
+
*/
|
|
43
|
+
export interface DetectionOptions {
|
|
44
|
+
maxDepth: number;
|
|
45
|
+
skipDirs: string[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Default detection options
|
|
49
|
+
*/
|
|
50
|
+
export declare const defaultDetectionOptions: DetectionOptions;
|
|
51
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/frameworks/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAExE;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACjF;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,gBAgBrC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default detection options
|
|
3
|
+
*/
|
|
4
|
+
export const defaultDetectionOptions = {
|
|
5
|
+
maxDepth: 3,
|
|
6
|
+
skipDirs: [
|
|
7
|
+
'node_modules',
|
|
8
|
+
'vendor',
|
|
9
|
+
'dist',
|
|
10
|
+
'build',
|
|
11
|
+
'.next',
|
|
12
|
+
'.nuxt',
|
|
13
|
+
'coverage',
|
|
14
|
+
'.git',
|
|
15
|
+
'.idea',
|
|
16
|
+
'.vscode',
|
|
17
|
+
'tmp',
|
|
18
|
+
'temp',
|
|
19
|
+
],
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/frameworks/types.ts"],"names":[],"mappings":"AAqDA;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAqB;IACvD,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE;QACR,cAAc;QACd,QAAQ;QACR,MAAM;QACN,OAAO;QACP,OAAO;QACP,OAAO;QACP,UAAU;QACV,MAAM;QACN,OAAO;QACP,SAAS;QACT,KAAK;QACL,MAAM;KACP;CACF,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export interface GitState {
|
|
2
|
+
branch: string;
|
|
3
|
+
commit: string;
|
|
4
|
+
timestamp: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Tracks git state (branch and commit) and detects changes.
|
|
8
|
+
* Persists state to disk to survive server restarts.
|
|
9
|
+
*/
|
|
10
|
+
export declare class GitStateTracker {
|
|
11
|
+
private stateFile;
|
|
12
|
+
private rootDir;
|
|
13
|
+
private currentState;
|
|
14
|
+
constructor(rootDir: string, indexPath: string);
|
|
15
|
+
/**
|
|
16
|
+
* Loads the last known git state from disk.
|
|
17
|
+
* Returns null if no state file exists (first run).
|
|
18
|
+
*/
|
|
19
|
+
private loadState;
|
|
20
|
+
/**
|
|
21
|
+
* Saves the current git state to disk.
|
|
22
|
+
*/
|
|
23
|
+
private saveState;
|
|
24
|
+
/**
|
|
25
|
+
* Gets the current git state from the repository.
|
|
26
|
+
*
|
|
27
|
+
* @returns Current git state
|
|
28
|
+
* @throws Error if git commands fail
|
|
29
|
+
*/
|
|
30
|
+
private getCurrentGitState;
|
|
31
|
+
/**
|
|
32
|
+
* Initializes the tracker by loading saved state and checking current state.
|
|
33
|
+
* Should be called once when MCP server starts.
|
|
34
|
+
*
|
|
35
|
+
* @returns Array of changed files if state changed, null if no changes or first run
|
|
36
|
+
*/
|
|
37
|
+
initialize(): Promise<string[] | null>;
|
|
38
|
+
/**
|
|
39
|
+
* Checks for git state changes since last check.
|
|
40
|
+
* This is called periodically by the MCP server.
|
|
41
|
+
*
|
|
42
|
+
* @returns Array of changed files if state changed, null if no changes
|
|
43
|
+
*/
|
|
44
|
+
detectChanges(): Promise<string[] | null>;
|
|
45
|
+
/**
|
|
46
|
+
* Gets the current git state.
|
|
47
|
+
* Useful for status display.
|
|
48
|
+
*/
|
|
49
|
+
getState(): GitState | null;
|
|
50
|
+
/**
|
|
51
|
+
* Manually updates the saved state.
|
|
52
|
+
* Useful after manual reindexing to sync state.
|
|
53
|
+
*/
|
|
54
|
+
updateState(): Promise<void>;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/git/tracker.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAyB;gBAEjC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAK9C;;;OAGG;YACW,SAAS;IAUvB;;OAEG;YACW,SAAS;IAUvB;;;;;OAKG;YACW,kBAAkB;IAWhC;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IAoE5C;;;;;OAKG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IAmE/C;;;OAGG;IACH,QAAQ,IAAI,QAAQ,GAAG,IAAI;IAI3B;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAQnC"}
|