1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- 'use strict';
- const yaml = require('js-yaml');
- const fs = require('hexo-fs');
- const { extname } = require('path');
- const Promise = require('bluebird');
- function configConsole(args) {
- const key = args._[0];
- let value = args._[1];
- if (!key) {
- console.log(this.config);
- return Promise.resolve();
- }
- if (!value) {
- value = getProperty(this.config, key);
- if (value) console.log(value);
- return Promise.resolve();
- }
- const configPath = this.config_path;
- const ext = extname(configPath);
- return fs.exists(configPath).then(exist => {
- if (!exist) return {};
- return this.render.render({path: configPath});
- }).then(config => {
- if (!config) config = {};
- setProperty(config, key, castValue(value));
- const result = ext === '.json' ? JSON.stringify(config) : yaml.dump(config);
- return fs.writeFile(configPath, result);
- });
- }
- function getProperty(obj, key) {
- const split = key.split('.');
- let result = obj[split[0]];
- for (let i = 1, len = split.length; i < len; i++) {
- result = result[split[i]];
- }
- return result;
- }
- function setProperty(obj, key, value) {
- const split = key.split('.');
- let cursor = obj;
- const lastKey = split.pop();
- for (let i = 0, len = split.length; i < len; i++) {
- const name = split[i];
- cursor[name] = cursor[name] || {};
- cursor = cursor[name];
- }
- cursor[lastKey] = value;
- }
- function castValue(value) {
- switch (value) {
- case 'true':
- return true;
- case 'false':
- return false;
- case 'null':
- return null;
- case 'undefined':
- return undefined;
- }
- const num = Number(value);
- if (!isNaN(num)) return num;
- return value;
- }
- module.exports = configConsole;
|