антипаттерн-свалка различных полезных функций используемых другими библиотеками
// загрузка в браузер:
// <script src="lib/polyfill.min.js"></script>
// <script src="lib/miscutils.js"></script>
// загрузка в исходнике нода integra-node-red:
// var { isEmpty, flatten } = this.context().global.get('miscutils')
// загрузка в function ноде integra-node-red:
// var {randomElem} = global.get('miscutils')
// загрузка в nodejs:
require("babel-polyfill")
Object.assign(global, require('./miscutils.js'))
'ok'
miscutils-api miscutils v1.44
'ok'
ticks epochtime pass identity isnull notnull inc dec first second last spreadarg not flip range isArray isNumber isObject isString isFunction nextChar prevChar randomId randomNum randomElem areEqualValues comparePreserve compareStringsAsc compareStringsDesc compareNumbersAsc compareNumbersDesc compareKeys compareValues addition difference sum product valueOf mapToKey map filter reduce forEach find mapKeys filterKeys reduceKeys forEachKey findKey mapValues filterValues reduceValues forEachValue findValue applyAfter groupBy unique toUTC roundDate addOwnProp fromEntries getNested splitBy isEmpty isGuid isIdentifier capitalize decapitalize truncate flatten dismissCircular stringify parsePoint parsePolygon parseJson parseTimeSpan timespanToSeconds quoteAwareSplitBy splitPath splitLines splitByComma splitBySpace getDirs getFiles sleep xmlToJson getWeekNumber sortKeys padLeft padRight updateUrl
возвращает количество миллисекунд просшедших с 01/01/1970
ticks()
1662456215481
возвращает количество секунд просшедших с 01/01/1970
epochtime()
1662456218.152
ничего не делает и возвращает undefined
console.log(pass())
undefined
возвращает первый аргумент
[ identity(1), identity('hi!') ]
[ 1, 'hi!' ]
проверяет аргумент на отсутствие значения
[ isnull(0), isnull(1), isnull(''), isnull('hi!'), isnull(false), isnull(true),
isnull(undefined), isnull(null), isnull(NaN), isnull([]), isnull({}) ]
[ true, false, true, false, true, false, true, true, true, false, false ]
проверяет аргумент на наличие значения
[ isnull(0), isnull(1), isnull(''), isnull('hi!'), isnull(false), isnull(true),
isnull(undefined), isnull(null), isnull(NaN), isnull([]), isnull({}) ]
[ true, false, true, false, true, false, true, true, true, false, false ]
инкрементирует аргумент
[ inc(1), inc(2) ]
[ 2, 3 ]
декрементирует аргумент
[ dec(2), dec(3) ]
[ 1, 2 ]
возвращает первый элемент последовательности
[ first([]), first([1,2]), first([1,2,3]) ]
[ undefined, 1, 1 ]
возвращает второй элемент последовательности
[ second([]), second([1,2]), second([1,2,3]) ]
[ undefined, 2, 2 ]
возвращает последний элемент последовательности
[ last([]), last([1,2]), last([1,2,3]) ]
[ undefined, 2, 3 ]
преобразует функцию принимающую множество аргументов в функцию принимающую один аргумент
var foo = (a,b) => a+b;
var pair = [1,2];
spreadarg(foo)(pair)
3
преобразует функцию в ее отрицание
var foo = (x) => x == 'apple';
[ foo('apple'), foo('orange'), not(foo)('apple'), not(foo)('orange') ]
[ true, false, false, true ]
меняет местами первый и второй аргументы функции
flip(console.log)('A','B')
B A
возвращает последовательность чисел от нуля до значения аргумента, не включая его
[ range(1), range(3) ]
[ [ 0 ], [ 0, 1, 2 ] ]
проверяет что аргумент является массивом
[ isArray([]), isArray({}), isArray([1,2,3]), isArray(null), isNumber(NaN), isArray('') ]
[ true, false, true, false, false, false ]
проверяет что аргумент является числом
[ isNumber(123), isNumber({}), isNumber([1,2,3]), isNumber(null), isNumber(NaN), isArray('') ]
[ true, false, false, false, false, false ]
проверяет что аргумент является объектом
[ isObject(123), isObject([]), isObject({}), isObject([1,2,3]), isObject(null), isObject(NaN) ]
[ false, true, true, true, false, false ]
проверяет что аргумент является строкой
[ isString('hi!'), isString({}), isString([1,2,3]), isString(null), isString(NaN), isString('') ]
[ true, false, false, false, false, false ]
проверяет что аргумент является функцией
[ isFunction(foo), isFunction({}), isFunction([1,2,3]), isFunction(null), isFunction(NaN), isFunction('') ]
[ true, false, false, false, false, false ]
возвращает следующий по алфавиту символ
[ nextChar('a'), nextChar('b'), nextChar('c') ]
[ 'b', 'c', 'd' ]
возвращает предыдущий по алфавиту символ
[ prevChar('b'), prevChar('c'), prevChar('d') ]
[ 'a', 'b', 'c' ]
возвращает случайный строковый идентификатор
[ randomId(), randomId() ]
[ 'gaaedzbs', 'wuedh' ]
возвращает случайное целое число из диапазона включая начало и конец
[ randomNum(1,10), randomNum(1,2) ]
[ 7, 2 ]
возвращает случайный элемент последовательности
[ randomElem([1,2,3]) ]
[ 1 ]
сравнивает значения пары аргументов по следующей формуле
(x == y) || (x == null && y == null) || (String(x) === String(y))
необходимо использовать эту функцию для сравнения значений параметров
areEqualValues(null, undefined)
true
функция упорядочивания всегда возвращающая ноль т.е. одинаковый порядок
[ comparePreserve(1,1), comparePreserve(1,2) ]
[ 0, 0 ]
функция упорядочивания строк по алфавиту
[ compareStringsAsc('ab','bb'), compareStringsAsc('ab','ab'), compareStringsAsc('bb','ab') ]
[ -1, 0, 1 ]
функция упорядочивания строк в порядке обратном алфавитному
[ compareStringsDesc('ab','bb'), compareStringsDesc('ab','ab'), compareStringsDesc('bb','ab') ]
[ 1, 0, -1 ]
функция упорядочивания чисел по возрастанию
[ compareNumbersAsc(12,13), compareNumbersAsc(12,12), compareNumbersAsc(13,12) ]
[ -1, 0, 1 ]
функция упорядочивания чисел по убыванию
[ compareNumbersDesc(12,13), compareNumbersDesc(12,12), compareNumbersDesc(13,12) ]
[ 1, 0, -1 ]
преобразует функцию упорядочивания в функцию упорядочивания ключей словаря
var data = Object.entries({ 'a1': 11, 'z1': 31, 'b1': 21 })
data.sort(compareKeys(compareStringsAsc))
[ [ 'a1', 11 ], [ 'b1', 21 ], [ 'z1', 31 ] ]
преобразует функцию упорядочивания в функцию упорядочивания значений словаря
var data = Object.entries({ 'a1': 11, 'z1': 31, 'b1': 21 })
data.sort(compareValues(compareNumbersDesc))
[ [ 'z1', 31 ], [ 'b1', 21 ], [ 'a1', 11 ] ]
складывает два аргумента
addition(1,2)
3
вычитает второй аргумент из первого
difference(1,2)
-1
складывает все аргументы
[ sum(1,2,3), sum(1), sum() ]
[ 6, 1, 0 ]
перемножает все аргументы
[ product(1,2,3), product(1), product() ]
[ 6, 1, 1 ]
возвращает функцию считывающую из объекта атрибут с заданным именем
var obj = { a: 123, b: 321 }
valueOf('a')(obj)
123
преобразовывает массив словарь, где ключем каждого элемента является: либо значение заданного атрибута либо результат преобразования функцией
var arr = [ {a:1}, {a:2}, {a:3} ]
console.log(mapToKey('a')(arr))
console.log(mapToKey(x => x.a+1)(arr))
{ '1': { a: 1 }, '2': { a: 2 }, '3': { a: 3 } }
{ '2': { a: 1 }, '3': { a: 2 }, '4': { a: 3 } }
функциональная форма функции Array.prototype.map
для словаря элементом последовательности будет пара ключ-значение
console.log(map(inc)([1,2,3]))
console.log(map(spreadarg(addition))({a:1,b:2,c:3}))
[ 2, 3, 4 ] [ 'a1', 'b2', 'c3' ]
функциональная форма функции Array.prototype.filter
для словаря элементом последовательности будет пара ключ-значение
console.log(filter(x => x%2)([1,2,3]))
console.log(filter(([k,v]) => v%2)({a:1,b:2,c:3}))
[ 1, 3 ] [ [ 'a', 1 ], [ 'c', 3 ] ]
функциональная форма функции Array.prototype.reduce
для словаря элементом последовательности будет пара ключ-значение
console.log(reduce(addition)([1,2,3]))
console.log(reduce(addition)({a:1,b:2,c:3}))
6 a,1b,2c,3
функциональная форма функции Array.prototype.forEach
для словаря элементом последовательности будет пара ключ-значение
forEach((x,i) => console.log(i,x))([1,2,3])
forEach((x,i) => console.log(i,x))({a:1,b:2,c:3})
0 1 1 2 2 3 0 [ 'a', 1 ] 1 [ 'b', 2 ] 2 [ 'c', 3 ]
функциональная форма функции Array.prototype.forEach
для словаря элементом последовательности будет пара ключ-значение
console.log(find(x => x%2)([1,2,3]))
console.log(find(([k,v]) => v%2)({a:1,b:2,c:3}))
1 [ 'a', 1 ]
функциональная форма функции Array.prototype.map
(для словаря элементом последовательности будет ключ
console.log(mapKeys(inc)([1,2,3]))
console.log(mapKeys(k => nextChar(k))({a:1,b:2,c:3}))
[ 2, 3, 4 ] [ 'b', 'c', 'd' ]
функциональная форма функции Array.prototype.filter
для словаря элементом последовательности будет ключ
console.log(filterKeys(x => x%2)([1,2,3]))
console.log(filterKeys(k => k =='b')({a:1,b:2,c:3}))
[ 1, 3 ] [ 'b' ]
функциональная форма функции Array.prototype.reduce
для словаря элементом последовательности будет ключ
console.log(reduceKeys(addition)([1,2,3]))
console.log(reduceKeys(addition)({a:1,b:2,c:3}))
6 abc
функциональная форма функции Array.prototype.forEach
для словаря элементом последовательности будет ключ
forEachKey((x,i) => console.log(i,x))([1,2,3])
forEachKey((x,i) => console.log(i,x))({a:1,b:2,c:3})
0 1 1 2 2 3 0 a 1 b 2 c
функциональная форма функции Array.prototype.find
для словаря элементом последовательности будет ключ
console.log(findKey(x => x%2)([1,2,3]))
console.log(findKey(k => k=='b')({a:1,b:2,c:3}))
1 b
функциональная форма функции Array.prototype.map
для словаря элементом последовательности будет значение
console.log(mapValues(inc)([1,2,3]))
console.log(mapValues(inc)({a:1,b:2,c:3}))
[ 2, 3, 4 ] [ 2, 3, 4 ]
функциональная форма функции Array.prototype.filter
для словаря элементом последовательности будет значение
console.log(filterValues(x => x%2)([1,2,3]))
console.log(filterValues(x => x%2)({a:1,b:2,c:3}))
[ 1, 3 ] [ 1, 3 ]
функциональная форма функции Array.prototype.reduce
для словаря элементом последовательности будет значение
console.log(reduceValues(addition)([1,2,3]))
console.log(reduceValues(addition)({a:1,b:2,c:3}))
6 6
функциональная форма функции Array.prototype.forEach
для словаря элементом последовательности будет значение
forEachValue((x,i) => console.log(i,x))([1,2,3])
forEachValue((x,i) => console.log(i,x))({a:1,b:2,c:3})
0 1 1 2 2 3 0 1 1 2 2 3
функциональная форма функции Array.prototype.find
для словаря элементом последовательности будет значение
console.log(findValue(x => x%2)([1,2,3]))
console.log(findValue(x => x%2)({a:1,b:2,c:3}))
1 1
создает функцию сначала преобразовывающую все свои аргументы при помощи заданной функции, а затем преобразованные аргументы подаются заданному оператору
var data = Object.entries({ 'a1': 11, 'z1': 31, 'b1': 21 })
data.sort(applyAfter(valueOf(1))(compareNumbersAsc))
[ [ 'a1', 11 ], [ 'b1', 21 ], [ 'z1', 31 ] ]
группирует элементы последовательности по значению их атрибута или результату выполнения преобразования
var arr = [ {a:1,b:1}, {a:1,b:2}, {a:2,b:3}, {a:2,b:4} ]
console.log(groupBy(arr, 'a'))
console.log(groupBy(arr, x => x.a+1))
{
'1': [ { a: 1, b: 1 }, { a: 1, b: 2 } ],
'2': [ { a: 2, b: 3 }, { a: 2, b: 4 } ]
}
{
'2': [ { a: 1, b: 1 }, { a: 1, b: 2 } ],
'3': [ { a: 2, b: 3 }, { a: 2, b: 4 } ]
}
возвращает уникальные элементы последовательности
unique([1,2,2,3,3,1])
[ 1, 2, 3 ]
сконвертировать xml в json
const {JSDOM} = require('jsdom');
var xml = `<root>
<section>
<item attr1="attr1" attr2="attr2">val1</item>
<item attr3="attr3" />
</section>
</root>
`
var dom = new JSDOM(xml, { contentType: 'text/xml' }).window.document;
console.log(JSON.stringify(xmlToJson(dom), null, 2));
{
"root": {
"$text": [
"\n ",
"\n"
],
"section": {
"$text": [
"\n ",
"\n ",
"\n "
],
"item": [
{
"$attributes": {
"attr1": "attr1",
"attr2": "attr2"
},
"$text": "val1"
},
{
"$attributes": {
"attr3": "attr3"
}
}
]
}
}
}
для заданной даты возвращает номер недели в году начиная с 1
[ getWeekNumber(new Date()), getWeekNumber(new Date('01/01/2022 00:00')) ]
[ 36, 1 ]
конвертирует локальное время в UTC количество миллисекунд
[ new Date(), toUTC(new Date()) ]
[ 2022-09-06T09:26:45.391Z, 1662456405000 ]
округляет дату до указанного количества секунд
[
new Date(),
roundDate(new Date(), 60), // округление до минут
roundDate(new Date(), 60*60), // округление до часов
roundDate(new Date(), 24*60*60), // округление до дней
roundDate(new Date()),
]
[ 2023-01-09T07:58:16.586Z, 2023-01-09T07:58:00.000Z, 2023-01-09T07:00:00.000Z, 2023-01-09T00:00:00.000Z, 2023-01-09T00:00:00.000Z ]
создает объекту дополнительное невидимое свойство
var obj = { a: 1 }
addOwnProp(obj, 'b',2);
[ obj.a, obj.b, obj ]
[ 1, 2, { a: 1 } ]
тоже самое что Object.fromEntries
fromEntries([['a',1],['b',2]])
{ a: 1, b: 2 }
альтернатива использованию null chain оператора ?.
var obj = { a: { b: { c: 1 } } }
getNested(obj, 'a', 'b', 'c')
1
проверяет любую коллекцию на отсутствие элементов
[ isEmpty([]), isEmpty({}), isEmpty(''), isEmpty([1]), isEmpty({a:1}), isEmpty('hi!') ]
[ true, true, true, false, false, false ]
сортирует ключи в объекте при помощи функции очередности по умолчанию сортирует по алфавиту
var obj = { 'a1': 11, 'z1': 31, 'b1': 21 }
var obj = sortKeys(obj)
obj
{ a1: 11, b1: 21, z1: 31 }
дополняет строку слева указанным символом до заданной длинны
[ padLeft('1', 3, '0'), padLeft('1') ]
[ '001', '01' ]
дополняет строку справа указанным симповолом до заданной длинны
[ padRight('1', 3, '0'), padRight('1') ]
[ '100', '10' ]
разбивает текст на подстроки разделителем и удаляет пустые элементы
var text = '1 2 3 4'
splitBy(' ')(text)
[ '1', '2', '3', '4' ]
проверяет что строка является корректным гуидом
[ isGuid('42f44008-d0b3-4867-87df-a5a68db51b26'), isGuid('42f44008-d0b3-4867-87df-ERR') ]
[ true, false ]
проверяет что строка является корректным идентификатором для языка C#
[ isIdentifier('a123'), isIdentifier('1'), isIdentifier('_'), isIdentifier('') ]
[ true, false, true, false ]
переводит первую букву строки в верхний регистр
capitalize('item')
'Item'
переводит первую букву строки в нижний регистр
decapitalize('Item')
'item'
сокращает текст до указанной длинны
truncate('In recent years, the internet and its impact have grown tremendously', 16)
'In recent years...'
без использования рекурсии выпрямляет структуру любой вложенности основанную на массивах в плоский массив
flatten([1,[[2],[[3]]],4])
[ 1, 2, 3, 4 ]
создает replacer функцию для JSON.stringify с заданием максимального уровня вложенности
var obj = { a: 1 }
obj.o = obj
// JSON.stringify(obj) // TypeError: Converting circular structure to JSON
JSON.stringify(obj, dismissCircular(10))
'{"a":1}'
ковертирует значение в JSON так же, как JSON.stringify, но обработкой рекурсивных ссылок
атрибут maxdepth задает максимальную глубину рекурсии
атрибут scape задает размер пробела
console.log(stringify({a:1}, {maxdepth:10,space:2}))
console.log(stringify({a:1}))
{
"a": 1
}
{"a":1}
конвертирует POSTGIS строку с геоточкой в массив из двух элементов содержащий долготу и широту точки
[ parsePoint('POINT(50.22208228 53.2362814)'), parsePoint('') ]
[ [ 50.22208228, 53.2362814 ], [] ]
конвертирует POSTGIS строку с полигоном в массив пар содержащих долготу и широту точек полигона
parsePolygon('POLYGON((50.22205734252930 53.23633956909180,50.22212782475368 53.23635106308247,50.22213308362630 53.23633408754193,50.22205542015872 53.23632573239626,50.22205734252930 53.23633956909180))')
[ [ 50.2220573425293, 53.2363395690918 ], [ 50.22212782475368, 53.23635106308247 ], [ 50.2221330836263, 53.23633408754193 ], [ 50.22205542015872, 53.23632573239626 ], [ 50.2220573425293, 53.2363395690918 ] ]
пытается сконвертировать строку в JSON при помощи JSON.parse
и возвращает второй аргумент в случае ошибки
[ parseJson('{"a":1}'), parseJson('', []), parseJson('') ]
[ { a: 1 }, [], {} ]
конвертирует строковый интервал времени в структуру с именоваными атрибутами
function parse(input) {
var ts = parseTimeSpan(input);
console.log('parseTimeSpan:',input,ts);
}
parse('1d 2h 3m 4s')
parse('365d')
parse('24h')
parse('60m')
parse('61s')
parse('2h 30m')
parse('2h 30m 25s')
parse('3m 16s')
parse('4d 5h 30m')
parse('1д 2ч 3м 4с')
parse('365д')
parse('24ч')
parse('60м')
parse('61с')
parse('2h 30м')
parse('2ч 30м 25с')
parse('3м 16с')
parse('4д 5ч 30м')
parse('1.03:14:56.1667000')
parse('03:14:56.1667000')
parse('1.03:14:56')
parse('03:14:56')
parseTimeSpan: 1d 2h 3m 4s { days: 1, hours: 2, minutes: 3, seconds: 4 }
parseTimeSpan: 365d { days: 365, hours: 0, minutes: 0, seconds: 0 }
parseTimeSpan: 24h { days: 0, hours: 24, minutes: 0, seconds: 0 }
parseTimeSpan: 60m { days: 0, hours: 0, minutes: 60, seconds: 0 }
parseTimeSpan: 61s { days: 0, hours: 0, minutes: 0, seconds: 61 }
parseTimeSpan: 2h 30m { days: 0, hours: 2, minutes: 30, seconds: 0 }
parseTimeSpan: 2h 30m 25s { days: 0, hours: 2, minutes: 30, seconds: 25 }
parseTimeSpan: 3m 16s { days: 0, hours: 0, minutes: 3, seconds: 16 }
parseTimeSpan: 4d 5h 30m { days: 4, hours: 5, minutes: 30, seconds: 0 }
parseTimeSpan: 1д 2ч 3м 4с { days: 1, hours: 2, minutes: 3, seconds: 4 }
parseTimeSpan: 365д { days: 365, hours: 0, minutes: 0, seconds: 0 }
parseTimeSpan: 24ч { days: 0, hours: 24, minutes: 0, seconds: 0 }
parseTimeSpan: 60м { days: 0, hours: 0, minutes: 60, seconds: 0 }
parseTimeSpan: 61с { days: 0, hours: 0, minutes: 0, seconds: 61 }
parseTimeSpan: 2h 30м { days: 0, hours: 2, minutes: 30, seconds: 0 }
parseTimeSpan: 2ч 30м 25с { days: 0, hours: 2, minutes: 30, seconds: 25 }
parseTimeSpan: 3м 16с { days: 0, hours: 0, minutes: 3, seconds: 16 }
parseTimeSpan: 4д 5ч 30м { days: 4, hours: 5, minutes: 30, seconds: 0 }
parseTimeSpan: 1.03:14:56.1667000 { days: 1, hours: 3, minutes: 14, seconds: 56, ticks: 1667000 }
parseTimeSpan: 03:14:56.1667000 { days: 0, hours: 3, minutes: 14, seconds: 56, ticks: 1667000 }
parseTimeSpan: 1.03:14:56 { days: 1, hours: 3, minutes: 14, seconds: 56, ticks: 0 }
parseTimeSpan: 03:14:56 { days: 0, hours: 3, minutes: 14, seconds: 56, ticks: 0 }
конвертирует строковый интервал времени в интервал в секундах
function parse(input) {
var ts = timespanToSeconds(input);
console.log('timespanToSeconds:',input,'=',ts+'s');
}
parse('1d 2h 3m 4s')
parse('365d')
parse('24h')
parse('60m')
parse('61s')
parse('2h 30m')
parse('2h 30m 25s')
parse('3m 16s')
parse('4d 5h 30m')
parse('1д 2ч 3м 4с')
parse('365д')
parse('24ч')
parse('60м')
parse('61с')
parse('2h 30м')
parse('2ч 30м 25с')
parse('3м 16с')
parse('4д 5ч 30м')
parse('1.03:14:56.1667000')
parse('03:14:56.1667000')
parse('1.03:14:56')
parse('03:14:56')
timespanToSeconds: 1d 2h 3m 4s = 93784s timespanToSeconds: 365d = 31536000s timespanToSeconds: 24h = 86400s timespanToSeconds: 60m = 3600s timespanToSeconds: 61s = 61s timespanToSeconds: 2h 30m = 9000s timespanToSeconds: 2h 30m 25s = 9025s timespanToSeconds: 3m 16s = 196s timespanToSeconds: 4d 5h 30m = 365400s timespanToSeconds: 1д 2ч 3м 4с = 93784s timespanToSeconds: 365д = 31536000s timespanToSeconds: 24ч = 86400s timespanToSeconds: 60м = 3600s timespanToSeconds: 61с = 61s timespanToSeconds: 2h 30м = 9000s timespanToSeconds: 2ч 30м 25с = 9025s timespanToSeconds: 3м 16с = 196s timespanToSeconds: 4д 5ч 30м = 365400s timespanToSeconds: 1.03:14:56.1667000 = 98096.1667s timespanToSeconds: 03:14:56.1667000 = 11696.1667s timespanToSeconds: 1.03:14:56 = 98096s timespanToSeconds: 03:14:56 = 11696s
разбивает текст на подстроки разделителем с учетом того, что в тексте могут содержаться кавычки и скобки, затем удаляет пустые элементы
quoteAwareSplitBy('/')("Item/Link/?(search('Link/Zone'))/Item")
[ 'Item', 'Link', "?(search('Link/Zone'))", 'Item' ]
разбивает текст символом / с учетом кавычек и скобок,
тоже самое что quoteAwareSplitBy('/')
splitPath("Item/Link/?(search('Link/Zone'))/Item")
[ 'Item', 'Link', "?(search('Link/Zone'))", 'Item' ]
разбивает текст символом переноса строки с учетом кавычек и скобок,
тоже самое что quoteAwareSplitBy('\n')
splitLines("Item\nLink\n?(search('Link\nZone'))\nItem")
[ 'Item', 'Link', "?(search('Link\nZone'))", 'Item' ]
разбивает текст запятыми с учетом кавычек и скобок,
тоже самое что quoteAwareSplitBy(',')
splitByComma("Item,Link,?(search('Link,Zone')),Item")
[ 'Item', 'Link', "?(search('Link,Zone'))", 'Item' ]
разбивает текст пробелами с учетом кавычек и скобок,
тоже самое что quoteAwareSplitBy(' ')
splitBySpace("Item Link ?(search('Link Zone')) Item")
[ 'Item', 'Link', "?(search('Link Zone'))", 'Item' ]
var url = 'http://192.168.11.151:8888/notebooks/daisyjs/amjs/docs-miscutils.ipynb#sleep';
updateUrl(url, { host: '127.0.01', hash: 'updateUrl' })
'http://127.0.0.1:8888/notebooks/daisyjs/amjs/docs-miscutils.ipynb#updateUrl'
получает список подпапок в текущей папке
getDirs('.').then(console.log)
Promise { <pending> }
[ '/home/undwad/ipynb/daisyjs/amjs/.git', '/home/undwad/ipynb/daisyjs/amjs/.ipynb_checkpoints', '/home/undwad/ipynb/daisyjs/amjs/.node-red', '/home/undwad/ipynb/daisyjs/amjs/__pycache__', '/home/undwad/ipynb/daisyjs/amjs/archive', '/home/undwad/ipynb/daisyjs/amjs/assets', '/home/undwad/ipynb/daisyjs/amjs/debug', '/home/undwad/ipynb/daisyjs/amjs/dist', '/home/undwad/ipynb/daisyjs/amjs/js', '/home/undwad/ipynb/daisyjs/amjs/legacy', '/home/undwad/ipynb/daisyjs/amjs/logs', '/home/undwad/ipynb/daisyjs/amjs/node_modules', '/home/undwad/ipynb/daisyjs/amjs/nodes', '/home/undwad/ipynb/daisyjs/amjs/out', '/home/undwad/ipynb/daisyjs/amjs/package', '/home/undwad/ipynb/daisyjs/amjs/questdb', '/home/undwad/ipynb/daisyjs/amjs/static', '/home/undwad/ipynb/daisyjs/amjs/storage', '/home/undwad/ipynb/daisyjs/amjs/tmp' ]
получает список всего содержимого директории
async function run() {
var files = await getFiles('.')
console.log(files.length, files.slice(0,10))
}
run()
Promise { <pending> }
14590 [ '/home/undwad/ipynb/daisyjs/core/.git/COMMIT_EDITMSG', '/home/undwad/ipynb/daisyjs/core/.git/FETCH_HEAD', '/home/undwad/ipynb/daisyjs/core/.git/HEAD', '/home/undwad/ipynb/daisyjs/core/.git/ORIG_HEAD', '/home/undwad/ipynb/daisyjs/core/.git/config', '/home/undwad/ipynb/daisyjs/core/.git/description', '/home/undwad/ipynb/daisyjs/core/.git/hooks/applypatch-msg.sample', '/home/undwad/ipynb/daisyjs/core/.git/hooks/commit-msg.sample', '/home/undwad/ipynb/daisyjs/core/.git/hooks/fsmonitor-watchman.sample', '/home/undwad/ipynb/daisyjs/core/.git/hooks/post-update.sample' ]
делает паузу на указанное количество миллисекунд
async function run() {
var t0 = epochtime();
console.log('time before sleep', t0)
await sleep(3000)
console.log('time after sleep', epochtime())
console.log('seconds sleeped', epochtime()-t0)
}
run()
time before sleep 1662456513.491
Promise { <pending> }
time after sleep 1662456516.495 seconds sleeped 3.003999948501587
system(`jupyter-nbconvert --output-dir=./static --to HTML docs-miscutils.ipynb`)
[NbConvertApp] Converting notebook docs-miscutils.ipynb to HTML [NbConvertApp] Writing 868703 bytes to static/docs-miscutils.html