@kernlang/review-python 3.4.6-canary.45.1.130ca3d2 → 3.4.6-canary.46.1.19dcfc19

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.
Files changed (44) hide show
  1. package/dist/mapper/extractors/dependency.d.ts +3 -0
  2. package/dist/mapper/extractors/dependency.js +52 -0
  3. package/dist/mapper/extractors/effect.d.ts +3 -0
  4. package/dist/mapper/extractors/effect.js +74 -0
  5. package/dist/mapper/extractors/entrypoint.d.ts +3 -0
  6. package/dist/mapper/extractors/entrypoint.js +225 -0
  7. package/dist/mapper/extractors/error.d.ts +5 -0
  8. package/dist/mapper/extractors/error.js +129 -0
  9. package/dist/mapper/extractors/fastapi-pagination.d.ts +5 -0
  10. package/dist/mapper/extractors/fastapi-pagination.js +119 -0
  11. package/dist/mapper/extractors/fastapi-status.d.ts +6 -0
  12. package/dist/mapper/extractors/fastapi-status.js +115 -0
  13. package/dist/mapper/extractors/guard.d.ts +3 -0
  14. package/dist/mapper/extractors/guard.js +115 -0
  15. package/dist/mapper/extractors/pydantic.d.ts +13 -0
  16. package/dist/mapper/extractors/pydantic.js +61 -0
  17. package/dist/mapper/extractors/state-mutation.d.ts +3 -0
  18. package/dist/mapper/extractors/state-mutation.js +63 -0
  19. package/dist/mapper/helpers/ast.d.ts +9 -0
  20. package/dist/mapper/helpers/ast.js +62 -0
  21. package/dist/mapper/helpers/types.d.ts +7 -0
  22. package/dist/mapper/helpers/types.js +168 -0
  23. package/dist/mapper/index.d.ts +8 -0
  24. package/dist/mapper/index.js +42 -0
  25. package/dist/mapper/signatures.d.ts +17 -0
  26. package/dist/mapper/signatures.js +87 -0
  27. package/dist/mapper.d.ts +1 -8
  28. package/dist/mapper.js +1 -1286
  29. package/package.json +3 -3
  30. package/src/mapper/extractors/dependency.ts +60 -0
  31. package/src/mapper/extractors/effect.ts +84 -0
  32. package/src/mapper/extractors/entrypoint.ts +272 -0
  33. package/src/mapper/extractors/error.ts +152 -0
  34. package/src/mapper/extractors/fastapi-pagination.ts +117 -0
  35. package/src/mapper/extractors/fastapi-status.ts +119 -0
  36. package/src/mapper/extractors/guard.ts +114 -0
  37. package/src/mapper/extractors/pydantic.ts +74 -0
  38. package/src/mapper/extractors/state-mutation.ts +72 -0
  39. package/src/mapper/helpers/ast.ts +72 -0
  40. package/src/mapper/helpers/types.ts +164 -0
  41. package/src/mapper/index.ts +50 -0
  42. package/src/mapper/signatures.ts +94 -0
  43. package/src/mapper.ts +1 -1388
  44. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Python Concept Mapper — tree-sitter based.
