Scripts discussion (4)
- Author
- Message
-
Offline
- Posts: 96
- Joined: Tue Nov 10, 2015 4:56 am
проблемка в скрипте TextReplace.js
не любит он "-", ошибку выдает, хотя скрипт SearchReplace.js отрабатывает
например, нельзя [-+*/] и нельзя [-.\d] - ошибка синтаксиса регэкс
надо экранировать: можно вот так [\-+*/] и так [\-.\d]
интересно, как-то можно это выправить в скрипте TextReplace.js - он видимо расценивает тире как дипазон, например символов, но в JS если тире в начале скобочной группы, то это просто символ тире, если бы тире была в середине скобочной группы, то можно было ругаться на неверный синтаксис
мне не нравится SearchReplace.js потому и озабочен скриптом TextReplace.js - дело не в том, что SearchReplace.js плох, но не удобно в нем - нет такой истории, как во втором, нет шаблонов, нет переноса строк...
не любит он "-", ошибку выдает, хотя скрипт SearchReplace.js отрабатывает
например, нельзя [-+*/] и нельзя [-.\d] - ошибка синтаксиса регэкс
надо экранировать: можно вот так [\-+*/] и так [\-.\d]
интересно, как-то можно это выправить в скрипте TextReplace.js - он видимо расценивает тире как дипазон, например символов, но в JS если тире в начале скобочной группы, то это просто символ тире, если бы тире была в середине скобочной группы, то можно было ругаться на неверный синтаксис
мне не нравится SearchReplace.js потому и озабочен скриптом TextReplace.js - дело не в том, что SearchReplace.js плох, но не удобно в нем - нет такой истории, как во втором, нет шаблонов, нет переноса строк...
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
Так ведьInFive wrote:например, нельзя [-+*/] и нельзя [-.\d] - ошибка синтаксиса регэкс
надо экранировать: можно вот так [\-+*/] и так [\-.\d]
TextReplace.js - GUI for TextReplace_function.js
Со всеми вытекающими отличиями в синтаксисе.It works similarly to "replace" method in JScript, but uses syntax of AkelPad regular expressions.
Так что править нужно реализацию регулярных выражений в самом AkelPad.
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
tileTabs.js
[x] (Hopefully) fixed child windows resizing in case of scrollbar (dis)appearance inside MDI frame.
[x] (Hopefully) fixed child windows resizing in case of scrollbar (dis)appearance inside MDI frame.
-
Offline
- Posts: 17
- Joined: Wed Feb 16, 2022 2:25 pm
Infocatcher, в скрипте runScript.js есть ошибки в работе горячих клавиш.
1.
Но редактирование скрипта запускается при нажатии просто E без Ctrl, даже если это E вводится в поле для аргументов. А при нажатии F1, так же, как и при Shift+F1, выделяет предыдущий сценарий.
ctrl и shift здесь всегда или почти всегда не равны 0. В описании GetAsyncKeyState говорится, что эта функция возвращает 2-байтное число. При вызове из C так и есть, но oSyS.Call возвращает 4-байтные числа с каким-то мусором (например: 0x04820000, 0x0A618000...), которые маловероятно примут значение 0. Нужен только старший бит 2-байтного числа, т.е. 0x8000.
Проверять VK_LCONTROL || VK_RCONTROL и VK_LSHIFT || VK_RSHIFT излишне, т.к. VK_CONTROL и VK_SHIFT работают ничуть не хуже (таблица).
2.
Нажимаю Ctrl+E, но для редактирования открывается не текущий скрипт, а "EvalCmd.js".
По умолчанию при нажатии клавиши, печатающей символ, ListBox запускает пошаговый поиск по элементам. Нажатие клавиши Ctrl его не отменяет: сначала выбирается элемент, начинающийся на введенную букву, а потом уже обрабатывается WM_KEYDOWN диалога. Запретить обработку по умолчанию можно, создав субкласс для обработки сообщений ListBox отдельно (нужно только WM_CHAR).
В AkelPad можно написать так:
Исправленный вариант скрипта:
runScript.js (0.2.8)
runScript.js (0.2.9pre2)
Примечание: Может быть, удобнее перенести переменную субкласса и callback ближе к месту создания ListBox:
1.
Code: Select all
// F4, Ctrl+E - Edit
// F2, Ctrl+S - Rewrite options (and remove arguments for removed files)
// F1, Shift+F1 - Next/previous script
Code: Select all
case 256: //WM_KEYDOWN
var ctrl = oSys.Call("user32::GetAsyncKeyState", 162 /*VK_LCONTROL*/)
|| oSys.Call("user32::GetAsyncKeyState", 163 /*VK_RCONTROL*/);
var shift = oSys.Call("user32::GetAsyncKeyState", 160 /*VK_LSHIFT*/)
|| oSys.Call("user32::GetAsyncKeyState", 161 /*VK_RSHIFT*/);
Проверять VK_LCONTROL || VK_RCONTROL и VK_LSHIFT || VK_RSHIFT излишне, т.к. VK_CONTROL и VK_SHIFT работают ничуть не хуже (таблица).
Code: Select all
var ctrl = oSys.Call("user32::GetAsyncKeyState", 17 /*VK_CONTROL*/) & 0x8000;
var shift = oSys.Call("user32::GetAsyncKeyState", 16 /*VK_SHIFT*/) & 0x8000;
//var alt = oSys.Call("user32::GetAsyncKeyState", 18 /*VK_MENU*/) & 0x8000;
Нажимаю Ctrl+E, но для редактирования открывается не текущий скрипт, а "EvalCmd.js".
По умолчанию при нажатии клавиши, печатающей символ, ListBox запускает пошаговый поиск по элементам. Нажатие клавиши Ctrl его не отменяет: сначала выбирается элемент, начинающийся на введенную букву, а потом уже обрабатывается WM_KEYDOWN диалога. Запретить обработку по умолчанию можно, создав субкласс для обработки сообщений ListBox отдельно (нужно только WM_CHAR).
(Источник)To trap keys that generate a char message and do special processing, the application must subclass the list box, trap both the WM_KEYDOWN and WM_CHAR messages, and process the messages appropriately in the subclass procedure.
В AkelPad можно написать так:
Code: Select all
var hListBoxSubClass;
...
hListBoxSubClass = AkelPad.WindowSubClass(hWndListBox, listBoxCallback, 258 /*WM_CHAR*/);
...
function listBoxCallback(hWnd, uMsg, wParam, lParam) {
if (oSys.Call("user32::GetAsyncKeyState", 17 /*VK_CONTROL*/) & 0x8000)
AkelPad.WindowNoNextProc(hListBoxSubClass);
}
runScript.js (0.2.8)
runScript.js (0.2.9pre2)
Примечание: Может быть, удобнее перенести переменную субкласса и callback ближе к месту создания ListBox:
Code: Select all
setWindowFont(hWndListBox, hGuiFont);
var hListBoxSubClass;
var listBoxCallback = function(hWnd, uMsg, wParam, lParam) {
if (oSys.Call("user32::GetAsyncKeyState", 17 /*VK_CONTROL*/) & 0x8000)
AkelPad.WindowNoNextProc(hListBoxSubClass);
}
hListBoxSubClass = AkelPad.WindowSubClass(hWndListBox, listBoxCallback, 258 /*WM_CHAR*/);
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
Интересно. У меня на Windows 7 x86 сочетания клавиш работают как и задумывалось.AlexeyB wrote:ctrl и shift здесь всегда или почти всегда не равны 0. В описании GetAsyncKeyState говорится, что эта функция возвращает 2-байтное число. При вызове из C так и есть, но oSyS.Call возвращает 4-байтные числа с каким-то мусором (например: 0x04820000, 0x0A618000...), которые маловероятно примут значение 0. Нужен только старший бит 2-байтного числа, т.е. 0x8000.
Но, раз поведение не ломается, то почему бы и нет.
Обновил: https://github.com/Infocatcher/AkelPad_ ... ...9dfe231
Спасибо!
А еще интересно, чем чревато отсутствие вызова AkelPad.WindowUnsubClass().
-
Offline
- Posts: 39
- Joined: Thu Aug 20, 2020 11:19 am
yozhic, спасибо за замечания. Когда будет время займусь улучшениями. Пока что времени нет 
Не знаю если будет кому-то полезно, но заметил такую особенность:
Пропустил этот код через babeljs.io, чтобы функция генератор заработала в AkelPad
1. Babel пресет, который использовал для IE 6 браузера: https://babeljs.io/repl/#?browsers=ie%2 ... ons=%7B%7D
2. Исправил всего одну ошибку, как мне кажется, связанную с зарезервированными словами JScript языка, которые не должны находиться в ключах литеральных объектов. Если такое слово будет найдено, то можно обернуть его в кавычки "". В моём случае это было слово "catch" - обернул его в кавычки на 929 строке и функция генератор сработала. Если это единственная проблема транспиляции Babel, то возможно если подправить исходный код в babel для Targets IE 6 браузера - теоретически может расширить возможности написания кода для JScript'a, используя некоторые современные возможности стандарта ECMAScript, что также позволит расширить возможности для написания AkelPad скриптов.
Сгенерированный код из babeljs.io начинается с 436 строки в test_generator_function.js
3. В самое начало добавил несколько ES5 полифилов и json2.js https://github.com/douglascrockford/JSO ... r/json2.js , чтобы красиво выводить объекты в попап, в виде JSON.
То что получилось запустил как скрипт AkelPad:
1. Есть ли у вас где-нибудь на форуме тема, касающаяся стандартов написания кода и вообще какие-нибудь материалы по WSH для AkelPad?
Например, непонятно какой ECMAScript стандарт у меня локально выполняется.
Скрипт у меня сработал с такой версией:
Microsoft (R) Windows Script Host Version 5.812
2. Возможно ли запускать в JScript background процесс, некие воркеры, чтобы не блокировать выполнение скрипта и было меньше крашов? Если такое есть, то можно ли пример?
3. Если нет стандартов по стилю написания кода, то буду использовать такую настройку:
Она без использования Allman style, потому что в дальнейшем может быть очень много кода и может быть некомпактно...
P.s.: Мира всем и долгой жизни!

