@unrdf/project-engine 5.0.1

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 (40) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +53 -0
  3. package/package.json +58 -0
  4. package/src/api-contract-validator.mjs +711 -0
  5. package/src/auto-test-generator.mjs +444 -0
  6. package/src/autonomic-mapek.mjs +511 -0
  7. package/src/capabilities-manifest.mjs +125 -0
  8. package/src/code-complexity-js.mjs +368 -0
  9. package/src/dependency-graph.mjs +276 -0
  10. package/src/doc-drift-checker.mjs +172 -0
  11. package/src/doc-generator.mjs +229 -0
  12. package/src/domain-infer.mjs +966 -0
  13. package/src/drift-snapshot.mjs +775 -0
  14. package/src/file-roles.mjs +94 -0
  15. package/src/fs-scan.mjs +305 -0
  16. package/src/gap-finder.mjs +376 -0
  17. package/src/golden-structure.mjs +149 -0
  18. package/src/hotspot-analyzer.mjs +412 -0
  19. package/src/index.mjs +151 -0
  20. package/src/initialize.mjs +957 -0
  21. package/src/lens/project-structure.mjs +74 -0
  22. package/src/mapek-orchestration.mjs +665 -0
  23. package/src/materialize-apply.mjs +505 -0
  24. package/src/materialize-plan.mjs +422 -0
  25. package/src/materialize.mjs +137 -0
  26. package/src/policy-derivation.mjs +869 -0
  27. package/src/project-config.mjs +142 -0
  28. package/src/project-diff.mjs +28 -0
  29. package/src/project-engine/build-utils.mjs +237 -0
  30. package/src/project-engine/code-analyzer.mjs +248 -0
  31. package/src/project-engine/doc-generator.mjs +407 -0
  32. package/src/project-engine/infrastructure.mjs +213 -0
  33. package/src/project-engine/metrics.mjs +146 -0
  34. package/src/project-model.mjs +111 -0
  35. package/src/project-report.mjs +348 -0
  36. package/src/refactoring-guide.mjs +242 -0
  37. package/src/stack-detect.mjs +102 -0
  38. package/src/stack-linter.mjs +213 -0
  39. package/src/template-infer.mjs +674 -0
  40. package/src/type-auditor.mjs +609 -0
@@ -0,0 +1,74 @@
1
+ /**
2
+ * @file Project structure lens - map low-level triple changes to semantic changes
3
+ * @module project-engine/lens/project-structure
4
+ */
5
+
6
+ /**
7
+ * Ontology lens for project structure diff
8
+ * Maps triple changes to project-level semantic changes
9
+ *
10
+ * Used with diffOntologyFromDelta to convert:
11
+ * - Triple additions/removals → FeatureAdded/FeatureRemoved, RoleAdded/RoleRemoved
12
+ *
13
+ * @type {OntologyLensFn}
14
+ */
15
+ export function ProjectStructureLens(triple, direction) {
16
+ const { subject, predicate, object } = triple;
17
+
18
+ // Rule 1: Feature type assertions
19
+ if (
20
+ predicate === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' &&
21
+ object === 'http://example.org/unrdf/project#Feature'
22
+ ) {
23
+ return {
24
+ kind: direction === 'added' ? 'FeatureAdded' : 'FeatureRemoved',
25
+ entity: subject,
26
+ details: { resourceType: 'Feature' },
27
+ };
28
+ }
29
+
30
+ // Rule 2: File role assignments
31
+ if (predicate === 'http://example.org/unrdf/project#hasRole') {
32
+ return {
33
+ kind: direction === 'added' ? 'RoleAdded' : 'RoleRemoved',
34
+ entity: subject,
35
+ role: object,
36
+ details: { roleType: extractRoleName(object) },
37
+ };
38
+ }
39
+
40
+ // Rule 3: File feature membership
41
+ if (predicate === 'http://example.org/unrdf/project#belongsToFeature') {
42
+ return {
43
+ kind: direction === 'added' ? 'FeatureMemberAdded' : 'FeatureMemberRemoved',
44
+ entity: subject,
45
+ role: 'belongsToFeature',
46
+ details: { feature: object },
47
+ };
48
+ }
49
+
50
+ // Rule 4: Module changes
51
+ if (
52
+ predicate === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' &&
53
+ object === 'http://example.org/unrdf/project#Module'
54
+ ) {
55
+ return {
56
+ kind: direction === 'added' ? 'ModuleAdded' : 'ModuleRemoved',
57
+ entity: subject,
58
+ details: { resourceType: 'Module' },
59
+ };
60
+ }
61
+
62
+ // Ignore other triples
63
+ return null;
64
+ }
65
+
66
+ /**
67
+ * Extract role name from IRI
68
+ *
69
+ * @private
70
+ */
71
+ function extractRoleName(iri) {
72
+ const match = iri.match(/#([A-Za-z]+)$/);
73
+ return match ? match[1] : iri;
74
+ }