first commit
This commit is contained in:
142
app_vue/node_modules/@vue/cli-shared-utils/lib/ipc.js
generated
vendored
Normal file
142
app_vue/node_modules/@vue/cli-shared-utils/lib/ipc.js
generated
vendored
Normal file
@ -0,0 +1,142 @@
|
||||
const ipc = require('@achrinza/node-ipc')
|
||||
|
||||
const DEFAULT_ID = process.env.VUE_CLI_IPC || 'vue-cli'
|
||||
const DEFAULT_IDLE_TIMEOUT = 3000
|
||||
const DEFAULT_OPTIONS = {
|
||||
networkId: DEFAULT_ID,
|
||||
autoConnect: true,
|
||||
disconnectOnIdle: false,
|
||||
idleTimeout: DEFAULT_IDLE_TIMEOUT,
|
||||
namespaceOnProject: true
|
||||
}
|
||||
|
||||
const PROJECT_ID = process.env.VUE_CLI_PROJECT_ID
|
||||
|
||||
exports.IpcMessenger = class IpcMessenger {
|
||||
constructor (options = {}) {
|
||||
options = Object.assign({}, DEFAULT_OPTIONS, options)
|
||||
ipc.config.id = this.id = options.networkId
|
||||
ipc.config.retry = 1500
|
||||
ipc.config.silent = true
|
||||
|
||||
this.connected = false
|
||||
this.connecting = false
|
||||
this.disconnecting = false
|
||||
this.queue = null
|
||||
this.options = options
|
||||
|
||||
this.listeners = []
|
||||
|
||||
this.disconnectTimeout = 15000
|
||||
this.idleTimer = null
|
||||
|
||||
// Prevent forced process exit
|
||||
// (or else ipc messages may not be sent before kill)
|
||||
process.exit = code => {
|
||||
process.exitCode = code
|
||||
}
|
||||
|
||||
this._reset()
|
||||
}
|
||||
|
||||
checkConnection () {
|
||||
if (!ipc.of[this.id]) {
|
||||
this.connected = false
|
||||
}
|
||||
}
|
||||
|
||||
send (data, type = 'message') {
|
||||
this.checkConnection()
|
||||
if (this.connected) {
|
||||
if (this.options.namespaceOnProject && PROJECT_ID) {
|
||||
data = {
|
||||
_projectId: PROJECT_ID,
|
||||
_data: data
|
||||
}
|
||||
}
|
||||
|
||||
ipc.of[this.id].emit(type, data)
|
||||
|
||||
clearTimeout(this.idleTimer)
|
||||
if (this.options.disconnectOnIdle) {
|
||||
this.idleTimer = setTimeout(() => {
|
||||
this.disconnect()
|
||||
}, this.options.idleTimeout)
|
||||
}
|
||||
} else {
|
||||
this.queue.push(data)
|
||||
if (this.options.autoConnect && !this.connecting) {
|
||||
this.connect()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
connect () {
|
||||
this.checkConnection()
|
||||
if (this.connected || this.connecting) return
|
||||
this.connecting = true
|
||||
this.disconnecting = false
|
||||
ipc.connectTo(this.id, () => {
|
||||
this.connected = true
|
||||
this.connecting = false
|
||||
this.queue && this.queue.forEach(data => this.send(data))
|
||||
this.queue = null
|
||||
|
||||
ipc.of[this.id].on('message', this._onMessage)
|
||||
})
|
||||
}
|
||||
|
||||
disconnect () {
|
||||
this.checkConnection()
|
||||
if (!this.connected || this.disconnecting) return
|
||||
this.disconnecting = true
|
||||
this.connecting = false
|
||||
|
||||
const ipcTimer = setTimeout(() => {
|
||||
this._disconnect()
|
||||
}, this.disconnectTimeout)
|
||||
|
||||
this.send({ done: true }, 'ack')
|
||||
|
||||
ipc.of[this.id].on('ack', data => {
|
||||
if (data.ok) {
|
||||
clearTimeout(ipcTimer)
|
||||
this._disconnect()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
on (listener) {
|
||||
this.listeners.push(listener)
|
||||
}
|
||||
|
||||
off (listener) {
|
||||
const index = this.listeners.indexOf(listener)
|
||||
if (index !== -1) this.listeners.splice(index, 1)
|
||||
}
|
||||
|
||||
_reset () {
|
||||
this.queue = []
|
||||
this.connected = false
|
||||
}
|
||||
|
||||
_disconnect () {
|
||||
this.connected = false
|
||||
this.disconnecting = false
|
||||
ipc.disconnect(this.id)
|
||||
this._reset()
|
||||
}
|
||||
|
||||
_onMessage (data) {
|
||||
this.listeners.forEach(fn => {
|
||||
if (this.options.namespaceOnProject && data._projectId) {
|
||||
if (data._projectId === PROJECT_ID) {
|
||||
data = data._data
|
||||
} else {
|
||||
return
|
||||
}
|
||||
}
|
||||
fn(data)
|
||||
})
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user