mirror of
https://github.com/atom/atom.git
synced 2026-01-25 14:59:03 -05:00
56 lines
1.6 KiB
JavaScript
56 lines
1.6 KiB
JavaScript
const {protocol} = require('electron')
|
|
const fs = require('fs')
|
|
const path = require('path')
|
|
|
|
// Handles requests with 'atom' protocol.
|
|
//
|
|
// It's created by {AtomApplication} upon instantiation and is used to create a
|
|
// custom resource loader for 'atom://' URLs.
|
|
//
|
|
// The following directories are searched in order:
|
|
// * ~/.atom/assets
|
|
// * ~/.atom/dev/packages (unless in safe mode)
|
|
// * ~/.atom/packages
|
|
// * RESOURCE_PATH/node_modules
|
|
//
|
|
module.exports =
|
|
class AtomProtocolHandler {
|
|
constructor (resourcePath, safeMode) {
|
|
this.loadPaths = []
|
|
|
|
if (!safeMode) {
|
|
this.loadPaths.push(path.join(process.env.ATOM_HOME, 'dev', 'packages'))
|
|
this.loadPaths.push(path.join(resourcePath, 'packages'))
|
|
}
|
|
|
|
this.loadPaths.push(path.join(process.env.ATOM_HOME, 'packages'))
|
|
this.loadPaths.push(path.join(resourcePath, 'node_modules'))
|
|
|
|
this.registerAtomProtocol()
|
|
}
|
|
|
|
// Creates the 'atom' custom protocol handler.
|
|
registerAtomProtocol () {
|
|
protocol.registerFileProtocol('atom', (request, callback) => {
|
|
const relativePath = path.normalize(request.url.substr(7))
|
|
|
|
let filePath
|
|
if (relativePath.indexOf('assets/') === 0) {
|
|
const assetsPath = path.join(process.env.ATOM_HOME, relativePath)
|
|
const stat = fs.statSyncNoException(assetsPath)
|
|
if (stat && stat.isFile()) filePath = assetsPath
|
|
}
|
|
|
|
if (!filePath) {
|
|
for (let loadPath of this.loadPaths) {
|
|
filePath = path.join(loadPath, relativePath)
|
|
const stat = fs.statSyncNoException(filePath)
|
|
if (stat && stat.isFile()) break
|
|
}
|
|
}
|
|
|
|
callback(filePath)
|
|
})
|
|
}
|
|
}
|