функции среды integra-node-red используемые при разработке новых нодов
- require
- uuid
- nodes
- firefly
- srv2ff
- obtainToken
- resolveRouter
- resolveServer
- dissolveRouter
- dissolveServer
- invokeProc
- invokeStoredProc
- applyOnServers
- isInvalidUpdate
- processUpdates
- getLocalServerAt
- isLocalServer
- isAllowedServer
- isAllowedObject
- isAllowedChange
- getStaticPath
- readStaticFileSync
- readStaticFileAsync
- writeStaticFileSync
- writeStaticFileAsync
- parseTimeZoneOffset
// только для загрузки в исходнике нода integra-node-red:
// var gobal = this.context().global
// загрузка в function ноде или исходнике нода integra-node-red:
// var { typedef } = gobal.get('typedef-loader')
// var { translate } = gobal.get('translation-loader')
// var { uuid, processUpdates } = global.get('integra-node-red')
// нужно вызывать это в конце каждой ячейки
// для предотвращения постоянных логов
function disableLogging() {
var log = console.log;
console.log = (title, ...args) => {
switch(title) {
case 'PULSE:': break;
case 'INPUT:': break;
case 'OUTPUT:': break;
default: log(title, ...args);
}
}
}
// загрузка в nodejs:
require("babel-polyfill");
Object.assign(global, require('./amjs.js'));
startPlugins();
processPluginCallback(null, 'onstart');
Object.values(firefly).map(connectToRouter);
disableLogging();
'ok'
miscutils-api
miscutils v1.36
static-eval-api
static-eval v1.16
GRAPH-LOAD-API
GRAPH-CHANGE-API
GRAPH-PATH-API
FIELDS-SELECTION-API
TYPEDEF-UTILS
supergraph.js v1.47
wamp-client-api
ff-client-api
ffwamp.js v1.16
__dirname: /home/undwad/ipynb/daisyjs/docs
NO TIMESTAMP!
argv: { _: [] }
Promise.allSettled: [Function: allSettled]
Object.fromEntries: [Function: fromEntries]
GLOBALS: {
"auth": {
"origin": "http://192.168.10.13:8888",
"user": "undwad",
"pass": "undwad"
},
"firefly": {
"ff1": {
"url": "ws://192.168.10.72:8301/ws"
}
},
"plugins": {
"typedef-loader": {},
"translation-loader": {}
},
"pulse": {
"timeout": 30
},
"reconnection": {
"interval": 10
},
"mainloop": {
"delay": 0.1
}
}
FIREFLY: {
ff1: {
url: 'ws://192.168.10.72:8301/ws',
key: 'ff1',
loaded: [],
servers: [ 'local' ]
}
}
[Function: run]
amjs v1.48
PLUGIN(typedef-loader): {} http://maps.integra-s.com:5434/resources/typedef2017/acuario2.types.json
PLUGIN(typedef-loader): typedef.json loaded 0.0.0.1419 Tue Sep 13 2022 09:32:49 GMT+0000 (Coordinated Universal Time)
PLUGIN(translation-loader): {} http://maps.integra-s.com:5434/resources/typedef2017/acuario2.types.ru.ts
PLUGIN(translation-loader): translation.json loaded Tue Sep 13 2022 09:32:49 GMT+0000 (Coordinated Universal Time)
CONNECTING: ff1 ws://192.168.10.72:8301/ws
'ok'
TOPIC: com.integra.selector.71.afe1ac7ee74a5b2800a4e8ef806cac89
CONNECTED: ff1 ws://192.168.10.72:8301/ws {
last: 1663250268.445,
num: 1,
gap: 0.746999979019165,
cma: 0.746999979019165
}
LOADING: ff1 ws://192.168.10.72:8301/ws [ '5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5' ]
LOADED: ff1 ws://192.168.10.72:8301/ws [ '5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5' ] {
last: 1663250268.704,
num: 1,
gap: 0.25799989700317383,
cma: 0.25799989700317383
}
GRAPH: 5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5 items: 37, links: 29
плагин управляющий обновлением метаданных системы в формате json по умолчанию источником актуальной копии описания типов является: http://maps.integra-s.com:5434/resources/typedef2017/acuario2.types.json
// загрузка в исходнике нода integra-node-red:
// var { typedef } = this.context().gobal.get('typedef-loader')
// загрузка в function ноде integra-node-red:
// var { typedef } = gobal.get('typedef-loader')
// загрузка в плагине amjs:
var { typedef, typedef_version, last_modified } = global.plugins['typedef-loader'].api
disableLogging()
содержит актуальное описание типов в формате json используется в качестве первого аргумента функций работы с метаданными:
console.log(truncate(JSON.stringify(typedef,null,2),1000))
disableLogging()
{
"version": "0.0.0.1419",
"types": {
"TensorPump": {
"attributes": {
"type": "TensorPump"
},
"is": [
"Item",
"TensorPump",
"BaseObject",
"SpatialObject"
],
"param": {
"position": {
"attributes": {
"name": "position",
"type": "point",
"editable": "true"
},
"default": "POINT(0 0)"
},
"altitude": {
"attributes": {
"name": "altitude",
"type": "real",
"editable": "true"
},
"default": -65535
},
"organization": {
"attributes": {
"name": "organization",
"editable": "true"
},
"default": null
},
"additional_info": {
"attributes": {
"name": "additional_info",
"editable": "true"
},
"default": null
},
"state": {
...
содержит версию актуального описания типов
console.log(typedef_version)
disableLogging()
0.0.0.1419
содержит время последнего обновления актуального описания типов
console.log(last_modified)
disableLogging()
2022-09-13T09:32:49.000Z
плагин управляющий обновлением файла локализации системы в формате json по умолчанию источником актуальной копии файла локализации является: http://maps.integra-s.com:5434/resources/typedef2017/acuario2.types.ru.ts
// загрузка в исходнике нода integra-node-red:
// var { translate } = this.context().gobal.get('translation-loader')
// загрузка в function ноде integra-node-red:
// var { translate } = gobal.get('translation-loader')
// загрузка в плагине amjs:
var { translate, translation, last_modified } = global.plugins['translation-loader'].api
disableLogging()
функция translate используется для перевода на русский различных текстовых данных и структур их содержащих
var obj = queryPath('Item/ZoneLink/1')
console.log("перевести строку:", translate('command'), '\n')
console.log("перевести гуид сервера в имя:", translate(obj.serverId), '\n')
console.log("перевести гуид датчика в имя:", translate(obj.id), '\n')
console.log("перевести строку в указаном контексте:", translate('alarm.alarm', {context: 'FireSensorState'}), '\n')
console.log("перевести все знакомое в датчике:", JSON.stringify(translate(obj),null,2), '\n')
console.log("перевести все знакомое в датчике включая атрибуты:", JSON.stringify(translate(obj, {keys: true}),null,2), '\n')
disableLogging()
перевести строку: Команда
перевести гуид сервера в имя: Local server
перевести гуид датчика в имя: aca0eda9-6abe-4a1e-879b-bca997e05c86
перевести строку в указаном контексте: Тревога
перевести все знакомое в датчике: {
"params": {
"out": {
"version": 2468956,
"value": "b5f7bcf0-2156-413e-8704-ff8e2993cd10.zoneOutputPin",
"datetime": 1656490400,
"dateName": "2022-06-29",
"timeName": "08:13:20",
"valueName": "b5f7bcf0-2156-413e-8704-ff8e2993cd10.zoneOutputPin"
},
"weight": {
"version": 2498181,
"value": 2,
"datetime": 1663244038,
"dateName": "2022-09-15",
"timeName": "12:13:58",
"valueName": 2
},
"in": {
"version": 2468954,
"value": "5c8728ad-3619-4a14-a487-74c36db84112.zoneInputPin",
"datetime": 1656490400,
"dateName": "2022-06-29",
"timeName": "08:13:20",
"valueName": "5c8728ad-3619-4a14-a487-74c36db84112.zoneInputPin"
}
},
"types": [
"Link",
"ZoneLink"
],
"serverId": "5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5",
"id": "aca0eda9-6abe-4a1e-879b-bca997e05c86",
"time": 1663250268.711,
"objectName": "aca0eda9-6abe-4a1e-879b-bca997e05c86",
"serverName": "Local server",
"typeName": "Связь с зоной",
"typeNames": [
"Link",
"Связь с зоной"
]
}
перевести все знакомое в датчике включая атрибуты: {
"params": {
"Выход": {
"Версия": 2468956,
"Значение": "b5f7bcf0-2156-413e-8704-ff8e2993cd10.zoneOutputPin",
"Дата и время": 1656490400,
"dateName": "2022-06-29",
"timeName": "08:13:20",
"valueName": "b5f7bcf0-2156-413e-8704-ff8e2993cd10.zoneOutputPin"
},
"Вес": {
"Версия": 2498181,
"Значение": 2,
"Дата и время": 1663244038,
"dateName": "2022-09-15",
"timeName": "12:13:58",
"valueName": 2
},
"Вход": {
"Версия": 2468954,
"Значение": "5c8728ad-3619-4a14-a487-74c36db84112.zoneInputPin",
"Дата и время": 1656490400,
"dateName": "2022-06-29",
"timeName": "08:13:20",
"valueName": "5c8728ad-3619-4a14-a487-74c36db84112.zoneInputPin"
}
},
"Типы целей": [
"Link",
"ZoneLink"
],
"serverId": "5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5",
"Идентификатор": "aca0eda9-6abe-4a1e-879b-bca997e05c86",
"Время": 1663250268.711,
"objectName": "aca0eda9-6abe-4a1e-879b-bca997e05c86",
"serverName": "Local server",
"typeName": "Связь с зоной",
"typeNames": [
"Link",
"Связь с зоной"
]
}
содержит актуальные данные локализациив формате json
console.log(truncate(JSON.stringify(translation,null,2),1000))
disableLogging()
{
"_": {
"LockState": "Состояние замка",
"NULL": "Неизвестно",
"ok.normal": "В норме",
"error.defective": "Неисправно",
"alarm.alarm": "Тревога",
"none.unknown": "Неизвестно",
"": "",
"alarm.blocked": "Внимание блокировка",
"ok.unlocked": "Открыт",
"ok.security_off": "Не под охраной",
"ok.unblocked": "Разблокировано",
"ok.security_on": "Под охраной",
"ok.locked": "Закрыт",
"ok.securityOff": "Не под охраной",
"ok.openOut": "Выход открыт",
"ok.openIn": "Вход открыт",
"ok.securityOn": "Под охраной",
"alarm.outOfRange": "Вне диапазона",
"ok.inputPortOpened": "Порт ввода разомкнут",
"ok.inputPortClosed": "Порт ввода замкнут",
"alarm.passByRule2Persons": "Проход по правилу 2(3) лиц",
"alarm.passByLostCard": "Проход по утерянной карте",
"alarm.breakin": "Взлом",
"ok.barrierDowning": "Опускание стрелы",
"ok.delayBeforeBarrierDown": "Задержка перед опусканием стрелы, стрела поднята",
"ok.b...
содержит время последнего обновления актуального файла локализации
console.log(last_modified)
disableLogging()
2022-09-13T09:32:49.000Z
плагин загружающий описание типов в формате google protocol buffers
// НАСТРОЙКА в globals.js
'protobuf-loader': { proto: [ 'Graph.proto', 'Locations.proto' ] },
// ИСПОЛЬЗОВАНИЕ
var api = global.plugins['protobuf-loader']?.api||{};
var { eily_acuario_3d: {Graph} } = api;
// ...
var profile = Graph.decode(profile);
плагин выгружающий из суперграфа устаревшие эвенты (события)
// НАСТРОЙКА в globals.js
'event-unloader': {
interval: 60, // интервал автоматического вызова unloadEvents
verbose: true
},
выгрузить устаревшие события прямо сейчас
var {unloadEvents} = global.plugins['event-unloader']?.api||{};
if(unloadEvents) unloadEvents();
// загрузка в исходнике нода integra-node-red:
// var { uuid } = this.context().gobal.get('integra-node-red')
// загрузка в function ноде integra-node-red:
// var { processUpdate } = gobal.get('integra-node-red')
// загрузка в плагине amjs:
// var { invokeProc, invokeStoredProc } = global.plugins['integra-node-red'].api
disableLogging()
используется при написании новых нодов integra-node-red, которым нужна подписка на изменения FireFly
module.exports = function(RED) {
function ExampleNode(cfg) {
RED.nodes.createNode(this, cfg);
// добавление обработчика
var global = this.context().global;
var { nodes } = global.get('integra-node-red');
nodes[this.id] = this;
var onchange = (changes) => {
// обработка входящих изменений
};
// обработка загрузки графов
plugin.beforegraph = (graph) => {};
plugin.aftergraph = (graph) => {};
// обработка изменений
this.beforechange = (changes) => cfg.mode === 'before' && onchange(changes);
this.afterchange = (changes) => cfg.mode === 'after' && onchange(changes);
// удаление обработчика
this.on('close', () => {
delete nodes[this.id];
clearInterval(timer);
});
}
RED.nodes.registerType('example-node', ExampleNode);
}
disableLogging()
глобальный объект содержащий информацию о подключениях к роутерам FireFly
console.log(JSON.stringify(firefly,null,2))
disableLogging()
{
"ff1": {
"url": "ws://192.168.10.72:8301/ws",
"key": "ff1",
"loaded": [
"5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5"
],
"servers": [
"local"
],
"status": "connected",
"pulse": {
"last": 1663250323.436,
"num": 7,
"gap": 8,
"cma": 7.962571450642177
},
"connstats": {
"last": 1663250268.445,
"num": 1,
"gap": 0.746999979019165,
"cma": 0.746999979019165
},
"api": {
"defaultTopicConfig": {
"$type": "OrCompositeSelector",
"selectors": [
{
"$type": "PropertyEqualitySelector",
"name": "entity",
"value": "item"
},
{
"$type": "PropertyEqualitySelector",
"name": "entity",
"value": "link"
},
{
"$type": "PropertyEqualitySelector",
"name": "entity",
"value": "pin"
},
{
"$type": "PropertyEqualitySelector",
"name": "entity",
"value": "event"
}
]
},
"servers": {
"5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5": {
"is_local": true,
"status": "online",
"position": "POINT(0 0)",
"hash": "e2ba6b08-dc48-36d2-814a-af37201bdb38",
"name": "Local server",
"adm_level": null,
"router_url": "localhost",
"typedef_version": "0.0.0.1360",
"is_virtual": false,
"is_ready": true,
"synch": true,
"write_archive": true,
"is_auto_synch": false,
"is_online": true,
"typedef_id": 33
}
},
"serverId": "5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5",
"typedefVersion": "0.0.0.1360"
},
"loadstats": {
"last": 1663250268.704,
"num": 1,
"gap": 0.25799989700317383,
"cma": 0.25799989700317383
}
}
}
глобальный объект содержащий информацию о принадлежности серверов FireFly роутерам FireFly
console.log(srv2ff)
disableLogging()
{
'5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5': {
url: 'ws://192.168.10.72:8301/ws',
key: 'ff1',
loaded: [ '5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5' ],
servers: [ 'local' ],
status: 'connected',
pulse: { last: 1663250331.436, num: 8, gap: 8, cma: 7.967250019311905 },
connstats: {
last: 1663250268.445,
num: 1,
gap: 0.746999979019165,
cma: 0.746999979019165
},
api: {
getServers: [Function: getServers],
getTypeDef: [Function: getTypeDef],
getTypeDefJson: [Function: getTypeDefJson],
getGraph: [Function: getGraph],
getFilteredGraph: [Function: getFilteredGraph],
getCompressedGraph: [Function: getCompressedGraph],
openTopic: [Function: openTopic],
defaultTopicConfig: [Object],
subscribeToChanges: [Function: subscribeToChanges],
subscribeToPulse: [Function: subscribeToPulse],
changeGraph: [Function: changeGraph],
searchGraphSnapshot: [Function: searchGraphSnapshot],
getRuntimeChanges: [Function: getRuntimeChanges],
getArchiveChanges: [Function: getArchiveChanges],
getArchivedParams: [Function: getArchivedParams],
invoke: [Function: bound invoke],
subscribe: [Function: bound subscribe],
goodbye: [Function: bound goodbye],
shutdown: [Function: shutdown],
servers: [Object],
serverId: '5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5',
typedefVersion: '0.0.0.1360'
},
loadstats: {
last: 1663250268.704,
num: 1,
gap: 0.25799989700317383,
cma: 0.25799989700317383
}
}
}
функция получения токена безопасности для заданого пользователя
var user = 'undwad';
var pass = 'undwad';
var origin = 'http://192.168.10.13:8888';
async function test() {
console.log(await obtainToken({ origin, user, pass }))
console.log(await obtainToken(global.auth))
}
test()
disableLogging()
5236239b-0777-49e6-8979-33187a05216f 20e9605d-bfc2-4c62-bfb8-d9d0c9e4391c
функция используемая конфигурационными нодами integra-node-red для добавления нового роутера FireFly
var routerId = randomId()
await resolveRouter({
auth: { user, pass, origin },
id: routerId,
name: 'новый роутер',
url: 'ws://192.168.10.72:8301/ws',
}
функция используемая конфигурационными нодами integra-node-red для добавления нового сервера FireFly
await resolveServer({
router: { // для поиска роутера нужно указать id и/или name и/или url
id: routerId,
// name: 'новый роутер',
// url: 'ws://192.168.10.72:8301/ws',
},
// если не указать сервер, то будет взят локальный
server: '5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5',
}
функция используемая конфигурационными нодами integra-node-red для удаления существующего роутера FireFly
// для поиска роутера нужно указать id и/или name и/или url
await dissolveRouter({
// id: routerId,
name: 'новый роутер',
// url: 'ws://192.168.10.72:8301/ws',
})
функция используемая конфигурационными нодами integra-node-red для удаления существующего сервера FireFly
await dissolveServer({
router: { // для поиска роутера нужно указать id и/или name и/или url
// id: routerId,
// name: 'новый роутер',
url: 'ws://192.168.10.72:8301/ws',
},
// если не указать сервер, то будет взят локальный
server: '5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5',
}
функция вызова встроенной функции сервера FireFly
var server = "5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5"
var proc = "com.integra.firefly.info"
var args = []
async function test() {
var result = await invokeProc(server, proc, args)
console.log(result)
}
test()
disableLogging()
OUTPUT: [48,6,{"disclose_me":true},"com.integra.firefly.info",[],{}]
[
{
build_version: '3.0.323',
db_version: '0.2021.12.16',
version: '6.58'
}
]
функция вызова хранимой процедуры базы данных сервера FireFly
var server = "5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5"
var proc = "graph.get_time"
var args = ["5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5",0]
async function test() {
var result = await invokeStoredProc(server, proc, args)
console.log(result)
}
test()
disableLogging()
OUTPUT: [48,7,{"disclose_me":true},"com.integra.ember.call_stored",["graph.get_time",["5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5",0]],{}]
[ { result: 'ok' } ]
выполнить действия с api указанных серверов
var server = "5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5"
var action = (api) => api.getServers()
async function test() {
// var result = await applyOnServers([ [server, action], ])
var result = await applyOnServers({ [server]: action, })
console.log(result)
}
test()
disableLogging()
OUTPUT: [48,8,{"disclose_me":true},"com.integra.ember.call_stored",["server.get",[0]],{}]
[
{
status: 'fulfilled',
value: '{"5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5": {"is_local": true, "status": "online", "position": "POINT(0 0)", "hash": "e2ba6b08-dc48-36d2-814a-af37201bdb38", "name": "Local server", "adm_level": null, "router_url": "localhost", "typedef_version": "0.0.0.1360", "is_virtual": false, "is_ready": true, "synch": true, "write_archive": true, "is_auto_synch": false, "is_online": true, "typedef_id": 33}}'
}
]
проверяет невалидность пакета с командой на изменение данных сервера FireFly, т.е. проверяет, что в пакете отсутствуют параметры, а так же, что какой либо из параметров одновременно не имеет ни значения value, ни атрибутов datetime и status
var obj = queryPath('Item/ZoneLink/1')
var upd = obj.update('weight', 2)
console.log(isInvalidUpdate(upd), upd)
upd.params.weight.value = null
console.log(isInvalidUpdate(upd), upd)
delete upd.params
console.log(isInvalidUpdate(upd), upd)
disableLogging()
undefined {
operation: 'update',
entity: 'link',
server: '5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5',
owner: '5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5',
id: 'aca0eda9-6abe-4a1e-879b-bca997e05c86',
params: { weight: { value: 2 } },
datetime: 0
}
true {
operation: 'update',
entity: 'link',
server: '5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5',
owner: '5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5',
id: 'aca0eda9-6abe-4a1e-879b-bca997e05c86',
params: { weight: { value: null } },
datetime: 0
}
true {
operation: 'update',
entity: 'link',
server: '5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5',
owner: '5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5',
id: 'aca0eda9-6abe-4a1e-879b-bca997e05c86',
datetime: 0
}
функция отправляющая пакеты с изменениями на соответствующие сервера FireFly, соединение с которыми установлено в данный момент
var obj = queryPath('Item/ZoneLink/1')
var upd = obj.update('weight', 2)
async function test(updates) {
console.log(updates)
var result = await processUpdates(updates)
console.log(JSON.stringify(result,null,2))
}
test([upd])
disableLogging()
[
{
operation: 'update',
entity: 'link',
server: '5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5',
owner: '5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5',
id: 'aca0eda9-6abe-4a1e-879b-bca997e05c86',
params: { weight: [Object] },
datetime: 0
}
]
OUTPUT: [48,9,{"disclose_me":true},"com.integra.ember.put",[[{"operation":"update","entity":"link","server":"5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5","owner":"5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5","id":"aca0eda9-6abe-4a1e-879b-bca997e05c86","params":{"weight":{"value":2}},"datetime":0}]],{}]
CHANGES: [
{
"status": null,
"name": "weight",
"datetime": 1663250386,
"value": 2,
"server": "5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5",
"owner": "5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5",
"version": 2498182,
"entity": "link",
"txid": 23817309,
"operation": "update",
"paramid": 643851,
"type": "ZoneLink",
"id": "aca0eda9-6abe-4a1e-879b-bca997e05c86"
}
]
[
{
"status": "fulfilled",
"value": [
{
"status": null,
"paramid": 643851,
"name": "weight",
"server": "5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5",
"entity": "link",
"value": 2,
"txid": 23817309,
"version": 2498182,
"owner": "5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5",
"operation": "update",
"datetime": 1663250386,
"type": "ZoneLink",
"id": "aca0eda9-6abe-4a1e-879b-bca997e05c86"
}
]
}
]
находит идентификатор локального сервера на роутере FireFly по его имени или индексу в настройках amjs
т.е. выполняет следующее firefly[ff]?.api?.serverId
var guid = getLocalServerAt('ff1')
console.log(guid)
disableLogging()
5331e7ee-08aa-4655-90aa-fc1bd2ab3ba5
проверяет что указанный идентификатор принадлежит загруженному локальному серверу
console.log([isLocalServer(guid), isLocalServer(obj.id)])
disableLogging()
[ true, false ]
возвращает функцию проверяющую, что поданный ей идентификатор сервера FireFly удовлетворяет заданному фильтру
var obj = queryPath('Item/1')
console.log(isAllowedServer(obj.serverId)(obj.serverId))
console.log(isAllowedServer([obj.serverId])(obj.serverId))
console.log(isAllowedServer(['local'])(obj.serverId))
disableLogging()
true true true
возвращает функцию проверяющую, что поданный ей объект FireFly сервера удовлетворяет заданному фильтру по серверу
var obj = queryPath('Item/1')
console.log(isAllowedServer(obj.serverId)(obj))
console.log(isAllowedServer([obj.serverId])(obj))
console.log(isAllowedServer(['local'])(obj))
disableLogging()
true true true
возвращает функцию проверяющую, что поданный ей пакет с изменениями FireFly сервера удовлетворяет заданному фильтру по серверу
var obj = queryPath('Item/1')
var upd = obj.update('name', 'new name')
console.log(isAllowedServer(obj.serverId)(upd))
console.log(isAllowedServer([obj.serverId])(upd))
console.log(isAllowedServer(['local'])(upd))
disableLogging()
true true true
проверяет присутствует ли файл в папке для записи __rwdir и возвращает его полный путь
иначе возвращает путь к этому файлу в папке только для чтения __dirname
getStaticPath(filename)
синхронно считать ресурсный файл
readStaticFileSync(filename, encoding='utf-8')
ассинхронно считать ресурсный файл
readStaticFileAsync(filename, encoding='utf-8')
синхронно записать файл в папку для записи
writeStaticFileSync(filename, data, encoding='utf-8')
ассинхронно записать файл в папку для записи
writeStaticFileAsync(filename, data, encoding='utf-8')
конвертирует текстовое смещение временной зоны в разницу в минутах
parseTimeZoneOffset('+4:00')
240
system(`jupyter-nbconvert --output-dir=./static --to HTML docs-amjs-api.ipynb`)
[NbConvertApp] Converting notebook docs-amjs-api.ipynb to HTML [NbConvertApp] Writing 768183 bytes to static/docs-amjs-api.html