@agentshouse/mdmodel 0.1.0-cd90851746292 → 0.1.0-cdbd463e01dc2
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/API.md +90 -81
- package/README.md +6 -4
- package/dist/definition.d.ts +1 -1
- package/dist/definition.d.ts.map +1 -1
- package/dist/definition.js +13 -9
- package/dist/event.d.ts +78 -0
- package/dist/event.d.ts.map +1 -0
- package/dist/event.js +230 -0
- package/dist/facts.d.ts +15 -0
- package/dist/facts.d.ts.map +1 -0
- package/dist/facts.js +39 -0
- package/dist/index.d.ts +17 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -3
- package/dist/kinds.d.ts +19 -0
- package/dist/kinds.d.ts.map +1 -0
- package/dist/kinds.js +161 -0
- package/dist/query/language.d.ts +223 -0
- package/dist/query/language.d.ts.map +1 -0
- package/dist/query/language.js +565 -0
- package/dist/query/match.d.ts +14 -0
- package/dist/query/match.d.ts.map +1 -0
- package/dist/query/match.js +121 -0
- package/dist/query/rows.d.ts +32 -0
- package/dist/query/rows.d.ts.map +1 -0
- package/dist/query/rows.js +161 -0
- package/dist/query/sql.d.ts +39 -0
- package/dist/query/sql.d.ts.map +1 -0
- package/dist/query/sql.js +279 -0
- package/dist/reserved.d.ts +5 -0
- package/dist/reserved.d.ts.map +1 -0
- package/dist/reserved.js +20 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/validate.d.ts +4 -3
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +103 -36
- package/fixtures/README.md +17 -2
- package/fixtures/cases/link-into-a-reserved-name/context.json +1 -0
- package/fixtures/cases/link-into-a-reserved-name/expected.json +5 -0
- package/fixtures/cases/link-into-a-reserved-name/library/notes/a.md +6 -0
- package/fixtures/cases/link-into-a-reserved-name/schema.yaml +3 -0
- package/fixtures/cases/link-into-a-reserved-name-from-an-untyped-document/context.json +1 -0
- package/fixtures/cases/link-into-a-reserved-name-from-an-untyped-document/expected.json +5 -0
- package/fixtures/cases/link-into-a-reserved-name-from-an-untyped-document/library/notes/b.md +5 -0
- package/fixtures/cases/member-on-an-untyped-document/context.json +1 -0
- package/fixtures/cases/member-on-an-untyped-document/expected.json +6 -0
- package/fixtures/cases/member-on-an-untyped-document/library/note.md +4 -0
- package/fixtures/cases/member-on-another-type/context.json +1 -0
- package/fixtures/cases/member-on-another-type/expected.json +6 -0
- package/fixtures/cases/member-on-another-type/library/note.md +4 -0
- package/fixtures/cases/member-on-another-type/schema.yaml +7 -0
- package/fixtures/cases/reference-into-a-reserved-name/context.json +1 -0
- package/fixtures/cases/reference-into-a-reserved-name/expected.json +6 -0
- package/fixtures/cases/reference-into-a-reserved-name/library/notes/a.md +4 -0
- package/fixtures/cases/reference-into-a-reserved-name/library/settings/brief.md +1 -0
- package/fixtures/cases/reference-into-a-reserved-name/schema.yaml +3 -0
- package/fixtures/cases/room-md-declares-a-type/context.json +1 -0
- package/fixtures/cases/room-md-declares-a-type/expected.json +6 -0
- package/fixtures/cases/room-md-declares-a-type/library/ROOM.md +5 -0
- package/fixtures/cases/typed-path-names-another-type/context.json +11 -0
- package/fixtures/cases/typed-path-names-another-type/expected.json +6 -0
- package/fixtures/cases/typed-path-names-another-type/library/settings/prefs/one.md +3 -0
- package/fixtures/cases/typed-path-names-another-type/schema.yaml +6 -0
- package/fixtures/cases/typed-path-names-its-type/context.json +11 -0
- package/fixtures/cases/typed-path-names-its-type/expected.json +3 -0
- package/fixtures/cases/typed-path-names-its-type/library/settings/prefs/deeper/two.md +1 -0
- package/fixtures/cases/typed-path-names-its-type/library/settings/prefs/one.md +4 -0
- package/fixtures/cases/typed-path-names-its-type/schema.yaml +6 -0
- package/fixtures/cases/typed-path-names-no-type/context.json +11 -0
- package/fixtures/cases/typed-path-names-no-type/expected.json +6 -0
- package/fixtures/cases/typed-path-names-no-type/library/settings/prefs/one.md +1 -0
- package/fixtures/cases/typed-path-names-no-type/schema.yaml +6 -0
- package/fixtures/cases/unnamed-typed-path-checks-its-fields/context.json +11 -0
- package/fixtures/cases/unnamed-typed-path-checks-its-fields/expected.json +6 -0
- package/fixtures/cases/unnamed-typed-path-checks-its-fields/library/rooms/team/tasks/plan.md +4 -0
- package/fixtures/cases/unnamed-typed-path-checks-its-fields/schema.yaml +5 -0
- package/fixtures/cases/unnamed-typed-path-names-a-type/context.json +11 -0
- package/fixtures/cases/unnamed-typed-path-names-a-type/expected.json +6 -0
- package/fixtures/cases/unnamed-typed-path-names-a-type/library/rooms/team/tasks/plan.md +6 -0
- package/fixtures/cases/unnamed-typed-path-names-a-type/schema.yaml +5 -0
- package/fixtures/cases/unnamed-typed-path-reads-its-type/context.json +11 -0
- package/fixtures/cases/unnamed-typed-path-reads-its-type/expected.json +3 -0
- package/fixtures/cases/unnamed-typed-path-reads-its-type/library/rooms/team/plan.md +1 -0
- package/fixtures/cases/unnamed-typed-path-reads-its-type/library/rooms/team/tasks/plan.md +5 -0
- package/fixtures/cases/unnamed-typed-path-reads-its-type/schema.yaml +5 -0
- package/fixtures/cases/unnamed-typed-path-without-a-body/context.json +11 -0
- package/fixtures/cases/unnamed-typed-path-without-a-body/expected.json +5 -0
- package/fixtures/cases/unnamed-typed-path-without-a-body/library/rooms/team/tasks/plan.md +5 -0
- package/fixtures/cases/unnamed-typed-path-without-a-body/schema.yaml +5 -0
- package/fixtures/queries.json +913 -0
- package/package.json +1 -1
- package/dist/condition.d.ts +0 -180
- package/dist/condition.d.ts.map +0 -1
- package/dist/condition.js +0 -633
package/API.md
CHANGED
|
@@ -54,6 +54,8 @@ in its `allOf` or in such a branch may repeat to ask a section for text, else `c
|
|
|
54
54
|
of a type's own `properties` alone, `change_roles` and `initial_roles` each list role names, and
|
|
55
55
|
`transitions` lists `{ from, to, roles? }`, each end a scalar or `null`, on a field whose `type`,
|
|
56
56
|
`enum`, `const`, `$ref`, `allOf`, `anyOf`, `oneOf`, `if` and `not` admit no list or object.
|
|
57
|
+
`readTypes(schema, provided?)` returns the model of a schema `verify` already accepted, checking
|
|
58
|
+
none of these rules, and throws on a text it cannot read as types.
|
|
57
59
|
|
|
58
60
|
```yaml
|
|
59
61
|
$defs:
|
|
@@ -83,29 +85,29 @@ and `memberFacts` take one step and `crossedFacts` reads a list's item facts; `J
|
|
|
83
85
|
JSON Pointer grammar, `''` included, `pointerSegments` and `escapePointer` split and write a pointer,
|
|
84
86
|
`ARRAY_INDEX` matches an index segment, and `ATTACHMENT` is the `reference` that admits any path.
|
|
85
87
|
|
|
86
|
-
`validate(library, context?, model?)` takes the resulting text Library and one `ValidationContext`
|
|
87
|
-
|
|
88
|
-
canonical collection-relative path namespace; a path declared text and binary is refused. House
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
88
|
+
`validate(library, context?, model?)` takes the resulting text Library and one `ValidationContext` of
|
|
89
|
+
`binaryTargets: readonly string[]`, none when omitted. Library keys and binary targets share one
|
|
90
|
+
canonical collection-relative path namespace; a path declared text and binary is refused. House declares
|
|
91
|
+
every binary file of the Room as a binary target, and the model reads no bytes. Ordinary links and
|
|
92
|
+
images in typed Documents may resolve to either membership, relative to the source Document, and one to
|
|
93
|
+
a path neither holds is not refused: it dangles. One written `/rooms/<handle>/<path>` names a file in
|
|
94
|
+
another Room, which the caller checks; any other absolute path, or one that leaves the collection, is
|
|
95
|
+
`unresolved-link`. A binary target supplies no Document or MD Type. `model` types the Library. A typed
|
|
96
|
+
Document, `any` included, at an `isDocumentPath` (no `isReservedName` of `RESERVED_NAMES` first) linking
|
|
97
|
+
into a reserved name is `unresolved-link`; a typed `ROOM_DESCRIPTION` is `room-md-type`. The context's `typedPaths` bind each `path`, a name's one `*` standing for any nonempty part, to a `type` of `model`: a Document there naming another, or naming any unless `named`, is `unknown-type` at `/type`, one not `named` is checked as it and stays `any`, and one whose body is empty is `required-body` if `body`.
|
|
96
98
|
|
|
97
99
|
A typed Document's frontmatter satisfies its type's schema, every keyword with its JSON Schema
|
|
98
100
|
meaning, formats asserted and defaults never filled, except that an object schema declaring neither
|
|
99
101
|
`additionalProperties` nor `unevaluatedProperties` is closed: an undeclared key is refused as
|
|
100
102
|
`undeclared-field`. `TYPE_FIELD`, `SITE_FIELD` and `RECEIVED_FIELD` count as declared on every type,
|
|
101
|
-
and the string `MEMBER_FIELD` on the `member_document` type
|
|
102
|
-
names the keyword, such as `required`, and the value's JSON
|
|
103
|
-
occurrence of a declared list section is a list of values of
|
|
104
|
-
`structured-section`; a reference item is one ordinary link alone, such as
|
|
105
|
-
reference, at any depth or a section item, reaching a URL, a binary target, another
|
|
106
|
-
`cross_room` or the context's `anyRoom: true`,
|
|
107
|
-
`unresolved-reference`, and a frontmatter one reaching no member is `referenced-missing-file`
|
|
108
|
-
its `referrers`; `attachment` admits any path, and no body link is a referrer. `validating` is
|
|
103
|
+
and the string `MEMBER_FIELD` on the `member_document` type alone, else refused, `any` included;
|
|
104
|
+
`HOUSE_FIELDS` lists the four. A refusal names the keyword, such as `required`, and the value's JSON
|
|
105
|
+
Pointer, such as `/shipping/city`. Every occurrence of a declared list section is a list of values of
|
|
106
|
+
its item schema, else `structured-section`; a reference item is one ordinary link alone, such as
|
|
107
|
+
`- [Ada](ada.md)`. A reference, at any depth or a section item, reaching a URL, a binary target, another
|
|
108
|
+
Room without `cross_room` or the context's `anyRoom: true`, a Document of a type it does not name, or,
|
|
109
|
+
from an `isDocumentPath`, a reserved name is `unresolved-reference`, and a frontmatter one reaching no member is `referenced-missing-file`
|
|
110
|
+
naming its `referrers`; `attachment` admits any path, and no body link is a referrer. `validating` is
|
|
109
111
|
`validate` over a `ReadonlyMap` Library, yielding each path read with the references it `resolved`;
|
|
110
112
|
`assess(file, content, binary, model?, context?)` reads one member, naming its `type` and `targets`,
|
|
111
113
|
and `verdicts()` `add`s assessments in any order, its `verdict()` the one `validate` gives.
|
|
@@ -185,13 +187,16 @@ percent-encodes in `to` what `target` would decode, so it resolves to `to` again
|
|
|
185
187
|
`checkDocument(file, content, model, context?)` reads one Document as `validate` does in that
|
|
186
188
|
context: `ok: false` where it refuses, else its `type`, whether it is `typed`, and each reference's
|
|
187
189
|
`target` and `to`, which `resolves(reference, typeOf, binary)` says reaches a member `validate`
|
|
188
|
-
accepts. `
|
|
189
|
-
neither names another Room's, which `roomReferences(file, content, definition?)` lists by `kind`.
|
|
190
|
+
accepts. It names no other Room's, which `roomReferences(file, content, definition?)` lists by `kind`.
|
|
190
191
|
`parseFrontmatter(content, file?)` is `parse` without the body: `content`, `type`, `fields`.
|
|
191
192
|
|
|
192
193
|
`references(document, definition)` lists each frontmatter `reference` string at any depth as
|
|
193
194
|
`pointer`, `value` and `to`; a `{ kind: 'reference', pointer, value, prior }` change rewrites one in
|
|
194
|
-
place, keeping its quotes, or is stale. `
|
|
195
|
+
place, keeping its quotes, or is stale. `referenceTarget(file, value)` is the Path a value names
|
|
196
|
+
read as a link destination, else `null`; `referenceTargets(document, file, model)` lists each
|
|
197
|
+
reference's `location`, `to` and `target`. `documentFacts(file, content, model)`, `null` where the
|
|
198
|
+
text does not parse, is the `type` (`any` if none), `fields` and sorted distinct link and reference
|
|
199
|
+
`links` a save stores, no links under `settings/`. `relativize(document, file, handle, definition?, kept?)`
|
|
195
200
|
rewrites, in one `apply`, each link destination and reference written `/rooms/<handle>/<path>` and
|
|
196
201
|
not in `kept` to `relative(file, path)`, keeping its `?query` or `#fragment`. A text without
|
|
197
202
|
frontmatter, such as a captured body, is read from its first character: `relativizeBody(body, file, handle)` converts it
|
|
@@ -307,63 +312,67 @@ divided out of one free-text field value addresses that whole value, because a Y
|
|
|
307
312
|
positions are the only ones its source has, and a Span carrying part of one internal link's label
|
|
308
313
|
addresses that whole link, because a cut never falls inside link syntax.
|
|
309
314
|
|
|
310
|
-
##
|
|
311
|
-
|
|
312
|
-
`
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
`
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
`
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
`
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
`
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
a
|
|
364
|
-
`
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
315
|
+
## Queries
|
|
316
|
+
|
|
317
|
+
`planOf(query, rooms)` checks one query against the MD Types of the Rooms `rooms` lists, each
|
|
318
|
+
`{ locator, available, types }` with `listed` when the list is whole, and answers its
|
|
319
|
+
`QueryPlan` or throws a `QueryError` whose `code` is `invalid-query`, `unknown-type`,
|
|
320
|
+
`unknown-field` or `wrong-kind`, whose message names where, whose `place` is that place as the
|
|
321
|
+
keys and indexes into the query, which `placeText` writes as its message does, and whose `accepts` lists what it would take there: the types or
|
|
322
|
+
fields the Rooms declare, a field's `kindWords`, or the parts and operators a query knows. A query
|
|
323
|
+
is data: `types`, `where`
|
|
324
|
+
field predicates by JSON Pointer (`$eq`, `$ne`, `$in`, `$nin`, `$gt`, `$gte`, `$lt`, `$lte`,
|
|
325
|
+
`$all`, `$size`, `$exists`, `$prefix`, `$and`, `$or`), `pathPrefix`, `folder`, `paths`,
|
|
326
|
+
`fileIds`, `hop`, `backlinks`, `text`, then `select` or `groupBy`, `orderBy`, `limit`, `after`
|
|
327
|
+
and `total`. `queryKey` and `identityOf` are a query's and a plan's canonical text, `bodied`
|
|
328
|
+
says a shape reads text, `cursorOf` and `decodedCursor` write and read the `after` a window
|
|
329
|
+
continues from, and `invalid`, `known` and `plain` are the check's refusal and tests.
|
|
330
|
+
|
|
331
|
+
`KINDS` is the one table of kinds a value compares as, `kindOf(facts)` a declared value's kind,
|
|
332
|
+
`kindWords(facts)` the values it takes in words, and `fitsKind(kind, facts, value)` whether a value
|
|
333
|
+
fits it: a `date`, `date-time` or `time` is
|
|
334
|
+
exactly what document validation admits as that format, a `date` is `dated`, a `date-time`
|
|
335
|
+
compares as the instant `instant` reads, which `instantKey` writes as text that sorts as the
|
|
336
|
+
instant does, and a `reference` as the Room Path it resolves to. `compared(left, right,
|
|
337
|
+
ordering)` orders plain values: numbers and booleans, then text by locale or `byCodePoint`,
|
|
338
|
+
then lists item by item.
|
|
339
|
+
|
|
340
|
+
Two evaluators answer a plan's tests on one Document alike, a test on a missing value false and
|
|
341
|
+
its negation (`$ne`, `$nin`, `$exists: false`) true. `matches(plan, candidate)` answers in
|
|
342
|
+
memory over one `Candidate`: its `path`, `type`, `fileId`, `fields`, `definition` and the
|
|
343
|
+
`text` held. The `sql` namespace compiles them to SQL over a collection: `indexed(path, fields,
|
|
344
|
+
definition)` derives a Document's values and field links, its date-times with their instants,
|
|
345
|
+
`sql.VALUE_TABLE` holds those values and `sql.insertedValues` writes them, and `sql.tests(alias,
|
|
346
|
+
plan)` tests a document row of `id`, `path`, `folder`, `type`, `file_id` and `content`, its
|
|
347
|
+
phrase through the function a connection registers as `sql.HOLDS_PHRASE` with `sql.holdsPhrase`.
|
|
348
|
+
`sql.scoped`, `sql.placed`, `sql.sorted`, `sql.beyond`, `sql.following` and `sql.sortValue`
|
|
349
|
+
render a scope, a pointer, an order and a window's continuation, a date-time ordering as its
|
|
350
|
+
instant between numbers and text; `sql.fragment`, `sql.joined`, `sql.all`, `sql.any`,
|
|
351
|
+
`sql.grouped`, `sql.listed` and `sql.exists` build statements, and `heldKind` is the index's value
|
|
352
|
+
kind. `fixtures/queries.json` holds both evaluators to one table.
|
|
353
|
+
|
|
354
|
+
## Events
|
|
355
|
+
|
|
356
|
+
`facts(document, { id, path }, model, resolve)` reads one Document as the `DocumentFacts` of a
|
|
357
|
+
change: its `id`, its `path` with a leading `/`, its `type` or `null`, its `sections`, and a `Fact`
|
|
358
|
+
for each frontmatter field it writes that its MD Type declares, held as its kind: `reference`,
|
|
359
|
+
`enum`, `number`, `boolean`, `date`, `time` (a `date-time`) or `string`. A prose value, or one of
|
|
360
|
+
no kind, is `prose`, a list or an object holds the facts of its members, and a value written
|
|
361
|
+
`null` is `null`. A
|
|
362
|
+
value that does not fit its kind, such as a string in a number field, a value outside its `enum` or
|
|
363
|
+
a reference `resolve` maps to no `{ id, member? }`, is `unreadable`; a readable reference holds that
|
|
364
|
+
`id` and the `member` it binds, which `members(facts, path)` lists at a `/members/<pointer>`.
|
|
365
|
+
|
|
366
|
+
`candidateOf(facts)` is that Document as the `Candidate` `matches` answers over, so a query tests
|
|
367
|
+
the Document as the change saw it: at its Room Path, by its file ID, a reference as the `id` it
|
|
368
|
+
named, a prose value as present alone, an unreadable value as missing and a date-time as an instant.
|
|
369
|
+
`heldAt(candidate, pointer)` lists the values a pointer reaches there, its date-times with their
|
|
370
|
+
instants. `prosePaths(facts)` lists the prose and section paths whose text a change compares, and
|
|
371
|
+
`TEXT_FIELD`, `/text`, names a Document's whole text; `WRITE_DOORS` are the ways a change is made.
|
|
372
|
+
`pointed(value, pointer)` reads a JSON Pointer, `undefined` where nothing is; `dated(value)` checks a
|
|
373
|
+
`YYYY-MM-DD` date, and `instant(value)` reads what validation admits as a `date-time` as epoch
|
|
374
|
+
nanoseconds, a `bigint`. Of one MD Type, `datePointers(definition)` lists, sorted, its date fields as
|
|
375
|
+
escaped pointers, `valuedChange(definition, pointer)` holds of a field read as one value, never
|
|
376
|
+
prose, a list or reached through one, the only field whose change is tested by its values, and
|
|
377
|
+
`memberPointers(definition, memberType)` the `/members/<name>` paths of the fields referring to
|
|
378
|
+
`memberType`, alone or in a list.
|
package/README.md
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# `@agentshouse/mdmodel`
|
|
2
2
|
|
|
3
|
-
Typed Markdown documents: MD Types declared in JSON Schema, a parser, a validator,
|
|
4
|
-
deterministic application of one structured change to a Document,
|
|
5
|
-
|
|
3
|
+
Typed Markdown documents: MD Types declared in JSON Schema, a parser, a validator, the
|
|
4
|
+
deterministic application of one structured change to a Document, and one query language
|
|
5
|
+
answered in SQL over a collection or in memory over one Document, plus a conformance
|
|
6
|
+
fixture corpus.
|
|
6
7
|
|
|
7
8
|
It runs in the browser and in Node, makes no network call, and reads no
|
|
8
9
|
filesystem on its own. It ships one ESM artifact that Node 24.22.1 and later
|
|
@@ -44,7 +45,8 @@ if (parsed.ok) {
|
|
|
44
45
|
| `links`, `target`, `retarget` | Inventory and rewrite link destinations |
|
|
45
46
|
| `escapePointer` | Write one key as a JSON Pointer token |
|
|
46
47
|
| `project`, `divide` | Embedding projection input and its division into Spans |
|
|
47
|
-
| `facts`, `
|
|
48
|
+
| `facts`, `candidateOf` | A Document as one change saw it, matched as one query candidate |
|
|
49
|
+
| `planOf`, `matches`, `sql` | Check a query, answer it over one Document or compile it to SQL |
|
|
48
50
|
| `MARKDOWN_SYNTAX_PROFILE`, `VERSION` | The pinned Markdown profile (GFM 0.29) and MD model version |
|
|
49
51
|
| `MEMBER_FIELD`, `SITE_FIELD`, `RECEIVED_FIELD` | The field names validation counts as declared beyond a type's own |
|
|
50
52
|
|
package/dist/definition.d.ts
CHANGED
|
@@ -78,5 +78,5 @@ export type PointerFacts = {
|
|
|
78
78
|
export declare function crossedFacts(facts: ValueFacts): ValueFacts[];
|
|
79
79
|
export declare function fieldFacts(definition: Definition, key: string): ValueFacts | undefined;
|
|
80
80
|
export declare function pointerFacts(definition: Definition, pointer: string): PointerFacts | undefined;
|
|
81
|
-
export declare function readSchema(text: string, provided?: VerifiedModel): VerifiedModel | Failure;
|
|
81
|
+
export declare function readSchema(text: string, provided?: VerifiedModel, checked?: boolean): VerifiedModel | Failure;
|
|
82
82
|
//# sourceMappingURL=definition.d.ts.map
|
package/dist/definition.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"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"}
|
package/dist/definition.js
CHANGED
|
@@ -100,7 +100,7 @@ function strings(value) {
|
|
|
100
100
|
new Set(value).size === value.length);
|
|
101
101
|
}
|
|
102
102
|
function schemaFailure(value, at, context) {
|
|
103
|
-
if (typeof value === 'boolean')
|
|
103
|
+
if (!context.checked || typeof value === 'boolean')
|
|
104
104
|
return undefined;
|
|
105
105
|
if (!isRecord(value))
|
|
106
106
|
return refuse('schema', at);
|
|
@@ -704,14 +704,14 @@ function unruled(schema) {
|
|
|
704
704
|
}
|
|
705
705
|
return { schema: written.size === 0 ? schema : { ...schema, properties }, written };
|
|
706
706
|
}
|
|
707
|
-
function providedType(name, value, provided) {
|
|
707
|
+
function providedType(name, value, provided, checked) {
|
|
708
708
|
const at = `/${escapePointer(name)}`;
|
|
709
|
-
if (provided.nameable?.includes(name) !== true)
|
|
709
|
+
if (checked && provided.nameable?.includes(name) !== true)
|
|
710
710
|
return refuse('provided-type', at);
|
|
711
711
|
if (!isRecord(value))
|
|
712
712
|
return refuse('schema', at);
|
|
713
713
|
const declared = Object.keys(value).find((key) => !PROVIDED_KEYWORDS.includes(key));
|
|
714
|
-
if (declared !== undefined)
|
|
714
|
+
if (checked && declared !== undefined)
|
|
715
715
|
return refuse('provided-type', `${at}/${escapePointer(declared)}`);
|
|
716
716
|
const { create_roles: createRoles, delete_roles: deleteRoles } = value;
|
|
717
717
|
if (createRoles !== undefined && !roleNames(createRoles))
|
|
@@ -782,7 +782,7 @@ function readType(name, value, context) {
|
|
|
782
782
|
function lineAt(text, offset) {
|
|
783
783
|
return text.slice(0, offset).split(/\r\n|\r|\n/).length;
|
|
784
784
|
}
|
|
785
|
-
export function readSchema(text, provided = NO_TYPES) {
|
|
785
|
+
export function readSchema(text, provided = NO_TYPES, checked = true) {
|
|
786
786
|
let root;
|
|
787
787
|
try {
|
|
788
788
|
root = jsValue(parseYamlMapping(text, 0, text.length));
|
|
@@ -796,11 +796,15 @@ export function readSchema(text, provided = NO_TYPES) {
|
|
|
796
796
|
if (!isRecord(defs))
|
|
797
797
|
return refuse('$defs', '/$defs');
|
|
798
798
|
const names = Object.keys(root).filter((key) => key !== '$defs');
|
|
799
|
-
for (const name of names) {
|
|
799
|
+
for (const name of checked ? names : []) {
|
|
800
800
|
if (name === '' || name.startsWith('$') || name === BUILT_IN_TYPE || name === ATTACHMENT)
|
|
801
801
|
return refuse('schema-type-name', `/${escapePointer(name)}`);
|
|
802
802
|
}
|
|
803
|
-
const context = {
|
|
803
|
+
const context = {
|
|
804
|
+
defs,
|
|
805
|
+
types: new Set([...names, ...Object.keys(provided.types)]),
|
|
806
|
+
checked,
|
|
807
|
+
};
|
|
804
808
|
for (const [name, def] of Object.entries(defs)) {
|
|
805
809
|
const failure = schemaFailure(def, `/$defs/${escapePointer(name)}`, context);
|
|
806
810
|
if (failure !== undefined)
|
|
@@ -810,11 +814,11 @@ export function readSchema(text, provided = NO_TYPES) {
|
|
|
810
814
|
let marked = false;
|
|
811
815
|
for (const name of names) {
|
|
812
816
|
const definition = Object.hasOwn(provided.types, name)
|
|
813
|
-
? providedType(name, root[name], provided)
|
|
817
|
+
? providedType(name, root[name], provided, checked)
|
|
814
818
|
: readType(name, root[name], context);
|
|
815
819
|
if ('rule' in definition)
|
|
816
820
|
return definition;
|
|
817
|
-
if (definition.memberDocument) {
|
|
821
|
+
if (checked && definition.memberDocument) {
|
|
818
822
|
if (marked)
|
|
819
823
|
return refuse('member_document', `/${escapePointer(name)}/member_document`);
|
|
820
824
|
marked = true;
|
package/dist/event.d.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { type Definition } from './definition.js';
|
|
2
|
+
import type { Candidate } from './query/match.js';
|
|
3
|
+
import type { Document, VerifiedModel } from './types.js';
|
|
4
|
+
export type FactKind = 'string' | 'number' | 'boolean' | 'date' | 'time' | 'enum' | 'reference';
|
|
5
|
+
type Scalar = string | number | boolean;
|
|
6
|
+
export type Fact = {
|
|
7
|
+
readonly kind: FactKind;
|
|
8
|
+
readonly value: Scalar;
|
|
9
|
+
readonly member?: string;
|
|
10
|
+
} | {
|
|
11
|
+
readonly kind: 'prose';
|
|
12
|
+
} | {
|
|
13
|
+
readonly kind: 'null';
|
|
14
|
+
} | {
|
|
15
|
+
readonly kind: 'unreadable';
|
|
16
|
+
} | {
|
|
17
|
+
readonly kind: 'list';
|
|
18
|
+
readonly items: readonly Fact[];
|
|
19
|
+
} | {
|
|
20
|
+
readonly kind: 'object';
|
|
21
|
+
readonly fields: Readonly<Record<string, Fact>>;
|
|
22
|
+
};
|
|
23
|
+
export type DocumentFacts = {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly path: string;
|
|
26
|
+
readonly type: string | null;
|
|
27
|
+
readonly fields: Readonly<Record<string, Fact>>;
|
|
28
|
+
readonly sections: readonly string[];
|
|
29
|
+
};
|
|
30
|
+
export declare const TEXT_FIELD = "/text";
|
|
31
|
+
export declare const WRITE_DOORS: readonly ['browser', 'agent', 'client', 'function'];
|
|
32
|
+
export type WriteDoor = (typeof WRITE_DOORS)[number];
|
|
33
|
+
export type Actor = {
|
|
34
|
+
readonly user?: string;
|
|
35
|
+
readonly site?: string;
|
|
36
|
+
readonly app?: string;
|
|
37
|
+
readonly door?: WriteDoor;
|
|
38
|
+
};
|
|
39
|
+
export type DocumentEvent = {
|
|
40
|
+
readonly before: DocumentFacts | null;
|
|
41
|
+
readonly after: DocumentFacts | null;
|
|
42
|
+
readonly changed: readonly string[];
|
|
43
|
+
readonly by: Actor;
|
|
44
|
+
readonly moved_between_rooms: boolean;
|
|
45
|
+
};
|
|
46
|
+
export type ItemFacts = {
|
|
47
|
+
readonly delivery: string;
|
|
48
|
+
readonly source: string | null;
|
|
49
|
+
readonly address: string | null;
|
|
50
|
+
readonly container: string | null;
|
|
51
|
+
readonly author: string | null;
|
|
52
|
+
readonly headers: Readonly<Record<string, string>>;
|
|
53
|
+
readonly json: {
|
|
54
|
+
readonly value: unknown;
|
|
55
|
+
} | null;
|
|
56
|
+
};
|
|
57
|
+
export type MessageFacts = {
|
|
58
|
+
readonly sender: string;
|
|
59
|
+
readonly agent_function: string | null;
|
|
60
|
+
readonly path: string | null;
|
|
61
|
+
};
|
|
62
|
+
export type Resolved = {
|
|
63
|
+
readonly id: string;
|
|
64
|
+
readonly member?: string;
|
|
65
|
+
};
|
|
66
|
+
export declare function facts(document: Pick<Document, 'type' | 'fields' | 'sections'>, at: {
|
|
67
|
+
readonly id: string;
|
|
68
|
+
readonly path: string;
|
|
69
|
+
}, model: VerifiedModel, resolve: (target: string) => Resolved | undefined): DocumentFacts;
|
|
70
|
+
export declare function prosePaths(facts: DocumentFacts): string[];
|
|
71
|
+
export declare function members(document: DocumentFacts, path: string): readonly string[];
|
|
72
|
+
export declare function pointed(value: unknown, pointer: string): unknown;
|
|
73
|
+
export declare function valuedChange(definition: Definition, pointer: string): boolean;
|
|
74
|
+
export declare function datePointers(definition: Definition): string[];
|
|
75
|
+
export declare function memberPointers(definition: Definition, memberType: string): string[];
|
|
76
|
+
export declare function candidateOf(document: DocumentFacts): Candidate;
|
|
77
|
+
export {};
|
|
78
|
+
//# sourceMappingURL=event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../src/event.ts"],"names":[],"mappings":"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"}
|