Не знаю если будет кому-то полезно, но заметил такую особенность:
Пропустил этот код через babeljs.io, чтобы функция генератор заработала в AkelPad
Code: Select all
function* add(x) {
let y = yield(x*5)
return x + y
}
let iterator = add(2)
console.log(iterator.next())
console.log(iterator.next(3))
1. Babel пресет, который использовал для IE 6 браузера: https://babeljs.io/repl/#?browsers=ie%2 ... ons=%7B%7D
2. Исправил всего одну ошибку, как мне кажется, связанную с зарезервированными словами JScript языка, которые не должны находиться в ключах литеральных объектов. Если такое слово будет найдено, то можно обернуть его в кавычки "". В моём случае это было слово "catch" - обернул его в кавычки на 929 строке и функция генератор сработала. Если это единственная проблема транспиляции Babel, то возможно если подправить исходный код в babel для Targets IE 6 браузера - теоретически может расширить возможности написания кода для JScript'a, используя некоторые современные возможности стандарта ECMAScript, что также позволит расширить возможности для написания AkelPad скриптов.
Сгенерированный код из babeljs.io начинается с 436 строки в test_generator_function.js
3. В самое начало добавил несколько ES5 полифилов и json2.js https://github.com/douglascrockford/JSO ... r/json2.js , чтобы красиво выводить объекты в попап, в виде JSON.
То что получилось запустил как скрипт AkelPad:
1. Есть ли у вас где-нибудь на форуме тема, касающаяся стандартов написания кода и вообще какие-нибудь материалы по WSH для AkelPad?
Например, непонятно какой ECMAScript стандарт у меня локально выполняется.
Скрипт у меня сработал с такой версией:
Microsoft (R) Windows Script Host Version 5.812
2. Возможно ли запускать в JScript background процесс, некие воркеры, чтобы не блокировать выполнение скрипта и было меньше крашов? Если такое есть, то можно ли пример?
3. Если нет стандартов по стилю написания кода, то буду использовать такую настройку:
Code: Select all
Call("Scripts::Main", 1, "jsBeautifier.js", "-restoreCaretPos=true -indentSize=2 -keepArrayIndentation=true -braceStyle='end-expand' -breakChainedMethods=false -jsLintHappy=true -spaceBeforeConditional=true -newlineBetweenRules=true -unformattedTags=['a','h1','h2','h3','h4','h5'] ")
P.s.: Мира всем и долгой жизни!
Last edited by texter on Wed Jul 13, 2022 4:11 pm, edited 8 times in total.
-
Offline
- Posts: 39
- Joined: Thu Aug 20, 2020 11:19 am
Да вы не расстраивайтесь, и даже наоборот изучайте AkelPad, если нравится идея - форкайте, исправляйте ошибкиyozhic wrote:Эх, похоже, я немного поторопился радоваться новому SearchReplace_extended.js: подсветка совпадений в консоли после нескольких запусков перестала работать по непонятной причине, а в интерфейсе окошка стали периодически исчезать radio-переключатели...


