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

vuex-socketio-plugin

v0.2.0

Published

Vuex plugin to integrate socket.io client

Downloads

797

Readme

vuex-socketio-plugin

Vuex plugin to integrate socket.io client

Install

npm install vuex-socketio-plugin --save

Simple Example

store.ts

import Vuex, { Store } from 'vuex'
import Vue from 'vue'
import { createSocketioPlugin } from 'vuex-socketio-plugin'
import * as io from 'socket.io-client'

Vue.use(Vuex)

let _client: (typeof io.Socket) | null = null;
export type State = { messages: string[] }
const store = new Vuex.Store<State>({
  plugins: [createSocketioPlugin('http://localhost:3000')],
  state: {
    messages: []
  },
  mutations: {
    SOCKET_CONNECT(state, { client }) {
      console.log('connected')
      _client = client;
    },
    SOCKET_CHAT_MESSAGE(state, { data }) {
      state.messages = state.messages.concat([data[0]])
    }
  },
  actions: {
    postMessage(context, payload: { message: string }) {
      if (!_client) {
        throw new Error("don't have connection")
      }
      _client.emit('CHAT_MESSAGE', payload.message)
    }
  }
})

export default store

Usage

createSocketioPlugin

Creates a new instance of the plugin. You can give an URL string or custom socket.io-client instance.

createSocketioPlugin('http://localhost:3000') // apply default as socket-io(auto-connect)
createSocketioPlugin(io('http://localhost:3000', { autoConnect: false }) // if you want to customize you can give any socket.io instance

If you want to use multi connection, you can give an array of it.

createSocketioPlugin([
  'http://localhost:3000/function1',
  'http://localhost:3000/function2',
  'http://localhost:3000/function3'
])

Prefix are set automatically to each Mutation and Action.(See Mutation And Action) If you want to change prefix name, you can give it as actionPrefix and mutationPrefix options.

createSocketioPlugin([
  'http://localhost:3000/function1',
  'http://localhost:3000/function2',
  'http://localhost:3000/function3'
], {
  actionPrefix: 'socket/soc_',
  mutationPrefix: 'socket/SOC_'
})

Mutation and Action

When it receives any SocketIO events, vuex-socketio-plugin triggers Mutation and Action. SOCKET_ prefix is added on MutationName, prefix socket_ is added on ActionName . (MutationName and ActionName consists from prefix + EventName.)

  mutations: {
    SOCKET_CONNECT(state, payload) {
      console.log('connected on mutation')
    },
  },
  actions: {
    socket_connect(context, payload) {
      console.log('connected on action')
    }
  }

Note: In case of mutation, default socket.io events are UpperCase. Pleae ref socket.io docs about type of default events.

Both of mutation and action payload includes client and data parameters. client is socket.io instance. You can emit any event via this. data is received message. It is always array type.

Socket.io Namespaces and Vuex Namespaced Modules

Socket.io namespaces is mapped Vuex namespaced Modules.

If you use socket.io namespaces, you can receive which one of below types.

{
  plugins: [
    createSocketioPlugin('http://localhost:3000/bar')
  ],
  mutations: {
    SOCKET_CONNECT: { ... } // default
    SOCKET_bar_CONNECT: { ... } // prefix + namespace + event name
  },
  modules: {
    bar: {
      SOCKET_CONNECT: { ... } // namespaced module + prefix + event name
    }
  }
}

Because this is a convention you don't have to set any configtation. It is triggered to be found mutation and action at first.

getClients

If you want to get a socket.io client, you can use getClients .

Example

import { getClients } from 'vuex-socketio-plugin'
getClients().forEach(v => v.connect())

Example

example