codesift-mcp 0.5.30 → 0.8.2
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 +7 -2
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +25 -3
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/git-hooks-installer.d.ts +2 -0
- package/dist/cli/git-hooks-installer.d.ts.map +1 -1
- package/dist/cli/git-hooks-installer.js +47 -7
- package/dist/cli/git-hooks-installer.js.map +1 -1
- package/dist/cli/hooks.d.ts.map +1 -1
- package/dist/cli/hooks.js +53 -0
- package/dist/cli/hooks.js.map +1 -1
- package/dist/cli/setup.d.ts +5 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +31 -5
- package/dist/cli/setup.js.map +1 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -1
- package/dist/config.js.map +1 -1
- package/dist/instructions.d.ts +1 -1
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +6 -1
- package/dist/instructions.js.map +1 -1
- package/dist/parser/extractors/_shared.js +2 -2
- package/dist/parser/extractors/_shared.js.map +1 -1
- package/dist/parser/extractors/hono.d.ts.map +1 -1
- package/dist/parser/extractors/hono.js +60 -15
- package/dist/parser/extractors/hono.js.map +1 -1
- package/dist/parser/extractors/php.d.ts +12 -0
- package/dist/parser/extractors/php.d.ts.map +1 -1
- package/dist/parser/extractors/php.js +440 -26
- package/dist/parser/extractors/php.js.map +1 -1
- package/dist/parser/extractors/python.js +4 -5
- package/dist/parser/extractors/python.js.map +1 -1
- package/dist/parser/extractors/typescript.d.ts.map +1 -1
- package/dist/parser/extractors/typescript.js +70 -22
- package/dist/parser/extractors/typescript.js.map +1 -1
- package/dist/register-tool-loaders.d.ts +22 -0
- package/dist/register-tool-loaders.d.ts.map +1 -1
- package/dist/register-tool-loaders.js +38 -0
- package/dist/register-tool-loaders.js.map +1 -1
- package/dist/register-tools.d.ts +3 -1
- package/dist/register-tools.d.ts.map +1 -1
- package/dist/register-tools.js +527 -7
- package/dist/register-tools.js.map +1 -1
- package/dist/retrieval/codebase-retrieval.d.ts.map +1 -1
- package/dist/retrieval/codebase-retrieval.js +22 -0
- package/dist/retrieval/codebase-retrieval.js.map +1 -1
- package/dist/retrieval/retrieval-schemas.d.ts +4 -0
- package/dist/retrieval/retrieval-schemas.d.ts.map +1 -1
- package/dist/retrieval/semantic-handlers.js +1 -1
- package/dist/retrieval/semantic-handlers.js.map +1 -1
- package/dist/search/semantic.d.ts +21 -5
- package/dist/search/semantic.d.ts.map +1 -1
- package/dist/search/semantic.js +129 -4
- package/dist/search/semantic.js.map +1 -1
- package/dist/search/tool-ranker.js +1 -1
- package/dist/search/tool-ranker.js.map +1 -1
- package/dist/server-helpers.js +1 -1
- package/dist/server-helpers.js.map +1 -1
- package/dist/storage/index-store.d.ts +13 -1
- package/dist/storage/index-store.d.ts.map +1 -1
- package/dist/storage/index-store.js +34 -33
- package/dist/storage/index-store.js.map +1 -1
- package/dist/storage/registry.d.ts +28 -4
- package/dist/storage/registry.d.ts.map +1 -1
- package/dist/storage/registry.js +126 -5
- package/dist/storage/registry.js.map +1 -1
- package/dist/storage/usage-stats.d.ts +2 -0
- package/dist/storage/usage-stats.d.ts.map +1 -1
- package/dist/storage/usage-stats.js +6 -0
- package/dist/storage/usage-stats.js.map +1 -1
- package/dist/tools/_helpers.d.ts +2 -0
- package/dist/tools/_helpers.d.ts.map +1 -1
- package/dist/tools/_helpers.js +16 -1
- package/dist/tools/_helpers.js.map +1 -1
- package/dist/tools/astro-audit.d.ts +40 -0
- package/dist/tools/astro-audit.d.ts.map +1 -1
- package/dist/tools/astro-audit.js +94 -5
- package/dist/tools/astro-audit.js.map +1 -1
- package/dist/tools/astro-env-validator.d.ts +38 -0
- package/dist/tools/astro-env-validator.d.ts.map +1 -0
- package/dist/tools/astro-env-validator.js +190 -0
- package/dist/tools/astro-env-validator.js.map +1 -0
- package/dist/tools/astro-helpers.js +2 -2
- package/dist/tools/astro-helpers.js.map +1 -1
- package/dist/tools/astro-image-audit.d.ts +35 -0
- package/dist/tools/astro-image-audit.d.ts.map +1 -0
- package/dist/tools/astro-image-audit.js +129 -0
- package/dist/tools/astro-image-audit.js.map +1 -0
- package/dist/tools/astro-middleware.d.ts.map +1 -1
- package/dist/tools/astro-middleware.js +36 -11
- package/dist/tools/astro-middleware.js.map +1 -1
- package/dist/tools/astro-migration.d.ts.map +1 -1
- package/dist/tools/astro-migration.js +66 -0
- package/dist/tools/astro-migration.js.map +1 -1
- package/dist/tools/astro-svg-components.d.ts +32 -0
- package/dist/tools/astro-svg-components.d.ts.map +1 -0
- package/dist/tools/astro-svg-components.js +123 -0
- package/dist/tools/astro-svg-components.js.map +1 -0
- package/dist/tools/context-tools.d.ts.map +1 -1
- package/dist/tools/context-tools.js +45 -7
- package/dist/tools/context-tools.js.map +1 -1
- package/dist/tools/conversation-tools.js +1 -1
- package/dist/tools/conversation-tools.js.map +1 -1
- package/dist/tools/index-tools.d.ts +12 -0
- package/dist/tools/index-tools.d.ts.map +1 -1
- package/dist/tools/index-tools.js +54 -6
- package/dist/tools/index-tools.js.map +1 -1
- package/dist/tools/insights-tools.d.ts +137 -0
- package/dist/tools/insights-tools.d.ts.map +1 -0
- package/dist/tools/insights-tools.js +438 -0
- package/dist/tools/insights-tools.js.map +1 -0
- package/dist/tools/pattern-tools.d.ts +7 -0
- package/dist/tools/pattern-tools.d.ts.map +1 -1
- package/dist/tools/pattern-tools.js +292 -19
- package/dist/tools/pattern-tools.js.map +1 -1
- package/dist/tools/php-tools.d.ts +78 -4
- package/dist/tools/php-tools.d.ts.map +1 -1
- package/dist/tools/php-tools.js +824 -42
- package/dist/tools/php-tools.js.map +1 -1
- package/dist/tools/php8-compat-tools.d.ts +62 -0
- package/dist/tools/php8-compat-tools.d.ts.map +1 -0
- package/dist/tools/php8-compat-tools.js +287 -0
- package/dist/tools/php8-compat-tools.js.map +1 -0
- package/dist/tools/php8-migration-candidates-tools.d.ts +68 -0
- package/dist/tools/php8-migration-candidates-tools.d.ts.map +1 -0
- package/dist/tools/php8-migration-candidates-tools.js +476 -0
- package/dist/tools/php8-migration-candidates-tools.js.map +1 -0
- package/dist/tools/phpstan-baseline-tools.d.ts +62 -0
- package/dist/tools/phpstan-baseline-tools.d.ts.map +1 -0
- package/dist/tools/phpstan-baseline-tools.js +263 -0
- package/dist/tools/phpstan-baseline-tools.js.map +1 -0
- package/dist/tools/project-tools.d.ts +4 -2
- package/dist/tools/project-tools.d.ts.map +1 -1
- package/dist/tools/project-tools.js +20 -7
- package/dist/tools/project-tools.js.map +1 -1
- package/dist/tools/react-tools.d.ts +39 -9
- package/dist/tools/react-tools.d.ts.map +1 -1
- package/dist/tools/react-tools.js +313 -18
- package/dist/tools/react-tools.js.map +1 -1
- package/dist/tools/search-tools.d.ts.map +1 -1
- package/dist/tools/search-tools.js +35 -5
- package/dist/tools/search-tools.js.map +1 -1
- package/dist/tools/status-tools.d.ts +1 -0
- package/dist/tools/status-tools.d.ts.map +1 -1
- package/dist/tools/status-tools.js +1 -0
- package/dist/tools/status-tools.js.map +1 -1
- package/dist/tools/symbol-tools.d.ts +11 -0
- package/dist/tools/symbol-tools.d.ts.map +1 -1
- package/dist/tools/symbol-tools.js +107 -6
- package/dist/tools/symbol-tools.js.map +1 -1
- package/dist/tools/yii-console-tools.d.ts +69 -0
- package/dist/tools/yii-console-tools.d.ts.map +1 -0
- package/dist/tools/yii-console-tools.js +256 -0
- package/dist/tools/yii-console-tools.js.map +1 -0
- package/dist/tools/yii-migrations-tools.d.ts +79 -0
- package/dist/tools/yii-migrations-tools.d.ts.map +1 -0
- package/dist/tools/yii-migrations-tools.js +543 -0
- package/dist/tools/yii-migrations-tools.js.map +1 -0
- package/dist/tools/yii-modules-tools.d.ts +63 -0
- package/dist/tools/yii-modules-tools.d.ts.map +1 -0
- package/dist/tools/yii-modules-tools.js +201 -0
- package/dist/tools/yii-modules-tools.js.map +1 -0
- package/dist/tools/yii-rbac-tools.d.ts +89 -0
- package/dist/tools/yii-rbac-tools.d.ts.map +1 -0
- package/dist/tools/yii-rbac-tools.js +238 -0
- package/dist/tools/yii-rbac-tools.js.map +1 -0
- package/dist/tools/yii3-attribute-candidates-tools.d.ts +72 -0
- package/dist/tools/yii3-attribute-candidates-tools.d.ts.map +1 -0
- package/dist/tools/yii3-attribute-candidates-tools.js +301 -0
- package/dist/tools/yii3-attribute-candidates-tools.js.map +1 -0
- package/dist/tools/yii3-migration-tools.d.ts +74 -0
- package/dist/tools/yii3-migration-tools.d.ts.map +1 -0
- package/dist/tools/yii3-migration-tools.js +440 -0
- package/dist/tools/yii3-migration-tools.js.map +1 -0
- package/dist/types.d.ts +5 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/constant-file-pattern.d.ts +3 -1
- package/dist/utils/constant-file-pattern.d.ts.map +1 -1
- package/dist/utils/constant-file-pattern.js +6 -4
- package/dist/utils/constant-file-pattern.js.map +1 -1
- package/dist/utils/heritage-edges.d.ts +29 -0
- package/dist/utils/heritage-edges.d.ts.map +1 -0
- package/dist/utils/heritage-edges.js +94 -0
- package/dist/utils/heritage-edges.js.map +1 -0
- package/dist/utils/source-stripper.d.ts +23 -0
- package/dist/utils/source-stripper.d.ts.map +1 -0
- package/dist/utils/source-stripper.js +239 -0
- package/dist/utils/source-stripper.js.map +1 -0
- package/dist/utils/ts-imports.d.ts +7 -1
- package/dist/utils/ts-imports.d.ts.map +1 -1
- package/dist/utils/ts-imports.js +40 -7
- package/dist/utils/ts-imports.js.map +1 -1
- package/dist/utils/tsconfig-paths.d.ts +6 -5
- package/dist/utils/tsconfig-paths.d.ts.map +1 -1
- package/dist/utils/tsconfig-paths.js +52 -14
- package/dist/utils/tsconfig-paths.js.map +1 -1
- package/dist/utils/wall-clock.d.ts +9 -0
- package/dist/utils/wall-clock.d.ts.map +1 -0
- package/dist/utils/wall-clock.js +19 -0
- package/dist/utils/wall-clock.js.map +1 -0
- package/package.json +1 -1
- package/rules/codesift.md +16 -6
- package/rules/codesift.mdc +10 -3
- package/rules/codex.md +10 -3
- package/rules/gemini.md +10 -3
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Yii3 migration audit (M4) — decision-support tool.
|
|
3
|
+
*
|
|
4
|
+
* Inventories Yii2-specific API usage across a codebase and projects an
|
|
5
|
+
* effort estimate so the team can choose between staying on Yii 2.0.49+
|
|
6
|
+
* with PHP 8 vs migrating to Yii3. The tool is grep-style by design: it
|
|
7
|
+
* does not try to understand semantics, only to count call sites by
|
|
8
|
+
* category and surface the highest-leverage blockers.
|
|
9
|
+
*
|
|
10
|
+
* Every category maps a Yii2 idiom to its Yii3 equivalent and assigns a
|
|
11
|
+
* severity + per-call effort estimate. The aggregated effort_estimate
|
|
12
|
+
* gives a rough hours-low/hours-high range. Severity reflects how hard
|
|
13
|
+
* the migration is, NOT how dangerous the current code is.
|
|
14
|
+
*
|
|
15
|
+
* Out of scope:
|
|
16
|
+
* - Vendor / third-party packages (we strip vendor/ paths before scan).
|
|
17
|
+
* - Semantic disambiguation (e.g. `Yii::$app->db` is service-locator
|
|
18
|
+
* even when the property is dynamically resolved at runtime — we
|
|
19
|
+
* don't try to detect that).
|
|
20
|
+
* - Migration plans for non-Yii frameworks (Laravel/Symfony).
|
|
21
|
+
*/
|
|
22
|
+
import { readFile } from "node:fs/promises";
|
|
23
|
+
import { join } from "node:path";
|
|
24
|
+
import { getCodeIndex } from "./index-tools.js";
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// Effort tariff
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
const EFFORT_HOURS = {
|
|
29
|
+
// [low_estimate, high_estimate] hours per call site.
|
|
30
|
+
// Calibrated against common Yii2→Yii3 retrospectives. The low end assumes
|
|
31
|
+
// a team that has migrated similar code before; high end assumes greenfield.
|
|
32
|
+
trivial: [0.05, 0.15],
|
|
33
|
+
small: [0.25, 0.75],
|
|
34
|
+
medium: [1, 3],
|
|
35
|
+
large: [4, 12],
|
|
36
|
+
};
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// Category catalog (21 categories)
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
const CATEGORIES = [
|
|
41
|
+
{
|
|
42
|
+
category: "service-locator",
|
|
43
|
+
severity: "critical",
|
|
44
|
+
description: "Yii::$app->X service locator access — every call site needs DI ctor injection in Yii3.",
|
|
45
|
+
yii3_replacement: "Inject the service via constructor (e.g. `public function __construct(private Connection $db)`).",
|
|
46
|
+
effort_per_call: "small",
|
|
47
|
+
patterns: [
|
|
48
|
+
// Catches both Yii::$app->X and \Yii::$app->X. Excludes the more
|
|
49
|
+
// specific subcategories below by NOT matching their well-known
|
|
50
|
+
// property names — those land in their own buckets.
|
|
51
|
+
/\\?\bYii::\$app->(?!request\b|response\b|session\b|user\b|urlManager\b|authManager\b|queue\b|view\b|controller\b|errorHandler\b|id\b|params\b|language\b|name\b|homeUrl\b|formatter\b|i18n\b)([a-zA-Z_][\w]*)/g,
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
category: "object-factory",
|
|
56
|
+
severity: "high",
|
|
57
|
+
description: "Yii::createObject() factory — Yii3 uses a PSR-11 container directly.",
|
|
58
|
+
yii3_replacement: "Resolve via Yii3 DI: `$container->get(ClassName::class)`. Most call sites can become constructor injection.",
|
|
59
|
+
effort_per_call: "small",
|
|
60
|
+
patterns: [/\\?\bYii::createObject\s*\(/g],
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
category: "aliases",
|
|
64
|
+
severity: "high",
|
|
65
|
+
description: "Yii::getAlias / Yii::setAlias path-alias system — Yii3 has a dedicated Aliases service.",
|
|
66
|
+
yii3_replacement: "Inject `Yiisoft\\Aliases\\Aliases` and use its API.",
|
|
67
|
+
effort_per_call: "small",
|
|
68
|
+
patterns: [/\\?\bYii::(?:getAlias|setAlias)\s*\(/g],
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
category: "i18n",
|
|
72
|
+
severity: "high",
|
|
73
|
+
description: "Yii::t() translation calls — Yii3 uses a TranslatorInterface injected per consumer.",
|
|
74
|
+
yii3_replacement: "Inject `Yiisoft\\Translator\\TranslatorInterface`. Message files migrate to PO/PHP arrays per package.",
|
|
75
|
+
effort_per_call: "trivial",
|
|
76
|
+
patterns: [/\\?\bYii::t\s*\(/g],
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
category: "logger",
|
|
80
|
+
severity: "high",
|
|
81
|
+
description: "Yii::error / Yii::info / Yii::warning / Yii::trace — Yii3 uses PSR-3 LoggerInterface.",
|
|
82
|
+
yii3_replacement: "Inject `Psr\\Log\\LoggerInterface` and call `$logger->info(...)`, `$logger->error(...)`.",
|
|
83
|
+
effort_per_call: "trivial",
|
|
84
|
+
patterns: [/\\?\bYii::(?:error|info|warning|trace|debug|beginProfile|endProfile)\s*\(/g],
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
category: "application-props",
|
|
88
|
+
severity: "medium",
|
|
89
|
+
description: "Yii::$app->id / params / language / homeUrl / name — Yii3 splits these across several services.",
|
|
90
|
+
yii3_replacement: "Read via dedicated service (Application name / Aliases / Translator locale / Params service).",
|
|
91
|
+
effort_per_call: "trivial",
|
|
92
|
+
patterns: [
|
|
93
|
+
/\\?\bYii::\$app->(?:id|params|language|homeUrl|name|formatter|i18n)\b/g,
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
category: "module",
|
|
98
|
+
severity: "critical",
|
|
99
|
+
description: "Class extends yii\\base\\Module — Yii3 has no module concept; flatten to packages or use DI scopes.",
|
|
100
|
+
yii3_replacement: "Convert each module into a Composer package or restructure into namespaces with their own DI bindings.",
|
|
101
|
+
effort_per_call: "large",
|
|
102
|
+
patterns: [
|
|
103
|
+
/\bextends\s+(?:\\?yii\\base\\Module|Module)\b/g,
|
|
104
|
+
],
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
category: "request",
|
|
108
|
+
severity: "high",
|
|
109
|
+
description: "Yii::$app->request->X — replace with PSR-7 ServerRequestInterface.",
|
|
110
|
+
yii3_replacement: "Inject `Psr\\Http\\Message\\ServerRequestInterface` (or a Yii Request decorator).",
|
|
111
|
+
effort_per_call: "small",
|
|
112
|
+
patterns: [/\\?\bYii::\$app->request->/g],
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
category: "response",
|
|
116
|
+
severity: "high",
|
|
117
|
+
description: "Yii::$app->response->X — replace with PSR-7 ResponseFactoryInterface.",
|
|
118
|
+
yii3_replacement: "Inject `Psr\\Http\\Message\\ResponseFactoryInterface` and return `ResponseInterface`.",
|
|
119
|
+
effort_per_call: "small",
|
|
120
|
+
patterns: [/\\?\bYii::\$app->response->/g],
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
category: "session",
|
|
124
|
+
severity: "medium",
|
|
125
|
+
description: "Yii::$app->session->X — Yii3 has a session package with its own interface.",
|
|
126
|
+
yii3_replacement: "Inject `Yiisoft\\Session\\SessionInterface` (or PSR-15 session middleware).",
|
|
127
|
+
effort_per_call: "trivial",
|
|
128
|
+
patterns: [/\\?\bYii::\$app->session->/g],
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
category: "user-identity",
|
|
132
|
+
severity: "high",
|
|
133
|
+
description: "Yii::$app->user->identity / id / isGuest / can — auth shape differs in Yii3.",
|
|
134
|
+
yii3_replacement: "Inject `Yiisoft\\Auth\\IdentityInterface` (or a project-specific identity service) + RBAC package.",
|
|
135
|
+
effort_per_call: "small",
|
|
136
|
+
patterns: [/\\?\bYii::\$app->user->/g],
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
category: "active-record",
|
|
140
|
+
severity: "critical",
|
|
141
|
+
description: "ActiveRecord (yii\\db\\ActiveRecord) — Yii3 has no AR core. Pick Cycle ORM or yiisoft/active-record.",
|
|
142
|
+
yii3_replacement: "Cycle ORM (preferred for new code) or `yiisoft/active-record` (closer to Yii2 API).",
|
|
143
|
+
effort_per_call: "medium",
|
|
144
|
+
patterns: [
|
|
145
|
+
/\bextends\s+(?:\\?yii\\db\\ActiveRecord|ActiveRecord)\b/g,
|
|
146
|
+
],
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
category: "validators",
|
|
150
|
+
severity: "high",
|
|
151
|
+
description: "Yii2 rules() validation array — Yii3 uses `yiisoft/validator` with attributes or rule objects.",
|
|
152
|
+
yii3_replacement: "Replace `rules()` with attribute-based validation (`#[Required, Email]`) or a Validator service.",
|
|
153
|
+
effort_per_call: "small",
|
|
154
|
+
// Heuristic: a `rules()` method that returns an array. We count one per
|
|
155
|
+
// class that defines such a method. False positives possible if a class
|
|
156
|
+
// unrelated to Yii2 has its own rules().
|
|
157
|
+
patterns: [
|
|
158
|
+
/\bpublic\s+function\s+rules\s*\(\s*\)\s*(?::\s*array\s*)?\{/g,
|
|
159
|
+
],
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
category: "form-model",
|
|
163
|
+
severity: "high",
|
|
164
|
+
description: "Form models extending yii\\base\\Model with load() + validate() — Yii3 has `yiisoft/form-model`.",
|
|
165
|
+
yii3_replacement: "Migrate to `yiisoft/form-model`. The `load()`/`validate()` lifecycle moves to FormModelInterface.",
|
|
166
|
+
effort_per_call: "small",
|
|
167
|
+
patterns: [
|
|
168
|
+
/\bextends\s+(?:\\?yii\\base\\Model|Model)\b(?!\\)/g,
|
|
169
|
+
/->load\s*\(\s*Yii::\$app->request->post\s*\(\s*\)\s*\)/g,
|
|
170
|
+
],
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
category: "widgets",
|
|
174
|
+
severity: "high",
|
|
175
|
+
description: "Yii2 widgets (GridView, ActiveForm, Pjax, ListView) — Yii3 splits widgets into separate packages and some are gone.",
|
|
176
|
+
yii3_replacement: "Per widget: use `yiisoft/yii-bootstrap5`, `yiisoft/yii-gridview`, `yiisoft/form` or rewrite as Twig/Vue components.",
|
|
177
|
+
effort_per_call: "medium",
|
|
178
|
+
patterns: [
|
|
179
|
+
/\b(?:GridView|ActiveForm|Pjax|ListView|DetailView|Breadcrumbs|Menu|LinkPager)::(?:widget|begin)\s*\(/g,
|
|
180
|
+
],
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
category: "view",
|
|
184
|
+
severity: "high",
|
|
185
|
+
description: "$this->render() / $this->layout — Yii3 has a yii-view package with a different lifecycle.",
|
|
186
|
+
yii3_replacement: "Inject `Yiisoft\\View\\ViewInterface`. `$this->layout` becomes view parameters/decorators.",
|
|
187
|
+
effort_per_call: "small",
|
|
188
|
+
patterns: [
|
|
189
|
+
/\$this->render(?:Partial|Ajax|AsJson|File)?\s*\(/g,
|
|
190
|
+
/\$this->layout\s*=/g,
|
|
191
|
+
],
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
category: "url-manager",
|
|
195
|
+
severity: "high",
|
|
196
|
+
description: "Yii::$app->urlManager / urlManager rules in config — Yii3 uses a Router package + attribute-based routes.",
|
|
197
|
+
yii3_replacement: "Migrate `urlManager` rules to `yiisoft/router` + per-action `#[Route]` attributes.",
|
|
198
|
+
effort_per_call: "medium",
|
|
199
|
+
patterns: [
|
|
200
|
+
/\\?\bYii::\$app->urlManager->/g,
|
|
201
|
+
/[\'\"]urlManager[\'\"]\s*=>\s*\[/g,
|
|
202
|
+
],
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
category: "console",
|
|
206
|
+
severity: "high",
|
|
207
|
+
description: "Console controllers extending yii\\console\\Controller — Yii3 console uses Symfony Console.",
|
|
208
|
+
yii3_replacement: "Rewrite each console controller as a `Symfony\\Component\\Console\\Command\\Command` subclass.",
|
|
209
|
+
effort_per_call: "medium",
|
|
210
|
+
patterns: [
|
|
211
|
+
/\bextends\s+(?:\\?yii\\console\\Controller|Controller)\b/g,
|
|
212
|
+
],
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
category: "migrations",
|
|
216
|
+
severity: "low",
|
|
217
|
+
description: "Migrations extending yii\\db\\Migration — Yii3 has `yiisoft/db-migration` with similar API.",
|
|
218
|
+
yii3_replacement: "Largely API-compatible. Migrate base class import; bulk-replace `extends Migration` with the new namespace.",
|
|
219
|
+
effort_per_call: "trivial",
|
|
220
|
+
patterns: [
|
|
221
|
+
/\bextends\s+(?:\\?yii\\db\\Migration|Migration)\b/g,
|
|
222
|
+
],
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
category: "queue",
|
|
226
|
+
severity: "medium",
|
|
227
|
+
description: "Yii::$app->queue / yii\\queue\\Queue — Yii3 has `yiisoft/queue` (or use Symfony Messenger).",
|
|
228
|
+
yii3_replacement: "Rewrite jobs to implement Yii3 queue's MessageInterface or Symfony Messenger handlers.",
|
|
229
|
+
effort_per_call: "small",
|
|
230
|
+
patterns: [
|
|
231
|
+
/\\?\bYii::\$app->queue\b/g,
|
|
232
|
+
/\bextends\s+(?:\\?yii\\queue\\)/g,
|
|
233
|
+
/\bimplements\s+(?:\\?yii\\queue\\JobInterface|JobInterface)\b/g,
|
|
234
|
+
],
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
category: "rbac",
|
|
238
|
+
severity: "high",
|
|
239
|
+
description: "Yii::$app->authManager (createPermission/createRole/add/addChild) and ->can() — Yii3 uses yiisoft/rbac.",
|
|
240
|
+
yii3_replacement: "Migrate seed migrations to `yiisoft/rbac` Manager API. ->can() becomes `Manager::userHasPermission()`.",
|
|
241
|
+
effort_per_call: "medium",
|
|
242
|
+
// Yii2 RBAC seed migrations universally alias the manager into a local
|
|
243
|
+
// variable (`$auth = Yii::$app->authManager;`) and then call
|
|
244
|
+
// `$auth->createRole/createPermission/add/addChild` — so we can't rely
|
|
245
|
+
// on a single combined regex. We catch:
|
|
246
|
+
// 1. The aliased read itself (any reference to `Yii::$app->authManager`)
|
|
247
|
+
// 2. RBAC builder method names (createRole/createPermission/add/addChild/
|
|
248
|
+
// assign/revoke/getRole/getPermission/checkAccess)
|
|
249
|
+
// 3. The runtime check `Yii::$app->user->can(...)`.
|
|
250
|
+
patterns: [
|
|
251
|
+
/\\?\bYii::\$app->authManager\b/g,
|
|
252
|
+
/->(?:createRole|createPermission|addChild|assign|revoke|getRole|getPermission|checkAccess)\s*\(/g,
|
|
253
|
+
/\\?\bYii::\$app->user->can\s*\(/g,
|
|
254
|
+
],
|
|
255
|
+
},
|
|
256
|
+
];
|
|
257
|
+
// ---------------------------------------------------------------------------
|
|
258
|
+
// Implementation
|
|
259
|
+
// ---------------------------------------------------------------------------
|
|
260
|
+
const VENDOR_RE = /(^|\/)(?:vendor|node_modules|runtime|tests\/_data)(\/|$)/;
|
|
261
|
+
const SAMPLE_LIMIT = 5;
|
|
262
|
+
export async function yii3MigrationAudit(repo, options) {
|
|
263
|
+
const index = await getCodeIndex(repo);
|
|
264
|
+
if (!index)
|
|
265
|
+
throw new Error(`Repository "${repo}" not found.`);
|
|
266
|
+
const sampleLimit = options?.max_samples_per_category ?? SAMPLE_LIMIT;
|
|
267
|
+
const includeVendor = options?.include_vendor ?? false;
|
|
268
|
+
const filePattern = options?.file_pattern;
|
|
269
|
+
// Pick PHP files under non-vendor paths. The CodeIndex tracks .php under
|
|
270
|
+
// many roots; we just filter here so callers don't need to pre-trim.
|
|
271
|
+
const phpFiles = index.files.filter((f) => {
|
|
272
|
+
if (!f.path.endsWith(".php"))
|
|
273
|
+
return false;
|
|
274
|
+
if (!includeVendor && VENDOR_RE.test(f.path))
|
|
275
|
+
return false;
|
|
276
|
+
if (filePattern && !f.path.includes(filePattern))
|
|
277
|
+
return false;
|
|
278
|
+
return true;
|
|
279
|
+
});
|
|
280
|
+
// One bucket per category; we keep raw counts + first N samples and
|
|
281
|
+
// collapse to the public CategoryFinding shape at the end.
|
|
282
|
+
const buckets = new Map();
|
|
283
|
+
for (const cat of CATEGORIES) {
|
|
284
|
+
buckets.set(cat.category, { count: 0, samples: [], files: new Set() });
|
|
285
|
+
}
|
|
286
|
+
// Read every file once, run all 21 categories against the same source
|
|
287
|
+
// string. This is much faster than 21 separate scans (one fs read vs N).
|
|
288
|
+
const readResults = await Promise.allSettled(phpFiles.map(async (f) => ({
|
|
289
|
+
path: f.path,
|
|
290
|
+
content: await readFile(join(index.root, f.path), "utf-8"),
|
|
291
|
+
})));
|
|
292
|
+
for (const r of readResults) {
|
|
293
|
+
if (r.status !== "fulfilled")
|
|
294
|
+
continue;
|
|
295
|
+
const { path, content } = r.value;
|
|
296
|
+
for (const cat of CATEGORIES) {
|
|
297
|
+
const b = buckets.get(cat.category);
|
|
298
|
+
for (const pat of cat.patterns) {
|
|
299
|
+
// Each regex must be /g; we manually reset lastIndex so categories
|
|
300
|
+
// don't poison each other across patterns. The catalog above is
|
|
301
|
+
// /g everywhere — this is a guard for future additions.
|
|
302
|
+
pat.lastIndex = 0;
|
|
303
|
+
let m;
|
|
304
|
+
while ((m = pat.exec(content)) !== null) {
|
|
305
|
+
b.count++;
|
|
306
|
+
b.files.add(path);
|
|
307
|
+
if (b.samples.length < sampleLimit) {
|
|
308
|
+
const line = countLinesUntil(content, m.index);
|
|
309
|
+
const snippet = extractLineAt(content, m.index);
|
|
310
|
+
b.samples.push({ file: path, line, snippet });
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
// Roll up
|
|
317
|
+
const byCategory = CATEGORIES.map((cat) => {
|
|
318
|
+
const b = buckets.get(cat.category);
|
|
319
|
+
return {
|
|
320
|
+
category: cat.category,
|
|
321
|
+
severity: cat.severity,
|
|
322
|
+
count: b.count,
|
|
323
|
+
effort_per_call: cat.effort_per_call,
|
|
324
|
+
description: cat.description,
|
|
325
|
+
yii3_replacement: cat.yii3_replacement,
|
|
326
|
+
sample_files: b.samples,
|
|
327
|
+
};
|
|
328
|
+
})
|
|
329
|
+
.filter((f) => f.count > 0)
|
|
330
|
+
.sort((a, b) => {
|
|
331
|
+
const sevOrder = {
|
|
332
|
+
critical: 0,
|
|
333
|
+
high: 1,
|
|
334
|
+
medium: 2,
|
|
335
|
+
low: 3,
|
|
336
|
+
};
|
|
337
|
+
return (sevOrder[a.severity] - sevOrder[b.severity] || b.count - a.count);
|
|
338
|
+
});
|
|
339
|
+
const bySeverity = {
|
|
340
|
+
critical: 0,
|
|
341
|
+
high: 0,
|
|
342
|
+
medium: 0,
|
|
343
|
+
low: 0,
|
|
344
|
+
};
|
|
345
|
+
let totalCalls = 0;
|
|
346
|
+
let hoursLow = 0;
|
|
347
|
+
let hoursHigh = 0;
|
|
348
|
+
for (const f of byCategory) {
|
|
349
|
+
bySeverity[f.severity] += f.count;
|
|
350
|
+
totalCalls += f.count;
|
|
351
|
+
const [lo, hi] = EFFORT_HOURS[f.effort_per_call];
|
|
352
|
+
hoursLow += f.count * lo;
|
|
353
|
+
hoursHigh += f.count * hi;
|
|
354
|
+
}
|
|
355
|
+
// Blockers: critical-severity categories with non-trivial volume.
|
|
356
|
+
// The threshold is intentionally high — a Yii3 migration is always going
|
|
357
|
+
// to require some manual rework; we only flag the categories that would
|
|
358
|
+
// dominate the schedule.
|
|
359
|
+
const blockers = [];
|
|
360
|
+
for (const f of byCategory) {
|
|
361
|
+
if (f.severity !== "critical")
|
|
362
|
+
continue;
|
|
363
|
+
if (f.count < 10)
|
|
364
|
+
continue;
|
|
365
|
+
const fileCount = buckets.get(f.category).files.size;
|
|
366
|
+
blockers.push({
|
|
367
|
+
category: f.category,
|
|
368
|
+
reason: `${f.count} call sites in ${fileCount} files — ${f.description}`,
|
|
369
|
+
related_files_count: fileCount,
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
// Decision signal — coarse heuristic for the executive summary.
|
|
373
|
+
let decisionSignal;
|
|
374
|
+
if (blockers.length === 0 && totalCalls < 500) {
|
|
375
|
+
decisionSignal = "consider-yii3";
|
|
376
|
+
}
|
|
377
|
+
else if (blockers.length === 0 && totalCalls < 2000) {
|
|
378
|
+
decisionSignal = "consider-yii3";
|
|
379
|
+
}
|
|
380
|
+
else if (blockers.length <= 2 && totalCalls < 5000) {
|
|
381
|
+
decisionSignal = "high-effort-yii3";
|
|
382
|
+
}
|
|
383
|
+
else if (blockers.length >= 3 || totalCalls >= 5000) {
|
|
384
|
+
decisionSignal = "blocked";
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
decisionSignal = "stay-on-yii2";
|
|
388
|
+
}
|
|
389
|
+
// Composer-derived metadata — best-effort.
|
|
390
|
+
const composerMeta = await readComposerMeta(index.root);
|
|
391
|
+
return {
|
|
392
|
+
repo,
|
|
393
|
+
scanned_files: phpFiles.length,
|
|
394
|
+
total_call_sites: totalCalls,
|
|
395
|
+
by_category: byCategory,
|
|
396
|
+
by_severity: bySeverity,
|
|
397
|
+
blockers,
|
|
398
|
+
effort_estimate: {
|
|
399
|
+
hours_low: Math.round(hoursLow),
|
|
400
|
+
hours_high: Math.round(hoursHigh),
|
|
401
|
+
note: "Per-call estimates from CategoryDefinition.effort_per_call. Real " +
|
|
402
|
+
"migrations take 2-4× longer due to integration tests, edge cases, " +
|
|
403
|
+
"and team learning curve. Treat the high bound as a floor.",
|
|
404
|
+
},
|
|
405
|
+
decision_signal: decisionSignal,
|
|
406
|
+
yii_version_detected: composerMeta.yiiVersion,
|
|
407
|
+
php_version_required: composerMeta.phpRequirement,
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
// ---------------------------------------------------------------------------
|
|
411
|
+
// Helpers
|
|
412
|
+
// ---------------------------------------------------------------------------
|
|
413
|
+
function countLinesUntil(source, idx) {
|
|
414
|
+
let line = 1;
|
|
415
|
+
for (let i = 0; i < idx; i++) {
|
|
416
|
+
if (source.charCodeAt(i) === 10)
|
|
417
|
+
line++;
|
|
418
|
+
}
|
|
419
|
+
return line;
|
|
420
|
+
}
|
|
421
|
+
function extractLineAt(source, idx) {
|
|
422
|
+
const start = source.lastIndexOf("\n", idx) + 1;
|
|
423
|
+
const end = source.indexOf("\n", idx);
|
|
424
|
+
const line = source.slice(start, end === -1 ? source.length : end);
|
|
425
|
+
return line.trim().slice(0, 200);
|
|
426
|
+
}
|
|
427
|
+
async function readComposerMeta(root) {
|
|
428
|
+
try {
|
|
429
|
+
const raw = await readFile(join(root, "composer.json"), "utf-8");
|
|
430
|
+
const parsed = JSON.parse(raw);
|
|
431
|
+
const requires = parsed.require ?? {};
|
|
432
|
+
const yiiVersion = requires["yiisoft/yii2"] ?? null;
|
|
433
|
+
const phpRequirement = requires.php ?? null;
|
|
434
|
+
return { yiiVersion, phpRequirement };
|
|
435
|
+
}
|
|
436
|
+
catch {
|
|
437
|
+
return { yiiVersion: null, phpRequirement: null };
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
//# sourceMappingURL=yii3-migration-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yii3-migration-tools.js","sourceRoot":"","sources":["../../src/tools/yii3-migration-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -147,6 +147,10 @@ export interface TextMatch {
|
|
|
147
147
|
context_before?: string[];
|
|
148
148
|
context_after?: string[];
|
|
149
149
|
containing_symbol?: ContainingSymbol;
|
|
150
|
+
/** Set when the search aborted on a wall-clock cap. The single returned match
|
|
151
|
+
* carries the hint so agents see actionable guidance instead of a hang. */
|
|
152
|
+
truncated?: boolean;
|
|
153
|
+
hint?: string;
|
|
150
154
|
}
|
|
151
155
|
export interface TextMatchGroup {
|
|
152
156
|
file: string;
|
|
@@ -181,7 +185,7 @@ export interface ImpactResult {
|
|
|
181
185
|
}
|
|
182
186
|
export interface EmbeddingMeta {
|
|
183
187
|
model: string;
|
|
184
|
-
provider: "voyage" | "openai" | "ollama";
|
|
188
|
+
provider: "voyage" | "openai" | "ollama" | "local";
|
|
185
189
|
dimensions: number;
|
|
186
190
|
symbol_count: number;
|
|
187
191
|
updated_at: number;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,QAAQ,GACR,OAAO,GACP,WAAW,GACX,MAAM,GACN,UAAU,GACV,UAAU,GACV,OAAO,GACP,MAAM,GACN,WAAW,GACX,QAAQ,GACR,SAAS,GACT,UAAU,GACV,YAAY,GACZ,WAAW,GACX,WAAW,GACX,WAAW,GACX,MAAM,GACN,OAAO,GACP,MAAM,GACN,OAAO,GACP,SAAS,GACT,WAAW,GACX,gBAAgB,GAChB,mBAAmB,GACnB,sBAAsB,GACtB,SAAS,CAAC;AAEd,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB;mFAC+E;IAC/E,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C;yEACqE;IACrE,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CAC1B;AAMD,MAAM,WAAW,qBAAqB;IACpC,sEAAsE;IACtE,YAAY,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,sEAAsE;IACtE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gFAAgF;IAChF,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,qEAAqE;IACrE,EAAE,EAAE,MAAM,CAAC;IACX,kEAAkE;IAClE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,mDAAmD;IACnD,aAAa,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC;IAC1E,YAAY,EAAE,qBAAqB,CAAC;IACpC,cAAc,EAAE,qBAAqB,EAAE,CAAC;IACxC,+EAA+E;IAC/E,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;oFACoF;AACpF,MAAM,WAAW,qBAAqB;IACpC,8CAA8C;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,mFAAmF;IACnF,wBAAwB,EAAE,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,QAAQ,GAAG,YAAY,CAAC;IAChC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,gFAAgF;IAChF,yBAAyB,EAAE,MAAM,EAAE,CAAC;IACpC;;;;mEAI+D;IAC/D,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,0EAA0E;IAC1E,KAAK,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC5C;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;IACrC;+EAC2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9C,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,MAAM,GACN,SAAS,GACT,MAAM,GACN,eAAe,GACf,OAAO,GACP,OAAO,GACP,SAAS,GACT,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,UAAU,EAAE,CAAC;IAC/B,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Match indexed file paths against `resolve_constant_value` `file_pattern`.
|
|
3
|
-
* Prefers exact or
|
|
3
|
+
* Prefers exact, suffix, or path-segment matches. The slash-free substring fallback
|
|
4
|
+
* requires a path-segment boundary (so `pattern="core"` matches `src/core/x.ts`
|
|
5
|
+
* but not `src/scoreboard.ts`).
|
|
4
6
|
*/
|
|
5
7
|
export declare function matchesConstantFilePattern(file: string, pattern: string | undefined): boolean;
|
|
6
8
|
//# sourceMappingURL=constant-file-pattern.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constant-file-pattern.d.ts","sourceRoot":"","sources":["../../src/utils/constant-file-pattern.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"constant-file-pattern.d.ts","sourceRoot":"","sources":["../../src/utils/constant-file-pattern.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAgB7F"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Match indexed file paths against `resolve_constant_value` `file_pattern`.
|
|
3
|
-
* Prefers exact or
|
|
3
|
+
* Prefers exact, suffix, or path-segment matches. The slash-free substring fallback
|
|
4
|
+
* requires a path-segment boundary (so `pattern="core"` matches `src/core/x.ts`
|
|
5
|
+
* but not `src/scoreboard.ts`).
|
|
4
6
|
*/
|
|
5
7
|
export function matchesConstantFilePattern(file, pattern) {
|
|
6
8
|
if (!pattern)
|
|
@@ -20,8 +22,8 @@ export function matchesConstantFilePattern(file, pattern) {
|
|
|
20
22
|
const lastSeg = f.split("/").pop() ?? f;
|
|
21
23
|
if (lastSeg === p)
|
|
22
24
|
return true;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return
|
|
25
|
+
// Pattern without slash: require a full path-segment match somewhere in `f`
|
|
26
|
+
// so we never match arbitrary substrings of unrelated names.
|
|
27
|
+
return f.split("/").includes(p);
|
|
26
28
|
}
|
|
27
29
|
//# sourceMappingURL=constant-file-pattern.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constant-file-pattern.js","sourceRoot":"","sources":["../../src/utils/constant-file-pattern.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"constant-file-pattern.js","sourceRoot":"","sources":["../../src/utils/constant-file-pattern.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAY,EAAE,OAA2B;IAClF,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7B,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;IACzC,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxC,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/B,4EAA4E;IAC5E,6DAA6D;IAC7D,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { CodeIndex } from "../types.js";
|
|
2
|
+
export interface HeritageFileEdge {
|
|
3
|
+
from: string;
|
|
4
|
+
to: string;
|
|
5
|
+
kind: "extends" | "implements";
|
|
6
|
+
}
|
|
7
|
+
/** Counts of heritage refs that could not be turned into a file edge.
|
|
8
|
+
* `ambiguous`: simple name matched 2+ declarations (collision).
|
|
9
|
+
* `unresolved`: simple name matched no declared type. */
|
|
10
|
+
export interface HeritageResolutionStats {
|
|
11
|
+
ambiguous: number;
|
|
12
|
+
unresolved: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Best-effort module-level edges from symbol `extends` / `implements`.
|
|
16
|
+
* Resolves each referenced type name to a file only when exactly one
|
|
17
|
+
* declaration (class / interface / type alias) with that simple name exists.
|
|
18
|
+
*
|
|
19
|
+
* Returns the edge list and a `stats` block counting heritage refs that could
|
|
20
|
+
* not be resolved (ambiguous: 2+ declarations with same simple name; unresolved:
|
|
21
|
+
* no declared type with that name) so callers can surface the gap instead of
|
|
22
|
+
* silently dropping edges.
|
|
23
|
+
*/
|
|
24
|
+
export declare function collectHeritageFileEdgesWithStats(index: CodeIndex): {
|
|
25
|
+
edges: HeritageFileEdge[];
|
|
26
|
+
stats: HeritageResolutionStats;
|
|
27
|
+
};
|
|
28
|
+
export declare function collectHeritageFileEdges(index: CodeIndex): HeritageFileEdge[];
|
|
29
|
+
//# sourceMappingURL=heritage-edges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heritage-edges.d.ts","sourceRoot":"","sources":["../../src/utils/heritage-edges.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,aAAa,CAAC;AAKzD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,GAAG,YAAY,CAAC;CAChC;AAED;;yDAEyD;AACzD,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAqDD;;;;;;;;;GASG;AACH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,SAAS,GAAG;IACnE,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,uBAAuB,CAAC;CAChC,CAoCA;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,gBAAgB,EAAE,CAE7E"}
|