Помню, когда читал код кажется FindReplaceEx.js - почти ничего не мог понять и мне вообще очень далеко до уровня например KDJ и других разработчиков, так как не шарю в WSH интерфейсах


В общем уже запутался, где что добавлял, так как делал давно. Помню что делал что-то в SearchReplace_extended.js и FindReplaceFiles_extended.js

Существует множество бесплатных сервисов, куда можно присобачить таск менеджмент типа Kanban c todo листами и статусами разработки + какой-нибудь discord чат или прикрутить своё решение используя бесплатные сервисы AWS. Без понятия как сейчас обстоят дела в странах СНГ. Привет из Молдовы.
Мне очень не хватало Log вывода с найденными результатами строк поиска в указанной директории, как хотя бы в Notepad++ и нигде не видел реализации на форуме, и просто решил запилить, лишь бы работало. Там конечно есть что улучшать, потому что по логике приложения собирается очень большой массив, особенно если поиск очень глубокий, то приложение не выдерживает и крашится. Там нужен хороший рефакторинг и кое что переделать под функции генераторы/итераторы, чтобы память освобождалась, а не переполнялась в процессе поиска. Возможно ещё алгоритм поиска нужно разработать. Там всё тупо через обычные массивы и простые итерации сделано + помню что были методы, которые возвращают копию того большого массива и нужно переделать в более императивный стиль, то есть работать с исходным массивом в памяти. У меня поиск нормально по одному проекту работал и я забросил с усовершенствованием скрипта. Времени уже не было

