
Security News
crates.io Ships Security Tab and Tightens Publishing Controls
crates.io adds a Security tab backed by RustSec advisories and narrows trusted publishing paths to reduce common CI publishing risks.
@mvc-react/mvc
Advanced tools
Toolkit for defining MVC applications in Typescript.
npm install --save-dev @mvc-react/mvc
When properly implemented, this framework:
@mvc-react ecosystem when integrated with them.ModelThe Model type encapsulates the essence of any item that can be viewed or interacted with, e.g. a book, a repository, a component, etc. It represents the item's archetype, that is, it defines the item's overall pattern and its properties. It generally consists of a ModelView—which is where the model's properties are articulated.
import { Model } from @mvc-react/mvc;
// Our custom ModelView
interface BookView {
title: string;
author: string;
isbn: string;
}
// Our custom Model definition
type BookModel = Model<BookView>;
const book: BookModel = {
modelView: {
title: "Screwtape Letters",
author: "C.S. Lewis",
isbn: "XXXX-XXXXX-XXXXX"
}
}
ReadonlyModelThe ReadonlyModel type represents a Model with an immutable modelView.
InteractiveModelThe InteractiveModel type represents a Model whose modelView changes according to specified model 'interactions'. It consists of an additional interact function, which takes a single ModelInteraction object as an argument and mutates the model's modelView accordingly.
A ModelInteraction basically comes in two forms: as a simple ModelInteraction which has a single property, type—which specifies the type of interaction to be executed; or as an InputModelInteraction which, as aptly named, contains an additional input property which encapsulates the interaction's input data if there is any.
import { InteractiveModel, Model, InputModelInteraction } from @mvc-react/mvc;
// Our custom ModelView definition
interface CalculatorView {
display: number;
}
// The interactions our model will handle
type CalculatorInteraction = (
InputModelInteraction<"add", {x: number, y: number}> |
InputModelInteraction<"subtract", {x: number, y: number}>
)
// Our custom Model definition
type CalculatorModel = InteractiveModel<
CalculatorView,
CalculatorInteraction
>;
// Implemented
class Calculator implements CalculatorModel {
private _modelView: {
display: 0,
}
get modelView() {
return this._modelView;
}
interact(interaction: CalculatorInteraction) {
switch (interaction.type) {
case "add": {
const { x, y } = interaction.input!;
this._modelView = { display: x + y };
break;
}
case "subtract": {
const { x, y } = interaction.input!;
this._modelView = { display: x - y };
break;
}
}
}
}
// Result
const calculator = new Calculator();
calculator.interact({ type: "add", input: { x: 2, y: 3 } });
console.log(calculator.modelView); // { display: 5 }
newReadonlyModel()Convenience function for constructing a new ReadonlyModel
FAQs
Toolkit for defining MVC applications
The npm package @mvc-react/mvc receives a total of 0 weekly downloads. As such, @mvc-react/mvc popularity was classified as not popular.
We found that @mvc-react/mvc demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

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.

Security News
crates.io adds a Security tab backed by RustSec advisories and narrows trusted publishing paths to reduce common CI publishing risks.

Research
/Security News
A Chrome extension claiming to hide Amazon ads was found secretly hijacking affiliate links, replacing creators’ tags with its own without user consent.

Security News
A surge of AI-generated vulnerability reports has pushed open source maintainers to rethink bug bounties and tighten security disclosure processes.