@manya-os/contracts 1.0.0 → 1.1.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.
- package/CHANGELOG.md +19 -19
- package/LICENSE +20 -20
- package/README.md +223 -223
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +47 -47
package/CHANGELOG.md
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to `@manya/contracts` are documented here.
|
|
4
|
-
Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Adheres to [SemVer](https://semver.org/).
|
|
5
|
-
|
|
6
|
-
## [1.0.0] — 2024-01-15
|
|
7
|
-
### Added
|
|
8
|
-
- Initial release.
|
|
9
|
-
- Schema definition language: `compileSchema` (record or array field syntax) and `validateValue` for all 10 type kinds (string, number, boolean, null, object, array, enum, ref, union, intersection).
|
|
10
|
-
- Manifest validation (`validateManifest`, `assertManifest`, `isValidManifest`) with one stable code per failure mode.
|
|
11
|
-
- Semver parsing (`parseSemver`, `isSemver`), comparison (`compareSemver`, `compareParsedSemver`) with full prerelease handling per semver.org §11, range satisfaction (`satisfies`) supporting `*`, `^`, `~`, exact, and comparison operators.
|
|
12
|
-
- Backward-compatibility analysis (`checkBackwardCompat`) detecting field removal, type change, required addition, and enum value removal.
|
|
13
|
-
- API contract validation: `findEndpoint`, `validateRequest`, `validateResponse`, `assertValidContract`.
|
|
14
|
-
- Schema synchronization: `diffSchemas` (added/removed/changed), `mergeSchemas` with conflict detection and `fieldsEqual` deep equality.
|
|
15
|
-
- Boundary enforcement: `enforceBoundary` (with `*` wildcards), `detectViolations` over a call graph, `matchRule`, `isPolicySatisfied`.
|
|
16
|
-
- Validation reports: `buildReport`, `aggregateReports`, `serializeReport` (JSON), `summarizeReport` (one-line).
|
|
17
|
-
- Typed error hierarchy: `ContractsError`, `SchemaError`, `ManifestError` (with `MANIFEST_ERROR_CODES`), `CompatibilityError`, `ApiValidationError`, `SyncError`, `BoundaryError`, `ReportingError`.
|
|
18
|
-
- Structured logging: `Logger`, `ConsoleLogger` with secret scrubbing, `SilentLogger`, `scrubMetadata`, `shouldScrubField`, `SCRUBBED_FIELD_NAMES`.
|
|
19
|
-
- Comprehensive unit test suite (99 tests).
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `@manya-os/contracts` are documented here.
|
|
4
|
+
Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Adheres to [SemVer](https://semver.org/).
|
|
5
|
+
|
|
6
|
+
## [1.0.0] — 2024-01-15
|
|
7
|
+
### Added
|
|
8
|
+
- Initial release.
|
|
9
|
+
- Schema definition language: `compileSchema` (record or array field syntax) and `validateValue` for all 10 type kinds (string, number, boolean, null, object, array, enum, ref, union, intersection).
|
|
10
|
+
- Manifest validation (`validateManifest`, `assertManifest`, `isValidManifest`) with one stable code per failure mode.
|
|
11
|
+
- Semver parsing (`parseSemver`, `isSemver`), comparison (`compareSemver`, `compareParsedSemver`) with full prerelease handling per semver.org §11, range satisfaction (`satisfies`) supporting `*`, `^`, `~`, exact, and comparison operators.
|
|
12
|
+
- Backward-compatibility analysis (`checkBackwardCompat`) detecting field removal, type change, required addition, and enum value removal.
|
|
13
|
+
- API contract validation: `findEndpoint`, `validateRequest`, `validateResponse`, `assertValidContract`.
|
|
14
|
+
- Schema synchronization: `diffSchemas` (added/removed/changed), `mergeSchemas` with conflict detection and `fieldsEqual` deep equality.
|
|
15
|
+
- Boundary enforcement: `enforceBoundary` (with `*` wildcards), `detectViolations` over a call graph, `matchRule`, `isPolicySatisfied`.
|
|
16
|
+
- Validation reports: `buildReport`, `aggregateReports`, `serializeReport` (JSON), `summarizeReport` (one-line).
|
|
17
|
+
- Typed error hierarchy: `ContractsError`, `SchemaError`, `ManifestError` (with `MANIFEST_ERROR_CODES`), `CompatibilityError`, `ApiValidationError`, `SyncError`, `BoundaryError`, `ReportingError`.
|
|
18
|
+
- Structured logging: `Logger`, `ConsoleLogger` with secret scrubbing, `SilentLogger`, `scrubMetadata`, `shouldScrubField`, `SCRUBBED_FIELD_NAMES`.
|
|
19
|
+
- Comprehensive unit test suite (99 tests).
|
package/LICENSE
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
Apache License
|
|
2
|
-
Version 2.0, January 2004
|
|
3
|
-
http://www.apache.org/licenses/
|
|
4
|
-
|
|
5
|
-
Copyright 2024 Manya Hael Foundation. All rights reserved.
|
|
6
|
-
|
|
7
|
-
Conceived, directed, and owned by Uviwe Menyiwe (Azura Daemon),
|
|
8
|
-
founder of the Manya Hael Foundation.
|
|
9
|
-
|
|
10
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
11
|
-
you may not use this file except in compliance with the License.
|
|
12
|
-
You may obtain a copy of the License at
|
|
13
|
-
|
|
14
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
15
|
-
|
|
16
|
-
Unless required by applicable law or agreed to in writing, software
|
|
17
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
18
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
19
|
-
See the License for the specific language governing permissions and
|
|
20
|
-
limitations under the License.
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
Copyright 2024 Manya Hael Foundation. All rights reserved.
|
|
6
|
+
|
|
7
|
+
Conceived, directed, and owned by Uviwe Menyiwe (Azura Daemon),
|
|
8
|
+
founder of the Manya Hael Foundation.
|
|
9
|
+
|
|
10
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
11
|
+
you may not use this file except in compliance with the License.
|
|
12
|
+
You may obtain a copy of the License at
|
|
13
|
+
|
|
14
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
15
|
+
|
|
16
|
+
Unless required by applicable law or agreed to in writing, software
|
|
17
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
18
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
19
|
+
See the License for the specific language governing permissions and
|
|
20
|
+
limitations under the License.
|
package/README.md
CHANGED
|
@@ -1,223 +1,223 @@
|
|
|
1
|
-
# @manya/contracts
|
|
2
|
-
|
|
3
|
-
> Universal contract and schema validation for the MANYA Intelligence OS — interface schemas, manifests, semver compatibility, API contracts, schema sync, boundary enforcement, and validation reports.
|
|
4
|
-
|
|
5
|
-
`@manya/contracts` is the contract substrate of the **MANYA Intelligence OS** — a sovereign, modular, local-first intelligence operating system conceived, directed, and owned by **Uviwe Menyiwe (Azura Daemon)**, founder of the **Manya Hael Foundation**.
|
|
6
|
-
|
|
7
|
-
The package provides a JSON-ish schema definition language with a typed compiler, manifest validation, full semver parsing and range satisfaction, backward-compatibility analysis between two schema versions, HTTP API contract validation, schema diffing and merging with conflict detection, module boundary enforcement via policies, and aggregated validation reports.
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Vision
|
|
12
|
-
|
|
13
|
-
The Manya Hael Foundation stewards the MANYA Intelligence OS as a long-horizon, mission-driven project. `@manya/contracts` extends that sovereignty into the contract domain: **your interfaces, your versioning rules, your boundary policy — yours alone.**
|
|
14
|
-
|
|
15
|
-
- **Sovereign.** No network calls. Every schema, manifest, and policy is local.
|
|
16
|
-
- **Typed.** Every public symbol is typed; every error carries a stable `code` string.
|
|
17
|
-
- **Composable.** Validation results are first-class values that aggregate into reports.
|
|
18
|
-
- **Reproducible.** Identical inputs produce identical validation results and reports.
|
|
19
|
-
- **Honest.** Breaking changes are listed explicitly; conflicts surface a `resolution` hint.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Features
|
|
24
|
-
|
|
25
|
-
| Area | What you get |
|
|
26
|
-
| --- | --- |
|
|
27
|
-
| **Schema** | `compileSchema` (record or array field syntax, defaults `required: true`), `validateValue` against 10 type kinds (string/number/boolean/null/object/array/enum/ref/union/intersection). |
|
|
28
|
-
| **Manifest** | `validateManifest` for name, version (semver), dependencies, exports, imports, capabilities — with one stable code per failure mode. |
|
|
29
|
-
| **Compatibility** | `parseSemver`, `compareSemver` (with prerelease per semver.org §11), `satisfies` (`*`, `^`, `~`, exact, `>`, `>=`, `<`, `<=`), `checkBackwardCompat` detecting field removal, type change, required addition, enum value removal. |
|
|
30
|
-
| **API** | `ApiContract` + `ApiEndpoint`, `findEndpoint`, `validateRequest`, `validateResponse`, `assertValidContract`. |
|
|
31
|
-
| **Sync** | `diffSchemas` (added/removed/changed), `mergeSchemas` with conflict detection, `fieldsEqual` deep equality. |
|
|
32
|
-
| **Boundaries** | `BoundaryPolicy` + `BoundaryRule`, `enforceBoundary` (with `*` wildcards), `detectViolations` over a call graph, `isPolicySatisfied`. |
|
|
33
|
-
| **Reporting** | `buildReport`, `aggregateReports`, `serializeReport` (JSON), `summarizeReport` (one-line). |
|
|
34
|
-
| **Logging** | `Logger` interface, `ConsoleLogger` with secret-scrubbing, `SilentLogger`. |
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## Install
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
npm install @manya/contracts
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
Requires Node.js 18+.
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
## Quick start
|
|
49
|
-
|
|
50
|
-
### 1. Define a schema and validate a value
|
|
51
|
-
|
|
52
|
-
```ts
|
|
53
|
-
import { compileSchema, validateValue } from '@manya/contracts';
|
|
54
|
-
|
|
55
|
-
const User = compileSchema({
|
|
56
|
-
name: 'User', version: '1.0.0',
|
|
57
|
-
fields: {
|
|
58
|
-
id: { type: 'string', description: 'User id.' },
|
|
59
|
-
age: { type: 'number', required: false },
|
|
60
|
-
active: { type: 'boolean' },
|
|
61
|
-
role: { type: 'enum', enum: ['admin', 'user'] },
|
|
62
|
-
tags: { type: 'array', of: { type: 'string' }, required: false },
|
|
63
|
-
profile: {
|
|
64
|
-
type: 'object', required: false,
|
|
65
|
-
fields: { bio: { type: 'string', required: false } },
|
|
66
|
-
},
|
|
67
|
-
},
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
const result = validateValue(User, {
|
|
71
|
-
id: 'u1', age: 30, active: true, role: 'admin', tags: ['x'],
|
|
72
|
-
});
|
|
73
|
-
console.log(result.valid); // true
|
|
74
|
-
console.log(result.errors); // []
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### 2. Validate a manifest and check version compatibility
|
|
78
|
-
|
|
79
|
-
```ts
|
|
80
|
-
import { validateManifest, satisfies, checkBackwardCompat } from '@manya/contracts';
|
|
81
|
-
|
|
82
|
-
const m = validateManifest({
|
|
83
|
-
name: '@manya/example', version: '1.2.3',
|
|
84
|
-
dependencies: { '@manya/contracts': '^1.0.0' },
|
|
85
|
-
exports: ['./src/index.js'],
|
|
86
|
-
capabilities: ['crypto'],
|
|
87
|
-
});
|
|
88
|
-
console.log(m.valid, m.errors);
|
|
89
|
-
|
|
90
|
-
console.log(satisfies('1.4.0', '^1.2.3')); // true
|
|
91
|
-
console.log(satisfies('2.0.0', '^1.2.3')); // false
|
|
92
|
-
|
|
93
|
-
const compat = checkBackwardCompat(v1, v2);
|
|
94
|
-
console.log(compat.compatible, compat.breakingChanges);
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### 3. Validate an HTTP request/response against an API contract
|
|
98
|
-
|
|
99
|
-
```ts
|
|
100
|
-
import { compileSchema, validateRequest, validateResponse } from '@manya/contracts';
|
|
101
|
-
|
|
102
|
-
const contract = {
|
|
103
|
-
name: 'users-api', version: '1.0.0',
|
|
104
|
-
endpoints: [
|
|
105
|
-
{
|
|
106
|
-
method: 'POST', path: '/users',
|
|
107
|
-
requestSchema: compileSchema({
|
|
108
|
-
name: 'CreateUserReq', version: '1.0.0',
|
|
109
|
-
fields: { name: { type: 'string' }, email: { type: 'string' } },
|
|
110
|
-
}),
|
|
111
|
-
responseSchema: compileSchema({
|
|
112
|
-
name: 'CreateUserRes', version: '1.0.0',
|
|
113
|
-
fields: { id: { type: 'string' } },
|
|
114
|
-
}),
|
|
115
|
-
},
|
|
116
|
-
],
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
const req = validateRequest(contract, 'POST', '/users', { name: 'A', email: 'a@b.c' });
|
|
120
|
-
const res = validateResponse(contract, 'POST', '/users', { id: 'u1' });
|
|
121
|
-
console.log(req.valid, res.valid);
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
### 4. Enforce module boundaries and aggregate a report
|
|
125
|
-
|
|
126
|
-
```ts
|
|
127
|
-
import {
|
|
128
|
-
enforceBoundary, detectViolations, buildReport, aggregateReports, summarizeReport,
|
|
129
|
-
} from '@manya/contracts';
|
|
130
|
-
|
|
131
|
-
const policy = {
|
|
132
|
-
name: 'p', defaultAllow: false,
|
|
133
|
-
rules: [
|
|
134
|
-
{ from: 'api', to: 'db', allowed: true, reason: 'api owns db access' },
|
|
135
|
-
{ from: 'ui', to: 'db', allowed: false, reason: 'ui must not bypass api' },
|
|
136
|
-
],
|
|
137
|
-
};
|
|
138
|
-
console.log(enforceBoundary(policy, 'ui', 'db'));
|
|
139
|
-
console.log(detectViolations(policy, [
|
|
140
|
-
{ from: 'api', to: 'db' },
|
|
141
|
-
{ from: 'ui', to: 'db' }, // violation
|
|
142
|
-
]));
|
|
143
|
-
|
|
144
|
-
const report = buildReport('deploy-gate', [
|
|
145
|
-
{ name: 'manifest', passed: true, errors: [] },
|
|
146
|
-
{ name: 'compat', passed: false, errors: [{ path: 'id', message: 'type_changed', code: 'type_changed' }] },
|
|
147
|
-
]);
|
|
148
|
-
console.log(summarizeReport(aggregateReports([report])));
|
|
149
|
-
// → aggregate: FAIL (1/2 sections, 1 error) at 2024-...
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
## Configuration
|
|
155
|
-
|
|
156
|
-
`@manya/contracts` has no runtime configuration object — every function is pure and explicit. The only configurable surface is the optional `Logger` you can pass to higher-level orchestration code; the package ships `ConsoleLogger` (with secret scrubbing) and `SilentLogger`.
|
|
157
|
-
|
|
158
|
-
### Supported schema type kinds
|
|
159
|
-
|
|
160
|
-
| `type` | Required extra fields | Description |
|
|
161
|
-
| --- | --- | --- |
|
|
162
|
-
| `string` / `number` / `boolean` / `null` | none | JSON primitives. |
|
|
163
|
-
| `object` | `fields?` | Nested record; if `fields` is given, each is validated. |
|
|
164
|
-
| `array` | `of` | Homogeneous list; `of` is the element field definition. |
|
|
165
|
-
| `enum` | `enum` | One of the literal values in `enum`. |
|
|
166
|
-
| `ref` | `ref` | Reference to another `InterfaceSchema` by name (passed via `refs`). |
|
|
167
|
-
| `union` | `oneOf` | One of several member field definitions. |
|
|
168
|
-
| `intersection` | `allOf` | All of several member field definitions. |
|
|
169
|
-
|
|
170
|
-
### Semver range forms supported by `satisfies`
|
|
171
|
-
|
|
172
|
-
| Form | Meaning |
|
|
173
|
-
| --- | --- |
|
|
174
|
-
| `*` | Any version. |
|
|
175
|
-
| `1.2.3` | Exact match. |
|
|
176
|
-
| `^1.2.3` | Compatible-with (same major; for `0.x` and `0.0.x` tighter). |
|
|
177
|
-
| `~1.2.3` | Patch-level (same major and minor). |
|
|
178
|
-
| `>=1.2.3`, `>1.2.3`, `<=1.2.3`, `<1.2.3` | Comparison. |
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
## Extending
|
|
183
|
-
|
|
184
|
-
### Add a custom schema type
|
|
185
|
-
|
|
186
|
-
1. Add the type name to the `SchemaType` union in `src/types.ts`.
|
|
187
|
-
2. Extend `SCHEMA_TYPES` and the `compileField` validation in `src/schema/schema.ts`.
|
|
188
|
-
3. Add a `case` to the `validateField` switch.
|
|
189
|
-
4. Add unit tests covering at least one positive and one negative case.
|
|
190
|
-
5. Update `docs/API.md` and `README.md`.
|
|
191
|
-
|
|
192
|
-
### Add a new compatibility rule
|
|
193
|
-
|
|
194
|
-
`checkBackwardCompat` already detects field removal, type change, required addition, and enum value removal. To add a new rule (e.g. "field became required"), push a new `BreakingChange` to the `breakingChanges` array in `src/compatibility/compatibility.ts`, document the new `type` literal in `src/types.ts`, and add a test.
|
|
195
|
-
|
|
196
|
-
---
|
|
197
|
-
|
|
198
|
-
## Security notes
|
|
199
|
-
|
|
200
|
-
- **Local-only.** No schema, manifest, or policy data leaves the host process.
|
|
201
|
-
- **No PII in logs.** `secret`, `token`, `apiKey`, `password`, `authorization`, `privateKey`, `accessToken`, `refreshToken` are scrubbed.
|
|
202
|
-
- **Defense in depth.** Validation never throws on a bad value — it returns `{ valid, errors }`; structural problems (e.g. unparseable schema) raise typed errors.
|
|
203
|
-
- **Reproducibility.** Identical inputs → identical validation results and reports.
|
|
204
|
-
|
|
205
|
-
For threat models, see [SECURITY.md](./SECURITY.md) and the root [SECURITY.md](../../SECURITY.md).
|
|
206
|
-
|
|
207
|
-
---
|
|
208
|
-
|
|
209
|
-
## Documentation
|
|
210
|
-
|
|
211
|
-
- [docs/API.md](./docs/API.md) — full TypeScript API reference.
|
|
212
|
-
- [CHANGELOG.md](./CHANGELOG.md) — release history.
|
|
213
|
-
- [CONTRIBUTING.md](./CONTRIBUTING.md) — package-specific contributor notes.
|
|
214
|
-
- [SECURITY.md](./SECURITY.md) — package-specific security surface.
|
|
215
|
-
- [LICENSE](./LICENSE) — Apache-2.0.
|
|
216
|
-
|
|
217
|
-
---
|
|
218
|
-
|
|
219
|
-
## License
|
|
220
|
-
|
|
221
|
-
Apache-2.0. Copyright 2024 Manya Hael Foundation. All rights reserved.
|
|
222
|
-
|
|
223
|
-
Conceived, directed, and owned by **Uviwe Menyiwe (Azura Daemon)**, founder of the Manya Hael Foundation.
|
|
1
|
+
# @manya-os/contracts
|
|
2
|
+
|
|
3
|
+
> Universal contract and schema validation for the MANYA Intelligence OS — interface schemas, manifests, semver compatibility, API contracts, schema sync, boundary enforcement, and validation reports.
|
|
4
|
+
|
|
5
|
+
`@manya-os/contracts` is the contract substrate of the **MANYA Intelligence OS** — a sovereign, modular, local-first intelligence operating system conceived, directed, and owned by **Uviwe Menyiwe (Azura Daemon)**, founder of the **Manya Hael Foundation**.
|
|
6
|
+
|
|
7
|
+
The package provides a JSON-ish schema definition language with a typed compiler, manifest validation, full semver parsing and range satisfaction, backward-compatibility analysis between two schema versions, HTTP API contract validation, schema diffing and merging with conflict detection, module boundary enforcement via policies, and aggregated validation reports.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Vision
|
|
12
|
+
|
|
13
|
+
The Manya Hael Foundation stewards the MANYA Intelligence OS as a long-horizon, mission-driven project. `@manya-os/contracts` extends that sovereignty into the contract domain: **your interfaces, your versioning rules, your boundary policy — yours alone.**
|
|
14
|
+
|
|
15
|
+
- **Sovereign.** No network calls. Every schema, manifest, and policy is local.
|
|
16
|
+
- **Typed.** Every public symbol is typed; every error carries a stable `code` string.
|
|
17
|
+
- **Composable.** Validation results are first-class values that aggregate into reports.
|
|
18
|
+
- **Reproducible.** Identical inputs produce identical validation results and reports.
|
|
19
|
+
- **Honest.** Breaking changes are listed explicitly; conflicts surface a `resolution` hint.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Features
|
|
24
|
+
|
|
25
|
+
| Area | What you get |
|
|
26
|
+
| --- | --- |
|
|
27
|
+
| **Schema** | `compileSchema` (record or array field syntax, defaults `required: true`), `validateValue` against 10 type kinds (string/number/boolean/null/object/array/enum/ref/union/intersection). |
|
|
28
|
+
| **Manifest** | `validateManifest` for name, version (semver), dependencies, exports, imports, capabilities — with one stable code per failure mode. |
|
|
29
|
+
| **Compatibility** | `parseSemver`, `compareSemver` (with prerelease per semver.org §11), `satisfies` (`*`, `^`, `~`, exact, `>`, `>=`, `<`, `<=`), `checkBackwardCompat` detecting field removal, type change, required addition, enum value removal. |
|
|
30
|
+
| **API** | `ApiContract` + `ApiEndpoint`, `findEndpoint`, `validateRequest`, `validateResponse`, `assertValidContract`. |
|
|
31
|
+
| **Sync** | `diffSchemas` (added/removed/changed), `mergeSchemas` with conflict detection, `fieldsEqual` deep equality. |
|
|
32
|
+
| **Boundaries** | `BoundaryPolicy` + `BoundaryRule`, `enforceBoundary` (with `*` wildcards), `detectViolations` over a call graph, `isPolicySatisfied`. |
|
|
33
|
+
| **Reporting** | `buildReport`, `aggregateReports`, `serializeReport` (JSON), `summarizeReport` (one-line). |
|
|
34
|
+
| **Logging** | `Logger` interface, `ConsoleLogger` with secret-scrubbing, `SilentLogger`. |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Install
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm install @manya-os/contracts
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Requires Node.js 18+.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Quick start
|
|
49
|
+
|
|
50
|
+
### 1. Define a schema and validate a value
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
import { compileSchema, validateValue } from '@manya-os/contracts';
|
|
54
|
+
|
|
55
|
+
const User = compileSchema({
|
|
56
|
+
name: 'User', version: '1.0.0',
|
|
57
|
+
fields: {
|
|
58
|
+
id: { type: 'string', description: 'User id.' },
|
|
59
|
+
age: { type: 'number', required: false },
|
|
60
|
+
active: { type: 'boolean' },
|
|
61
|
+
role: { type: 'enum', enum: ['admin', 'user'] },
|
|
62
|
+
tags: { type: 'array', of: { type: 'string' }, required: false },
|
|
63
|
+
profile: {
|
|
64
|
+
type: 'object', required: false,
|
|
65
|
+
fields: { bio: { type: 'string', required: false } },
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const result = validateValue(User, {
|
|
71
|
+
id: 'u1', age: 30, active: true, role: 'admin', tags: ['x'],
|
|
72
|
+
});
|
|
73
|
+
console.log(result.valid); // true
|
|
74
|
+
console.log(result.errors); // []
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 2. Validate a manifest and check version compatibility
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
import { validateManifest, satisfies, checkBackwardCompat } from '@manya-os/contracts';
|
|
81
|
+
|
|
82
|
+
const m = validateManifest({
|
|
83
|
+
name: '@manya-os/example', version: '1.2.3',
|
|
84
|
+
dependencies: { '@manya-os/contracts': '^1.0.0' },
|
|
85
|
+
exports: ['./src/index.js'],
|
|
86
|
+
capabilities: ['crypto'],
|
|
87
|
+
});
|
|
88
|
+
console.log(m.valid, m.errors);
|
|
89
|
+
|
|
90
|
+
console.log(satisfies('1.4.0', '^1.2.3')); // true
|
|
91
|
+
console.log(satisfies('2.0.0', '^1.2.3')); // false
|
|
92
|
+
|
|
93
|
+
const compat = checkBackwardCompat(v1, v2);
|
|
94
|
+
console.log(compat.compatible, compat.breakingChanges);
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 3. Validate an HTTP request/response against an API contract
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
import { compileSchema, validateRequest, validateResponse } from '@manya-os/contracts';
|
|
101
|
+
|
|
102
|
+
const contract = {
|
|
103
|
+
name: 'users-api', version: '1.0.0',
|
|
104
|
+
endpoints: [
|
|
105
|
+
{
|
|
106
|
+
method: 'POST', path: '/users',
|
|
107
|
+
requestSchema: compileSchema({
|
|
108
|
+
name: 'CreateUserReq', version: '1.0.0',
|
|
109
|
+
fields: { name: { type: 'string' }, email: { type: 'string' } },
|
|
110
|
+
}),
|
|
111
|
+
responseSchema: compileSchema({
|
|
112
|
+
name: 'CreateUserRes', version: '1.0.0',
|
|
113
|
+
fields: { id: { type: 'string' } },
|
|
114
|
+
}),
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
const req = validateRequest(contract, 'POST', '/users', { name: 'A', email: 'a@b.c' });
|
|
120
|
+
const res = validateResponse(contract, 'POST', '/users', { id: 'u1' });
|
|
121
|
+
console.log(req.valid, res.valid);
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### 4. Enforce module boundaries and aggregate a report
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
import {
|
|
128
|
+
enforceBoundary, detectViolations, buildReport, aggregateReports, summarizeReport,
|
|
129
|
+
} from '@manya-os/contracts';
|
|
130
|
+
|
|
131
|
+
const policy = {
|
|
132
|
+
name: 'p', defaultAllow: false,
|
|
133
|
+
rules: [
|
|
134
|
+
{ from: 'api', to: 'db', allowed: true, reason: 'api owns db access' },
|
|
135
|
+
{ from: 'ui', to: 'db', allowed: false, reason: 'ui must not bypass api' },
|
|
136
|
+
],
|
|
137
|
+
};
|
|
138
|
+
console.log(enforceBoundary(policy, 'ui', 'db'));
|
|
139
|
+
console.log(detectViolations(policy, [
|
|
140
|
+
{ from: 'api', to: 'db' },
|
|
141
|
+
{ from: 'ui', to: 'db' }, // violation
|
|
142
|
+
]));
|
|
143
|
+
|
|
144
|
+
const report = buildReport('deploy-gate', [
|
|
145
|
+
{ name: 'manifest', passed: true, errors: [] },
|
|
146
|
+
{ name: 'compat', passed: false, errors: [{ path: 'id', message: 'type_changed', code: 'type_changed' }] },
|
|
147
|
+
]);
|
|
148
|
+
console.log(summarizeReport(aggregateReports([report])));
|
|
149
|
+
// → aggregate: FAIL (1/2 sections, 1 error) at 2024-...
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Configuration
|
|
155
|
+
|
|
156
|
+
`@manya-os/contracts` has no runtime configuration object — every function is pure and explicit. The only configurable surface is the optional `Logger` you can pass to higher-level orchestration code; the package ships `ConsoleLogger` (with secret scrubbing) and `SilentLogger`.
|
|
157
|
+
|
|
158
|
+
### Supported schema type kinds
|
|
159
|
+
|
|
160
|
+
| `type` | Required extra fields | Description |
|
|
161
|
+
| --- | --- | --- |
|
|
162
|
+
| `string` / `number` / `boolean` / `null` | none | JSON primitives. |
|
|
163
|
+
| `object` | `fields?` | Nested record; if `fields` is given, each is validated. |
|
|
164
|
+
| `array` | `of` | Homogeneous list; `of` is the element field definition. |
|
|
165
|
+
| `enum` | `enum` | One of the literal values in `enum`. |
|
|
166
|
+
| `ref` | `ref` | Reference to another `InterfaceSchema` by name (passed via `refs`). |
|
|
167
|
+
| `union` | `oneOf` | One of several member field definitions. |
|
|
168
|
+
| `intersection` | `allOf` | All of several member field definitions. |
|
|
169
|
+
|
|
170
|
+
### Semver range forms supported by `satisfies`
|
|
171
|
+
|
|
172
|
+
| Form | Meaning |
|
|
173
|
+
| --- | --- |
|
|
174
|
+
| `*` | Any version. |
|
|
175
|
+
| `1.2.3` | Exact match. |
|
|
176
|
+
| `^1.2.3` | Compatible-with (same major; for `0.x` and `0.0.x` tighter). |
|
|
177
|
+
| `~1.2.3` | Patch-level (same major and minor). |
|
|
178
|
+
| `>=1.2.3`, `>1.2.3`, `<=1.2.3`, `<1.2.3` | Comparison. |
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Extending
|
|
183
|
+
|
|
184
|
+
### Add a custom schema type
|
|
185
|
+
|
|
186
|
+
1. Add the type name to the `SchemaType` union in `src/types.ts`.
|
|
187
|
+
2. Extend `SCHEMA_TYPES` and the `compileField` validation in `src/schema/schema.ts`.
|
|
188
|
+
3. Add a `case` to the `validateField` switch.
|
|
189
|
+
4. Add unit tests covering at least one positive and one negative case.
|
|
190
|
+
5. Update `docs/API.md` and `README.md`.
|
|
191
|
+
|
|
192
|
+
### Add a new compatibility rule
|
|
193
|
+
|
|
194
|
+
`checkBackwardCompat` already detects field removal, type change, required addition, and enum value removal. To add a new rule (e.g. "field became required"), push a new `BreakingChange` to the `breakingChanges` array in `src/compatibility/compatibility.ts`, document the new `type` literal in `src/types.ts`, and add a test.
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Security notes
|
|
199
|
+
|
|
200
|
+
- **Local-only.** No schema, manifest, or policy data leaves the host process.
|
|
201
|
+
- **No PII in logs.** `secret`, `token`, `apiKey`, `password`, `authorization`, `privateKey`, `accessToken`, `refreshToken` are scrubbed.
|
|
202
|
+
- **Defense in depth.** Validation never throws on a bad value — it returns `{ valid, errors }`; structural problems (e.g. unparseable schema) raise typed errors.
|
|
203
|
+
- **Reproducibility.** Identical inputs → identical validation results and reports.
|
|
204
|
+
|
|
205
|
+
For threat models, see [SECURITY.md](./SECURITY.md) and the root [SECURITY.md](../../SECURITY.md).
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Documentation
|
|
210
|
+
|
|
211
|
+
- [docs/API.md](./docs/API.md) — full TypeScript API reference.
|
|
212
|
+
- [CHANGELOG.md](./CHANGELOG.md) — release history.
|
|
213
|
+
- [CONTRIBUTING.md](./CONTRIBUTING.md) — package-specific contributor notes.
|
|
214
|
+
- [SECURITY.md](./SECURITY.md) — package-specific security surface.
|
|
215
|
+
- [LICENSE](./LICENSE) — Apache-2.0.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## License
|
|
220
|
+
|
|
221
|
+
Apache-2.0. Copyright 2024 Manya Hael Foundation. All rights reserved.
|
|
222
|
+
|
|
223
|
+
Conceived, directed, and owned by **Uviwe Menyiwe (Azura Daemon)**, founder of the Manya Hael Foundation.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/typescript/lib/lib.es2022.full.d.ts","../src/errors.ts","../src/types.ts","../src/logging.ts","../src/schema/schema.ts","../src/manifest/manifest.ts","../src/compatibility/compatibility.ts","../src/api/api.ts","../src/sync/sync.ts","../src/boundaries/boundaries.ts","../src/reporting/reporting.ts","../src/index.ts","../src/api/index.ts","../src/boundaries/index.ts","../src/compatibility/index.ts","../src/manifest/index.ts","../src/reporting/index.ts","../src/schema/index.ts","../src/sync/index.ts","../../../node_modules/@babel/types/lib/index.d.ts","../../../node_modules/@types/babel__generator/index.d.ts","../../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../../node_modules/@types/babel__template/index.d.ts","../../../node_modules/@types/babel__traverse/index.d.ts","../../../node_modules/@types/babel__core/index.d.ts","../../../node_modules/@types/estree/index.d.ts","../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/graceful-fs/index.d.ts","../../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../../node_modules/@types/istanbul-lib-report/index.d.ts","../../../node_modules/@types/istanbul-reports/index.d.ts","../../../node_modules/@jest/expect-utils/build/index.d.ts","../../../node_modules/chalk/index.d.ts","../../../node_modules/@sinclair/typebox/typebox.d.ts","../../../node_modules/@jest/schemas/build/index.d.ts","../../../node_modules/pretty-format/build/index.d.ts","../../../node_modules/jest-diff/build/index.d.ts","../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../node_modules/expect/build/index.d.ts","../../../node_modules/@types/jest/index.d.ts","../../../node_modules/@types/json-schema/index.d.ts","../../../node_modules/pg-types/index.d.ts","../../../node_modules/pg-protocol/dist/messages.d.ts","../../../node_modules/pg-protocol/dist/serializer.d.ts","../../../node_modules/pg-protocol/dist/parser.d.ts","../../../node_modules/pg-protocol/dist/index.d.ts","../../../node_modules/@types/pg/lib/type-overrides.d.ts","../../../node_modules/@types/pg/index.d.ts","../../../node_modules/@types/resolve/index.d.ts","../../../node_modules/@types/stack-utils/index.d.ts","../../../node_modules/@types/yargs-parser/index.d.ts","../../../node_modules/@types/yargs/index.d.ts"],"fileIdsList":[[82,94,140],[94,140],[94,140,195],[82,83,84,85,86,94,140],[82,84,94,140],[94,140,152,188],[94,140,190],[94,140,191],[94,140,197,200],[94,137,140],[94,139,140],[140],[94,140,145,173],[94,140,141,146,151,159,170,181],[94,140,141,142,151,159],[89,90,91,94,140],[94,140,143,182],[94,140,144,145,152,160],[94,140,145,170,178],[94,140,146,148,151,159],[94,139,140,147],[94,140,148,149],[94,140,150,151],[94,139,140,151],[94,140,151,152,153,170,181],[94,140,151,152,153,166,170,173],[94,140,148,151,154,159,170,181],[94,140,151,152,154,155,159,170,178,181],[94,140,154,156,170,178,181],[92,93,94,95,96,97,98,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187],[94,140,151,157],[94,140,158,181,186],[94,140,148,151,159,170],[94,140,160],[94,140,161],[94,139,140,162],[94,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187],[94,140,164],[94,140,165],[94,140,151,166,167],[94,140,166,168,182,184],[94,140,151,170,171,173],[94,140,172,173],[94,140,170,171],[94,140,173],[94,140,174],[94,137,140,170,175],[94,140,151,176,177],[94,140,176,177],[94,140,145,159,170,178],[94,140,179],[94,140,159,180],[94,140,154,165,181],[94,140,145,182],[94,140,170,183],[94,140,158,184],[94,140,185],[94,135,140],[94,135,140,151,153,162,170,173,181,184,186],[94,140,170,187],[94,140,151,170,178,188,203,204,207,208,209],[94,140,209],[94,140,212],[94,140,193,199],[94,140,197],[94,140,194,198],[94,140,204,205,206],[94,140,170,204],[94,140,196],[94,107,111,140,181],[94,107,140,170,181],[94,102,140],[94,104,107,140,178,181],[94,140,159,178],[94,140,188],[94,102,140,188],[94,104,107,140,159,181],[94,99,100,103,106,140,151,170,181],[94,107,114,140],[94,99,105,140],[94,107,128,129,140],[94,103,107,140,173,181,188],[94,128,140,188],[94,101,102,140,188],[94,107,140],[94,101,102,103,104,105,106,107,108,109,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,129,130,131,132,133,134,140],[94,107,122,140],[94,107,114,115,140],[94,105,107,115,116,140],[94,106,140],[94,99,102,107,140],[94,107,111,115,116,140],[94,111,140],[94,105,107,110,140,181],[94,99,104,107,114,140],[94,140,170],[94,102,107,128,140,186,188],[64,65,67,94,140],[70,94,140],[64,65,94,140],[72,94,140],[69,94,140],[64,65,66,67,68,69,70,71,72,73,94,140],[68,94,140],[73,94,140],[67,94,140],[71,94,140],[64,65,69,94,140]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3cbad9a1ba4453443026ed38e4b8be018abb26565fa7c944376463ad9df07c41","impliedFormat":1},{"version":"85a90729d5d83fe4be2b4a3b1d25a239665603354172ba4717c88866367e7c44","signature":"33ffd73f4495e6d2705b39a10eb7be361238e64caad3e0ebe43cc30854f18548"},{"version":"c4250891ecde68ef684481b6bd4a8e64520009fc3d2ec2ad49e401b8b21ee733","signature":"316a5bc6176165e9f9db049153b2dddc31f2e4837c3ae0b62dfde14406f05a1b"},{"version":"7a1cc685ac23ceb6dcf39bd38dbfbecacc08e6ba3ce9cdb265ae63eb0b082a8a","signature":"70c19c93ac51ac98fa816b704e97f14a6eb659e090304d6a26c70f1ea444c26a"},{"version":"eaebceeb9cabe018ac0fdc37091c3a2c35d587da6f566b99f40fc3e40888ec72","signature":"c3bd78401103b39bb9a5f5f5983ff385bdf5288015fb7dfbda873ca8a911683a"},{"version":"191d89d2eba6fb0550205ea54344ffdafd3d445e28e5b5483743f499720aff31","signature":"45819b5bdcae5dc83f7efbc61595106f5e967b58d95b9317c63583b4650baad2"},{"version":"df17454b347ff94563662b7026aee89aebb101f8578bab9575eb7622ad710bc8","signature":"2d8e47434b784c273810852b91f378ac9cd48ef07a7c1b8d3ee59646cc4f76b6"},{"version":"8fe07b7b26803b7e2960216bfed75b822b5060e2c61fbf4334bd089215265f35","signature":"c83cbbf5d475dd26d5a8dc6599eebeeeaee389daef31dbefcfcb6f4a7b8b89ee"},{"version":"05b79992998da3b59b8b2843033115c84d7a6b62494abcd8f26f63bbd77fb936","signature":"9fa222beab9486453873d6b6ec4cf4e4e976581141fd06e5b46c31c820c612fe"},{"version":"e7fbba116d93ab00ccbadfe34735d11790cf190226b20b6b1d0df3f4047c9c00","signature":"8c20575f6b592f1e488b9cd1571f8b585a8902f3937d66d20e4891f2dc2ab270"},{"version":"db9f124613de46402885f8b8ae87556d24f981e35a282ec73ccb93eee15f9cdf","signature":"13afa23ea864030ada962d28ca3c4d5cdc9f02b17293ddec6bc0e8e9c6875e2c"},{"version":"60b341a1440cf0842a6130e37be7f77c194cc6ed3db9dad4d573eb7e4d797e58","signature":"25b2beb6af5558f544877c745b36852a21ffead510d6818b1d80a6d3aaa889f8"},{"version":"6bf48f951a513018f35f976386d7299cb4b76cc072b7571870ee8ec5ec7988a9","signature":"5e84e468b1a04aa81efecf0bb13f97b0e5f36bdf58b74cb86b67efa84146ac45"},{"version":"12dd5eecc12f08b56e136507c86ab5acb248806489e04d03fbba0837dd8a267b","signature":"299a4bcf1a06f8a3525f69c323fe7376c6bc714606449c2c4a706774a51bbc2b"},{"version":"eee682fde585f5ee1454d09e2b7aade83040f3d9e96e3644bf2b4b7cdd47908d","signature":"db544a012c220f04e3ec6a8e417112f324daa932474d425d7a94d5b16bd21c12"},{"version":"765ff24e9a20561f94117b83e66daab019dd95ed233c7b8dcc191aa340ac9491","signature":"f71bd1f69548144f9315588c58c4e871d740be1b1b7a85d879c9a134d5685e31"},{"version":"86b943c166376bc313ae26ffe630599fdee0ee0415897da1739a1849519e4814","signature":"b479b1a8bce44a53ef42f039103ea2becfd2ce70a54b8fcfe7391fea83518765"},{"version":"cf103a0b67c98a8b14ebbd1c216ec6072316b2de72b114923e5a9cff4b07ea4d","signature":"990e6322df2d216a33f5bd45d5878c441d483f371965c13745b8d5e437ec891d"},{"version":"4aedf75108927b51649c4abf930f97aa3bc43bc32507ceb33f3c00a33356c22d","signature":"739951bd8add6ea931a3d83b7b8a9ff19fc5b124dd6f4d0d03ef0fc5ad7069dc"},{"version":"556ccd493ec36c7d7cb130d51be66e147b91cc1415be383d71da0f1e49f742a9","impliedFormat":1},{"version":"b6d03c9cfe2cf0ba4c673c209fcd7c46c815b2619fd2aad59fc4229aaef2ed43","impliedFormat":1},{"version":"95aba78013d782537cc5e23868e736bec5d377b918990e28ed56110e3ae8b958","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"13b77ab19ef7aadd86a1e54f2f08ea23a6d74e102909e3c00d31f231ed040f62","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"751764bb94219b4ce8f5475dc35d3de2e432fea01a0c9610cd7f69ad05e398c6","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"1123a83f35cf56c97de746f0a7250012153c61a167e4a61668bf50e558162d14","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"e1028394c1cf96d5d057ecc647e31e457b919092f882ed0c7092152b077fed9d","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"f60e3e3060207ac982da13363181fd7ee4beecc19a7c569f0d6bb034331066c2","impliedFormat":1},{"version":"4a20a0a39aca8738cc5088f9dea2969bf2af3ca1341c56071f513059b122d150","impliedFormat":1},{"version":"a33c98f95c099c2a9a383b156c8f2a16605843d29455a954c1431bcbbc1ce35a","impliedFormat":1},{"version":"effa1fd4980f6dff4e81ed67009b847d34449087504319f9a0dd081e8cf23a31","impliedFormat":1},{"version":"c2c9f431f788b434e6ae327844ef6712bb6a6a88ad08acf20bf6cfeb41d154ba","impliedFormat":1},{"version":"798367363a3274220cbed839b883fe2f52ba7197b25e8cb2ac59c1e1fd8af6b7","impliedFormat":1},{"version":"67f3d03f61a43f045851624e52ec438803ecf5d2247660f208bd9bcadb6ff298","impliedFormat":1},{"version":"8baa5d0febc68db886c40bf341e5c90dc215a90cd64552e47e8184be6b7e3358","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1}],"root":[[64,81]],"options":{"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"esModuleInterop":true,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitReturns":true,"outDir":"./types","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"strictNullChecks":true,"target":9},"referencedMap":[[84,1],[82,2],[193,2],[196,3],[195,2],[87,4],[83,1],[85,5],[86,1],[88,2],[189,6],[190,2],[191,7],[192,8],[201,9],[202,2],[137,10],[138,10],[139,11],[94,12],[140,13],[141,14],[142,15],[89,2],[92,16],[90,2],[91,2],[143,17],[144,18],[145,19],[146,20],[147,21],[148,22],[149,22],[150,23],[151,24],[152,25],[153,26],[95,2],[93,2],[154,27],[155,28],[156,29],[188,30],[157,31],[158,32],[159,33],[160,34],[161,35],[162,36],[163,37],[164,38],[165,39],[166,40],[167,40],[168,41],[169,2],[170,42],[172,43],[171,44],[173,45],[174,46],[175,47],[176,48],[177,49],[178,50],[179,51],[180,52],[181,53],[182,54],[183,55],[184,56],[185,57],[96,2],[97,2],[98,2],[136,58],[186,59],[187,60],[209,61],[208,62],[210,2],[211,2],[212,2],[213,63],[194,2],[200,64],[198,65],[199,66],[207,67],[204,2],[206,68],[205,2],[203,2],[197,69],[61,2],[62,2],[12,2],[10,2],[11,2],[16,2],[15,2],[2,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[24,2],[3,2],[25,2],[26,2],[4,2],[27,2],[31,2],[28,2],[29,2],[30,2],[32,2],[33,2],[34,2],[5,2],[35,2],[36,2],[37,2],[38,2],[6,2],[42,2],[39,2],[40,2],[41,2],[43,2],[7,2],[44,2],[49,2],[50,2],[45,2],[46,2],[47,2],[48,2],[8,2],[54,2],[51,2],[52,2],[53,2],[55,2],[9,2],[56,2],[63,2],[57,2],[58,2],[60,2],[59,2],[1,2],[14,2],[13,2],[114,70],[124,71],[113,70],[134,72],[105,73],[104,74],[133,75],[127,76],[132,77],[107,78],[121,79],[106,80],[130,81],[102,82],[101,75],[131,83],[103,84],[108,85],[109,2],[112,85],[99,2],[135,86],[125,87],[116,88],[117,89],[119,90],[115,91],[118,92],[128,75],[110,93],[111,94],[120,95],[100,96],[123,87],[122,85],[126,2],[129,97],[70,98],[75,99],[72,100],[76,101],[69,100],[77,102],[64,2],[74,103],[66,2],[78,104],[68,100],[79,105],[73,100],[80,106],[67,100],[81,107],[71,108],[65,2]],"latestChangedDtsFile":"./types/sync/index.d.ts","version":"5.9.3"}
|
package/package.json
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@manya-os/contracts",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Universal contract and schema validation for the MANYA Intelligence OS — interface schemas, manifests, semver compatibility, API contracts, schema sync, boundary enforcement, and validation reports.",
|
|
5
|
-
"main": "dist/cjs/index.js",
|
|
6
|
-
"types": "dist/types/index.d.ts",
|
|
7
|
-
"scripts": {
|
|
8
|
-
"build": "node ../../scripts/build-package.js contracts",
|
|
9
|
-
"test": "jest",
|
|
10
|
-
"clean": "rm -rf dist build node_modules",
|
|
11
|
-
"build:types": "node ../../scripts/build-types.js contracts",
|
|
12
|
-
"build:bundle": "node ../../scripts/build-package.js contracts --no-types && node ../../scripts/build-types.js contracts"
|
|
13
|
-
},
|
|
14
|
-
"keywords": [
|
|
15
|
-
"manya",
|
|
16
|
-
"contracts",
|
|
17
|
-
"schema",
|
|
18
|
-
"validation",
|
|
19
|
-
"manifest",
|
|
20
|
-
"semver",
|
|
21
|
-
"compatibility",
|
|
22
|
-
"api",
|
|
23
|
-
"boundaries",
|
|
24
|
-
"interface"
|
|
25
|
-
],
|
|
26
|
-
"author": "Uviwe Menyiwe (Azura Daemon) <foundation@manyahael.org>",
|
|
27
|
-
"license": "Apache-2.0",
|
|
28
|
-
"dependencies": {},
|
|
29
|
-
"devDependencies": {},
|
|
30
|
-
"module": "dist/esm/index.mjs",
|
|
31
|
-
"exports": {
|
|
32
|
-
".": {
|
|
33
|
-
"types": "./dist/types/index.d.ts",
|
|
34
|
-
"require": "./dist/cjs/index.js",
|
|
35
|
-
"import": "./dist/esm/index.mjs",
|
|
36
|
-
"default": "./dist/cjs/index.js"
|
|
37
|
-
},
|
|
38
|
-
"./package.json": "./package.json"
|
|
39
|
-
},
|
|
40
|
-
"sideEffects": false,
|
|
41
|
-
"files": [
|
|
42
|
-
"dist",
|
|
43
|
-
"README.md",
|
|
44
|
-
"CHANGELOG.md",
|
|
45
|
-
"LICENSE"
|
|
46
|
-
]
|
|
47
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@manya-os/contracts",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Universal contract and schema validation for the MANYA Intelligence OS — interface schemas, manifests, semver compatibility, API contracts, schema sync, boundary enforcement, and validation reports.",
|
|
5
|
+
"main": "dist/cjs/index.js",
|
|
6
|
+
"types": "dist/types/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "node ../../scripts/build-package.js contracts",
|
|
9
|
+
"test": "jest --config ../../jest.config.js",
|
|
10
|
+
"clean": "rm -rf dist build node_modules",
|
|
11
|
+
"build:types": "node ../../scripts/build-types.js contracts",
|
|
12
|
+
"build:bundle": "node ../../scripts/build-package.js contracts --no-types && node ../../scripts/build-types.js contracts"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"manya",
|
|
16
|
+
"contracts",
|
|
17
|
+
"schema",
|
|
18
|
+
"validation",
|
|
19
|
+
"manifest",
|
|
20
|
+
"semver",
|
|
21
|
+
"compatibility",
|
|
22
|
+
"api",
|
|
23
|
+
"boundaries",
|
|
24
|
+
"interface"
|
|
25
|
+
],
|
|
26
|
+
"author": "Uviwe Menyiwe (Azura Daemon) <foundation@manyahael.org>",
|
|
27
|
+
"license": "Apache-2.0",
|
|
28
|
+
"dependencies": {},
|
|
29
|
+
"devDependencies": {},
|
|
30
|
+
"module": "dist/esm/index.mjs",
|
|
31
|
+
"exports": {
|
|
32
|
+
".": {
|
|
33
|
+
"types": "./dist/types/index.d.ts",
|
|
34
|
+
"require": "./dist/cjs/index.js",
|
|
35
|
+
"import": "./dist/esm/index.mjs",
|
|
36
|
+
"default": "./dist/cjs/index.js"
|
|
37
|
+
},
|
|
38
|
+
"./package.json": "./package.json"
|
|
39
|
+
},
|
|
40
|
+
"sideEffects": false,
|
|
41
|
+
"files": [
|
|
42
|
+
"dist",
|
|
43
|
+
"README.md",
|
|
44
|
+
"CHANGELOG.md",
|
|
45
|
+
"LICENSE"
|
|
46
|
+
]
|
|
47
|
+
}
|