This commit is contained in:
parent
ada0186506
commit
fe681b6017
1 changed files with 67 additions and 0 deletions
67
meta.js
Normal file
67
meta.js
Normal file
|
@ -0,0 +1,67 @@
|
|||
// This is a copy of https://github.com/pd4d10/userscript-meta/blob/master/index.js
|
||||
'use strict'
|
||||
|
||||
function isUndefined(val) {
|
||||
return typeof val === 'undefined'
|
||||
}
|
||||
|
||||
function isObject(val) {
|
||||
return typeof val === 'object' && val !== null
|
||||
}
|
||||
|
||||
// Parse metadata to an object
|
||||
function parse(meta) {
|
||||
if (typeof meta !== 'string') {
|
||||
throw new Error('`Parse`\'s first argument should be a string')
|
||||
}
|
||||
|
||||
return meta.split(/[\r\n]/)
|
||||
.filter(function (line) { // remove blank line
|
||||
return /\S+/.test(line) &&
|
||||
line.indexOf('==UserScript==') === -1 &&
|
||||
line.indexOf('==/UserScript==') === -1
|
||||
})
|
||||
.reduce(function (obj, line) {
|
||||
var arr = line.trim().replace(/^\/\//, '').trim().split(/\s+/)
|
||||
var key = arr[0].slice(1)
|
||||
var value = arr.slice(1).join(' ')
|
||||
|
||||
if (isUndefined(obj[key])) {
|
||||
obj[key] = value
|
||||
} else if (Array.isArray(obj[key])) {
|
||||
obj[key].push(value)
|
||||
} else {
|
||||
obj[key] = [obj[key], value]
|
||||
}
|
||||
|
||||
return obj
|
||||
}, {})
|
||||
}
|
||||
|
||||
function getLine(key, value) {
|
||||
// For field which has multiple values, like `match`
|
||||
if (Array.isArray(value)) {
|
||||
return value.map(function (value) {
|
||||
return getLine(key, value)
|
||||
}).join('')
|
||||
}
|
||||
|
||||
return '// @' + key + ' ' + value + '\n'
|
||||
}
|
||||
|
||||
// Stringify metadata from an object
|
||||
function stringify(obj) {
|
||||
if (!isObject(obj)) {
|
||||
throw new Error('`Stringify`\'s first argument should be an object')
|
||||
}
|
||||
|
||||
var meta = Object.keys(obj)
|
||||
.map(function (key) {
|
||||
return getLine(key, obj[key])
|
||||
}).join('')
|
||||
|
||||
return '// ==UserScript==\n' + meta + '// ==/UserScript==\n'
|
||||
}
|
||||
|
||||
exports.parse = parse
|
||||
exports.stringify = stringify
|
Loading…
Reference in a new issue