driftdetect-core 0.1.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/dist/boundaries/boundary-store.d.ts +92 -0
  2. package/dist/boundaries/boundary-store.d.ts.map +1 -0
  3. package/dist/boundaries/boundary-store.js +458 -0
  4. package/dist/boundaries/boundary-store.js.map +1 -0
  5. package/dist/boundaries/index.d.ts +8 -0
  6. package/dist/boundaries/index.d.ts.map +1 -0
  7. package/dist/boundaries/index.js +8 -0
  8. package/dist/boundaries/index.js.map +1 -0
  9. package/dist/boundaries/types.d.ts +237 -0
  10. package/dist/boundaries/types.d.ts.map +1 -0
  11. package/dist/boundaries/types.js +8 -0
  12. package/dist/boundaries/types.js.map +1 -0
  13. package/dist/dna/ai-context.d.ts +10 -0
  14. package/dist/dna/ai-context.d.ts.map +1 -0
  15. package/dist/dna/ai-context.js +46 -0
  16. package/dist/dna/ai-context.js.map +1 -0
  17. package/dist/dna/dna-analyzer.d.ts +34 -0
  18. package/dist/dna/dna-analyzer.d.ts.map +1 -0
  19. package/dist/dna/dna-analyzer.js +110 -0
  20. package/dist/dna/dna-analyzer.js.map +1 -0
  21. package/dist/dna/dna-store.d.ts +13 -0
  22. package/dist/dna/dna-store.d.ts.map +1 -0
  23. package/dist/dna/dna-store.js +43 -0
  24. package/dist/dna/dna-store.js.map +1 -0
  25. package/dist/dna/gene-extractors/animation-approach.d.ts +15 -0
  26. package/dist/dna/gene-extractors/animation-approach.d.ts.map +1 -0
  27. package/dist/dna/gene-extractors/animation-approach.js +97 -0
  28. package/dist/dna/gene-extractors/animation-approach.js.map +1 -0
  29. package/dist/dna/gene-extractors/base-extractor.d.ts +53 -0
  30. package/dist/dna/gene-extractors/base-extractor.d.ts.map +1 -0
  31. package/dist/dna/gene-extractors/base-extractor.js +76 -0
  32. package/dist/dna/gene-extractors/base-extractor.js.map +1 -0
  33. package/dist/dna/gene-extractors/index.d.ts +16 -0
  34. package/dist/dna/gene-extractors/index.d.ts.map +1 -0
  35. package/dist/dna/gene-extractors/index.js +38 -0
  36. package/dist/dna/gene-extractors/index.js.map +1 -0
  37. package/dist/dna/gene-extractors/responsive-approach.d.ts +10 -0
  38. package/dist/dna/gene-extractors/responsive-approach.d.ts.map +1 -0
  39. package/dist/dna/gene-extractors/responsive-approach.js +30 -0
  40. package/dist/dna/gene-extractors/responsive-approach.js.map +1 -0
  41. package/dist/dna/gene-extractors/spacing-philosophy.d.ts +10 -0
  42. package/dist/dna/gene-extractors/spacing-philosophy.d.ts.map +1 -0
  43. package/dist/dna/gene-extractors/spacing-philosophy.js +30 -0
  44. package/dist/dna/gene-extractors/spacing-philosophy.js.map +1 -0
  45. package/dist/dna/gene-extractors/state-styling.d.ts +10 -0
  46. package/dist/dna/gene-extractors/state-styling.d.ts.map +1 -0
  47. package/dist/dna/gene-extractors/state-styling.js +29 -0
  48. package/dist/dna/gene-extractors/state-styling.js.map +1 -0
  49. package/dist/dna/gene-extractors/theming.d.ts +10 -0
  50. package/dist/dna/gene-extractors/theming.d.ts.map +1 -0
  51. package/dist/dna/gene-extractors/theming.js +30 -0
  52. package/dist/dna/gene-extractors/theming.js.map +1 -0
  53. package/dist/dna/gene-extractors/variant-handling.d.ts +13 -0
  54. package/dist/dna/gene-extractors/variant-handling.d.ts.map +1 -0
  55. package/dist/dna/gene-extractors/variant-handling.js +38 -0
  56. package/dist/dna/gene-extractors/variant-handling.js.map +1 -0
  57. package/dist/dna/health-calculator.d.ts +21 -0
  58. package/dist/dna/health-calculator.d.ts.map +1 -0
  59. package/dist/dna/health-calculator.js +113 -0
  60. package/dist/dna/health-calculator.js.map +1 -0
  61. package/dist/dna/index.d.ts +21 -0
  62. package/dist/dna/index.d.ts.map +1 -0
  63. package/dist/dna/index.js +19 -0
  64. package/dist/dna/index.js.map +1 -0
  65. package/dist/dna/mutation-detector.d.ts +10 -0
  66. package/dist/dna/mutation-detector.d.ts.map +1 -0
  67. package/dist/dna/mutation-detector.js +39 -0
  68. package/dist/dna/mutation-detector.js.map +1 -0
  69. package/dist/dna/playbook-generator.d.ts +6 -0
  70. package/dist/dna/playbook-generator.d.ts.map +1 -0
  71. package/dist/dna/playbook-generator.js +53 -0
  72. package/dist/dna/playbook-generator.js.map +1 -0
  73. package/dist/dna/types.d.ts +95 -0
  74. package/dist/dna/types.d.ts.map +1 -0
  75. package/dist/dna/types.js +8 -0
  76. package/dist/dna/types.js.map +1 -0
  77. package/dist/index.d.ts +7 -0
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +10 -0
  80. package/dist/index.js.map +1 -1
  81. package/dist/parsers/parser-manager.d.ts.map +1 -1
  82. package/dist/parsers/parser-manager.js +2 -0
  83. package/dist/parsers/parser-manager.js.map +1 -1
  84. package/dist/parsers/tree-sitter/config.d.ts +82 -0
  85. package/dist/parsers/tree-sitter/config.d.ts.map +1 -0
  86. package/dist/parsers/tree-sitter/config.js +200 -0
  87. package/dist/parsers/tree-sitter/config.js.map +1 -0
  88. package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts +64 -0
  89. package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts.map +1 -0
  90. package/dist/parsers/tree-sitter/csharp-ast-converter.js +271 -0
  91. package/dist/parsers/tree-sitter/csharp-ast-converter.js.map +1 -0
  92. package/dist/parsers/tree-sitter/csharp-loader.d.ts +43 -0
  93. package/dist/parsers/tree-sitter/csharp-loader.d.ts.map +1 -0
  94. package/dist/parsers/tree-sitter/csharp-loader.js +146 -0
  95. package/dist/parsers/tree-sitter/csharp-loader.js.map +1 -0
  96. package/dist/parsers/tree-sitter/index.d.ts +31 -0
  97. package/dist/parsers/tree-sitter/index.d.ts.map +1 -0
  98. package/dist/parsers/tree-sitter/index.js +63 -0
  99. package/dist/parsers/tree-sitter/index.js.map +1 -0
  100. package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts +79 -0
  101. package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts.map +1 -0
  102. package/dist/parsers/tree-sitter/java/annotation-extractor.js +540 -0
  103. package/dist/parsers/tree-sitter/java/annotation-extractor.js.map +1 -0
  104. package/dist/parsers/tree-sitter/java/class-extractor.d.ts +40 -0
  105. package/dist/parsers/tree-sitter/java/class-extractor.d.ts.map +1 -0
  106. package/dist/parsers/tree-sitter/java/class-extractor.js +770 -0
  107. package/dist/parsers/tree-sitter/java/class-extractor.js.map +1 -0
  108. package/dist/parsers/tree-sitter/java/index.d.ts +14 -0
  109. package/dist/parsers/tree-sitter/java/index.d.ts.map +1 -0
  110. package/dist/parsers/tree-sitter/java/index.js +25 -0
  111. package/dist/parsers/tree-sitter/java/index.js.map +1 -0
  112. package/dist/parsers/tree-sitter/java/method-extractor.d.ts +88 -0
  113. package/dist/parsers/tree-sitter/java/method-extractor.d.ts.map +1 -0
  114. package/dist/parsers/tree-sitter/java/method-extractor.js +551 -0
  115. package/dist/parsers/tree-sitter/java/method-extractor.js.map +1 -0
  116. package/dist/parsers/tree-sitter/java/types.d.ts +545 -0
  117. package/dist/parsers/tree-sitter/java/types.d.ts.map +1 -0
  118. package/dist/parsers/tree-sitter/java/types.js +81 -0
  119. package/dist/parsers/tree-sitter/java/types.js.map +1 -0
  120. package/dist/parsers/tree-sitter/java-loader.d.ts +50 -0
  121. package/dist/parsers/tree-sitter/java-loader.d.ts.map +1 -0
  122. package/dist/parsers/tree-sitter/java-loader.js +161 -0
  123. package/dist/parsers/tree-sitter/java-loader.js.map +1 -0
  124. package/dist/parsers/tree-sitter/loader.d.ts +50 -0
  125. package/dist/parsers/tree-sitter/loader.d.ts.map +1 -0
  126. package/dist/parsers/tree-sitter/loader.js +156 -0
  127. package/dist/parsers/tree-sitter/loader.js.map +1 -0
  128. package/dist/parsers/tree-sitter/php-loader.d.ts +50 -0
  129. package/dist/parsers/tree-sitter/php-loader.d.ts.map +1 -0
  130. package/dist/parsers/tree-sitter/php-loader.js +164 -0
  131. package/dist/parsers/tree-sitter/php-loader.js.map +1 -0
  132. package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts +78 -0
  133. package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts.map +1 -0
  134. package/dist/parsers/tree-sitter/pydantic/config-extractor.js +278 -0
  135. package/dist/parsers/tree-sitter/pydantic/config-extractor.js.map +1 -0
  136. package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts +84 -0
  137. package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts.map +1 -0
  138. package/dist/parsers/tree-sitter/pydantic/constraint-parser.js +321 -0
  139. package/dist/parsers/tree-sitter/pydantic/constraint-parser.js.map +1 -0
  140. package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts +74 -0
  141. package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts.map +1 -0
  142. package/dist/parsers/tree-sitter/pydantic/field-extractor.js +285 -0
  143. package/dist/parsers/tree-sitter/pydantic/field-extractor.js.map +1 -0
  144. package/dist/parsers/tree-sitter/pydantic/index.d.ts +18 -0
  145. package/dist/parsers/tree-sitter/pydantic/index.d.ts.map +1 -0
  146. package/dist/parsers/tree-sitter/pydantic/index.js +23 -0
  147. package/dist/parsers/tree-sitter/pydantic/index.js.map +1 -0
  148. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts +70 -0
  149. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts.map +1 -0
  150. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js +251 -0
  151. package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js.map +1 -0
  152. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts +102 -0
  153. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts.map +1 -0
  154. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js +399 -0
  155. package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js.map +1 -0
  156. package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts +89 -0
  157. package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts.map +1 -0
  158. package/dist/parsers/tree-sitter/pydantic/type-resolver.js +426 -0
  159. package/dist/parsers/tree-sitter/pydantic/type-resolver.js.map +1 -0
  160. package/dist/parsers/tree-sitter/pydantic/types.d.ts +177 -0
  161. package/dist/parsers/tree-sitter/pydantic/types.d.ts.map +1 -0
  162. package/dist/parsers/tree-sitter/pydantic/types.js +139 -0
  163. package/dist/parsers/tree-sitter/pydantic/types.js.map +1 -0
  164. package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts +88 -0
  165. package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts.map +1 -0
  166. package/dist/parsers/tree-sitter/pydantic/validator-extractor.js +315 -0
  167. package/dist/parsers/tree-sitter/pydantic/validator-extractor.js.map +1 -0
  168. package/dist/parsers/tree-sitter/python-ast-converter.d.ts +140 -0
  169. package/dist/parsers/tree-sitter/python-ast-converter.d.ts.map +1 -0
  170. package/dist/parsers/tree-sitter/python-ast-converter.js +360 -0
  171. package/dist/parsers/tree-sitter/python-ast-converter.js.map +1 -0
  172. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts +465 -0
  173. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts.map +1 -0
  174. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js +1146 -0
  175. package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js.map +1 -0
  176. package/dist/parsers/tree-sitter/tree-sitter-java-parser.d.ts +90 -0
  177. package/dist/parsers/tree-sitter/tree-sitter-java-parser.d.ts.map +1 -0
  178. package/dist/parsers/tree-sitter/tree-sitter-java-parser.js +298 -0
  179. package/dist/parsers/tree-sitter/tree-sitter-java-parser.js.map +1 -0
  180. package/dist/parsers/tree-sitter/tree-sitter-php-parser.d.ts +177 -0
  181. package/dist/parsers/tree-sitter/tree-sitter-php-parser.d.ts.map +1 -0
  182. package/dist/parsers/tree-sitter/tree-sitter-php-parser.js +585 -0
  183. package/dist/parsers/tree-sitter/tree-sitter-php-parser.js.map +1 -0
  184. package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts +86 -0
  185. package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts.map +1 -0
  186. package/dist/parsers/tree-sitter/tree-sitter-python-parser.js +177 -0
  187. package/dist/parsers/tree-sitter/tree-sitter-python-parser.js.map +1 -0
  188. package/dist/parsers/tree-sitter/types.d.ts +399 -0
  189. package/dist/parsers/tree-sitter/types.d.ts.map +1 -0
  190. package/dist/parsers/tree-sitter/types.js +20 -0
  191. package/dist/parsers/tree-sitter/types.js.map +1 -0
  192. package/dist/parsers/types.d.ts +1 -1
  193. package/dist/parsers/types.d.ts.map +1 -1
  194. package/dist/scanner/file-walker.d.ts.map +1 -1
  195. package/dist/scanner/file-walker.js +5 -0
  196. package/dist/scanner/file-walker.js.map +1 -1
  197. package/dist/store/history-store.d.ts +85 -269
  198. package/dist/store/history-store.d.ts.map +1 -1
  199. package/dist/store/history-store.js +272 -624
  200. package/dist/store/history-store.js.map +1 -1
  201. package/dist/types/index.d.ts +1 -0
  202. package/dist/types/index.d.ts.map +1 -1
  203. package/dist/types/index.js +2 -0
  204. package/dist/types/index.js.map +1 -1
  205. package/dist/types/java-type-mapping.d.ts +79 -0
  206. package/dist/types/java-type-mapping.d.ts.map +1 -0
  207. package/dist/types/java-type-mapping.js +290 -0
  208. package/dist/types/java-type-mapping.js.map +1 -0
  209. package/package.json +9 -2
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Boundary Store - Data access boundary persistence and querying
3
+ *
4
+ * Loads and saves data access maps and boundary rules to .drift/boundaries/ directory.
5
+ * Supports querying access points by table, file, and checking violations against rules.
6
+ */
7
+ import type { BoundaryStoreConfig, DataAccessMap, DataAccessPoint, TableAccessInfo, FileAccessInfo, SensitiveField, ORMModel, BoundaryRules, BoundaryViolation } from './types.js';
8
+ /**
9
+ * Boundary Store - Manages data access boundary persistence and querying
10
+ *
11
+ * Data is stored in .drift/boundaries/ directory:
12
+ * - .drift/boundaries/access-map.json - Discovered data access points
13
+ * - .drift/boundaries/rules.json - User-defined boundary rules (optional)
14
+ */
15
+ export declare class BoundaryStore {
16
+ private readonly config;
17
+ private readonly boundariesDir;
18
+ private accessMap;
19
+ private rules;
20
+ constructor(config: BoundaryStoreConfig);
21
+ /**
22
+ * Initialize the boundary store
23
+ *
24
+ * Creates necessary directories and loads existing data.
25
+ */
26
+ initialize(): Promise<void>;
27
+ /**
28
+ * Load access map from disk
29
+ */
30
+ private loadAccessMap;
31
+ /**
32
+ * Load rules from disk
33
+ */
34
+ private loadRules;
35
+ /**
36
+ * Get the full data access map
37
+ */
38
+ getAccessMap(): DataAccessMap;
39
+ /**
40
+ * Get access information for a specific table
41
+ */
42
+ getTableAccess(table: string): TableAccessInfo | null;
43
+ /**
44
+ * Get access information for files matching a glob pattern
45
+ */
46
+ getFileAccess(filePattern: string): FileAccessInfo[];
47
+ /**
48
+ * Get all sensitive field access
49
+ */
50
+ getSensitiveAccess(): SensitiveField[];
51
+ /**
52
+ * Get boundary rules (or null if not configured)
53
+ */
54
+ getRules(): BoundaryRules | null;
55
+ /**
56
+ * Check a single access point against rules
57
+ */
58
+ checkViolations(accessPoint: DataAccessPoint): BoundaryViolation[];
59
+ /**
60
+ * Check a single rule against an access point
61
+ */
62
+ private checkRuleViolation;
63
+ /**
64
+ * Check all access points against rules
65
+ */
66
+ checkAllViolations(): BoundaryViolation[];
67
+ /**
68
+ * Save access map to disk
69
+ */
70
+ saveAccessMap(map: DataAccessMap): Promise<void>;
71
+ /**
72
+ * Save rules to disk
73
+ */
74
+ saveRules(rules: BoundaryRules): Promise<void>;
75
+ /**
76
+ * Add a single access point
77
+ */
78
+ addAccessPoint(point: DataAccessPoint): void;
79
+ /**
80
+ * Add an ORM model
81
+ */
82
+ addModel(model: ORMModel): void;
83
+ /**
84
+ * Add a sensitive field
85
+ */
86
+ addSensitiveField(field: SensitiveField): void;
87
+ }
88
+ /**
89
+ * Create a new BoundaryStore instance
90
+ */
91
+ export declare function createBoundaryStore(config: BoundaryStoreConfig): BoundaryStore;
92
+ //# sourceMappingURL=boundary-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundary-store.d.ts","sourceRoot":"","sources":["../../src/boundaries/boundary-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,QAAQ,EACR,aAAa,EACb,iBAAiB,EAClB,MAAM,YAAY,CAAC;AA4EpB;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,KAAK,CAA8B;gBAE/B,MAAM,EAAE,mBAAmB;IASvC;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;YACW,aAAa;IAgB3B;;OAEG;YACW,SAAS;IAoBvB;;OAEG;IACH,YAAY,IAAI,aAAa;IAO7B;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAOrD;;OAEG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,EAAE;IA8BpD;;OAEG;IACH,kBAAkB,IAAI,cAAc,EAAE;IAOtC;;OAEG;IACH,QAAQ,IAAI,aAAa,GAAG,IAAI;IAQhC;;OAEG;IACH,eAAe,CAAC,WAAW,EAAE,eAAe,GAAG,iBAAiB,EAAE;IA+BlE;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuE1B;;OAEG;IACH,kBAAkB,IAAI,iBAAiB,EAAE;IAmBzC;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBtD;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpD;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IA2C5C;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IA2C/B;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;CAmC/C;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAE9E"}
@@ -0,0 +1,458 @@
1
+ /**
2
+ * Boundary Store - Data access boundary persistence and querying
3
+ *
4
+ * Loads and saves data access maps and boundary rules to .drift/boundaries/ directory.
5
+ * Supports querying access points by table, file, and checking violations against rules.
6
+ */
7
+ import * as fs from 'node:fs/promises';
8
+ import * as path from 'node:path';
9
+ import { minimatch } from 'minimatch';
10
+ // ============================================================================
11
+ // Constants
12
+ // ============================================================================
13
+ /** Directory name for drift configuration */
14
+ const DRIFT_DIR = '.drift';
15
+ /** Directory name for boundaries */
16
+ const BOUNDARIES_DIR = 'boundaries';
17
+ /** Access map file name */
18
+ const ACCESS_MAP_FILE = 'access-map.json';
19
+ /** Rules file name */
20
+ const RULES_FILE = 'rules.json';
21
+ /** Current schema version */
22
+ const SCHEMA_VERSION = '1.0';
23
+ // ============================================================================
24
+ // Helper Functions
25
+ // ============================================================================
26
+ /**
27
+ * Check if a file exists
28
+ */
29
+ async function fileExists(filePath) {
30
+ try {
31
+ await fs.access(filePath);
32
+ return true;
33
+ }
34
+ catch {
35
+ return false;
36
+ }
37
+ }
38
+ /**
39
+ * Ensure a directory exists
40
+ */
41
+ async function ensureDir(dirPath) {
42
+ await fs.mkdir(dirPath, { recursive: true });
43
+ }
44
+ /**
45
+ * Generate a unique ID for access points
46
+ */
47
+ function generateAccessPointId(point) {
48
+ return `${point.file}:${point.line}:${point.column}:${point.table}`;
49
+ }
50
+ /**
51
+ * Create an empty access map
52
+ */
53
+ function createEmptyAccessMap(projectRoot) {
54
+ return {
55
+ version: SCHEMA_VERSION,
56
+ generatedAt: new Date().toISOString(),
57
+ projectRoot,
58
+ models: [],
59
+ tables: {},
60
+ accessPoints: {},
61
+ sensitiveFields: [],
62
+ stats: {
63
+ totalTables: 0,
64
+ totalAccessPoints: 0,
65
+ totalSensitiveFields: 0,
66
+ totalModels: 0,
67
+ },
68
+ };
69
+ }
70
+ // ============================================================================
71
+ // BoundaryStore Class
72
+ // ============================================================================
73
+ /**
74
+ * Boundary Store - Manages data access boundary persistence and querying
75
+ *
76
+ * Data is stored in .drift/boundaries/ directory:
77
+ * - .drift/boundaries/access-map.json - Discovered data access points
78
+ * - .drift/boundaries/rules.json - User-defined boundary rules (optional)
79
+ */
80
+ export class BoundaryStore {
81
+ config;
82
+ boundariesDir;
83
+ accessMap = null;
84
+ rules = null;
85
+ constructor(config) {
86
+ this.config = config;
87
+ this.boundariesDir = path.join(this.config.rootDir, DRIFT_DIR, BOUNDARIES_DIR);
88
+ }
89
+ // ==========================================================================
90
+ // Initialization
91
+ // ==========================================================================
92
+ /**
93
+ * Initialize the boundary store
94
+ *
95
+ * Creates necessary directories and loads existing data.
96
+ */
97
+ async initialize() {
98
+ await ensureDir(this.boundariesDir);
99
+ await this.loadAccessMap();
100
+ await this.loadRules();
101
+ }
102
+ /**
103
+ * Load access map from disk
104
+ */
105
+ async loadAccessMap() {
106
+ const filePath = path.join(this.boundariesDir, ACCESS_MAP_FILE);
107
+ if (!(await fileExists(filePath))) {
108
+ this.accessMap = createEmptyAccessMap(this.config.rootDir);
109
+ return;
110
+ }
111
+ try {
112
+ const content = await fs.readFile(filePath, 'utf-8');
113
+ this.accessMap = JSON.parse(content);
114
+ }
115
+ catch {
116
+ this.accessMap = createEmptyAccessMap(this.config.rootDir);
117
+ }
118
+ }
119
+ /**
120
+ * Load rules from disk
121
+ */
122
+ async loadRules() {
123
+ const filePath = path.join(this.boundariesDir, RULES_FILE);
124
+ if (!(await fileExists(filePath))) {
125
+ this.rules = null;
126
+ return;
127
+ }
128
+ try {
129
+ const content = await fs.readFile(filePath, 'utf-8');
130
+ this.rules = JSON.parse(content);
131
+ }
132
+ catch {
133
+ this.rules = null;
134
+ }
135
+ }
136
+ // ==========================================================================
137
+ // Getters
138
+ // ==========================================================================
139
+ /**
140
+ * Get the full data access map
141
+ */
142
+ getAccessMap() {
143
+ if (!this.accessMap) {
144
+ return createEmptyAccessMap(this.config.rootDir);
145
+ }
146
+ return this.accessMap;
147
+ }
148
+ /**
149
+ * Get access information for a specific table
150
+ */
151
+ getTableAccess(table) {
152
+ if (!this.accessMap) {
153
+ return null;
154
+ }
155
+ return this.accessMap.tables[table] ?? null;
156
+ }
157
+ /**
158
+ * Get access information for files matching a glob pattern
159
+ */
160
+ getFileAccess(filePattern) {
161
+ if (!this.accessMap) {
162
+ return [];
163
+ }
164
+ // Group access points by file
165
+ const fileMap = new Map();
166
+ for (const accessPoint of Object.values(this.accessMap.accessPoints)) {
167
+ if (minimatch(accessPoint.file, filePattern)) {
168
+ if (!fileMap.has(accessPoint.file)) {
169
+ fileMap.set(accessPoint.file, {
170
+ file: accessPoint.file,
171
+ tables: [],
172
+ accessPoints: [],
173
+ });
174
+ }
175
+ const fileInfo = fileMap.get(accessPoint.file);
176
+ fileInfo.accessPoints.push(accessPoint);
177
+ if (!fileInfo.tables.includes(accessPoint.table)) {
178
+ fileInfo.tables.push(accessPoint.table);
179
+ }
180
+ }
181
+ }
182
+ return Array.from(fileMap.values());
183
+ }
184
+ /**
185
+ * Get all sensitive field access
186
+ */
187
+ getSensitiveAccess() {
188
+ if (!this.accessMap) {
189
+ return [];
190
+ }
191
+ return this.accessMap.sensitiveFields;
192
+ }
193
+ /**
194
+ * Get boundary rules (or null if not configured)
195
+ */
196
+ getRules() {
197
+ return this.rules;
198
+ }
199
+ // ==========================================================================
200
+ // Violation Checking
201
+ // ==========================================================================
202
+ /**
203
+ * Check a single access point against rules
204
+ */
205
+ checkViolations(accessPoint) {
206
+ if (!this.rules) {
207
+ return [];
208
+ }
209
+ const violations = [];
210
+ // Check against global excludes first
211
+ if (this.rules.globalExcludes) {
212
+ for (const excludePattern of this.rules.globalExcludes) {
213
+ if (minimatch(accessPoint.file, excludePattern)) {
214
+ return []; // File is globally excluded
215
+ }
216
+ }
217
+ }
218
+ // Check each enabled rule
219
+ for (const rule of this.rules.boundaries) {
220
+ if (rule.enabled === false) {
221
+ continue;
222
+ }
223
+ const violation = this.checkRuleViolation(accessPoint, rule);
224
+ if (violation) {
225
+ violations.push(violation);
226
+ }
227
+ }
228
+ return violations;
229
+ }
230
+ /**
231
+ * Check a single rule against an access point
232
+ */
233
+ checkRuleViolation(accessPoint, rule) {
234
+ // Check if rule applies to this access point
235
+ let ruleApplies = false;
236
+ // Check table restrictions
237
+ if (rule.tables && rule.tables.includes(accessPoint.table)) {
238
+ ruleApplies = true;
239
+ }
240
+ // Check field restrictions
241
+ if (rule.fields) {
242
+ for (const field of accessPoint.fields) {
243
+ const fullFieldName = `${accessPoint.table}.${field}`;
244
+ if (rule.fields.includes(fullFieldName) || rule.fields.includes(field)) {
245
+ ruleApplies = true;
246
+ break;
247
+ }
248
+ }
249
+ }
250
+ // Check operation restrictions
251
+ if (rule.operations && !rule.operations.includes(accessPoint.operation)) {
252
+ return null; // Operation not restricted by this rule
253
+ }
254
+ if (!ruleApplies) {
255
+ return null;
256
+ }
257
+ // Check if file is in excluded paths
258
+ if (rule.excludePaths) {
259
+ for (const excludePattern of rule.excludePaths) {
260
+ if (minimatch(accessPoint.file, excludePattern)) {
261
+ return null; // File is excluded from this rule
262
+ }
263
+ }
264
+ }
265
+ // Check if file is in allowed paths
266
+ let isAllowed = false;
267
+ for (const allowedPattern of rule.allowedPaths) {
268
+ if (minimatch(accessPoint.file, allowedPattern)) {
269
+ isAllowed = true;
270
+ break;
271
+ }
272
+ }
273
+ if (isAllowed) {
274
+ return null; // Access is allowed
275
+ }
276
+ // Create violation
277
+ return {
278
+ id: `${rule.id}:${accessPoint.id}`,
279
+ ruleId: rule.id,
280
+ ruleDescription: rule.description,
281
+ severity: rule.severity,
282
+ file: accessPoint.file,
283
+ line: accessPoint.line,
284
+ column: accessPoint.column,
285
+ message: `Access to ${accessPoint.table} violates boundary rule: ${rule.description}`,
286
+ table: accessPoint.table,
287
+ fields: accessPoint.fields,
288
+ operation: accessPoint.operation,
289
+ suggestion: `Move this access to an allowed path: ${rule.allowedPaths.join(', ')}`,
290
+ };
291
+ }
292
+ /**
293
+ * Check all access points against rules
294
+ */
295
+ checkAllViolations() {
296
+ if (!this.accessMap || !this.rules) {
297
+ return [];
298
+ }
299
+ const violations = [];
300
+ for (const accessPoint of Object.values(this.accessMap.accessPoints)) {
301
+ const pointViolations = this.checkViolations(accessPoint);
302
+ violations.push(...pointViolations);
303
+ }
304
+ return violations;
305
+ }
306
+ // ==========================================================================
307
+ // Persistence
308
+ // ==========================================================================
309
+ /**
310
+ * Save access map to disk
311
+ */
312
+ async saveAccessMap(map) {
313
+ await ensureDir(this.boundariesDir);
314
+ const filePath = path.join(this.boundariesDir, ACCESS_MAP_FILE);
315
+ // Update stats
316
+ map.stats = {
317
+ totalTables: Object.keys(map.tables).length,
318
+ totalAccessPoints: Object.keys(map.accessPoints).length,
319
+ totalSensitiveFields: map.sensitiveFields.length,
320
+ totalModels: map.models.length,
321
+ };
322
+ map.generatedAt = new Date().toISOString();
323
+ this.accessMap = map;
324
+ await fs.writeFile(filePath, JSON.stringify(map, null, 2));
325
+ }
326
+ /**
327
+ * Save rules to disk
328
+ */
329
+ async saveRules(rules) {
330
+ await ensureDir(this.boundariesDir);
331
+ const filePath = path.join(this.boundariesDir, RULES_FILE);
332
+ this.rules = rules;
333
+ await fs.writeFile(filePath, JSON.stringify(rules, null, 2));
334
+ }
335
+ // ==========================================================================
336
+ // Adding Data
337
+ // ==========================================================================
338
+ /**
339
+ * Add a single access point
340
+ */
341
+ addAccessPoint(point) {
342
+ if (!this.accessMap) {
343
+ this.accessMap = createEmptyAccessMap(this.config.rootDir);
344
+ }
345
+ // Ensure ID exists
346
+ if (!point.id) {
347
+ point.id = generateAccessPointId(point);
348
+ }
349
+ // Add to access points
350
+ this.accessMap.accessPoints[point.id] = point;
351
+ // Update table info
352
+ if (!this.accessMap.tables[point.table]) {
353
+ this.accessMap.tables[point.table] = {
354
+ name: point.table,
355
+ model: null,
356
+ fields: [],
357
+ sensitiveFields: [],
358
+ accessedBy: [],
359
+ };
360
+ }
361
+ const tableInfo = this.accessMap.tables[point.table];
362
+ // Add fields
363
+ for (const field of point.fields) {
364
+ if (!tableInfo.fields.includes(field)) {
365
+ tableInfo.fields.push(field);
366
+ }
367
+ }
368
+ // Add access point reference
369
+ if (!tableInfo.accessedBy.find(ap => ap.id === point.id)) {
370
+ tableInfo.accessedBy.push(point);
371
+ }
372
+ // Update stats
373
+ this.accessMap.stats.totalTables = Object.keys(this.accessMap.tables).length;
374
+ this.accessMap.stats.totalAccessPoints = Object.keys(this.accessMap.accessPoints).length;
375
+ }
376
+ /**
377
+ * Add an ORM model
378
+ */
379
+ addModel(model) {
380
+ if (!this.accessMap) {
381
+ this.accessMap = createEmptyAccessMap(this.config.rootDir);
382
+ }
383
+ // Check if model already exists
384
+ const existingIndex = this.accessMap.models.findIndex(m => m.name === model.name && m.file === model.file);
385
+ if (existingIndex >= 0) {
386
+ this.accessMap.models[existingIndex] = model;
387
+ }
388
+ else {
389
+ this.accessMap.models.push(model);
390
+ }
391
+ // Update table info if table name is known
392
+ if (model.tableName) {
393
+ if (!this.accessMap.tables[model.tableName]) {
394
+ this.accessMap.tables[model.tableName] = {
395
+ name: model.tableName,
396
+ model: model.name,
397
+ fields: model.fields,
398
+ sensitiveFields: [],
399
+ accessedBy: [],
400
+ };
401
+ }
402
+ else {
403
+ const existingTable = this.accessMap.tables[model.tableName];
404
+ existingTable.model = model.name;
405
+ // Merge fields
406
+ for (const field of model.fields) {
407
+ if (!existingTable.fields.includes(field)) {
408
+ existingTable.fields.push(field);
409
+ }
410
+ }
411
+ }
412
+ }
413
+ // Update stats
414
+ this.accessMap.stats.totalModels = this.accessMap.models.length;
415
+ this.accessMap.stats.totalTables = Object.keys(this.accessMap.tables).length;
416
+ }
417
+ /**
418
+ * Add a sensitive field
419
+ */
420
+ addSensitiveField(field) {
421
+ if (!this.accessMap) {
422
+ this.accessMap = createEmptyAccessMap(this.config.rootDir);
423
+ }
424
+ // Check if field already exists
425
+ const existingIndex = this.accessMap.sensitiveFields.findIndex(f => f.field === field.field && f.table === field.table);
426
+ if (existingIndex >= 0) {
427
+ this.accessMap.sensitiveFields[existingIndex] = field;
428
+ }
429
+ else {
430
+ this.accessMap.sensitiveFields.push(field);
431
+ }
432
+ // Update table info if table is known
433
+ if (field.table) {
434
+ const tableInfo = this.accessMap.tables[field.table];
435
+ if (tableInfo) {
436
+ const existingSensitive = tableInfo.sensitiveFields.findIndex(f => f.field === field.field);
437
+ if (existingSensitive >= 0) {
438
+ tableInfo.sensitiveFields[existingSensitive] = field;
439
+ }
440
+ else {
441
+ tableInfo.sensitiveFields.push(field);
442
+ }
443
+ }
444
+ }
445
+ // Update stats
446
+ this.accessMap.stats.totalSensitiveFields = this.accessMap.sensitiveFields.length;
447
+ }
448
+ }
449
+ // ============================================================================
450
+ // Factory Function
451
+ // ============================================================================
452
+ /**
453
+ * Create a new BoundaryStore instance
454
+ */
455
+ export function createBoundaryStore(config) {
456
+ return new BoundaryStore(config);
457
+ }
458
+ //# sourceMappingURL=boundary-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundary-store.js","sourceRoot":"","sources":["../../src/boundaries/boundary-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Data Boundaries Module
3
+ *
4
+ * Exports types and store for tracking data access boundaries.
5
+ */
6
+ export type { DataOperation, SensitivityType, ORMFramework, ORMModel, SensitiveField, DataAccessPoint, TableAccessInfo, FileAccessInfo, DataAccessMap, BoundarySeverity, BoundaryRule, SensitivityTiers, BoundaryRules, BoundaryViolation, BoundaryStoreConfig, BoundaryScanResult, } from './types.js';
7
+ export { BoundaryStore, createBoundaryStore } from './boundary-store.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/boundaries/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,aAAa,EACb,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Data Boundaries Module
3
+ *
4
+ * Exports types and store for tracking data access boundaries.
5
+ */
6
+ // Store
7
+ export { BoundaryStore, createBoundaryStore } from './boundary-store.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/boundaries/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAsBH,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}