Что касается улучшений вывода результатов поиска - нужно ещё нормально вычислить ширину открытого Log'а, чтобы при помощи этой ширины можно было адаптивно слайдить результаты видимой области очень длинных строк по горизонтали, иначе если выводить полностью строки, то краш неизбежен и не заставит себя долго ждать. Особенно, если в указанной директории поиска например лежит какой-нибудь app.js с минифицированным кодом на несколько мегабайт, то это всё будет рендериться прямо в Log.
Иначе говоря, очень длинные строки должны быть разбиты на "слайды", которые состоят из видимой области ширины открытого Log'а. Эту фитчу можно было бы выделить в компонент, но то что код неразделён на модули и не по SOLID принципам это 100%. Думаю что, если разделять прямо всё на модули, то нужно делать это с расчётом на то, что SOLID может ударить по производительности алгоритмов

Повторюсь, что добавил туда фильтры по .gitignore (VCS paths, VCS files, VCS - Version Control System - Система контроля версий), чтобы фильтровать ненужное и не теряться в результатах поиска, чтобы было как в IDE - поиск по проекту. Большенство современных разработчиков используют Git. SVN не знаю, но где-то замечал похожий стандарт на .gitignore . VCS nested фильтр фильтрует по вложенным .gitignore , которые находятся в различных зависимостях проекта и VCS nested работает неточно, так как многое выруливается регулярными выражениями и их нужно как-то заточить.
P.s.: Разрабатывал в x86 сборке Андрея Аверина, в которой много тулбаров (там где есть ToolBar_16.dll, ToolBarExtra.dll), под звуки радио TCIMG

