blob: 6f2e72e14e4e5e27708578fbf6008ccfb16942f6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
// JS Services
export const services = []
/**
* Register a JavaScript service.
* A JavaScript service options could have a set of lifecycle methods
* for each Weex instance. For example: create, refresh, destroy.
* For the JS framework maintainer if you want to supply some features
* which need to work well in different Weex instances, even in different
* frameworks separately. You can make a JavaScript service to init
* its variables or classes for each Weex instance when it's created
* and recycle them when it's destroyed.
* @param {object} options Could have { create, refresh, destroy }
* lifecycle methods. In create method it should
* return an object of what variables or classes
* would be injected into the Weex instance.
*/
export function register (name, options) {
if (has(name)) {
console.warn(`Service "${name}" has been registered already!`)
}
else {
options = Object.assign({}, options)
services.push({ name, options })
}
}
/**
* Unregister a JavaScript service by name
* @param {string} name
*/
export function unregister (name) {
services.some((service, index) => {
if (service.name === name) {
services.splice(index, 1)
return true
}
})
}
/**
* Check if a JavaScript service with a certain name existed.
* @param {string} name
* @return {Boolean}
*/
export function has (name) {
return indexOf(name) >= 0
}
/**
* Find the index of a JavaScript service by name
* @param {string} name
* @return {number}
*/
function indexOf (name) {
return services.map(service => service.name).indexOf(name)
}