proglib
Version:
Многофункциональная библиотека
353 lines (277 loc) • 18.7 kB
JavaScript
'use struct';
const OS = require('os');
const FS = require('fs');
const Version = require('./version');
const FolderPath = require('./specialFolder');
const Path = require('./io/path');
function Exists(Path) {
try {
let FileInfo = FS.statSync(Path);
return true;
}
catch { return false; }
}
/**
* Предоставляет сведения о текущей среде и платформе, а также необходимые для управления ими средства.
*/
class Environment {
/**
* Возвращает строку, обозначающую в данной среде начало новой строки.
*/
static get NewLine() {
return OS.EOL;
}
/**
* Возвращает имя пользователя, который на данный момент выполнил вход в операционную систему.
*/
static get UserName() {
return OS.userInfo().username;
}
/**
* Возвращает имя NetBIOS данного локального компьютера.
*/
static get MachineName() {
return process.env.COMPUTERNAME;
}
/**
* Возвращает имя сетевого домена, связанное с текущим пользователем.
*/
static get UserDomainName() {
return OS.hostname();
}
/**
* Папка профиля пользователя.
*/
static get UserProfile() {
return OS.homedir();
}
/**
* Возвращает или задаёт полный путь к текущей рабочей папке.
*/
static get CurrentDirectory() {
return process.cwd();
}
static set CurrentDirectory(Value) {
process.chdir(Value);
}
/**
* Возвращает путь к особой системной папке (Windows).
* @param {Number} SpecialFolder Константа, позволяющая определить особую системную папку.
* @param {Number} SpecialFolderOption Задает параметры, используемые для получения пути к особой папке.
*/
static GetFolderPath(SpecialFolder, SpecialFolderOption = Environment.SpecialFolderOption.None) {
let _path = FolderPath.SearchById(SpecialFolder);
switch (SpecialFolderOption) {
case Environment.SpecialFolderOption.None:
return (Exists(_path)) ? _path : undefined;
case Environment.SpecialFolderOption.DoNotVerify:
return _path;
case Environment.SpecialFolderOption.Create:
if (_path) {
if (!Exists(_path)) FS.mkdirSync(_path);
return _path;
}
return undefined;
default:
throw new Error('Параметры получения пути заданы неверно.');
}
}
/**
* Предоставляет информацию об операционной системе.
*/
static get OS() {
return {
Type: OS.type(),
Platform: OS.platform(),
Architecture: OS.arch()
};
}
/**
* Возвращает версию Node.js в объекте `Version`.
* @typedef Version
*/
static get Version() {
return new Version(process.version.replace('v', ''));
}
/**
* Возвращает строку, которая определяет архитектуру CPU на данной ОС.
*/
static get Architecture() {
return OS.arch();
}
/**
* Возвращает число процессоров на текущем компьютере.
*/
static get ProcessorCount() {
return (process.env.NUMBER_OF_PROCESSORS)
? Number.parseInt(process.env.NUMBER_OF_PROCESSORS)
: (OS.cpus().length > 0) ? OS.cpus().length : undefined;
}
/**
* Возвращает время, истекшее с момента загрузки системы (в секундах).
*/
static get TickCount() {
return OS.uptime();
}
/**
* Возвращает все количество системной памяти в байтах в виде целого числа.
*/
static get TotalMemory() {
return OS.totalmem();
}
/**
* Возвращает количество свободной системной памяти в байтах в виде целого числа.
*/
static get FreeMemory() {
return OS.freemem();
}
/**
* Возвращает строковый массив, содержащий аргументы командной строки для текущего процесса.
*/
static GetCommandLineArgs() {
return process.argv;
}
/**
* Возвращает или задает код выхода из процесса.
*/
static get ExitCode() {
return process.exitCode;
}
static set ExitCode(Value) {
process.exitCode = Value;
}
/**
* Завершает этот процесс и возвращает внутренней операционной системе указанный код выхода.
* @param {Number} ExitCode Код выхода, возвращаемый операционной системе. Чтобы указать, что процесс прошел успешно, следует использовать `0`.
* @argument 1: Uncaught Fatal Exception – неперехваченное исключение, необработанное доменом или обработчиком события "uncaughtException".
* @argument 3: Internal JavaScript Parse Error – исходный код JavaScript, встроенный в bootstrap-процесс Node.js привел к ошибке парсинга.
* @argument 4: Internal JavaScript Evaluation Failure – исходному коду JavaScript, встроенному в bootstrap-процесс Node.js не удалось возвратить оцененное значение функции.
* @argument 5: Fatal Error - фатальная ошибка в V8.
* @argument 6: Non-function Internal Exception Handler – неперехваченное исключение, но встроенная функция обработчика фатальных исключений каким-то образом не определилась как функция и не была вызвана.
* @argument 7: Internal Exception Handler Run-Time Failure – неперехваченное исключение, и встроенная функция обработчика фатальных исключений сама выдала ошибку при попытке его обработать.
* @argument 9: Invalid Argument – Либо была задана неизвестная опция, либо опция, требующая задания значения, была без значения.
* @argument 10: Internal JavaScript Run-Time Failure – исходный код JavaScript, встроенный в bootstrap-процесс Node.js, выдал ошибку, когда был вызвана bootstrap-функция.
* @argument 12: Invalid Debug Argument – опции --debug, --inspect и --debuf-brk были установлены, но выбранный номер порта был недопустимым либо недоступным.
* @argument >128: Signal Exits – если Node.js получает фатальный сигнал, такой, как SIGKILL или SIGHUP, то его код завершения будет 128 плюс значение кода сигнала.
*/
static Exit(ExitCode) {
process.exit((ExitCode) ? ExitCode : (process.exitCode) ? process.exitCode : 0);
}
/**
* Заставляет процесс Node.js немедленно закрываться с созданием core-файла.
*/
static Abort() {
process.abort()
}
/**
* Задает параметры, используемые для получения пути к особой папке.
*/
static SpecialFolderOption = {
// Проверяется путь к папке.Если папка существует, возвращается путь. Если папка не существует, возвращается пустая строка. Это поведение установлено по умолчанию.
None: 0,
// Путь к папке возвращается без проверки наличия пути.
DoNotVerify: 16384,
// Создается путь к папке, если она еще не существует.
Create: 32768
}
/**
* Указывает перечислимые константы, используемые для получения путей к системным особым папкам.
*/
static SpecialFolder = {
/** Логический рабочий стол, а не физическое местоположение файлов системы. */
Desktop: 0,
/** Каталог, содержащий группы программ пользователя. */
Programs: 2,
/** Каталог, служащий общим репозиторием для документов. */
Personal: 5,
/** Папка Мои документы. */
MyDocuments: 5,
/** Каталог, служащий общим репозиторием для избранных элементов пользователя. */
Favorites: 6,
/** Каталог, соответствующий группе программ пользователя «Автозагрузка». */
Startup: 7,
/** Каталог, содержащий недавно использовавшиеся документы. */
Recent: 8,
/** Каталог, содержащий пункты меню «Отправить». */
SendTo: 9,
/** Каталог, содержащий пункты меню «Пуск». */
StartMenu: 11,
/** Папка Моя музыка. */
MyMusic: 13,
/** Каталог файловой системы, служащий репозиторием файлов видеозаписей, принадлежащих пользователю. */
MyVideos: 14,
/** Каталог, используемый для физического хранения файловых объектов рабочего стола. */
DesktopDirectory: 16,
/** Папка Мой компьютер. */
MyComputer: 17,
/** Каталог файловой системы, содержащий объекты ссылок, которые могут существовать в виртуальной папке Сетевое окружение. */
NetworkShortcuts: 19,
/** Виртуальная папка, содержащая шрифты. */
Fonts: 20,
/** Каталог, служащий общим репозиторием для шаблонов документов. */
Templates: 21,
/** Каталог файловой системы, содержащий программы и папки, отображающиеся в меню Пуск для всех пользователей. Эта особая папка действительна только для систем Windows NT. */
CommonStartMenu: 22,
/** Папка для компонентов, совместно используемых несколькими приложениями. Эта особая папка действительна только для систем Windows NT, Windows 2000 и Windows XP. */
CommonPrograms: 23,
/** Каталог файловой системы, содержащий программы и папки, отображающиеся в папке Автозагрузка для всех пользователей. Эта особая папка действительна только для систем Windows NT. */
CommonStartup: 24,
/** Каталог файловой системы, содержащий файлы и папки, отображающиеся на рабочих столах всех пользователей. Эта особая папка действительна только для систем Windows NT. */
CommonDesktopDirectory: 25,
/** Каталог, выполняющий функции общего репозитория для данных приложения текущего перемещающегося пользователя. */
ApplicationData: 26,
/** Каталог файловой системы, содержащий объекты ссылок, которые могут существовать в виртуальной папке Принтеры. */
PrinterShortcuts: 27,
/** Каталог, служащий общим репозиторием данных приложения, используемых текущим пользователем, который не перемещается. */
LocalApplicationData: 28,
/** Каталог, служащий общим репозиторием временных файлов Интернета. */
InternetCache: 32,
/** Каталог, служащий общим репозиторием файлов cookie Интернета. */
Cookies: 33,
/** Каталог, служащий общим репозиторием элементов журнала Интернета. */
History: 34,
/** Каталог, выполняющий функции общего репозитория для данных приложения, используемого всеми пользователями. */
CommonApplicationData: 35,
/** Каталог Windows или SYSROOT.Это соответствует переменным среды %windir% и %SYSTEMROOT%. */
Windows: 36,
/** Каталог System. */
System: 37,
/** Каталог файлов программ. */
ProgramFiles: 38,
/** Папка Мои рисунки. */
MyPictures: 39,
/** Папка профиля пользователя. */
UserProfile: 40,
/** Папка System ОС Windows. */
SystemX86: 41,
/** Папка Program Files. */
ProgramFilesX86: 42,
/** Каталог для компонентов, общих для приложений. */
CommonProgramFiles: 43,
/** Папка Program Files. */
CommonProgramFilesX86: 44,
/** Каталог файловой системы, содержащий шаблоны, доступные всем пользователям. Эта особая папка действительна только для систем Windows NT. */
CommonTemplates: 45,
/** Каталог файловой системы, содержащий документы, общие для всех пользователей. Эта особая папка действительна для систем Windows NT, Windows 95 и Windows 98 с установленной библиотекой Shfolder.dll. */
CommonDocuments: 46,
/** Каталог файловой системы, содержащий инструменты администрирования для всех пользователей компьютера. */
CommonAdminTools: 47,
/** Каталог файловой системы, используемый для хранения инструментов администрирования для отдельного пользователя.Консоль управления (MMC) сохраняет настроенные консоли в этом каталоге, и он будет перемещаться вслед за пользователем. */
AdminTools: 48,
/** Каталог файловой системы, служащий репозиторием музыкальных файлов, общих для всех пользователей. */
CommonMusic: 53,
/** Каталог файловой системы, служащий репозиторием файлов изображений, общих для всех пользователей. */
CommonPictures: 54,
/** Каталог файловой системы, служащий репозиторием файлов видеозаписей, общих для всех пользователей. */
CommonVideos: 55,
/** Каталог файловой системы, содержащий данные ресурсов. */
Resources: 56,
/** Каталог файловой системы, содержащий локализованные данные ресурсов. */
LocalizedResources: 57,
/** Это значение распознается ОС Windows Vista для обратной совместимости, но сама эта особая папка больше не используется. */
CommonOemLinks: 58,
/** Каталог файловой системы, выполняющий функции области промежуточного хранения для файлов, ожидающих записи на компакт-диск. */
CDBurning: 59
}
}
module.exports = Environment;