-
Offline
- Posts: 39
- Joined: Thu Aug 20, 2020 11:19 am
Поэкспериментировал с браузерными полифилами до 2017 года
Чуть изменил timer.js, чтобы через setTimeout() передавались аргументы, как в браузере
https://github.com/CoreText/AkelPad-Ext ... xtended.js
Есть полифилы для Promise + адаптировал underscore.js библиотеку (2015 год, потому что был конфликт с Promise)
underscore.js https://github.com/CoreText/AkelPad-Ext ... erscore.js
документация https://underscorejs.org/
Всё что в этой папке https://github.com/CoreText/AkelPad-Ext ... Include/ES
нужно для этого скрипта:
Можно лучше адаптировать эти полифилы к AkelPad, особенно если знать чем наполнить переменные global, window, self - не знаю если есть похожая переменная, которая отвечает за глобальный контекст.
В AkelEmmet.js заметил такой код, который описывает global:
Пока что не знаю как используется эта переменная в скриптах, но в console.js сделал похожим образом https://github.com/CoreText/AkelPad-Ext ... console.js
В дальнейшем, так как эта переменная global используется в полифилах, можно будет подправить код в полифилах и возможно полифилы будут лучше интегрированны для AkelPad. На данный момент, в некоторых полифилах убрал self-invoking function expression обёртку с параметром global, чтобы полифилы сработали, из-за чего ненужные переменные из полифилов стали доступны и теоретически в дальнейшем могут конфликтовать.
Минифицировал скрипты с помощью jsMin.js, так как другие минификаторы создавали ошибки.
Из недостатков заметил что:
- get set не работают в объектах
- Symbol.iterator не работает, который очень хотелось. Возможно позже найду специфичное решение для итераторов
- Proxy не удалось адаптировать, также Set, Map, WeakSet, WeakMap. Если они где-то определены, то скорее всего служат в качестве заглушки
P.s.: то что выше писал про catch, который мол нужно обернуть в кавычки - не канает такой вариант. Когда полифилил Promise, то пришлось переименовать catch в error, чтобы сработало
Чуть изменил timer.js, чтобы через setTimeout() передавались аргументы, как в браузере
https://github.com/CoreText/AkelPad-Ext ... xtended.js
Есть полифилы для Promise + адаптировал underscore.js библиотеку (2015 год, потому что был конфликт с Promise)
underscore.js https://github.com/CoreText/AkelPad-Ext ... erscore.js
документация https://underscorejs.org/
Всё что в этой папке https://github.com/CoreText/AkelPad-Ext ... Include/ES
нужно для этого скрипта:
Можно лучше адаптировать эти полифилы к AkelPad, особенно если знать чем наполнить переменные global, window, self - не знаю если есть похожая переменная, которая отвечает за глобальный контекст.
В AkelEmmet.js заметил такой код, который описывает global:
Code: Select all
// define `global` object variable for AkelPad Scripts engine
// install Log plugin to see possible Emmet logs
var global = {
console: {
log: function()
{
// we can not use arguments.join here
var i;
for(i = 0; i < arguments.length; i++)
if(AkelPad.Call('Log::Output', 4, arguments[i] + '\n') < 0)
break;
}
}
}
Code: Select all
var global = (global) ? global : {};
// code...
// export to global variable
if (!global.console) {
global.console = console;
}
Минифицировал скрипты с помощью jsMin.js, так как другие минификаторы создавали ошибки.
Из недостатков заметил что:
- get set не работают в объектах
- Symbol.iterator не работает, который очень хотелось. Возможно позже найду специфичное решение для итераторов
- Proxy не удалось адаптировать, также Set, Map, WeakSet, WeakMap. Если они где-то определены, то скорее всего служат в качестве заглушки
P.s.: то что выше писал про catch, который мол нужно обернуть в кавычки - не канает такой вариант. Когда полифилил Promise, то пришлось переименовать catch в error, чтобы сработало
Last edited by texter on Sun Jul 17, 2022 5:23 pm, edited 12 times in total.
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
Тогда надо убрать аргумент id, чтобы он не оказался использован в качестве идентификатора таймера:texter wrote:Чуть изменил timer.js, чтобы через setTimeout() передавались аргументы, как в браузере
https://github.com/CoreText/AkelPad-Ext ... xtended.js
Code: Select all
function setTimeout(fn, delay/*, id*/) {
var delay = delay || 0;
var args = Array.prototype.slice.call(arguments, 3);
return timers.set(fn, delay, true, undefined/*id*/, args);
}
-
Offline
- Posts: 39
- Joined: Thu Aug 20, 2020 11:19 am
Там было написано:Infocatcher wrote:Тогда надо убрать аргумент id, чтобы он не оказался использован в качестве идентификатора таймера:texter wrote:Чуть изменил timer.js, чтобы через setTimeout() передавались аргументы, как в браузере
https://github.com/CoreText/AkelPad-Ext ... xtended.jsCode: Select all
function setTimeout(fn, delay/*, id*/) { var delay = delay || 0; var args = Array.prototype.slice.call(arguments, 3); return timers.set(fn, delay, true, undefined/*id*/, args); }
Code: Select all
// Be careful: 3rd argument is an ID of already created timer!
Code: Select all
var promise1 = new Promise(function (resolve, reject) {
setTimeout(resolve, 500, null, 'one');
});
-
Offline
- Posts: 39
- Joined: Thu Aug 20, 2020 11:19 am
Чтобы работал timer_extended.js нужно перед инклюдом ES5 полифил.
Сделал console.js, чтобы было легче дебажить.
https://github.com/CoreText/AkelPad-Ext ... console.js
Чтобы без проблем работал console.js нужны эти зависимости:
Если Log плагин будет открыт, то в него будут выводиться console.log(), но если console.log() в setTimeout коллбеке, то в Log не выводит.
Если же закрыть Log, то всё будет выводиться в попапы, в том числе из setTimeout коллбека.
console.assert() - сделал для заглушки в некоторых полифилах.
Тема для console.log() вывода Json.coder , который можно найти здесь: https://github.com/CoreText/AkelPad-Ext ... Json.coder
Code: Select all
if (!(
AkelPad.Include("ES\\polyfills\\es5.min.js")
&& AkelPad.Include("timer_extended.js")
)) {
WScript.Quit();
}
// ваш код...
var timeoutID = setTimeout(function (arg1, arg2) {
WScript.echo(arg1 + ' ' + arg2);
}, 5, null, 'wat1', 'wat2');
WScript.echo(timeoutID);
Сделал console.js, чтобы было легче дебажить.
https://github.com/CoreText/AkelPad-Ext ... console.js
Чтобы без проблем работал console.js нужны эти зависимости:
Code: Select all
if (!(
AkelPad.Include("ES\\polyfills\\es5.min.js")
&& AkelPad.Include("ES\\json2.min.js")
&& AkelPad.Include("ES\\console.js")
)) {
WScript.Quit();
}
// ваш код...
console.log('wat');
Если Log плагин будет открыт, то в него будут выводиться console.log(), но если console.log() в setTimeout коллбеке, то в Log не выводит.
Если же закрыть Log, то всё будет выводиться в попапы, в том числе из setTimeout коллбека.
console.assert() - сделал для заглушки в некоторых полифилах.
Тема для console.log() вывода Json.coder , который можно найти здесь: https://github.com/CoreText/AkelPad-Ext ... Json.coder
-
Offline
- Posts: 39
- Joined: Thu Aug 20, 2020 11:19 am
Нашёл способ, как компилировать ES6 стандарт в ScriptHost, чтоб работало на AkelPad.
Для начала нужно установить Node js, затем TypeScript:
Код который написан на современном стандарте в script.ts:
и затем скомпилировать script.ts используя эту команду и сгенерированный код появится в script.js:
Однако, если писать скрипт, в котором есть фунции AkelPad - будут такие ошибки:
P.s.: TypeScript транспилирует, но не полифиллит
Для начала нужно установить Node js, затем TypeScript:
Code: Select all
npm install -g typescript
Code: Select all
function* add(x) {
let y = yield(x*5)
return x + y
}
let iterator = add(2)
console.log(iterator.next())
console.log(iterator.next(3))
и затем скомпилировать script.ts используя эту команду и сгенерированный код появится в script.js:
Code: Select all
tsc --target es5 --lib DOM,ES6,ScriptHost script.ts
Однако, если писать скрипт, в котором есть фунции AkelPad - будут такие ошибки:
Code: Select all
test_generator_function_typescript.ts:16:5 - error TS2304: Cannot find name 'AkelPad'.
16 AkelPad.Include("ES\\polyfills\\es5.min.js")
~~~~~~~
test_generator_function_typescript.ts:17:8 - error TS2304: Cannot find name 'AkelPad'.
17 && AkelPad.Include("ES\\json2.min.js")
~~~~~~~
test_generator_function_typescript.ts:18:8 - error TS2304: Cannot find name 'AkelPad'.
18 && AkelPad.Include("ES\\console.js")
~~~~~~~
test_generator_function_typescript.ts:19:8 - error TS2304: Cannot find name 'AkelPad'.
19 && AkelPad.Include("timer_extended.js")
~~~~~~~
Found 4 errors in the same file, starting at: test_generator_function_typescript.ts:16
P.s.: TypeScript транспилирует, но не полифиллит