3
+ *
4
+ * Maps Python syntax → universal KERN concepts.
5
+ * Phase 1: error_raise, error_handle, effect
6
+ */
7
+ import Parser from 'tree-sitter';
8
+ import Python from 'tree-sitter-python';
9
+ import { extractDependencyEdges } from './extractors/dependency.js';
10
+ import { extractEffects } from './extractors/effect.js';
11
+ import { extractEntrypoints } from './extractors/entrypoint.js';
12
+ import { extractErrorHandle, extractErrorRaise } from './extractors/error.js';
13
+ import { extractGuards } from './extractors/guard.js';
14
+ import { extractStateMutation } from './extractors/state-mutation.js';
15
+ import { EXTRACTOR_VERSION } from './signatures.js';
16
+ let parser = null;
17
+ function getParser() {
18
+ if (!parser) {
19
+ parser = new Parser();
20
+ parser.setLanguage(Python);
21
+ }
22
+ return parser;
23
+ }
24
+ export function extractPythonConcepts(source, filePath) {
25
+ const tree = getParser().parse(source);
26
+ const nodes = [];
27
+ const edges = [];
28
+ extractErrorRaise(tree.rootNode, source, filePath, nodes);
29
+ extractErrorHandle(tree.rootNode, source, filePath, nodes);
30
+ extractEffects(tree.rootNode, source, filePath, nodes);
31
+ extractEntrypoints(tree.rootNode, source, filePath, nodes);
32
+ extractGuards(tree.rootNode, source, filePath, nodes);
33
+ extractStateMutation(tree.rootNode, source, filePath, nodes);
34
+ extractDependencyEdges(tree.rootNode, source, filePath, edges);
35
+ return {
36
+ filePath,
37
+ language: 'py',
38
+ nodes,
39
+ edges,
40
+ extractorVersion: EXTRACTOR_VERSION,
41
+ };
42
+ }
@@ -0,0 +1,17 @@
1
+ export declare const EXTRACTOR_VERSION = "1.0.0";
2
+ export declare const NETWORK_MODULES: Set<string>;
3
+ export declare const NETWORK_METHODS: Set<string>;
4
+ export declare const DB_MODULES: Set<string>;
5
+ export declare const DB_METHODS: Set<string>;
6
+ export declare const _FS_FUNCTIONS: Set<string>;
7
+ export declare const PY_API_ERROR_STATUS_CODES: Set<number>;
8
+ export declare const PY_API_SUCCESS_STATUS_CODES: Set<number>;
9
+ export declare const FASTAPI_DEFAULT_SUCCESS_STATUS = 200;
10
+ export declare const PY_PAGE_ANCHORS: Set<string>;
11
+ export declare const PY_OFFSET_ANCHORS: Set<string>;
12
+ export declare const PY_CURSOR_ANCHORS: Set<string>;
13
+ export declare const PY_PAGINATION_RE: RegExp;
14
+ export declare const PY_DB_COLLECTION_RE: RegExp;
15
+ export declare const PY_DB_WRITE_RE: RegExp;
16
+ export declare const PY_IDEMPOTENCY_RE: RegExp;
17
+ export declare const STDLIB_MODULES: Set<string>;
@@ -0,0 +1,87 @@
1
+ export const EXTRACTOR_VERSION = '1.0.0';
2
+ export const NETWORK_MODULES = new Set(['requests', 'httpx', 'aiohttp', 'urllib']);
3
+ export const NETWORK_METHODS = new Set([
4
+ 'get',
5
+ 'post',
6
+ 'put',
7
+ 'patch',
8
+ 'delete',
9
+ 'head',
10
+ 'options',
11
+ 'request',
12
+ 'fetch',
13
+ ]);
14
+ export const DB_MODULES = new Set(['psycopg2', 'asyncpg', 'pymongo', 'sqlalchemy', 'django']);
15
+ export const DB_METHODS = new Set([
16
+ 'execute',
17
+ 'executemany',
18
+ 'fetchone',
19
+ 'fetchall',
20
+ 'fetchmany',
21
+ 'query',
22
+ 'find',
23
+ 'find_one',
24
+ 'insert_one',
25
+ 'insert_many',
26
+ 'update_one',
27
+ 'delete_one',
28
+ ]);
29
+ export const _FS_FUNCTIONS = new Set(['open', 'read', 'write', 'readlines', 'writelines']);
30
+ export const PY_API_ERROR_STATUS_CODES = new Set([401, 403, 404, 422, 500]);
31
+ export const PY_API_SUCCESS_STATUS_CODES = new Set([200, 201, 202, 204, 206]);
32
+ // FastAPI's documented default success status is 200, regardless of HTTP method
33
+ // (Codex plan-review #1, FastAPI docs:
34
+ // https://fastapi.tiangolo.com/tutorial/response-status-code/). 201 for POST is
35
+ // a per-route opt-in via `status_code=201`, not a method-derived default.
36
+ export const FASTAPI_DEFAULT_SUCCESS_STATUS = 200;
37
+ // Pagination anchor families — mirror the TS classification in
38
+ // `packages/review/src/concept-rules/cross-stack-utils.ts`. The size keys
39
+ // (`limit`, `take`, `page_size`, `per_page`) are intentionally NOT anchors
40
+ // — they're compatible with either offset or cursor pagination.
41
+ export const PY_PAGE_ANCHORS = new Set(['page', 'page_number', 'pageNumber']);
42
+ export const PY_OFFSET_ANCHORS = new Set(['offset', 'skip']);
43
+ export const PY_CURSOR_ANCHORS = new Set(['cursor', 'after', 'before', 'next', 'previous']);
44
+ export const PY_PAGINATION_RE = /\b(limit|offset|skip|cursor|page|page_size|per_page)\b|\.limit\s*\(/i;
45
+ export const PY_DB_COLLECTION_RE = /\.(find|all|fetchall|to_list|scalars)\s*\(|\bselect\s*\(/i;
46
+ export const PY_DB_WRITE_RE = /\.(insert_one|insert_many|update_one|update_many|delete_one|delete_many|add|create|save|commit)\s*\(/i;
47
+ export const PY_IDEMPOTENCY_RE = /\b(idempotency(?:[_-]?key)?|Idempotency-Key|transaction|unique|upsert|get_or_create|on_conflict)\b/i;
48
+ export const STDLIB_MODULES = new Set([
49
+ 'os',
50
+ 'sys',
51
+ 'json',
52
+ 're',
53
+ 'math',
54
+ 'datetime',
55
+ 'time',
56
+ 'logging',
57
+ 'argparse',
58
+ 'collections',
59
+ 'itertools',
60
+ 'functools',
61
+ 'pathlib',
62
+ 'shutil',
63
+ 'subprocess',
64
+ 'threading',
65
+ 'multiprocessing',
66
+ 'abc',
67
+ 'typing',
68
+ 'io',
69
+ 'pickle',
70
+ 'random',
71
+ 'hashlib',
72
+ 'hmac',
73
+ 'base64',
74
+ 'csv',
75
+ 'sqlite3',
76
+ 'zlib',
77
+ 'gzip',
78
+ 'tarfile',
79
+ 'zipfile',
80
+ 'enum',
81
+ 'struct',
82
+ 'tempfile',
83
+ 'unittest',
84
+ 'urllib',
85
+ 'uuid',
86
+ 'xml',
87
+ ]);
package/dist/mapper.d.ts CHANGED
@@ -1,8 +1 @@
1
- /**
2
- * Python Concept Mapper — tree-sitter based.
3
- *
4
- * Maps Python syntax → universal KERN concepts.
5
- * Phase 1: error_raise, error_handle, effect
6
- */
7
- import type { ConceptMap } from '@kernlang/core';
8
- export declare function extractPythonConcepts(source: string, filePath: string): ConceptMap;
1
+ export { extractPythonConcepts } from './mapper/index.js';