@blue-labs/language 3.10.0 → 4.0.0-rc.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 (79) hide show
  1. package/README.md +27 -6
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +8 -8
  5. package/dist/index.mjs +4736 -3268
  6. package/dist/lib/Blue.d.ts +14 -4
  7. package/dist/lib/Blue.d.ts.map +1 -1
  8. package/dist/lib/errors/BlueError.d.ts +3 -0
  9. package/dist/lib/errors/BlueError.d.ts.map +1 -1
  10. package/dist/lib/identity/BlueIdHasher.d.ts +39 -0
  11. package/dist/lib/identity/BlueIdHasher.d.ts.map +1 -0
  12. package/dist/lib/identity/CyclicSetIdentityService.d.ts +35 -0
  13. package/dist/lib/identity/CyclicSetIdentityService.d.ts.map +1 -0
  14. package/dist/lib/identity/SemanticIdentityService.d.ts +40 -0
  15. package/dist/lib/identity/SemanticIdentityService.d.ts.map +1 -0
  16. package/dist/lib/identity/SemanticStorageService.d.ts +29 -0
  17. package/dist/lib/identity/SemanticStorageService.d.ts.map +1 -0
  18. package/dist/lib/identity/index.d.ts +5 -0
  19. package/dist/lib/identity/index.d.ts.map +1 -0
  20. package/dist/lib/index.d.ts +2 -0
  21. package/dist/lib/index.d.ts.map +1 -1
  22. package/dist/lib/mapping/ComplexObjectConverter.d.ts +2 -1
  23. package/dist/lib/mapping/ComplexObjectConverter.d.ts.map +1 -1
  24. package/dist/lib/mapping/ConverterFactory.d.ts +2 -1
  25. package/dist/lib/mapping/ConverterFactory.d.ts.map +1 -1
  26. package/dist/lib/mapping/NodeToObjectConverter.d.ts +6 -2
  27. package/dist/lib/mapping/NodeToObjectConverter.d.ts.map +1 -1
  28. package/dist/lib/merge/Merger.d.ts +13 -10
  29. package/dist/lib/merge/Merger.d.ts.map +1 -1
  30. package/dist/lib/model/Node.d.ts +10 -0
  31. package/dist/lib/model/Node.d.ts.map +1 -1
  32. package/dist/lib/model/ResolvedNode.d.ts +17 -1
  33. package/dist/lib/model/ResolvedNode.d.ts.map +1 -1
  34. package/dist/lib/preprocess/Preprocessor.d.ts +7 -1
  35. package/dist/lib/preprocess/Preprocessor.d.ts.map +1 -1
  36. package/dist/lib/provider/AbstractNodeProvider.d.ts.map +1 -1
  37. package/dist/lib/provider/BasicNodeProvider.d.ts +3 -0
  38. package/dist/lib/provider/BasicNodeProvider.d.ts.map +1 -1
  39. package/dist/lib/provider/InMemoryNodeProvider.d.ts +6 -0
  40. package/dist/lib/provider/InMemoryNodeProvider.d.ts.map +1 -1
  41. package/dist/lib/provider/NodeContentHandler.d.ts +18 -4
  42. package/dist/lib/provider/NodeContentHandler.d.ts.map +1 -1
  43. package/dist/lib/provider/RepositoryBasedNodeProvider.d.ts +16 -1
  44. package/dist/lib/provider/RepositoryBasedNodeProvider.d.ts.map +1 -1
  45. package/dist/lib/repository/RepositoryRuntime.d.ts.map +1 -1
  46. package/dist/lib/repository/SemanticRepositoryReindexer.d.ts +11 -0
  47. package/dist/lib/repository/SemanticRepositoryReindexer.d.ts.map +1 -0
  48. package/dist/lib/utils/BlueIdCalculator.d.ts +4 -9
  49. package/dist/lib/utils/BlueIdCalculator.d.ts.map +1 -1
  50. package/dist/lib/utils/ListControls.d.ts +27 -0
  51. package/dist/lib/utils/ListControls.d.ts.map +1 -0
  52. package/dist/lib/utils/MergeReverser.d.ts +30 -0
  53. package/dist/lib/utils/MergeReverser.d.ts.map +1 -1
  54. package/dist/lib/utils/Minimizer.d.ts +18 -0
  55. package/dist/lib/utils/Minimizer.d.ts.map +1 -0
  56. package/dist/lib/utils/NodeExtender.d.ts +1 -1
  57. package/dist/lib/utils/NodeExtender.d.ts.map +1 -1
  58. package/dist/lib/utils/NodeProviderWrapper.d.ts +3 -5
  59. package/dist/lib/utils/NodeProviderWrapper.d.ts.map +1 -1
  60. package/dist/lib/utils/NodeToMapListOrValue.d.ts +5 -1
  61. package/dist/lib/utils/NodeToMapListOrValue.d.ts.map +1 -1
  62. package/dist/lib/utils/NodeTypeMatcher.d.ts +3 -0
  63. package/dist/lib/utils/NodeTypeMatcher.d.ts.map +1 -1
  64. package/dist/lib/utils/NodeTypes.d.ts +6 -0
  65. package/dist/lib/utils/NodeTypes.d.ts.map +1 -1
  66. package/dist/lib/utils/StorageShapeValidator.d.ts +17 -0
  67. package/dist/lib/utils/StorageShapeValidator.d.ts.map +1 -0
  68. package/dist/lib/utils/TypeSchema.d.ts +2 -0
  69. package/dist/lib/utils/TypeSchema.d.ts.map +1 -1
  70. package/dist/lib/utils/index.d.ts +2 -0
  71. package/dist/lib/utils/index.d.ts.map +1 -1
  72. package/dist/utils/blueObject/enrichWithBlueId.d.ts.map +1 -1
  73. package/dist/utils/index.d.ts +0 -1
  74. package/dist/utils/index.d.ts.map +1 -1
  75. package/package.json +3 -3
  76. package/dist/utils/blueId/calculateBlueId.d.ts +0 -15
  77. package/dist/utils/blueId/calculateBlueId.d.ts.map +0 -1
  78. package/dist/utils/blueId/index.d.ts +0 -2
  79. package/dist/utils/blueId/index.d.ts.map +0 -1
