forked from fanruan/fineui
guy
7 years ago
24 changed files with 1378 additions and 3628 deletions
@ -1,17 +1,17 @@ |
|||||||
Demo.ADDONS_CONFIG = [{ |
Demo.ADDONS_CONFIG = [{ |
||||||
id: 7, |
id: 1000, |
||||||
text: "addons" |
text: "addons" |
||||||
}, { |
}, { |
||||||
pId: 7, |
pId: 1000, |
||||||
id: 701, |
id: 1001, |
||||||
text: "拓展图表控件" |
text: "拓展图表控件" |
||||||
}, { |
}, { |
||||||
pId: 701, |
pId: 1001, |
||||||
text: "柱状图", |
text: "柱状图", |
||||||
value: "demo.axis_chart" |
value: "demo.axis_chart" |
||||||
}, { |
}, { |
||||||
pId: 7, |
pId: 1000, |
||||||
id: 702, |
id: 1002, |
||||||
text: "滚动sliders", |
text: "滚动sliders", |
||||||
value: "demo.slider" |
value: "demo.slider" |
||||||
}]; |
}]; |
@ -0,0 +1,38 @@ |
|||||||
|
Demo.Store = BI.inherit(Fix.VM, { |
||||||
|
computed: { |
||||||
|
b: function () { |
||||||
|
return this.model.name + 1 |
||||||
|
}, |
||||||
|
c: function () { |
||||||
|
return this.model.name + this.model.b |
||||||
|
} |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
run: function () { |
||||||
|
this.model.name = 2; |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
var model = new Fix.Observer({ |
||||||
|
name: 1, |
||||||
|
arr: [{ |
||||||
|
n: 'a' |
||||||
|
}, { |
||||||
|
n: 'b' |
||||||
|
}] |
||||||
|
}).model; |
||||||
|
Demo.Fix = BI.inherit(BI.Widget, { |
||||||
|
_store: function () { |
||||||
|
return new Demo.Store(model); |
||||||
|
}, |
||||||
|
watch: { |
||||||
|
b: function () { |
||||||
|
debugger; |
||||||
|
} |
||||||
|
}, |
||||||
|
mounted: function () { |
||||||
|
this.store.run() |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
BI.shortcut("demo.fix", Demo.Fix); |
@ -0,0 +1,51 @@ |
|||||||
|
;(function () { |
||||||
|
function initWatch(vm, watch) { |
||||||
|
vm._watchers || (vm._watchers = []); |
||||||
|
for (var key in watch) { |
||||||
|
var handler = watch[key] |
||||||
|
if (BI.isArray(handler)) { |
||||||
|
for (var i = 0; i < handler.length; i++) { |
||||||
|
vm._watchers.push(createWatcher(vm, key, handler[i])) |
||||||
|
} |
||||||
|
} else { |
||||||
|
vm._watchers.push(createWatcher(vm, key, handler)) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function createWatcher(vm, keyOrFn, handler, options) { |
||||||
|
if (BI.isPlainObject(handler)) { |
||||||
|
options = handler |
||||||
|
handler = handler.handler |
||||||
|
} |
||||||
|
if (typeof handler === 'string') { |
||||||
|
handler = vm[handler] |
||||||
|
} |
||||||
|
return Fix.VM.prototype.$watch.call(vm, keyOrFn, handler, options) |
||||||
|
} |
||||||
|
|
||||||
|
var _init = BI.Widget.prototype._init; |
||||||
|
BI.Widget.prototype._init = function () { |
||||||
|
if (window.Fix && this._store) { |
||||||
|
this.store = this._store(); |
||||||
|
if (this.store instanceof Fix.VM) { |
||||||
|
this.model = this.store.model; |
||||||
|
} else { |
||||||
|
this.model = this.store; |
||||||
|
} |
||||||
|
initWatch(this, this.watch); |
||||||
|
} |
||||||
|
_init.apply(this, arguments); |
||||||
|
}; |
||||||
|
|
||||||
|
var destroy = BI.Widget.prototype.destroy; |
||||||
|
BI.Widget.prototype.destroy = function () { |
||||||
|
destroy.apply(this, arguments); |
||||||
|
this.store && this.store.destroy(); |
||||||
|
BI.each(this._watchers, function (i, unwatch) { |
||||||
|
unwatch(); |
||||||
|
}); |
||||||
|
this._watchers && (this._watchers = []); |
||||||
|
this.store && (this.store = null); |
||||||
|
} |
||||||
|
}()); |
@ -0,0 +1,951 @@ |
|||||||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } |
||||||
|
|
||||||
|
(function (global, factory) { |
||||||
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : factory(global.Fix = global.Fix || {}); |
||||||
|
})(this, function (exports) { |
||||||
|
'use strict'; |
||||||
|
|
||||||
|
function noop(a, b, c) {} |
||||||
|
|
||||||
|
function isNative(Ctor) { |
||||||
|
return typeof Ctor === 'function' && /native code/.test(Ctor.toString()); |
||||||
|
} |
||||||
|
|
||||||
|
var rhashcode = /\d\.\d{4}/; |
||||||
|
|
||||||
|
//生成UUID http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript
|
||||||
|
function makeHashCode(prefix) { |
||||||
|
/* istanbul ignore next*/ |
||||||
|
prefix = prefix || 'bi'; |
||||||
|
/* istanbul ignore next*/ |
||||||
|
return String(Math.random() + Math.random()).replace(rhashcode, prefix); |
||||||
|
} |
||||||
|
|
||||||
|
var hasProto = '__proto__' in {}; |
||||||
|
|
||||||
|
var getIEVersion = function getIEVersion() { |
||||||
|
var version = 0; |
||||||
|
var agent = navigator.userAgent.toLowerCase(); |
||||||
|
var v1 = agent.match(/(?:msie\s([\w.]+))/); |
||||||
|
var v2 = agent.match(/(?:trident.*rv:([\w.]+))/); |
||||||
|
if (v1 && v2 && v1[1] && v2[1]) { |
||||||
|
version = Math.max(v1[1] * 1, v2[1] * 1); |
||||||
|
} else if (v1 && v1[1]) { |
||||||
|
version = v1[1] * 1; |
||||||
|
} else if (v2 && v2[1]) { |
||||||
|
version = v2[1] * 1; |
||||||
|
} else { |
||||||
|
version = 0; |
||||||
|
} |
||||||
|
return version; |
||||||
|
}; |
||||||
|
var isIE9Below = getIEVersion() < 9; |
||||||
|
|
||||||
|
var _toString = Object.prototype.toString; |
||||||
|
|
||||||
|
function isPlainObject(obj) { |
||||||
|
return _toString.call(obj) === '[object Object]'; |
||||||
|
} |
||||||
|
|
||||||
|
function remove(arr, item) { |
||||||
|
if (arr.length) { |
||||||
|
var _index = arr.indexOf(item); |
||||||
|
if (_index > -1) { |
||||||
|
return arr.splice(_index, 1); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
var bailRE = /[^\w.$]/; |
||||||
|
|
||||||
|
function parsePath(path) { |
||||||
|
if (bailRE.test(path)) { |
||||||
|
return; |
||||||
|
} |
||||||
|
var segments = path.split('.'); |
||||||
|
return function (obj) { |
||||||
|
for (var i = 0; i < segments.length; i++) { |
||||||
|
if (!obj) return; |
||||||
|
obj = obj[segments[i]]; |
||||||
|
} |
||||||
|
return obj; |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
var nextTick = function () { |
||||||
|
var callbacks = []; |
||||||
|
var pending = false; |
||||||
|
var timerFunc = void 0; |
||||||
|
|
||||||
|
function nextTickHandler() { |
||||||
|
pending = false; |
||||||
|
var copies = callbacks.slice(0); |
||||||
|
callbacks.length = 0; |
||||||
|
for (var i = 0; i < copies.length; i++) { |
||||||
|
copies[i](); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// An asynchronous deferring mechanism.
|
||||||
|
// In pre 2.4, we used to use microtasks (Promise/MutationObserver)
|
||||||
|
// but microtasks actually has too high a priority and fires in between
|
||||||
|
// supposedly sequential events (e.g. #4521, #6690) or even between
|
||||||
|
// bubbling of the same event (#6566). Technically setImmediate should be
|
||||||
|
// the ideal choice, but it's not available everywhere; and the only polyfill
|
||||||
|
// that consistently queues the callback after all DOM events triggered in the
|
||||||
|
// same loop is by using MessageChannel.
|
||||||
|
/* istanbul ignore if */ |
||||||
|
if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) { |
||||||
|
timerFunc = function timerFunc() { |
||||||
|
setImmediate(nextTickHandler); |
||||||
|
}; |
||||||
|
} else if (typeof MessageChannel !== 'undefined' && (isNative(MessageChannel) || |
||||||
|
// PhantomJS
|
||||||
|
MessageChannel.toString() === '[object MessageChannelConstructor]')) { |
||||||
|
var channel = new MessageChannel(); |
||||||
|
var port = channel.port2; |
||||||
|
channel.port1.onmessage = nextTickHandler; |
||||||
|
timerFunc = function timerFunc() { |
||||||
|
port.postMessage(1); |
||||||
|
}; |
||||||
|
} else |
||||||
|
/* istanbul ignore next */ |
||||||
|
if (typeof Promise !== 'undefined' && isNative(Promise)) { |
||||||
|
// use microtask in non-DOM environments, e.g. Weex
|
||||||
|
var p = Promise.resolve(); |
||||||
|
timerFunc = function timerFunc() { |
||||||
|
p.then(nextTickHandler); |
||||||
|
}; |
||||||
|
} else { |
||||||
|
// fallback to setTimeout
|
||||||
|
timerFunc = function timerFunc() { |
||||||
|
setTimeout(nextTickHandler, 0); |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
return function queueNextTick(cb, ctx) { |
||||||
|
var _resolve = void 0; |
||||||
|
callbacks.push(function () { |
||||||
|
if (cb) { |
||||||
|
try { |
||||||
|
cb.call(ctx); |
||||||
|
} catch (e) {} |
||||||
|
} else if (_resolve) { |
||||||
|
_resolve(ctx); |
||||||
|
} |
||||||
|
}); |
||||||
|
if (!pending) { |
||||||
|
pending = true; |
||||||
|
timerFunc(); |
||||||
|
} |
||||||
|
// $flow-disable-line
|
||||||
|
if (!cb && typeof Promise !== 'undefined') { |
||||||
|
return new Promise(function (resolve, reject) { |
||||||
|
_resolve = resolve; |
||||||
|
}); |
||||||
|
} |
||||||
|
}; |
||||||
|
}(); |
||||||
|
|
||||||
|
var falsy; |
||||||
|
var $$skipArray = { |
||||||
|
__ob__: falsy, |
||||||
|
$accessors: falsy, |
||||||
|
$vbthis: falsy, |
||||||
|
$vbsetter: falsy |
||||||
|
}; |
||||||
|
|
||||||
|
var uid = 0; |
||||||
|
|
||||||
|
/** |
||||||
|
* A dep is an observable that can have multiple |
||||||
|
* directives subscribing to it. |
||||||
|
*/ |
||||||
|
|
||||||
|
var Dep = function () { |
||||||
|
function Dep() { |
||||||
|
_classCallCheck(this, Dep); |
||||||
|
|
||||||
|
this.id = uid++; |
||||||
|
this.subs = []; |
||||||
|
} |
||||||
|
|
||||||
|
Dep.prototype.addSub = function addSub(sub) { |
||||||
|
this.subs.push(sub); |
||||||
|
}; |
||||||
|
|
||||||
|
Dep.prototype.removeSub = function removeSub(sub) { |
||||||
|
remove(this.subs, sub); |
||||||
|
}; |
||||||
|
|
||||||
|
Dep.prototype.depend = function depend() { |
||||||
|
if (Dep.target) { |
||||||
|
Dep.target.addDep(this); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
Dep.prototype.notify = function notify() { |
||||||
|
// stabilize the subscriber list first
|
||||||
|
var subs = this.subs.slice(); |
||||||
|
for (var i = 0, l = subs.length; i < l; i++) { |
||||||
|
subs[i].update(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
return Dep; |
||||||
|
}(); |
||||||
|
|
||||||
|
// the current target watcher being evaluated.
|
||||||
|
// this is globally unique because there could be only one
|
||||||
|
// watcher being evaluated at any time.
|
||||||
|
|
||||||
|
|
||||||
|
Dep.target = null; |
||||||
|
var targetStack = []; |
||||||
|
|
||||||
|
function pushTarget(_target) { |
||||||
|
if (Dep.target) targetStack.push(Dep.target); |
||||||
|
Dep.target = _target; |
||||||
|
} |
||||||
|
|
||||||
|
function popTarget() { |
||||||
|
Dep.target = targetStack.pop(); |
||||||
|
} |
||||||
|
|
||||||
|
//如果浏览器不支持ecma262v5的Object.defineProperties或者存在BUG,比如IE8
|
||||||
|
//标准浏览器使用__defineGetter__, __defineSetter__实现
|
||||||
|
var canHideProperty = true; |
||||||
|
try { |
||||||
|
Object.defineProperty({}, '_', { |
||||||
|
value: 'x' |
||||||
|
}); |
||||||
|
delete $$skipArray.$vbsetter; |
||||||
|
delete $$skipArray.$vbthis; |
||||||
|
} catch (e) { |
||||||
|
/* istanbul ignore next*/ |
||||||
|
canHideProperty = false; |
||||||
|
} |
||||||
|
|
||||||
|
var createViewModel = Object.defineProperties; |
||||||
|
var defineProperty = void 0; |
||||||
|
|
||||||
|
var timeBucket = new Date() - 0; |
||||||
|
/* istanbul ignore if*/ |
||||||
|
if (!canHideProperty) { |
||||||
|
if ('__defineGetter__' in {}) { |
||||||
|
defineProperty = function defineProperty(obj, prop, desc) { |
||||||
|
if ('value' in desc) { |
||||||
|
obj[prop] = desc.value; |
||||||
|
} |
||||||
|
if ('get' in desc) { |
||||||
|
obj.__defineGetter__(prop, desc.get); |
||||||
|
} |
||||||
|
if ('set' in desc) { |
||||||
|
obj.__defineSetter__(prop, desc.set); |
||||||
|
} |
||||||
|
return obj; |
||||||
|
}; |
||||||
|
createViewModel = function createViewModel(obj, descs) { |
||||||
|
for (var prop in descs) { |
||||||
|
if (descs.hasOwnProperty(prop)) { |
||||||
|
defineProperty(obj, prop, descs[prop]); |
||||||
|
} |
||||||
|
} |
||||||
|
return obj; |
||||||
|
}; |
||||||
|
} |
||||||
|
/* istanbul ignore if*/ |
||||||
|
if (isIE9Below) { |
||||||
|
var VBClassPool = {}; |
||||||
|
window.execScript([// jshint ignore:line
|
||||||
|
'Function parseVB(code)', '\tExecuteGlobal(code)', 'End Function' //转换一段文本为VB代码
|
||||||
|
].join('\n'), 'VBScript'); |
||||||
|
|
||||||
|
var VBMediator = function VBMediator(instance, accessors, name, value) { |
||||||
|
// jshint ignore:line
|
||||||
|
var accessor = accessors[name]; |
||||||
|
if (arguments.length === 4) { |
||||||
|
accessor.set.call(instance, value); |
||||||
|
} else { |
||||||
|
return accessor.get.call(instance); |
||||||
|
} |
||||||
|
}; |
||||||
|
createViewModel = function createViewModel(name, accessors, properties) { |
||||||
|
// jshint ignore:line
|
||||||
|
var buffer = []; |
||||||
|
buffer.push('\tPrivate [$vbsetter]', '\tPublic [$accessors]', '\tPublic Default Function [$vbthis](ac' + timeBucket + ', s' + timeBucket + ')', '\t\tSet [$accessors] = ac' + timeBucket + ': set [$vbsetter] = s' + timeBucket, '\t\tSet [$vbthis] = Me', //链式调用
|
||||||
|
'\tEnd Function'); |
||||||
|
//添加普通属性,因为VBScript对象不能像JS那样随意增删属性,必须在这里预先定义好
|
||||||
|
var uniq = { |
||||||
|
$vbthis: true, |
||||||
|
$vbsetter: true, |
||||||
|
$accessors: true |
||||||
|
}; |
||||||
|
for (name in $$skipArray) { |
||||||
|
if (!uniq[name]) { |
||||||
|
buffer.push('\tPublic [' + name + ']'); |
||||||
|
uniq[name] = true; |
||||||
|
} |
||||||
|
} |
||||||
|
//添加访问器属性
|
||||||
|
for (name in accessors) { |
||||||
|
if (uniq[name]) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
uniq[name] = true; |
||||||
|
buffer.push( |
||||||
|
//由于不知对方会传入什么,因此set, let都用上
|
||||||
|
'\tPublic Property Let [' + name + '](val' + timeBucket + ')', //setter
|
||||||
|
'\t\tCall [$vbsetter](Me, [$accessors], "' + name + '", val' + timeBucket + ')', '\tEnd Property', '\tPublic Property Set [' + name + '](val' + timeBucket + ')', //setter
|
||||||
|
'\t\tCall [$vbsetter](Me, [$accessors], "' + name + '", val' + timeBucket + ')', '\tEnd Property', '\tPublic Property Get [' + name + ']', //getter
|
||||||
|
'\tOn Error Resume Next', //必须优先使用set语句,否则它会误将数组当字符串返回
|
||||||
|
'\t\tSet[' + name + '] = [$vbsetter](Me, [$accessors],"' + name + '")', '\tIf Err.Number <> 0 Then', '\t\t[' + name + '] = [$vbsetter](Me, [$accessors],"' + name + '")', '\tEnd If', '\tOn Error Goto 0', '\tEnd Property'); |
||||||
|
} |
||||||
|
|
||||||
|
for (name in properties) { |
||||||
|
if (!uniq[name]) { |
||||||
|
uniq[name] = true; |
||||||
|
buffer.push('\tPublic [' + name + ']'); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
buffer.push('\tPublic [hasOwnProperty]'); |
||||||
|
buffer.push('End Class'); |
||||||
|
var body = buffer.join('\r\n'); |
||||||
|
var className = VBClassPool[body]; |
||||||
|
if (!className) { |
||||||
|
className = makeHashCode('VBClass'); |
||||||
|
window.parseVB('Class ' + className + body); |
||||||
|
window.parseVB(['Function ' + className + 'Factory(acc, vbm)', //创建实例并传入两个关键的参数
|
||||||
|
'\tDim o', '\tSet o = (New ' + className + ')(acc, vbm)', '\tSet ' + className + 'Factory = o', 'End Function'].join('\r\n')); |
||||||
|
VBClassPool[body] = className; |
||||||
|
} |
||||||
|
var ret = window[className + 'Factory'](accessors, VBMediator); //得到其产品
|
||||||
|
return ret; //得到其产品
|
||||||
|
}; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
var createViewModel$1 = createViewModel; |
||||||
|
|
||||||
|
var queue = []; |
||||||
|
var activatedChildren = []; |
||||||
|
var has = {}; |
||||||
|
var waiting = false; |
||||||
|
var flushing = false; |
||||||
|
var index = 0; |
||||||
|
|
||||||
|
function resetSchedulerState() { |
||||||
|
index = queue.length = activatedChildren.length = 0; |
||||||
|
has = {}; |
||||||
|
waiting = flushing = false; |
||||||
|
} |
||||||
|
|
||||||
|
function flushSchedulerQueue() { |
||||||
|
flushing = true; |
||||||
|
var watcher = void 0, |
||||||
|
id = void 0; |
||||||
|
|
||||||
|
// Sort queue before flush.
|
||||||
|
// This ensures that:
|
||||||
|
// 1. Components are updated from parent to child. (because parent is always
|
||||||
|
// created before the child)
|
||||||
|
// 2. A component's user watchers are run before its render watcher (because
|
||||||
|
// user watchers are created before the render watcher)
|
||||||
|
// 3. If a component is destroyed during a parent component's watcher run,
|
||||||
|
// its watchers can be skipped.
|
||||||
|
queue.sort(function (a, b) { |
||||||
|
return a.id - b.id; |
||||||
|
}); |
||||||
|
|
||||||
|
// do not cache length because more watchers might be pushed
|
||||||
|
// as we run existing watchers
|
||||||
|
for (index = 0; index < queue.length; index++) { |
||||||
|
watcher = queue[index]; |
||||||
|
id = watcher.id; |
||||||
|
has[id] = null; |
||||||
|
watcher.run(); |
||||||
|
} |
||||||
|
|
||||||
|
resetSchedulerState(); |
||||||
|
} |
||||||
|
|
||||||
|
function queueWatcher(watcher) { |
||||||
|
var id = watcher.id; |
||||||
|
if (has[id] == null) { |
||||||
|
has[id] = true; |
||||||
|
if (!flushing) { |
||||||
|
queue.push(watcher); |
||||||
|
} else { |
||||||
|
// if already flushing, splice the watcher based on its id
|
||||||
|
// if already past its id, it will be run next immediately.
|
||||||
|
var i = queue.length - 1; |
||||||
|
while (i > index && queue[i].id > watcher.id) { |
||||||
|
i--; |
||||||
|
} |
||||||
|
queue.splice(i + 1, 0, watcher); |
||||||
|
} |
||||||
|
// queue the flush
|
||||||
|
if (!waiting) { |
||||||
|
waiting = true; |
||||||
|
nextTick(flushSchedulerQueue); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
var uid$1 = 0; |
||||||
|
|
||||||
|
var Watcher = function () { |
||||||
|
function Watcher(vm, expOrFn, cb, options) { |
||||||
|
_classCallCheck(this, Watcher); |
||||||
|
|
||||||
|
this.vm = vm; |
||||||
|
// vm._watchers || (vm._watchers = [])
|
||||||
|
// vm._watchers.push(this)
|
||||||
|
// options
|
||||||
|
if (options) { |
||||||
|
this.deep = !!options.deep; |
||||||
|
this.user = !!options.user; |
||||||
|
this.lazy = !!options.lazy; |
||||||
|
this.sync = !!options.sync; |
||||||
|
} else { |
||||||
|
this.deep = this.user = this.lazy = this.sync = false; |
||||||
|
} |
||||||
|
this.cb = cb; |
||||||
|
this.id = ++uid$1; // uid for batching
|
||||||
|
this.active = true; |
||||||
|
this.dirty = this.lazy; // for lazy watchers
|
||||||
|
this.deps = []; |
||||||
|
this.newDeps = []; |
||||||
|
this.depIds = new Set(); |
||||||
|
this.newDepIds = new Set(); |
||||||
|
this.expression = ''; |
||||||
|
// parse expression for getter
|
||||||
|
if (typeof expOrFn === 'function') { |
||||||
|
this.getter = expOrFn; |
||||||
|
} else { |
||||||
|
this.getter = parsePath(expOrFn); |
||||||
|
if (!this.getter) { |
||||||
|
this.getter = function () {}; |
||||||
|
} |
||||||
|
} |
||||||
|
this.value = this.lazy ? undefined : this.get(); |
||||||
|
} |
||||||
|
|
||||||
|
Watcher.prototype.get = function get() { |
||||||
|
pushTarget(this); |
||||||
|
var value = void 0; |
||||||
|
var vm = this.vm; |
||||||
|
try { |
||||||
|
value = this.getter.call(vm, vm); |
||||||
|
} catch (e) { |
||||||
|
if (this.user) {} else { |
||||||
|
throw e; |
||||||
|
} |
||||||
|
} finally { |
||||||
|
// "touch" every property so they are all tracked as
|
||||||
|
// dependencies for deep watching
|
||||||
|
if (this.deep) { |
||||||
|
traverse(value); |
||||||
|
} |
||||||
|
popTarget(); |
||||||
|
this.cleanupDeps(); |
||||||
|
} |
||||||
|
return value; |
||||||
|
}; |
||||||
|
|
||||||
|
Watcher.prototype.addDep = function addDep(dep) { |
||||||
|
var id = dep.id; |
||||||
|
if (!this.newDepIds.has(id)) { |
||||||
|
this.newDepIds.add(id); |
||||||
|
this.newDeps.push(dep); |
||||||
|
if (!this.depIds.has(id)) { |
||||||
|
dep.addSub(this); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
Watcher.prototype.cleanupDeps = function cleanupDeps() { |
||||||
|
var i = this.deps.length; |
||||||
|
while (i--) { |
||||||
|
var dep = this.deps[i]; |
||||||
|
if (!this.newDepIds.has(dep.id)) { |
||||||
|
dep.removeSub(this); |
||||||
|
} |
||||||
|
} |
||||||
|
var tmp = this.depIds; |
||||||
|
this.depIds = this.newDepIds; |
||||||
|
this.newDepIds = tmp; |
||||||
|
this.newDepIds.clear(); |
||||||
|
tmp = this.deps; |
||||||
|
this.deps = this.newDeps; |
||||||
|
this.newDeps = tmp; |
||||||
|
this.newDeps.length = 0; |
||||||
|
}; |
||||||
|
|
||||||
|
Watcher.prototype.update = function update() { |
||||||
|
/* istanbul ignore else */ |
||||||
|
if (this.lazy) { |
||||||
|
this.dirty = true; |
||||||
|
} else if (this.sync) { |
||||||
|
this.run(); |
||||||
|
} else { |
||||||
|
queueWatcher(this); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
Watcher.prototype.run = function run() { |
||||||
|
if (this.active) { |
||||||
|
var value = this.get(); |
||||||
|
if (value !== this.value || |
||||||
|
// Deep watchers and watchers on Object/Arrays should fire even
|
||||||
|
// when the value is the same, because the value may
|
||||||
|
// have mutated.
|
||||||
|
_.isObject(value) || this.deep) { |
||||||
|
// set new value
|
||||||
|
var oldValue = this.value; |
||||||
|
this.value = value; |
||||||
|
if (this.user) { |
||||||
|
try { |
||||||
|
this.cb.call(this.vm, value, oldValue); |
||||||
|
} catch (e) {} |
||||||
|
} else { |
||||||
|
this.cb.call(this.vm, value, oldValue); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
Watcher.prototype.evaluate = function evaluate() { |
||||||
|
this.value = this.get(); |
||||||
|
this.dirty = false; |
||||||
|
}; |
||||||
|
|
||||||
|
Watcher.prototype.depend = function depend() { |
||||||
|
var i = this.deps.length; |
||||||
|
while (i--) { |
||||||
|
this.deps[i].depend(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
Watcher.prototype.teardown = function teardown() { |
||||||
|
if (this.active) { |
||||||
|
// remove self from vm's watcher list
|
||||||
|
// this is a somewhat expensive operation so we skip it
|
||||||
|
// if the vm is being destroyed.
|
||||||
|
if (!this.vm._isBeingDestroyed) { |
||||||
|
remove(this.vm._watchers, this); |
||||||
|
} |
||||||
|
var i = this.deps.length; |
||||||
|
while (i--) { |
||||||
|
this.deps[i].removeSub(this); |
||||||
|
} |
||||||
|
this.active = false; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
return Watcher; |
||||||
|
}(); |
||||||
|
|
||||||
|
var seenObjects = new Set(); |
||||||
|
|
||||||
|
function traverse(val) { |
||||||
|
seenObjects.clear(); |
||||||
|
_traverse(val, seenObjects); |
||||||
|
} |
||||||
|
|
||||||
|
function _traverse(val, seen) { |
||||||
|
var i = void 0, |
||||||
|
keys = void 0; |
||||||
|
var isA = _.isArray(val); |
||||||
|
if (!isA && !_.isObject(val)) { |
||||||
|
return; |
||||||
|
} |
||||||
|
if (val.__ob__) { |
||||||
|
var depId = val.__ob__.dep.id; |
||||||
|
if (seen.has(depId)) { |
||||||
|
return; |
||||||
|
} |
||||||
|
seen.add(depId); |
||||||
|
} |
||||||
|
if (isA) { |
||||||
|
i = val.length; |
||||||
|
while (i--) { |
||||||
|
_traverse(val[i], seen); |
||||||
|
} |
||||||
|
} else { |
||||||
|
keys = _.keys(val); |
||||||
|
i = keys.length; |
||||||
|
while (i--) { |
||||||
|
_traverse(val[keys[i]], seen); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
var arrayProto = Array.prototype; |
||||||
|
var arrayMethods = []; |
||||||
|
_.each(['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'], function (method) { |
||||||
|
var original = arrayProto[method]; |
||||||
|
arrayMethods[method] = function mutator() { |
||||||
|
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { |
||||||
|
args[_key] = arguments[_key]; |
||||||
|
} |
||||||
|
|
||||||
|
var ob = this.__ob__; |
||||||
|
var inserted = void 0; |
||||||
|
switch (method) { |
||||||
|
case 'push': |
||||||
|
case 'unshift': |
||||||
|
inserted = args; |
||||||
|
break; |
||||||
|
case 'splice': |
||||||
|
inserted = args.slice(2); |
||||||
|
break; |
||||||
|
} |
||||||
|
if (inserted) inserted = ob.observeArray(inserted); |
||||||
|
switch (method) { |
||||||
|
case 'push': |
||||||
|
case 'unshift': |
||||||
|
args = inserted; |
||||||
|
break; |
||||||
|
case 'splice': |
||||||
|
args = [args[0], args[1]].concat(inserted ? inserted : []); |
||||||
|
break; |
||||||
|
} |
||||||
|
var result = original.apply(this, args); |
||||||
|
ob.dep.notify(); |
||||||
|
return result; |
||||||
|
}; |
||||||
|
}); |
||||||
|
|
||||||
|
var arrayKeys = _.keys(arrayMethods); |
||||||
|
|
||||||
|
var observerState = { |
||||||
|
shouldConvert: true |
||||||
|
}; |
||||||
|
|
||||||
|
/** |
||||||
|
* Observer class that are attached to each observed |
||||||
|
* object. Once attached, the observer converts target |
||||||
|
* object's property keys into getter/setters that |
||||||
|
* collect dependencies and dispatches updates. |
||||||
|
*/ |
||||||
|
|
||||||
|
var Observer = function () { |
||||||
|
function Observer(value) { |
||||||
|
_classCallCheck(this, Observer); |
||||||
|
|
||||||
|
this.value = value; |
||||||
|
this.dep = new Dep(); |
||||||
|
this.vmCount = 0; |
||||||
|
if (_.isArray(value)) { |
||||||
|
var augment = hasProto ? protoAugment : copyAugment; |
||||||
|
augment(value, arrayMethods, arrayKeys); |
||||||
|
this.model = this.observeArray(value); |
||||||
|
} else { |
||||||
|
this.model = this.walk(value); |
||||||
|
} |
||||||
|
this.model['__ob__'] = this; |
||||||
|
} |
||||||
|
|
||||||
|
Observer.prototype.walk = function walk(obj) { |
||||||
|
return defineReactive(obj); |
||||||
|
}; |
||||||
|
|
||||||
|
Observer.prototype.observeArray = function observeArray(items) { |
||||||
|
for (var i = 0, l = items.length; i < l; i++) { |
||||||
|
items[i] = observe(items[i]).model; |
||||||
|
} |
||||||
|
return items; |
||||||
|
}; |
||||||
|
|
||||||
|
return Observer; |
||||||
|
}(); |
||||||
|
|
||||||
|
function protoAugment(target, src, keys) { |
||||||
|
/* eslint-disable no-proto */ |
||||||
|
target.__proto__ = src; |
||||||
|
/* eslint-enable no-proto */ |
||||||
|
} |
||||||
|
|
||||||
|
/* istanbul ignore next */ |
||||||
|
function copyAugment(target, src, keys) { |
||||||
|
for (var i = 0, l = keys.length; i < l; i++) { |
||||||
|
var key = keys[i]; |
||||||
|
target[key] = src[key]; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function observe(value, asRootData) { |
||||||
|
if (!_.isObject(value)) { |
||||||
|
return; |
||||||
|
} |
||||||
|
var ob = void 0; |
||||||
|
if (_.has(value, '__ob__') && value.__ob__ instanceof Observer) { |
||||||
|
ob = value.__ob__; |
||||||
|
} else if (observerState.shouldConvert && (_.isArray(value) || isPlainObject(value)) && !value._isVue) { |
||||||
|
ob = new Observer(value); |
||||||
|
} |
||||||
|
if (asRootData && ob) { |
||||||
|
ob.vmCount++; |
||||||
|
} |
||||||
|
return ob; |
||||||
|
} |
||||||
|
|
||||||
|
function defineReactive(obj, shallow) { |
||||||
|
|
||||||
|
var props = {}; |
||||||
|
_.each(obj, function (val, key) { |
||||||
|
if (key in $$skipArray) { |
||||||
|
return; |
||||||
|
} |
||||||
|
var dep = new Dep(); |
||||||
|
var childOb = !shallow && observe(val); |
||||||
|
props[key] = { |
||||||
|
enumerable: true, |
||||||
|
configurable: true, |
||||||
|
get: function reactiveGetter() { |
||||||
|
var value = val; |
||||||
|
if (Dep.target) { |
||||||
|
dep.depend(); |
||||||
|
if (childOb) { |
||||||
|
childOb.dep.depend(); |
||||||
|
if (_.isArray(value)) { |
||||||
|
dependArray(value); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return value; |
||||||
|
}, |
||||||
|
set: function reactiveSetter(newVal) { |
||||||
|
var value = val; |
||||||
|
if (newVal === value || newVal !== newVal && value !== value) { |
||||||
|
return; |
||||||
|
} |
||||||
|
val = newVal; |
||||||
|
childOb = !shallow && observe(newVal); |
||||||
|
obj[key] = childOb ? childOb.model : newVal; |
||||||
|
dep.notify(); |
||||||
|
} |
||||||
|
}; |
||||||
|
}); |
||||||
|
return createViewModel$1(obj, props); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Set a property on an object. Adds the new property and |
||||||
|
* triggers change notification if the property doesn't |
||||||
|
* already exist. |
||||||
|
*/ |
||||||
|
function set(target, key, val) { |
||||||
|
if (_.isArray(target)) { |
||||||
|
target.length = Math.max(target.length, key); |
||||||
|
target.splice(key, 1, val); |
||||||
|
return val; |
||||||
|
} |
||||||
|
if (_.has(target, key)) { |
||||||
|
target[key] = val; |
||||||
|
return val; |
||||||
|
} |
||||||
|
var ob = target.__ob__; |
||||||
|
if (target._isVue || ob && ob.vmCount) { |
||||||
|
return val; |
||||||
|
} |
||||||
|
if (!ob) { |
||||||
|
target[key] = val; |
||||||
|
return val; |
||||||
|
} |
||||||
|
defineReactive(ob.value, key, val); |
||||||
|
ob.dep.notify(); |
||||||
|
return val; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Delete a property and trigger change if necessary. |
||||||
|
*/ |
||||||
|
function del(target, key) { |
||||||
|
if (_.isArray(target)) { |
||||||
|
target.splice(key, 1); |
||||||
|
return; |
||||||
|
} |
||||||
|
var ob = target.__ob__; |
||||||
|
if (target._isVue || ob && ob.vmCount) { |
||||||
|
return; |
||||||
|
} |
||||||
|
if (!_.has(target, key)) { |
||||||
|
return; |
||||||
|
} |
||||||
|
delete target[key]; |
||||||
|
if (!ob) { |
||||||
|
return; |
||||||
|
} |
||||||
|
ob.dep.notify(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Collect dependencies on array elements when the array is touched, since |
||||||
|
* we cannot intercept array element access like property getters. |
||||||
|
*/ |
||||||
|
function dependArray(value) { |
||||||
|
for (var e, i = 0, l = value.length; i < l; i++) { |
||||||
|
e = value[i]; |
||||||
|
e && e.__ob__ && e.__ob__.dep.depend(); |
||||||
|
if (_.isArray(e)) { |
||||||
|
dependArray(e); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
var computedWatcherOptions = { lazy: true }; |
||||||
|
|
||||||
|
function initComputed(vm, computed) { |
||||||
|
var watchers = vm._computedWatchers = {}; |
||||||
|
|
||||||
|
defineComputed(vm, computed); |
||||||
|
|
||||||
|
for (var key in computed) { |
||||||
|
var userDef = computed[key]; |
||||||
|
var getter = typeof userDef === 'function' ? _.bind(userDef, vm) : _.bind(userDef.get, vm); |
||||||
|
|
||||||
|
watchers[key] = new Watcher(vm.$$computed, getter || noop, noop, computedWatcherOptions); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function defineComputed(target, computed) { |
||||||
|
var props = {}; |
||||||
|
var shouldCache = true; |
||||||
|
for (var key in computed) { |
||||||
|
if (!(key in target)) { |
||||||
|
var sharedPropertyDefinition = { |
||||||
|
enumerable: true, |
||||||
|
configurable: true, |
||||||
|
get: noop, |
||||||
|
set: noop |
||||||
|
}; |
||||||
|
var userDef = computed[key]; |
||||||
|
if (typeof userDef === 'function') { |
||||||
|
sharedPropertyDefinition.get = createComputedGetter(target, key); |
||||||
|
sharedPropertyDefinition.set = noop; |
||||||
|
} else { |
||||||
|
sharedPropertyDefinition.get = userDef.get ? shouldCache && userDef.cache !== false ? createComputedGetter(key) : userDef.get : noop; |
||||||
|
sharedPropertyDefinition.set = userDef.set ? userDef.set : noop; |
||||||
|
} |
||||||
|
|
||||||
|
props[key] = sharedPropertyDefinition; |
||||||
|
} |
||||||
|
} |
||||||
|
target.$$computed = createViewModel$1({}, props); |
||||||
|
} |
||||||
|
|
||||||
|
function createComputedGetter(vm, key) { |
||||||
|
return function computedGetter() { |
||||||
|
var watcher = vm._computedWatchers && vm._computedWatchers[key]; |
||||||
|
if (watcher) { |
||||||
|
if (watcher.dirty) { |
||||||
|
watcher.evaluate(); |
||||||
|
} |
||||||
|
if (Dep.target) { |
||||||
|
watcher.depend(); |
||||||
|
} |
||||||
|
return watcher.value; |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
function initMethods(vm, methods) { |
||||||
|
for (var key in methods) { |
||||||
|
vm[key] = methods[key] == null ? noop : _.bind(methods[key], vm); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function createWatcher(vm, keyOrFn, handler, options) { |
||||||
|
if (isPlainObject(handler)) { |
||||||
|
options = handler; |
||||||
|
handler = handler.handler; |
||||||
|
} |
||||||
|
if (typeof handler === 'string') { |
||||||
|
handler = vm[handler]; |
||||||
|
} |
||||||
|
return vm.$watch(keyOrFn, handler, options); |
||||||
|
} |
||||||
|
|
||||||
|
var VM = function () { |
||||||
|
function VM(model) { |
||||||
|
_classCallCheck(this, VM); |
||||||
|
|
||||||
|
var vm = this; |
||||||
|
if (model instanceof Observer) { |
||||||
|
model = model.model; |
||||||
|
} |
||||||
|
this.$$model = model; |
||||||
|
initComputed(this, this.computed); |
||||||
|
initMethods(this, this.methods); |
||||||
|
var keys = _.keys(model).concat(_.keys(this.computed)); |
||||||
|
var props = {}; |
||||||
|
|
||||||
|
var _loop = function _loop(i, len) { |
||||||
|
var key = keys[i]; |
||||||
|
if (!(key in $$skipArray)) { |
||||||
|
props[key] = { |
||||||
|
enumerable: true, |
||||||
|
configurable: true, |
||||||
|
get: function get() { |
||||||
|
return key in vm.$$model ? vm.$$model[key] : vm.$$computed[key]; |
||||||
|
}, |
||||||
|
set: function set(val) { |
||||||
|
return key in vm.$$model ? vm.$$model[key] = val : vm.$$computed[key] = val; |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
for (var i = 0, len = keys.length; i < len; i++) { |
||||||
|
_loop(i, len); |
||||||
|
} |
||||||
|
this.model = createViewModel$1({}, props); |
||||||
|
this.model.__ob__ = this.$$model.__ob__; |
||||||
|
this._init(); |
||||||
|
} |
||||||
|
|
||||||
|
VM.prototype.$watch = function $watch(expOrFn, cb, options) { |
||||||
|
var vm = this; |
||||||
|
if (isPlainObject(cb)) { |
||||||
|
return createWatcher(vm, expOrFn, cb, options); |
||||||
|
} |
||||||
|
options = options || {}; |
||||||
|
options.user = true; |
||||||
|
var watcher = new Watcher(vm.model, expOrFn, _.bind(cb, vm), options); |
||||||
|
if (options.immediate) { |
||||||
|
cb.call(vm, watcher.value); |
||||||
|
} |
||||||
|
return function unwatchFn() { |
||||||
|
watcher.teardown(); |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
VM.prototype._init = function _init() {}; |
||||||
|
|
||||||
|
VM.prototype.destroy = function destroy() { |
||||||
|
for (var _key2 in this._computedWatchers) { |
||||||
|
this._computedWatchers[_key2].teardown(); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
return VM; |
||||||
|
}(); |
||||||
|
|
||||||
|
var version = '2.0'; |
||||||
|
|
||||||
|
exports.version = version; |
||||||
|
exports.$$skipArray = $$skipArray; |
||||||
|
exports.VM = VM; |
||||||
|
exports.observerState = observerState; |
||||||
|
exports.Observer = Observer; |
||||||
|
exports.observe = observe; |
||||||
|
exports.defineReactive = defineReactive; |
||||||
|
exports.set = set; |
||||||
|
exports.del = del; |
||||||
|
exports.Watcher = Watcher; |
||||||
|
|
||||||
|
exports.__esModule = true; |
||||||
|
}); |
@ -0,0 +1,49 @@ |
|||||||
|
0 info it worked if it ends with ok |
||||||
|
1 verbose cli [ 'C:\\Program Files\\nodejs\\node.exe', |
||||||
|
1 verbose cli 'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js', |
||||||
|
1 verbose cli 'run', |
||||||
|
1 verbose cli 'start', |
||||||
|
1 verbose cli '--scripts-prepend-node-path=auto' ] |
||||||
|
2 info using npm@3.10.10 |
||||||
|
3 info using node@v6.11.4 |
||||||
|
4 verbose run-script [ 'prestart', 'start', 'poststart' ] |
||||||
|
5 info lifecycle fineui@1.0.1~prestart: fineui@1.0.1 |
||||||
|
6 silly lifecycle fineui@1.0.1~prestart: no script for prestart, continuing |
||||||
|
7 info lifecycle fineui@1.0.1~start: fineui@1.0.1 |
||||||
|
8 verbose lifecycle fineui@1.0.1~start: unsafe-perm in lifecycle true |
||||||
|
9 verbose lifecycle fineui@1.0.1~start: PATH: C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin;D:\PROJECT\fineui\node_modules\.bin;C:\Program Files\Docker\Docker\Resources\bin;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\TortoiseGit\bin;C:\Program Files\nodejs\;C:\Program Files (x86)\Microsoft Emulator Manager\1.0\;C:\Users\Wang\AppData\Local\Programs\Python\Python36-32\Scripts\;C:\Users\Wang\AppData\Local\Programs\Python\Python36-32\;C:\Users\Wang\AppData\Local\Microsoft\WindowsApps;C:\Program Files\Git\bin;C:\Program Files\Microsoft VS Code\bin;C:\Users\Wang\AppData\Roaming\npm |
||||||
|
10 verbose lifecycle fineui@1.0.1~start: CWD: D:\PROJECT\fineui |
||||||
|
11 silly lifecycle fineui@1.0.1~start: Args: [ '/d /s /c', 'node server.js' ] |
||||||
|
12 silly lifecycle fineui@1.0.1~start: Returned: code: 1 signal: null |
||||||
|
13 info lifecycle fineui@1.0.1~start: Failed to exec start script |
||||||
|
14 verbose stack Error: fineui@1.0.1 start: `node server.js` |
||||||
|
14 verbose stack Exit status 1 |
||||||
|
14 verbose stack at EventEmitter.<anonymous> (C:\Program Files\nodejs\node_modules\npm\lib\utils\lifecycle.js:255:16) |
||||||
|
14 verbose stack at emitTwo (events.js:106:13) |
||||||
|
14 verbose stack at EventEmitter.emit (events.js:191:7) |
||||||
|
14 verbose stack at ChildProcess.<anonymous> (C:\Program Files\nodejs\node_modules\npm\lib\utils\spawn.js:40:14) |
||||||
|
14 verbose stack at emitTwo (events.js:106:13) |
||||||
|
14 verbose stack at ChildProcess.emit (events.js:191:7) |
||||||
|
14 verbose stack at maybeClose (internal/child_process.js:920:16) |
||||||
|
14 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:230:5) |
||||||
|
15 verbose pkgid fineui@1.0.1 |
||||||
|
16 verbose cwd D:\PROJECT\fineui |
||||||
|
17 error Windows_NT 10.0.14393 |
||||||
|
18 error argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "start" "--scripts-prepend-node-path=auto" |
||||||
|
19 error node v6.11.4 |
||||||
|
20 error npm v3.10.10 |
||||||
|
21 error code ELIFECYCLE |
||||||
|
22 error fineui@1.0.1 start: `node server.js` |
||||||
|
22 error Exit status 1 |
||||||
|
23 error Failed at the fineui@1.0.1 start script 'node server.js'. |
||||||
|
23 error Make sure you have the latest version of node.js and npm installed. |
||||||
|
23 error If you do, this is most likely a problem with the fineui package, |
||||||
|
23 error not with npm itself. |
||||||
|
23 error Tell the author that this fails on your system: |
||||||
|
23 error node server.js |
||||||
|
23 error You can get information on how to open an issue for this project with: |
||||||
|
23 error npm bugs fineui |
||||||
|
23 error Or if that isn't available, you can get their info via: |
||||||
|
23 error npm owner ls fineui |
||||||
|
23 error There is likely additional logging output above. |
||||||
|
24 verbose exit [ 1, true ] |
Loading…
Reference in new issue