Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@matter/model

Package Overview
Dependencies
Maintainers
0
Versions
65
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@matter/model

Matter data model

  • 0.11.5-alpha.0-20241119-d0be98137
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
14K
increased by22.2%
Maintainers
0
Weekly downloads
 
Created
Source

@matter/model - Matter Object Model

This folder contains an object model that captures Matter semantics as precisely as possible. It also includes support logic related to model manipulation and runtime validation.

Other representations of the Matter data model in matter.js offer similar representations with a different focus. The TLV models data with a focus on serialization and manipulation of instance values. The Cluster API models clusters in an operational form and in fact is partially generated from this model.

All references to Matter specification in the object model corpus refer collectively to Matter 1.3 Core Specification, Matter 1.3 Application Cluster Specification, and Matter 1.3 Device Library Specification.

Code structure

Subfolders support specific functions:

  • elements/ - types describing the data model
  • models/ - classes implementing an operational version of the data model
  • standard/ - the full data model defined by the Matter Specification
  • definitions/ - support enums and types
  • aspects/ - parsers and ASTs for fields that utilize domain specific languages
  • logic/ - various algorithms that operate on models

The datatypes in elements model Matter elements using TypeScript types. Elements are a formal component of the Matter specification that describe individual structures in the data model. Our element definitions are subtypes of BaseElement.

For each element definition, a class in models offers a concrete operational implementation. This is the API to use if you need to work with the data model beyond simple data modeling. Our models are all subtypes of Model.

MatterModel is the primary entrypoint to the API.

Usage

Obtain a working instance of the model:

import { MatterModel } from "@matter/model";
const matter = MatterModel.standard;

Retrieve standard definitions from the model:

import { DatatypeModel, ClusterModel } from "@matter/model";
const OnOffCluster = matter.get(ClusterModel, "OnOff");
const uint8 = matter.get(DatatypeModel, "uint8");

Iterate over attributes of a cluster:

for (const attribute of OnOffCluster.attributes) {
    // Do something
}

Implementation

The base model includes global datatypes defined by the Matter specification. We generate other elements of the standard model by merging models in the top-level models package.

To recreate the standard model files:

cd matter.js/codegen
npm run generate-model

Spec data model

Input model spec.ts is the data model defined by the Matter specification.

We generate spec.ts from the Matter specification documents. This ensures our definitions align with the specification and gives us detailed information unavailable elsewhere.

The spec generator is generate-spec.ts. To run:

cd matter.js/codegen
npm run generate-spec

Details we extract from the specification include standard element names, types and detailed documentation including cross references to specification documents. We also extract DSL-based definitions of Matter concepts such as conformance, constraints, etc.

Local data model

Input model local.ts defines elements that are unavailable (or incorrect) in the other models. This partial model is the result of editorial decisions by matter.js contributors.

CHIP data model

Model chip.ts is the CHIP data model. CHIP is Project CHIP's connectedhomeip repository. Originally this was the most robust open-source programmatic definition of Matter elements.

We generate chip.ts from CHIP definitions. This ensures our definitions align with CHIP's.

The CHIP generator is generate-chip. To run:

cd matter.js/codegen
npm run generate-chip

We still include the CHIP generator and model in our repository but no longer use it as input for the matter.js model.

Standard (final) data model

Unlike above data models, the standard data model in src/model/standard is part of the matter.js public API. This represents our best attempt at a complete Matter data model.

generate-model.ts creates this model by analyzing and combining elements from the models above.

To update the standard model:

cd matter.js/codegen
npm run generate-model

Cluster generation

One of the ways we use the Matter Object Model is to generate cluster implementations.

The cluster generator is generate-cluster.ts. To run:

cd matter.js/codegen
npm run generate

Note that this will rebuild the model (above) and the clusters. If you know the model is unchanged you can also just generate the clusters:

cd matter.js/codegen
npm run generate-clusters

This is generally only useful if you are modifying the cluster generation code or if you have already generated the model.

Ensuring correctness

Many of the scripts mentioned above generate models. It is important that these models are accurate.

To this end, there is extensive validation that every generator runs before output. Validation prints detailed information about the state of every element in the model.

Each validation error is associated with an error code. If there are errors, a summary of the errors is printed at the end of validation.

The final model is also validated during testing by MatterTest.

Automatic validation can't find every semantic error but it does ensure the resulting model is functional.

Keywords

FAQs

Package last updated on 19 Nov 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc