npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

webgme-transformations

v0.6.0

Published

This is an experimental transformation language for defining model transformations within WebGME.

Downloads

56

Readme

WebGME Transformations

This is an experimental transformation language for defining model transformations within WebGME.

Overview

This contains a model transformation language as a metamodel and the corresponding code to perform the transformations. Transformations output JSON nodes which can then be instantiated, if desired. (This may not always be the case if used for visualizers or plugins, for example.)

Transformations contain a series of steps (or ordered rules) which are applied in sequence to the input model. A step contains both an input and output pattern. (The output pattern is sometimes referred to as a structure since it can be instantiated and isn't as abstract as a pattern.) The input model is matched against the input pattern to find valid assignments for all nodes, pointers, and attributes in the pattern.

For each assignment to the pattern elements, the output pattern is created. The output pattern can contain references to the input pattern. These are resolved to the node/attribute/pointer assigned to the element in the input pattern and are different when multiple valid assignments are found.

When creating transformations with complex relationships, it can be helpful to first create nodes and then defined relationships between them in a subsequent rule. To this end, the origin pointer can be set from an element of an output pattern to the element it corresponds to in the input pattern. This designates that the output node corresponds to the matched node from the input pattern. To refer to this newly created node in later steps, the MatchedNode element can be used.

Quick Start

This is a webgme app and can be run accordingly. First, run MongoDB locally and install the dependencies with npm install. Then run npm start in the project root to start the server.

Code Organization

The main code layout is given below:

  • src/common/ModelTransformation.ts: Class used to perform a model transformation from an instance model of a transformation (and input model) in WebGME.
  • src/common/TransformationObserver.ts: Observer to track an input model and transformation definition. Callback will be called with the new model whenever either is updated.
  • src/engine/crates/engine: Pattern matching engine (written in Rust).
  • src/engine/crates/engine-js: Engine with wrappers and API for compiling to wasm.
  • src/plugins/ApplyModelTransformation: Plugin to apply a model transformation and download the output model as JSON.