package/README.md CHANGED
@@ -7,7 +7,7 @@ Small, fast TypeScript runtime for the Blue Language: parse YAML/JSON into BlueN
7
7
  - **BlueNode graph**: single, list, map, typed values, metadata (name/description), `contracts`, and references by `blueId`.
8
8
  - **Preprocessing**: `blue:` directive (aliases, BlueId, or URL fetch with allow-list), inline-type mappings, implicit type inference for primitives.
9
9
  - **Resolution/Merge**: deterministic resolver with a pluggable MergingProcessor pipeline (value propagation, type checking, list/dict validators, metadata propagation, basic-type guard).
10
- - **BlueId**: canonical JSON SHA-256 Base58; sync/async, lists supported; CIDv1 conversion.
10
+ - **BlueId**: semantic content identity via `Blue.calculateBlueId*`; low-level Section 8 hashing via `BlueIdCalculator`; spec-native list controls (`$previous`, `$pos`, `$empty`); CIDv1 conversion.
11
11
  - **Providers**: resolve by BlueId from memory, repositories or built-in bootstrap content; sequential composition.
12
12
  - **Zod mapping**: convert nodes to typed objects with schema extensions & Blue annotations; serialize objects back to Blue-shaped JSON.
13
13
  - **Limits & paths**: restrict extension/merge by path or depth; compose limits.
@@ -43,7 +43,7 @@ const node = blue.yamlToNode(yaml);
43
43
  // 3) Resolve (merge types/references), optionally with limits
44
44
  const resolved = blue.resolve(node, PathLimits.withMaxDepth(10));
