@docmaps/sdk
v1.0.1
Published
> DEPRECATION NOTICE: the NPM package `docmaps-sdk` has been moved to `@docmaps/sdk`. > (the source code still lives here.) > Update your installs and imports accordingly.
Downloads
2
Keywords
Readme
DEPRECATION NOTICE: the NPM package
docmaps-sdk
has been moved to@docmaps/sdk
. (the source code still lives here.) Update your installs and imports accordingly.
Typescript SDK for Docmaps
This typescript library is designed to provide core, highly-general docmaps functionality for ease-of-use in Typescript. It provides out-of-the-box validation of JSON-LD documents interpreted as docmaps directly. It is intended to additionally support validation of Docmap sub-elements, such as individual Actions or Actors that might be published separately from a whole Docmap. It will also be integrated into concrete tools such as a docmap-from-meca ETL pipeline and general visualization tools.
Implementation
The core types are written using io-ts
, whose
expressive language defines codecs for validation, encoding and decoding of objects
between various types.
These codecs are then used to extract the Typescript interfaces that most narrowly
describe their parsed outputs. Optional fields are described using t.partial
, whereas
required fields are described using t.type
. t.intersection
allows both required and
optional fields. None of these types will fail to parse due to extra keys present, but those
keys will be dropped. We can disallow extra keys using t.exact
.
Any codec can be used directly with a JSON string or any
/unknown
object to try and
create the instantiation of the Typescript type. io-ts
is designed to work with
fp-ts
, so you get an instance of Either which must
be deconstructed by case to determine whether the input was valid. See examples of this
in the typed_graph
,
where we use isLeft
to check if the decode failed.
**For examples of usage of fp-ts
pipelines with our io-ts
codecs, review the
ts-etl
implementation.
Extended usage with typed_graph
Alternatively, the typed_graph
class is used for choosing the codec to use based on the
@type
key present in the jsonld. This is mainly here to support to-be-implemented RDF
use-cases rather than JsonLD use cases, because it only works when the @type
field is set
the input objects, which we generally do not expect except in Docmap
and Manifestation
at the moment. Generally I recommend you to ignore typed_graph
until further development
makes it more useful.
A utility function is available on the TypedGraph
class that can ingest an RDF Quad stream
and return a TaskEither that will eventually resolve to a JSONLD object or error. It is async,
and not time-bound, and so is not recommended for production use at the current time. However
it does allow type-safe extraction of Docmaps from unstructured in-memory triplestores, such
as the results of a SPARQL query.
Documentation
Documentation is served by github pages.
If you wish to view documentation for an off-branch edition of this package, the directory /docs
can be populated by the command pnpm docs:generate
. The inputs to the
generation script include all Markdown and source files in this directory. These docs are generated
dynamically during GH Pages release on merge to main, so the directory can be empty on check-in.
Contributing
For Code of Conduct, see the repository-wide CODE_OF_CONDUCT.md.
For info about local development of this repository, see CONTRIBUTING.md.
Releases
Packages are hosted on NPM and automated by senmantic-release (see repository root for more info).
Current next steps
Review the issues on this repository for up-to-date info of desired improvements. There are also expressive TODOs in the codebase. Here are some examples:
- [x] use more specific types in
io-ts-types
to validate that strings which should be URLs and dates contain their respective value types. - [ ] build out the typed-graph functionality to support parsing various types from streams.
- [ ] validate the semantics of docmaps, not just structure (i.e., the first-step refers to a real step).