45
45
 
46
- // 4) Compute BlueId
46
+ // 4) Compute semantic BlueId
47
47
  const blueId = blue.calculateBlueIdSync(resolved);
48
48
 
49
49
  // 5) Map to a Zod schema (with annotations supported)
@@ -92,7 +92,7 @@ const json = blue.nodeToJson(node, {
92
92
 
93
93
  ### Core graph
94
94
 
95
- - `BlueNode` – node model (name, description, type, itemType, keyType, valueType, value, items, properties, blueId, blue directive).
95
+ - `BlueNode` – node model (name, description, type, itemType, keyType, valueType, value, items, properties, reference `blueId`, blue directive).
96
96
  - `ResolvedBlueNode` – wrapper for resolved nodes; includes `getMinimalNode()` and `getMinimalBlueId()`.
97
97
 
98
98
  ### Entry point
@@ -101,16 +101,17 @@ const json = blue.nodeToJson(node, {
101
101
  - Parsing: `yamlToNode(_)/jsonValueToNode(_)` (+ async variants), which preprocess and normalize.
102
102
  - Preprocess: blue directive (`BlueDirectivePreprocessor`) + default pipeline (`Preprocessor`).
103
103
  - Resolve: `resolve(node, limits)` → `ResolvedBlueNode`.
104
- - IDs: `calculateBlueId(_)/calculateBlueIdSync(_)`.
104
+ - IDs: `calculateBlueId(_)/calculateBlueIdSync(_)` for semantic BlueId.
105
105
  - Mapping: `nodeToJson(node, 'official'|'simple'|'original'|{ format, blueContext })`, `nodeToSchemaOutput(node, zod)`.
106
106
  - Type checks: `isTypeOf(node, zod)`, `isTypeOfNode(node, typeNode)`, `isTypeOfBlueId(node, blueId)`.
107
107
  - Type aliases: `getTypeAliasByBlueId(blueId)` (returns inline aliases like `Text` for core types and `Package/Type` for repository types, including historical `blueId` values resolved to current aliases; `undefined` for empty/unknown ids).
108
- - Helpers: `extend(node, limits)`, `transform(node, fn)`, `reverse(node)`, `restoreInlineTypes(node)`.
108
+ - Helpers: `extend(node, limits)`, `transform(node, fn)`, `minimize(node)`, `reverse(node)` (deprecated alias), `restoreInlineTypes(node)`.
109
109
  - Config: URL fetch allow-list (`enablePreprocessingDirectivesFetchForDomains([...])`), global limits, repositories.
110
110
 
111
111
  ### Resolution & merge
112
112
 
113
113
  - `Merger` + `MergingProcessor` pipeline: value → types → lists/dicts → metadata → basic checks.
114
+ - List overlays support `$previous` append anchors, positional `$pos` refinements, and `$empty` content elements. Legacy inherited-list marker forms are not emitted by minimization.
114
115
  - `createDefaultMergingProcessor()` exports the default pipeline.
115
116
 
116
117
  ### Providers
@@ -131,9 +132,27 @@ const json = blue.nodeToJson(node, {
131
132
 
132
133
  ### Blue IDs & CIDs
133
134
 
134
- - `BlueIdCalculator` (sync/async); `Base58Sha256Provider`.
135
+ - `Blue.calculateBlueId*` computes semantic BlueId by resolving and minimizing.
136
+ - `BlueIdCalculator` is the low-level Section 8 hasher for already prepared shapes.
135
137
  - `BlueIds` validator; `BlueIdToCid` and `CidToBlueId` converters.
136
138
 
139
+ ### Identity and storage terms
140
+
141
+ - **official / wrapped**: spec representation using `value` and `items`.
142
+ - **minimal overlay**: compact authoring/storage form that resolves back to the same semantic identity.
143
+ - **resolved tree**: mutable runtime `ResolvedBlueNode` produced by `resolve()`.
144
+ - **semantic BlueId**: public identity stable across equivalent authoring, resolved, and minimal forms.
145
+ - **reference BlueId**: the document `blueId` field, exposed as `getReferenceBlueId()` / `setReferenceBlueId()` with legacy `getBlueId()` / `setBlueId()` aliases.
146
+
147
+ Provider ingest is strict: mixed `blueId + payload` and single-document
148
+ `blueId: this` / `blueId: this#k` inputs are rejected, while top-level document
149
+ sets with indexed `this#k` references are stored under a cyclic `MASTER` BlueId
150
+ and exposed as `MASTER#i` document identities. Supplied repository IDs must
151
+ match computed IDs. `yamlToNode` and `jsonValueToNode` remain permissive parse
152
+ APIs, while `BlueNode` input to `calculateBlueId*` is assumed to be already
153
+ preprocessed/normalized. Spec-native list controls are supported in Phase 1K,
154
+ and direct cyclic document-set identities are supported in Phase 2.
155
+
137
156
  ### Limits
138
157
 
139
158
  - `PathLimits`, `CompositeLimits`, and `NO_LIMITS`. Build from node shape or explicit patterns.
@@ -148,6 +167,8 @@ const json = blue.nodeToJson(node, {
148
167
  - `docs/resolve.md` – resolver & merging pipeline.
149
168
  - `docs/preprocessor.md` – blue directive, inference & mappings.
150
169
  - `docs/blue-id.md` – BlueId algorithm and APIs.
170
+ - `docs/glossary.md` – identity, minimization, storage, and snapshot terminology.
171
+ - `docs/adr/` – architecture decisions for semantic BlueId, minimal storage, snapshots, list controls, and direct cycles.
151
172
  - `docs/mapping.md` – Zod mapping and serialization.
152
173
  - `docs/architecture.md` – end-to-end architecture.
153
174
 
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { BlueNode, type UrlFetchStrategy, BlueIdCalculator, JsonCanonicalizer, BlueIdToCid, Base58Sha256Provider, TypeSchemaResolver, Blue, applyBlueNodePatch, type BlueNodePatch, BlueNodeTypeSchema, type BlueRepository, Limits, Nodes, BasicNodeProvider, NodeResolver, type MergingProcessor, Merger, MergingProcessors, } from './lib';
1
+ export { BlueNode, type UrlFetchStrategy, BlueIdCalculator, JsonCanonicalizer, BlueIdToCid, Base58Sha256Provider, TypeSchemaResolver, Blue, applyBlueNodePatch, type BlueNodePatch, BlueNodeTypeSchema, type BlueRepository, Limits, Nodes, BasicNodeProvider, createNodeProvider, reindexRepositoryForSemanticStorage, SemanticIdentityService, NodeResolver, type MergingProcessor, Merger, MergingProcessors, } from './lib';
2
2
  export * as Properties from './lib/utils/Properties';
3
3
  export * from './schema';
4
4
  export * from './schema/annotations';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,KAAK,gBAAgB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,IAAI,EACJ,kBAAkB,EAClB,KAAK,aAAa,EAClB,kBAAkB,EAClB,KAAK,cAAc,EACnB,MAAM,EACN,KAAK,EACL,iBAAiB,EAGjB,YAAY,EACZ,KAAK,gBAAgB,EACrB,MAAM,EACN,iBAAiB,GAClB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,SAAS,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,KAAK,gBAAgB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,IAAI,EACJ,kBAAkB,EAClB,KAAK,aAAa,EAClB,kBAAkB,EAClB,KAAK,cAAc,EACnB,MAAM,EACN,KAAK,EACL,iBAAiB,EACjB,kBAAkB,EAClB,mCAAmC,EACnC,uBAAuB,EAGvB,YAAY,EACZ,KAAK,gBAAgB,EACrB,MAAM,EACN,iBAAiB,GAClB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,SAAS,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC"}