Initial commit
This commit is contained in:
commit
f1548f10cc
7585 files changed
+1411120
No files matched your search
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,221 @@
|
|||||||
|
const { app, BrowserWindow, shell, dialog } = require('electron');
|
||||||
|
const path = require('path');
|
||||||
|
const express = require('express');
|
||||||
|
const xlsx = require('xlsx');
|
||||||
|
const fs = require('fs');
|
||||||
|
const Store = require('electron-store');
|
||||||
|
|
||||||
|
// --- Store Setup ---
|
||||||
|
const store = new Store();
|
||||||
|
|
||||||
|
// --- Express Server Setup ---
|
||||||
|
const expressApp = express();
|
||||||
|
const PORT = 3000;
|
||||||
|
|
||||||
|
// Middleware
|
||||||
|
expressApp.use(express.static(path.join(__dirname, 'public')));
|
||||||
|
expressApp.use(express.json());
|
||||||
|
|
||||||
|
// Excel-Ordnerpfad aus Store oder Standard
|
||||||
|
let excelFolderPath = store.get('excelPath') || path.join(__dirname, 'tabellen');
|
||||||
|
|
||||||
|
// Sicherstellen, dass der Ordner existiert
|
||||||
|
if (!fs.existsSync(excelFolderPath)) {
|
||||||
|
fs.mkdirSync(excelFolderPath, { recursive: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Routen ---
|
||||||
|
|
||||||
|
// Abrufen von Daten für Jahr & Monat
|
||||||
|
expressApp.get('/api/daten/:jahr/:monat', (req, res) => {
|
||||||
|
const { jahr, monat } = req.params;
|
||||||
|
const excelPath = path.join(excelFolderPath, `${jahr}.xlsx`);
|
||||||
|
|
||||||
|
try {
|
||||||
|
let workbook;
|
||||||
|
if (!fs.existsSync(excelPath)) {
|
||||||
|
workbook = xlsx.utils.book_new();
|
||||||
|
xlsx.writeFile(workbook, excelPath);
|
||||||
|
} else {
|
||||||
|
workbook = xlsx.readFile(excelPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!workbook.Sheets[monat]) {
|
||||||
|
const ws = xlsx.utils.aoa_to_sheet([]);
|
||||||
|
xlsx.utils.book_append_sheet(workbook, ws, monat);
|
||||||
|
xlsx.writeFile(workbook, excelPath);
|
||||||
|
return res.json([]);
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = xlsx.utils.sheet_to_json(workbook.Sheets[monat], { header: 1 });
|
||||||
|
res.json(data || []);
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Fehler beim Abrufen der Daten:', err);
|
||||||
|
res.status(500).json({ error: 'Interner Serverfehler.' });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Zeile speichern
|
||||||
|
expressApp.post('/api/zeile-speichern', (req, res) => {
|
||||||
|
let { rowIndex, updatedRowData, jahr, monat } = req.body;
|
||||||
|
const excelPath = path.join(excelFolderPath, `${jahr}.xlsx`);
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (!fs.existsSync(excelPath)) {
|
||||||
|
return res.status(404).json({ error: `Datei für Jahr ${jahr} nicht gefunden.` });
|
||||||
|
}
|
||||||
|
|
||||||
|
const workbook = xlsx.readFile(excelPath);
|
||||||
|
if (!workbook.Sheets[monat]) {
|
||||||
|
return res.status(404).json({ error: `Blatt für Monat ${monat} nicht gefunden.` });
|
||||||
|
}
|
||||||
|
|
||||||
|
const worksheet = workbook.Sheets[monat];
|
||||||
|
const data = xlsx.utils.sheet_to_json(worksheet, { header: 1 }) || [];
|
||||||
|
|
||||||
|
if (rowIndex < 0 || rowIndex >= data.length) {
|
||||||
|
rowIndex = data.length;
|
||||||
|
data.push(updatedRowData);
|
||||||
|
} else {
|
||||||
|
data[rowIndex] = updatedRowData;
|
||||||
|
}
|
||||||
|
|
||||||
|
workbook.Sheets[monat] = xlsx.utils.aoa_to_sheet(data);
|
||||||
|
xlsx.writeFile(workbook, excelPath);
|
||||||
|
|
||||||
|
res.json({ message: 'Zeile erfolgreich gespeichert!' });
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Fehler beim Speichern der Zeile:', err);
|
||||||
|
res.status(500).json({ error: 'Interner Serverfehler.' });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Zeile löschen
|
||||||
|
expressApp.post('/api/zeile-loeschen', (req, res) => {
|
||||||
|
const { jahr, monat, zeileIndex } = req.body;
|
||||||
|
const excelPath = path.join(excelFolderPath, `${jahr}.xlsx`);
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (!fs.existsSync(excelPath)) {
|
||||||
|
return res.status(404).json({ error: `Datei für Jahr ${jahr} nicht gefunden.` });
|
||||||
|
}
|
||||||
|
|
||||||
|
const workbook = xlsx.readFile(excelPath);
|
||||||
|
if (!workbook.Sheets[monat]) {
|
||||||
|
return res.status(404).json({ error: `Blatt für Monat ${monat} nicht gefunden.` });
|
||||||
|
}
|
||||||
|
|
||||||
|
const worksheet = workbook.Sheets[monat];
|
||||||
|
const data = xlsx.utils.sheet_to_json(worksheet, { header: 1 }) || [];
|
||||||
|
|
||||||
|
if (zeileIndex < 0 || zeileIndex >= data.length) {
|
||||||
|
return res.status(404).json({ error: `Zeile ${zeileIndex} nicht gefunden.` });
|
||||||
|
}
|
||||||
|
|
||||||
|
data.splice(zeileIndex, 1);
|
||||||
|
workbook.Sheets[monat] = xlsx.utils.aoa_to_sheet(data);
|
||||||
|
xlsx.writeFile(workbook, excelPath);
|
||||||
|
|
||||||
|
res.json({ message: 'Zeile erfolgreich gelöscht!' });
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Fehler beim Löschen der Zeile:', err);
|
||||||
|
res.status(500).json({ error: 'Interner Serverfehler.' });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Ordner öffnen
|
||||||
|
expressApp.get('/api/ordner-oeffnen', (req, res) => {
|
||||||
|
try {
|
||||||
|
shell.openPath(excelFolderPath);
|
||||||
|
res.json({ message: 'Ordner geöffnet' });
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
res.status(500).json({ error: 'Ordner konnte nicht geöffnet werden' });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Pfad ändern über Dialog
|
||||||
|
expressApp.post('/api/pfad-aendern', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const result = await dialog.showOpenDialog(mainWindow, {
|
||||||
|
properties: ['openDirectory']
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!result.canceled && result.filePaths.length > 0) {
|
||||||
|
excelFolderPath = result.filePaths[0];
|
||||||
|
store.set('excelPath', excelFolderPath);
|
||||||
|
console.log('Neuer Excel-Pfad:', excelFolderPath);
|
||||||
|
return res.json({ message: 'Pfad geändert', path: excelFolderPath });
|
||||||
|
}
|
||||||
|
|
||||||
|
res.json({ message: 'Abgebrochen' });
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
res.status(500).json({ error: 'Pfad konnte nicht geändert werden' });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// --- Express Server starten ---
|
||||||
|
let server;
|
||||||
|
function startExpressServer() {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
server = expressApp.listen(PORT, 'localhost', (err) => {
|
||||||
|
if (err) reject(err);
|
||||||
|
else {
|
||||||
|
console.log(`Express Server läuft auf http://localhost:${PORT}`);
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Electron App Setup ---
|
||||||
|
let mainWindow;
|
||||||
|
function createWindow() {
|
||||||
|
mainWindow = new BrowserWindow({
|
||||||
|
width: 1200,
|
||||||
|
height: 800,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: false,
|
||||||
|
contextIsolation: true,
|
||||||
|
preload: path.join(__dirname, 'preload.js')
|
||||||
|
},
|
||||||
|
show: false
|
||||||
|
});
|
||||||
|
|
||||||
|
mainWindow.loadURL(`http://localhost:${PORT}`);
|
||||||
|
|
||||||
|
mainWindow.once('ready-to-show', () => mainWindow.show());
|
||||||
|
|
||||||
|
if (process.env.NODE_ENV === 'development') {
|
||||||
|
mainWindow.webContents.openDevTools();
|
||||||
|
}
|
||||||
|
|
||||||
|
mainWindow.on('closed', () => {
|
||||||
|
mainWindow = null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- App Events ---
|
||||||
|
app.whenReady().then(async () => {
|
||||||
|
try {
|
||||||
|
await startExpressServer();
|
||||||
|
createWindow();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Fehler beim Starten:', error);
|
||||||
|
app.quit();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.on('window-all-closed', () => {
|
||||||
|
if (server) server.close();
|
||||||
|
if (process.platform !== 'darwin') app.quit();
|
||||||
|
});
|
||||||
|
|
||||||
|
app.on('activate', () => {
|
||||||
|
if (BrowserWindow.getAllWindows().length === 0) createWindow();
|
||||||
|
});
|
||||||
|
|
||||||
|
app.on('before-quit', () => {
|
||||||
|
if (server) server.close();
|
||||||
|
});
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../@electron/asar/bin/asar.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../@electron/asar/bin/asar.js" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\@electron\asar\bin\asar.js" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../@electron/asar/bin/asar.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../@electron/asar/bin/asar.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../@electron/asar/bin/asar.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../@electron/asar/bin/asar.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../crc-32/bin/crc32.njs" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../crc-32/bin/crc32.njs" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\crc-32\bin\crc32.njs" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../crc-32/bin/crc32.njs" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../crc-32/bin/crc32.njs" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../crc-32/bin/crc32.njs" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../crc-32/bin/crc32.njs" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../ejs/bin/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../ejs/bin/cli.js" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\ejs\bin\cli.js" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../ejs/bin/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../ejs/bin/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../ejs/bin/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../ejs/bin/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../electron/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../electron/cli.js" "$@"
|
||||||
|
fi
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../electron-builder/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../electron-builder/cli.js" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\electron-builder\cli.js" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../electron-builder/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../electron-builder/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../electron-builder/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../electron-builder/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../@electron/osx-sign/bin/electron-osx-flat.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../@electron/osx-sign/bin/electron-osx-flat.js" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\@electron\osx-sign\bin\electron-osx-flat.js" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../@electron/osx-sign/bin/electron-osx-flat.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../@electron/osx-sign/bin/electron-osx-flat.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../@electron/osx-sign/bin/electron-osx-flat.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../@electron/osx-sign/bin/electron-osx-flat.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../@electron/osx-sign/bin/electron-osx-sign.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../@electron/osx-sign/bin/electron-osx-sign.js" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\@electron\osx-sign\bin\electron-osx-sign.js" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../@electron/osx-sign/bin/electron-osx-sign.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../@electron/osx-sign/bin/electron-osx-sign.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../@electron/osx-sign/bin/electron-osx-sign.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../@electron/osx-sign/bin/electron-osx-sign.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\electron\cli.js" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../electron/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../electron/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../electron/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../electron/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../extract-zip/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../extract-zip/cli.js" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\extract-zip\cli.js" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../extract-zip/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../extract-zip/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../extract-zip/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../extract-zip/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../electron-builder/install-app-deps.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../electron-builder/install-app-deps.js" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\electron-builder\install-app-deps.js" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../electron-builder/install-app-deps.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../electron-builder/install-app-deps.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../electron-builder/install-app-deps.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../electron-builder/install-app-deps.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../is-ci/bin.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../is-ci/bin.js" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\is-ci\bin.js" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../is-ci/bin.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../is-ci/bin.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../is-ci/bin.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../is-ci/bin.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../jake/bin/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../jake/bin/cli.js" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\jake\bin\cli.js" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../jake/bin/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../jake/bin/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../jake/bin/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../jake/bin/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../js-yaml/bin/js-yaml.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../js-yaml/bin/js-yaml.js" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\js-yaml\bin\js-yaml.js" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../json5/lib/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../json5/lib/cli.js" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\json5\lib\cli.js" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../json5/lib/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../json5/lib/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../json5/lib/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../json5/lib/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../mime/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../mime/cli.js" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mime\cli.js" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../mime/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../mime/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../mime/cli.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../mime/cli.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../mkdirp/bin/cmd.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../mkdirp/bin/cmd.js" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mkdirp\bin\cmd.js" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../mkdirp/bin/cmd.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../mkdirp/bin/cmd.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../mkdirp/bin/cmd.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../mkdirp/bin/cmd.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../which/bin/node-which" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../which/bin/node-which" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\which\bin\node-which" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../which/bin/node-which" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../which/bin/node-which" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../which/bin/node-which" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../which/bin/node-which" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../semver/bin/semver.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../semver/bin/semver.js" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\semver\bin\semver.js" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../semver/bin/semver.js" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../semver/bin/semver.js" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../typescript/bin/tsc" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../typescript/bin/tsc" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\typescript\bin\tsc" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../typescript/bin/tsc" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../typescript/bin/tsc" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../typescript/bin/tsc" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../typescript/bin/tsc" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../typescript/bin/tsserver" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../typescript/bin/tsserver" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\typescript\bin\tsserver" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../typescript/bin/tsserver" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../typescript/bin/tsserver" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../typescript/bin/tsserver" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../typescript/bin/tsserver" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../xlsx/bin/xlsx.njs" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../xlsx/bin/xlsx.njs" "$@"
|
||||||
|
fi
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
@ECHO off
|
||||||
|
GOTO start
|
||||||
|
:find_dp0
|
||||||
|
SET dp0=%~dp0
|
||||||
|
EXIT /b
|
||||||
|
:start
|
||||||
|
SETLOCAL
|
||||||
|
CALL :find_dp0
|
||||||
|
|
||||||
|
IF EXIST "%dp0%\node.exe" (
|
||||||
|
SET "_prog=%dp0%\node.exe"
|
||||||
|
) ELSE (
|
||||||
|
SET "_prog=node"
|
||||||
|
SET PATHEXT=%PATHEXT:;.JS;=;%
|
||||||
|
)
|
||||||
|
|
||||||
|
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\xlsx\bin\xlsx.njs" %*
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env pwsh
|
||||||
|
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
|
||||||
|
|
||||||
|
$exe=""
|
||||||
|
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
|
||||||
|
# Fix case when both the Windows and Linux builds of Node
|
||||||
|
# are installed in the same directory
|
||||||
|
$exe=".exe"
|
||||||
|
}
|
||||||
|
$ret=0
|
||||||
|
if (Test-Path "$basedir/node$exe") {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "$basedir/node$exe" "$basedir/../xlsx/bin/xlsx.njs" $args
|
||||||
|
} else {
|
||||||
|
& "$basedir/node$exe" "$basedir/../xlsx/bin/xlsx.njs" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
} else {
|
||||||
|
# Support pipeline input
|
||||||
|
if ($MyInvocation.ExpectingInput) {
|
||||||
|
$input | & "node$exe" "$basedir/../xlsx/bin/xlsx.njs" $args
|
||||||
|
} else {
|
||||||
|
& "node$exe" "$basedir/../xlsx/bin/xlsx.njs" $args
|
||||||
|
}
|
||||||
|
$ret=$LASTEXITCODE
|
||||||
|
}
|
||||||
|
exit $ret
|
||||||
+4787
File diff suppressed because it is too large.
Load diff
+9
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
sz_program=${SZA_PATH:-7za}
|
||||||
|
sz_type=${SZA_ARCHIVE_TYPE:-xz}
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
-d) "$sz_program" e -si -so -t${sz_type} ;;
|
||||||
|
*) "$sz_program" a f -si -so -t${sz_type} -mx${SZA_COMPRESSION_LEVEL:-9} ;;
|
||||||
|
esac 2> /dev/null
|
||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2016 Vladimir Krivosheev
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
7-Zip precompiled binaries.
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
export const path7za: string
|
||||||
|
export const path7x: string
|
||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
"use strict"
|
||||||
|
|
||||||
|
const path = require("path")
|
||||||
|
|
||||||
|
function getPath() {
|
||||||
|
if (process.env.USE_SYSTEM_7ZA === "true") {
|
||||||
|
return "7za"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.platform === "darwin") {
|
||||||
|
return path.join(__dirname, "mac", process.arch, "7za")
|
||||||
|
}
|
||||||
|
else if (process.platform === "win32") {
|
||||||
|
return path.join(__dirname, "win", process.arch, "7za.exe")
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return path.join(__dirname, "linux", process.arch, "7za")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.path7za = getPath()
|
||||||
|
exports.path7x = path.join(__dirname, "7x.sh")
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+9
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
BASEDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
rm -rf /tmp/7z-linux
|
||||||
|
mkdir /tmp/7z-linux
|
||||||
|
cp "$BASEDIR/do-build.sh" /tmp/7z-linux/do-build.sh
|
||||||
|
docker run --rm -v /tmp/7z-linux:/project buildpack-deps:xenial /project/do-build.sh
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
apt-get update -qq
|
||||||
|
apt-get upgrade -qq
|
||||||
|
|
||||||
|
echo "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-5.0 main" > /etc/apt/sources.list.d/llvm.list
|
||||||
|
curl -L http://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
|
||||||
|
apt-get update -qq
|
||||||
|
apt-get install -qq bzip2 yasm clang-5.0 lldb-5.0 lld-5.0
|
||||||
|
|
||||||
|
ln -s /usr/bin/clang-5.0 /usr/bin/clang
|
||||||
|
ln -s /usr/bin/clang++-5.0 /usr/bin/clang++
|
||||||
|
|
||||||
|
mkdir -p /tmp/7z
|
||||||
|
cd /tmp/7z
|
||||||
|
curl -L http://downloads.sourceforge.net/project/p7zip/p7zip/16.02/p7zip_16.02_src_all.tar.bz2 | tar -xj -C . --strip-components 1
|
||||||
|
cp makefile.linux_clang_amd64_asm makefile.machine
|
||||||
|
make -j4
|
||||||
|
mv bin/7za /project/7za
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
+20
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"name": "7zip-bin",
|
||||||
|
"description": "7-Zip precompiled binaries",
|
||||||
|
"version": "5.2.0",
|
||||||
|
"files": [
|
||||||
|
"*.js",
|
||||||
|
"7x.sh",
|
||||||
|
"index.d.ts",
|
||||||
|
"linux",
|
||||||
|
"mac",
|
||||||
|
"win"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"repository": "develar/7zip-bin",
|
||||||
|
"keywords": [
|
||||||
|
"7zip",
|
||||||
|
"7z",
|
||||||
|
"7za"
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+259
@@ -0,0 +1,259 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||||
|
|
||||||
|
### [2.6.5](https://github.com/webpack/schema-utils/compare/v2.6.4...v2.6.5) (2020-03-11)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* typo ([#88](https://github.com/webpack/schema-utils/issues/88)) ([52fc92b](https://github.com/webpack/schema-utils/commit/52fc92b531b7503b7bbe1bf9b21bfa26dffbc8f5))
|
||||||
|
|
||||||
|
### [2.6.4](https://github.com/webpack/schema-utils/compare/v2.6.3...v2.6.4) (2020-01-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* change `initialised` to `initialized` ([#87](https://github.com/webpack/schema-utils/issues/87)) ([70f12d3](https://github.com/webpack/schema-utils/commit/70f12d33a8eaa27249bc9c1a27f886724cf91ea7))
|
||||||
|
|
||||||
|
### [2.6.3](https://github.com/webpack/schema-utils/compare/v2.6.2...v2.6.3) (2020-01-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* prefer the `baseDataPath` option from arguments ([#86](https://github.com/webpack/schema-utils/issues/86)) ([e236859](https://github.com/webpack/schema-utils/commit/e236859e85b28e35e1294f86fc1ff596a5031cea))
|
||||||
|
|
||||||
|
### [2.6.2](https://github.com/webpack/schema-utils/compare/v2.6.1...v2.6.2) (2020-01-14)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* better handle Windows absolute paths ([#85](https://github.com/webpack/schema-utils/issues/85)) ([1fa2930](https://github.com/webpack/schema-utils/commit/1fa2930a161e907b9fc53a7233d605910afdb883))
|
||||||
|
|
||||||
|
### [2.6.1](https://github.com/webpack/schema-utils/compare/v2.6.0...v2.6.1) (2019-11-28)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* typescript declarations ([#84](https://github.com/webpack/schema-utils/issues/84)) ([89d55a9](https://github.com/webpack/schema-utils/commit/89d55a9a8edfa6a8ac8b112f226bb3154e260319))
|
||||||
|
|
||||||
|
## [2.6.0](https://github.com/webpack/schema-utils/compare/v2.5.0...v2.6.0) (2019-11-27)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* support configuration via title ([#81](https://github.com/webpack/schema-utils/issues/81)) ([afddc10](https://github.com/webpack/schema-utils/commit/afddc109f6891cd37a9f1835d50862d119a072bf))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* typescript definitions ([#70](https://github.com/webpack/schema-utils/issues/70)) ([f38158d](https://github.com/webpack/schema-utils/commit/f38158d6d040e2c701622778ae8122fb26a4f990))
|
||||||
|
|
||||||
|
## [2.5.0](https://github.com/webpack/schema-utils/compare/v2.4.1...v2.5.0) (2019-10-15)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* rework format for maxLength, minLength ([#67](https://github.com/webpack/schema-utils/issues/67)) ([0d12259](https://github.com/webpack/schema-utils/commit/0d12259))
|
||||||
|
* support all cases with one number in range ([#64](https://github.com/webpack/schema-utils/issues/64)) ([7fc8069](https://github.com/webpack/schema-utils/commit/7fc8069))
|
||||||
|
* typescript definition and export naming ([#69](https://github.com/webpack/schema-utils/issues/69)) ([a435b79](https://github.com/webpack/schema-utils/commit/a435b79))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* "smart" numbers range ([62fb107](https://github.com/webpack/schema-utils/commit/62fb107))
|
||||||
|
|
||||||
|
### [2.4.1](https://github.com/webpack/schema-utils/compare/v2.4.0...v2.4.1) (2019-09-27)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* publish definitions ([#58](https://github.com/webpack/schema-utils/issues/58)) ([1885faa](https://github.com/webpack/schema-utils/commit/1885faa))
|
||||||
|
|
||||||
|
## [2.4.0](https://github.com/webpack/schema-utils/compare/v2.3.0...v2.4.0) (2019-09-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* better errors when the `type` keyword doesn't exist ([0988be2](https://github.com/webpack/schema-utils/commit/0988be2))
|
||||||
|
* support $data reference ([#56](https://github.com/webpack/schema-utils/issues/56)) ([d2f11d6](https://github.com/webpack/schema-utils/commit/d2f11d6))
|
||||||
|
* types definitions ([#52](https://github.com/webpack/schema-utils/issues/52)) ([facb431](https://github.com/webpack/schema-utils/commit/facb431))
|
||||||
|
|
||||||
|
## [2.3.0](https://github.com/webpack/schema-utils/compare/v2.2.0...v2.3.0) (2019-09-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* support `not` keyword ([#53](https://github.com/webpack/schema-utils/issues/53)) ([765f458](https://github.com/webpack/schema-utils/commit/765f458))
|
||||||
|
|
||||||
|
## [2.2.0](https://github.com/webpack/schema-utils/compare/v2.1.0...v2.2.0) (2019-09-02)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* better error output for `oneOf` and `anyOf` ([#48](https://github.com/webpack/schema-utils/issues/48)) ([#50](https://github.com/webpack/schema-utils/issues/50)) ([332242f](https://github.com/webpack/schema-utils/commit/332242f))
|
||||||
|
|
||||||
|
## [2.1.0](https://github.com/webpack-contrib/schema-utils/compare/v2.0.1...v2.1.0) (2019-08-07)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* throw error on sparse arrays ([#47](https://github.com/webpack-contrib/schema-utils/issues/47)) ([b85ac38](https://github.com/webpack-contrib/schema-utils/commit/b85ac38))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* export `ValidateError` ([#46](https://github.com/webpack-contrib/schema-utils/issues/46)) ([ff781d7](https://github.com/webpack-contrib/schema-utils/commit/ff781d7))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### [2.0.1](https://github.com/webpack-contrib/schema-utils/compare/v2.0.0...v2.0.1) (2019-07-18)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* error message for empty object ([#44](https://github.com/webpack-contrib/schema-utils/issues/44)) ([0b4b4a2](https://github.com/webpack-contrib/schema-utils/commit/0b4b4a2))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### [2.0.0](https://github.com/webpack-contrib/schema-utils/compare/v1.0.0...v2.0.0) (2019-07-17)
|
||||||
|
|
||||||
|
|
||||||
|
### BREAKING CHANGES
|
||||||
|
|
||||||
|
* drop support for Node.js < 8.9.0
|
||||||
|
* drop support `errorMessage`, please use `description` for links.
|
||||||
|
* api was changed, please look documentation.
|
||||||
|
* error messages was fully rewritten.
|
||||||
|
|
||||||
|
|
||||||
|
<a name="1.0.0"></a>
|
||||||
|
# [1.0.0](https://github.com/webpack-contrib/schema-utils/compare/v0.4.7...v1.0.0) (2018-08-07)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **src:** add support for custom error messages ([#33](https://github.com/webpack-contrib/schema-utils/issues/33)) ([1cbe4ef](https://github.com/webpack-contrib/schema-utils/commit/1cbe4ef))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="0.4.7"></a>
|
||||||
|
## [0.4.7](https://github.com/webpack-contrib/schema-utils/compare/v0.4.6...v0.4.7) (2018-08-07)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **src:** `node >= v4.0.0` support ([#32](https://github.com/webpack-contrib/schema-utils/issues/32)) ([cb13dd4](https://github.com/webpack-contrib/schema-utils/commit/cb13dd4))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="0.4.6"></a>
|
||||||
|
## [0.4.6](https://github.com/webpack-contrib/schema-utils/compare/v0.4.5...v0.4.6) (2018-08-06)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **package:** remove lockfile ([#28](https://github.com/webpack-contrib/schema-utils/issues/28)) ([69f1a81](https://github.com/webpack-contrib/schema-utils/commit/69f1a81))
|
||||||
|
* **package:** remove unnecessary `webpack` dependency ([#26](https://github.com/webpack-contrib/schema-utils/issues/26)) ([532eaa5](https://github.com/webpack-contrib/schema-utils/commit/532eaa5))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="0.4.5"></a>
|
||||||
|
## [0.4.5](https://github.com/webpack-contrib/schema-utils/compare/v0.4.4...v0.4.5) (2018-02-13)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **CHANGELOG:** update broken links ([4483b9f](https://github.com/webpack-contrib/schema-utils/commit/4483b9f))
|
||||||
|
* **package:** update broken links ([f2494ba](https://github.com/webpack-contrib/schema-utils/commit/f2494ba))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="0.4.4"></a>
|
||||||
|
## [0.4.4](https://github.com/webpack-contrib/schema-utils/compare/v0.4.3...v0.4.4) (2018-02-13)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **package:** update `dependencies` ([#22](https://github.com/webpack-contrib/schema-utils/issues/22)) ([3aecac6](https://github.com/webpack-contrib/schema-utils/commit/3aecac6))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="0.4.3"></a>
|
||||||
|
## [0.4.3](https://github.com/webpack-contrib/schema-utils/compare/v0.4.2...v0.4.3) (2017-12-14)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **validateOptions:** throw `err` instead of `process.exit(1)` ([#17](https://github.com/webpack-contrib/schema-utils/issues/17)) ([c595eda](https://github.com/webpack-contrib/schema-utils/commit/c595eda))
|
||||||
|
* **ValidationError:** never return `this` in the ctor ([#16](https://github.com/webpack-contrib/schema-utils/issues/16)) ([c723791](https://github.com/webpack-contrib/schema-utils/commit/c723791))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="0.4.2"></a>
|
||||||
|
## [0.4.2](https://github.com/webpack-contrib/schema-utils/compare/v0.4.1...v0.4.2) (2017-11-09)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **validateOptions:** catch `ValidationError` and handle it internally ([#15](https://github.com/webpack-contrib/schema-utils/issues/15)) ([9c5ef5e](https://github.com/webpack-contrib/schema-utils/commit/9c5ef5e))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="0.4.1"></a>
|
||||||
|
## [0.4.1](https://github.com/webpack-contrib/schema-utils/compare/v0.4.0...v0.4.1) (2017-11-03)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **ValidationError:** use `Error.captureStackTrace` for `err.stack` handling ([#14](https://github.com/webpack-contrib/schema-utils/issues/14)) ([a6fb974](https://github.com/webpack-contrib/schema-utils/commit/a6fb974))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="0.4.0"></a>
|
||||||
|
# [0.4.0](https://github.com/webpack-contrib/schema-utils/compare/v0.3.0...v0.4.0) (2017-10-28)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add support for `typeof`, `instanceof` (`{Function\|RegExp}`) ([#10](https://github.com/webpack-contrib/schema-utils/issues/10)) ([9f01816](https://github.com/webpack-contrib/schema-utils/commit/9f01816))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="0.3.0"></a>
|
||||||
|
# [0.3.0](https://github.com/webpack-contrib/schema-utils/compare/v0.2.1...v0.3.0) (2017-04-29)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add ValidationError ([#8](https://github.com/webpack-contrib/schema-utils/issues/8)) ([d48f0fb](https://github.com/webpack-contrib/schema-utils/commit/d48f0fb))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="0.2.1"></a>
|
||||||
|
## [0.2.1](https://github.com/webpack-contrib/schema-utils/compare/v0.2.0...v0.2.1) (2017-03-13)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Include .babelrc to `files` ([28f0363](https://github.com/webpack-contrib/schema-utils/commit/28f0363))
|
||||||
|
* Include source to `files` ([43b0f2f](https://github.com/webpack-contrib/schema-utils/commit/43b0f2f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="0.2.0"></a>
|
||||||
|
# [0.2.0](https://github.com/webpack-contrib/schema-utils/compare/v0.1.0...v0.2.0) (2017-03-12)
|
||||||
|
|
||||||
|
<a name="0.1.0"></a>
|
||||||
|
# 0.1.0 (2017-03-07)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **validations:** add validateOptions module ([ae9b47b](https://github.com/webpack-contrib/schema-utils/commit/ae9b47b))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Change Log
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
Copyright JS Foundation and other contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
'Software'), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
+276
@@ -0,0 +1,276 @@
|
|||||||
|
<div align="center">
|
||||||
|
<a href="http://json-schema.org">
|
||||||
|
<img width="160" height="160"
|
||||||
|
src="https://raw.githubusercontent.com/webpack-contrib/schema-utils/master/.github/assets/logo.png">
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/webpack/webpack">
|
||||||
|
<img width="200" height="200"
|
||||||
|
src="https://webpack.js.org/assets/icon-square-big.svg">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
[![npm][npm]][npm-url]
|
||||||
|
[![node][node]][node-url]
|
||||||
|
[![deps][deps]][deps-url]
|
||||||
|
[![tests][tests]][tests-url]
|
||||||
|
[![coverage][cover]][cover-url]
|
||||||
|
[![chat][chat]][chat-url]
|
||||||
|
[![size][size]][size-url]
|
||||||
|
|
||||||
|
# schema-utils
|
||||||
|
|
||||||
|
Package for validate options in loaders and plugins.
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
To begin, you'll need to install `schema-utils`:
|
||||||
|
|
||||||
|
```console
|
||||||
|
npm install schema-utils
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
**schema.json**
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"option": {
|
||||||
|
"type": ["boolean"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
import schema from './path/to/schema.json';
|
||||||
|
import validate from 'schema-utils';
|
||||||
|
|
||||||
|
const options = { option: true };
|
||||||
|
const configuration = { name: 'Loader Name/Plugin Name/Name' };
|
||||||
|
|
||||||
|
validate(schema, options, configuration);
|
||||||
|
```
|
||||||
|
|
||||||
|
### `schema`
|
||||||
|
|
||||||
|
Type: `String`
|
||||||
|
|
||||||
|
JSON schema.
|
||||||
|
|
||||||
|
Simple example of schema:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "This is description of option.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### `options`
|
||||||
|
|
||||||
|
Type: `Object`
|
||||||
|
|
||||||
|
Object with options.
|
||||||
|
|
||||||
|
```js
|
||||||
|
validate(
|
||||||
|
schema,
|
||||||
|
{
|
||||||
|
name: 123,
|
||||||
|
},
|
||||||
|
{ name: 'MyPlugin' }
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
### `configuration`
|
||||||
|
|
||||||
|
Allow to configure validator.
|
||||||
|
|
||||||
|
There is an alternative method to configure the `name` and`baseDataPath` options via the `title` property in the schema.
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"title": "My Loader options",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "This is description of option.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The last word used for the `baseDataPath` option, other words used for the `name` option.
|
||||||
|
Based on the example above the `name` option equals `My Loader`, the `baseDataPath` option equals `options`.
|
||||||
|
|
||||||
|
#### `name`
|
||||||
|
|
||||||
|
Type: `Object`
|
||||||
|
Default: `"Object"`
|
||||||
|
|
||||||
|
Allow to setup name in validation errors.
|
||||||
|
|
||||||
|
```js
|
||||||
|
validate(schema, options, { name: 'MyPlugin' });
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
Invalid configuration object. MyPlugin has been initialised using a configuration object that does not match the API schema.
|
||||||
|
- configuration.optionName should be a integer.
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `baseDataPath`
|
||||||
|
|
||||||
|
Type: `String`
|
||||||
|
Default: `"configuration"`
|
||||||
|
|
||||||
|
Allow to setup base data path in validation errors.
|
||||||
|
|
||||||
|
```js
|
||||||
|
validate(schema, options, { name: 'MyPlugin', baseDataPath: 'options' });
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
Invalid options object. MyPlugin has been initialised using an options object that does not match the API schema.
|
||||||
|
- options.optionName should be a integer.
|
||||||
|
```
|
||||||
|
|
||||||
|
#### `postFormatter`
|
||||||
|
|
||||||
|
Type: `Function`
|
||||||
|
Default: `undefined`
|
||||||
|
|
||||||
|
Allow to reformat errors.
|
||||||
|
|
||||||
|
```js
|
||||||
|
validate(schema, options, {
|
||||||
|
name: 'MyPlugin',
|
||||||
|
postFormatter: (formattedError, error) => {
|
||||||
|
if (error.keyword === 'type') {
|
||||||
|
return `${formattedError}\nAdditional Information.`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return formattedError;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
Invalid options object. MyPlugin has been initialized using an options object that does not match the API schema.
|
||||||
|
- options.optionName should be a integer.
|
||||||
|
Additional Information.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
**schema.json**
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"test": {
|
||||||
|
"anyOf": [
|
||||||
|
{ "type": "array" },
|
||||||
|
{ "type": "string" },
|
||||||
|
{ "instanceof": "RegExp" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"transform": {
|
||||||
|
"instanceof": "Function"
|
||||||
|
},
|
||||||
|
"sourceMap": {
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### `Loader`
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { getOptions } from 'loader-utils';
|
||||||
|
import validateOptions from 'schema-utils';
|
||||||
|
|
||||||
|
import schema from 'path/to/schema.json';
|
||||||
|
|
||||||
|
function loader(src, map) {
|
||||||
|
const options = getOptions(this) || {};
|
||||||
|
|
||||||
|
validateOptions(schema, options, {
|
||||||
|
name: 'Loader Name',
|
||||||
|
baseDataPath: 'options',
|
||||||
|
});
|
||||||
|
|
||||||
|
// Code...
|
||||||
|
}
|
||||||
|
|
||||||
|
export default loader;
|
||||||
|
```
|
||||||
|
|
||||||
|
### `Plugin`
|
||||||
|
|
||||||
|
```js
|
||||||
|
import validateOptions from 'schema-utils';
|
||||||
|
|
||||||
|
import schema from 'path/to/schema.json';
|
||||||
|
|
||||||
|
class Plugin {
|
||||||
|
constructor(options) {
|
||||||
|
validateOptions(schema, options, {
|
||||||
|
name: 'Plugin Name',
|
||||||
|
baseDataPath: 'options',
|
||||||
|
});
|
||||||
|
|
||||||
|
this.options = options;
|
||||||
|
}
|
||||||
|
|
||||||
|
apply(compiler) {
|
||||||
|
// Code...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Plugin;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Please take a moment to read our contributing guidelines if you haven't yet done so.
|
||||||
|
|
||||||
|
[CONTRIBUTING](./.github/CONTRIBUTING.md)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[MIT](./LICENSE)
|
||||||
|
|
||||||
|
[npm]: https://img.shields.io/npm/v/schema-utils.svg
|
||||||
|
[npm-url]: https://npmjs.com/package/schema-utils
|
||||||
|
[node]: https://img.shields.io/node/v/schema-utils.svg
|
||||||
|
[node-url]: https://nodejs.org
|
||||||
|
[deps]: https://david-dm.org/webpack/schema-utils.svg
|
||||||
|
[deps-url]: https://david-dm.org/webpack/schema-utils
|
||||||
|
[tests]: https://dev.azure.com/webpack/schema-utils/_apis/build/status/webpack.schema-utils?branchName=master
|
||||||
|
[tests-url]: https://dev.azure.com/webpack/schema-utils/_build/latest?definitionId=9&branchName=master
|
||||||
|
[cover]: https://codecov.io/gh/webpack/schema-utils/branch/master/graph/badge.svg
|
||||||
|
[cover-url]: https://codecov.io/gh/webpack/schema-utils
|
||||||
|
[chat]: https://badges.gitter.im/webpack/webpack.svg
|
||||||
|
[chat-url]: https://gitter.im/webpack/webpack
|
||||||
|
[size]: https://packagephobia.now.sh/badge?p=schema-utils
|
||||||
|
[size-url]: https://packagephobia.now.sh/result?p=schema-utils
|
||||||
+115
@@ -0,0 +1,115 @@
|
|||||||
|
export default ValidationError;
|
||||||
|
export type JSONSchema6 = import('json-schema').JSONSchema6;
|
||||||
|
export type JSONSchema7 = import('json-schema').JSONSchema7;
|
||||||
|
export type Schema =
|
||||||
|
| import('json-schema').JSONSchema4
|
||||||
|
| import('json-schema').JSONSchema6
|
||||||
|
| import('json-schema').JSONSchema7;
|
||||||
|
export type ValidationErrorConfiguration = {
|
||||||
|
name?: string | undefined;
|
||||||
|
baseDataPath?: string | undefined;
|
||||||
|
postFormatter?: import('./validate').PostFormatter | undefined;
|
||||||
|
};
|
||||||
|
export type PostFormatter = (
|
||||||
|
formattedError: string,
|
||||||
|
error: import('ajv').ErrorObject & {
|
||||||
|
children?: import('ajv').ErrorObject[] | undefined;
|
||||||
|
}
|
||||||
|
) => string;
|
||||||
|
export type SchemaUtilErrorObject = import('ajv').ErrorObject & {
|
||||||
|
children?: import('ajv').ErrorObject[] | undefined;
|
||||||
|
};
|
||||||
|
export type SPECIFICITY = number;
|
||||||
|
declare class ValidationError extends Error {
|
||||||
|
/**
|
||||||
|
* @param {Array<SchemaUtilErrorObject>} errors
|
||||||
|
* @param {Schema} schema
|
||||||
|
* @param {ValidationErrorConfiguration} configuration
|
||||||
|
*/
|
||||||
|
constructor(
|
||||||
|
errors: (import('ajv').ErrorObject & {
|
||||||
|
children?: import('ajv').ErrorObject[] | undefined;
|
||||||
|
})[],
|
||||||
|
schema:
|
||||||
|
| import('json-schema').JSONSchema4
|
||||||
|
| import('json-schema').JSONSchema6
|
||||||
|
| import('json-schema').JSONSchema7,
|
||||||
|
configuration?: import('./validate').ValidationErrorConfiguration
|
||||||
|
);
|
||||||
|
/** @type {Array<SchemaUtilErrorObject>} */
|
||||||
|
errors: Array<SchemaUtilErrorObject>;
|
||||||
|
/** @type {Schema} */
|
||||||
|
schema: Schema;
|
||||||
|
/** @type {string} */
|
||||||
|
headerName: string;
|
||||||
|
/** @type {string} */
|
||||||
|
baseDataPath: string;
|
||||||
|
/** @type {PostFormatter | null} */
|
||||||
|
postFormatter: PostFormatter | null;
|
||||||
|
/**
|
||||||
|
* @param {string} path
|
||||||
|
* @returns {Schema}
|
||||||
|
*/
|
||||||
|
getSchemaPart(
|
||||||
|
path: string
|
||||||
|
):
|
||||||
|
| import('json-schema').JSONSchema4
|
||||||
|
| import('json-schema').JSONSchema6
|
||||||
|
| import('json-schema').JSONSchema7;
|
||||||
|
/**
|
||||||
|
* @param {Schema} schema
|
||||||
|
* @param {Array<Object>} prevSchemas
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
formatSchema(
|
||||||
|
schema:
|
||||||
|
| import('json-schema').JSONSchema4
|
||||||
|
| import('json-schema').JSONSchema6
|
||||||
|
| import('json-schema').JSONSchema7,
|
||||||
|
prevSchemas?: Object[]
|
||||||
|
): string;
|
||||||
|
/**
|
||||||
|
* @param {Schema=} schemaPart
|
||||||
|
* @param {(boolean | Array<string>)=} additionalPath
|
||||||
|
* @param {boolean=} needDot
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
getSchemaPartText(
|
||||||
|
schemaPart?:
|
||||||
|
| import('json-schema').JSONSchema4
|
||||||
|
| import('json-schema').JSONSchema6
|
||||||
|
| import('json-schema').JSONSchema7
|
||||||
|
| undefined,
|
||||||
|
additionalPath?: boolean | string[] | undefined,
|
||||||
|
needDot?: boolean | undefined
|
||||||
|
): string;
|
||||||
|
/**
|
||||||
|
* @param {Schema=} schemaPart
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
getSchemaPartDescription(
|
||||||
|
schemaPart?:
|
||||||
|
| import('json-schema').JSONSchema4
|
||||||
|
| import('json-schema').JSONSchema6
|
||||||
|
| import('json-schema').JSONSchema7
|
||||||
|
| undefined
|
||||||
|
): string;
|
||||||
|
/**
|
||||||
|
* @param {SchemaUtilErrorObject} error
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
formatValidationError(
|
||||||
|
error: import('ajv').ErrorObject & {
|
||||||
|
children?: import('ajv').ErrorObject[] | undefined;
|
||||||
|
}
|
||||||
|
): string;
|
||||||
|
/**
|
||||||
|
* @param {Array<SchemaUtilErrorObject>} errors
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
formatValidationErrors(
|
||||||
|
errors: (import('ajv').ErrorObject & {
|
||||||
|
children?: import('ajv').ErrorObject[] | undefined;
|
||||||
|
})[]
|
||||||
|
): string;
|
||||||
|
}
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
declare const _exports: typeof import('./validate').default;
|
||||||
|
export = _exports;
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
export default addAbsolutePathKeyword;
|
||||||
|
export type Ajv = import('ajv').Ajv;
|
||||||
|
export type SchemaUtilErrorObject = import('ajv').ErrorObject & {
|
||||||
|
children?: import('ajv').ErrorObject[] | undefined;
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {Ajv} ajv
|
||||||
|
* @returns {Ajv}
|
||||||
|
*/
|
||||||
|
declare function addAbsolutePathKeyword(
|
||||||
|
ajv: import('ajv').Ajv
|
||||||
|
): import('ajv').Ajv;
|
||||||
+43
@@ -0,0 +1,43 @@
|
|||||||
|
export = Range;
|
||||||
|
/**
|
||||||
|
* @typedef {[number, boolean]} RangeValue
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @callback RangeValueCallback
|
||||||
|
* @param {RangeValue} rangeValue
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
declare class Range {
|
||||||
|
/** @type {Array<RangeValue>} */
|
||||||
|
_left: Array<RangeValue>;
|
||||||
|
/** @type {Array<RangeValue>} */
|
||||||
|
_right: Array<RangeValue>;
|
||||||
|
/**
|
||||||
|
* @param {number} value
|
||||||
|
* @param {boolean=} exclusive
|
||||||
|
*/
|
||||||
|
left(value: number, exclusive?: boolean | undefined): void;
|
||||||
|
/**
|
||||||
|
* @param {number} value
|
||||||
|
* @param {boolean=} exclusive
|
||||||
|
*/
|
||||||
|
right(value: number, exclusive?: boolean | undefined): void;
|
||||||
|
/**
|
||||||
|
* @param {boolean} logic is not logic applied
|
||||||
|
* @return {string} "smart" range string representation
|
||||||
|
*/
|
||||||
|
format(logic?: boolean): string;
|
||||||
|
}
|
||||||
|
declare namespace Range {
|
||||||
|
export {
|
||||||
|
getOperator,
|
||||||
|
formatRight,
|
||||||
|
formatLeft,
|
||||||
|
formatRange,
|
||||||
|
getRangeValue,
|
||||||
|
RangeValue,
|
||||||
|
RangeValueCallback,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
type RangeValue = [number, boolean];
|
||||||
|
type RangeValueCallback = (rangeValue: [number, boolean]) => boolean;
|
||||||
+43
@@ -0,0 +1,43 @@
|
|||||||
|
export default validate;
|
||||||
|
export type JSONSchema4 = import('json-schema').JSONSchema4;
|
||||||
|
export type JSONSchema6 = import('json-schema').JSONSchema6;
|
||||||
|
export type JSONSchema7 = import('json-schema').JSONSchema7;
|
||||||
|
export type ErrorObject = Ajv.ErrorObject;
|
||||||
|
export type Schema =
|
||||||
|
| import('json-schema').JSONSchema4
|
||||||
|
| import('json-schema').JSONSchema6
|
||||||
|
| import('json-schema').JSONSchema7;
|
||||||
|
export type SchemaUtilErrorObject = Ajv.ErrorObject & {
|
||||||
|
children?: Ajv.ErrorObject[] | undefined;
|
||||||
|
};
|
||||||
|
export type PostFormatter = (
|
||||||
|
formattedError: string,
|
||||||
|
error: Ajv.ErrorObject & {
|
||||||
|
children?: Ajv.ErrorObject[] | undefined;
|
||||||
|
}
|
||||||
|
) => string;
|
||||||
|
export type ValidationErrorConfiguration = {
|
||||||
|
name?: string | undefined;
|
||||||
|
baseDataPath?: string | undefined;
|
||||||
|
postFormatter?: PostFormatter | undefined;
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* @param {Schema} schema
|
||||||
|
* @param {Array<object> | object} options
|
||||||
|
* @param {ValidationErrorConfiguration=} configuration
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
declare function validate(
|
||||||
|
schema:
|
||||||
|
| import('json-schema').JSONSchema4
|
||||||
|
| import('json-schema').JSONSchema6
|
||||||
|
| import('json-schema').JSONSchema7,
|
||||||
|
options: any,
|
||||||
|
configuration?: ValidationErrorConfiguration | undefined
|
||||||
|
): void;
|
||||||
|
declare namespace validate {
|
||||||
|
export { ValidationError };
|
||||||
|
export { ValidationError as ValidateError };
|
||||||
|
}
|
||||||
|
import Ajv from 'ajv';
|
||||||
|
import ValidationError from './ValidationError';
|
||||||
+1286
File diff suppressed because it is too large.
Load diff
+5
@@ -0,0 +1,5 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
const validate = require('./validate');
|
||||||
|
|
||||||
|
module.exports = validate.default;
|
||||||
+91
@@ -0,0 +1,91 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = void 0;
|
||||||
|
|
||||||
|
/** @typedef {import("ajv").Ajv} Ajv */
|
||||||
|
|
||||||
|
/** @typedef {import("../validate").SchemaUtilErrorObject} SchemaUtilErrorObject */
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {string} data
|
||||||
|
* @param {object} schema
|
||||||
|
* @param {string} message
|
||||||
|
* @returns {object} // Todo `returns` should be `SchemaUtilErrorObject`
|
||||||
|
*/
|
||||||
|
function errorMessage(message, schema, data) {
|
||||||
|
return {
|
||||||
|
keyword: 'absolutePath',
|
||||||
|
params: {
|
||||||
|
absolutePath: data
|
||||||
|
},
|
||||||
|
message,
|
||||||
|
parentSchema: schema
|
||||||
|
};
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {boolean} shouldBeAbsolute
|
||||||
|
* @param {object} schema
|
||||||
|
* @param {string} data
|
||||||
|
* @returns {object}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
function getErrorFor(shouldBeAbsolute, schema, data) {
|
||||||
|
const message = shouldBeAbsolute ? `The provided value ${JSON.stringify(data)} is not an absolute path!` : `A relative path is expected. However, the provided value ${JSON.stringify(data)} is an absolute path!`;
|
||||||
|
return errorMessage(message, schema, data);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {Ajv} ajv
|
||||||
|
* @returns {Ajv}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
function addAbsolutePathKeyword(ajv) {
|
||||||
|
ajv.addKeyword('absolutePath', {
|
||||||
|
errors: true,
|
||||||
|
type: 'string',
|
||||||
|
|
||||||
|
compile(schema, parentSchema) {
|
||||||
|
/**
|
||||||
|
* @param {any} data
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
function callback(data) {
|
||||||
|
let passes = true;
|
||||||
|
const isExclamationMarkPresent = data.includes('!');
|
||||||
|
|
||||||
|
if (isExclamationMarkPresent) {
|
||||||
|
callback.errors = [errorMessage(`The provided value ${JSON.stringify(data)} contains exclamation mark (!) which is not allowed because it's reserved for loader syntax.`, parentSchema, data)];
|
||||||
|
passes = false;
|
||||||
|
} // ?:[A-Za-z]:\\ - Windows absolute path
|
||||||
|
// \\\\ - Windows network absolute path
|
||||||
|
// \/ - Unix-like OS absolute path
|
||||||
|
|
||||||
|
|
||||||
|
const isCorrectAbsolutePath = schema === /^(?:[A-Za-z]:(\\|\/)|\\\\|\/)/.test(data);
|
||||||
|
|
||||||
|
if (!isCorrectAbsolutePath) {
|
||||||
|
callback.errors = [getErrorFor(schema, parentSchema, data)];
|
||||||
|
passes = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return passes;
|
||||||
|
}
|
||||||
|
/** @type {null | Array<SchemaUtilErrorObject>}*/
|
||||||
|
|
||||||
|
|
||||||
|
callback.errors = [];
|
||||||
|
return callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
return ajv;
|
||||||
|
}
|
||||||
|
|
||||||
|
var _default = addAbsolutePathKeyword;
|
||||||
|
exports.default = _default;
|
||||||
+163
@@ -0,0 +1,163 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {[number, boolean]} RangeValue
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @callback RangeValueCallback
|
||||||
|
* @param {RangeValue} rangeValue
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
class Range {
|
||||||
|
/**
|
||||||
|
* @param {"left" | "right"} side
|
||||||
|
* @param {boolean} exclusive
|
||||||
|
* @returns {">" | ">=" | "<" | "<="}
|
||||||
|
*/
|
||||||
|
static getOperator(side, exclusive) {
|
||||||
|
if (side === 'left') {
|
||||||
|
return exclusive ? '>' : '>=';
|
||||||
|
}
|
||||||
|
|
||||||
|
return exclusive ? '<' : '<=';
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {number} value
|
||||||
|
* @param {boolean} logic is not logic applied
|
||||||
|
* @param {boolean} exclusive is range exclusive
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
static formatRight(value, logic, exclusive) {
|
||||||
|
if (logic === false) {
|
||||||
|
return Range.formatLeft(value, !logic, !exclusive);
|
||||||
|
}
|
||||||
|
|
||||||
|
return `should be ${Range.getOperator('right', exclusive)} ${value}`;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {number} value
|
||||||
|
* @param {boolean} logic is not logic applied
|
||||||
|
* @param {boolean} exclusive is range exclusive
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
static formatLeft(value, logic, exclusive) {
|
||||||
|
if (logic === false) {
|
||||||
|
return Range.formatRight(value, !logic, !exclusive);
|
||||||
|
}
|
||||||
|
|
||||||
|
return `should be ${Range.getOperator('left', exclusive)} ${value}`;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {number} start left side value
|
||||||
|
* @param {number} end right side value
|
||||||
|
* @param {boolean} startExclusive is range exclusive from left side
|
||||||
|
* @param {boolean} endExclusive is range exclusive from right side
|
||||||
|
* @param {boolean} logic is not logic applied
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
static formatRange(start, end, startExclusive, endExclusive, logic) {
|
||||||
|
let result = 'should be';
|
||||||
|
result += ` ${Range.getOperator(logic ? 'left' : 'right', logic ? startExclusive : !startExclusive)} ${start} `;
|
||||||
|
result += logic ? 'and' : 'or';
|
||||||
|
result += ` ${Range.getOperator(logic ? 'right' : 'left', logic ? endExclusive : !endExclusive)} ${end}`;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {Array<RangeValue>} values
|
||||||
|
* @param {boolean} logic is not logic applied
|
||||||
|
* @return {RangeValue} computed value and it's exclusive flag
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
static getRangeValue(values, logic) {
|
||||||
|
let minMax = logic ? Infinity : -Infinity;
|
||||||
|
let j = -1;
|
||||||
|
const predicate = logic ?
|
||||||
|
/** @type {RangeValueCallback} */
|
||||||
|
([value]) => value <= minMax :
|
||||||
|
/** @type {RangeValueCallback} */
|
||||||
|
([value]) => value >= minMax;
|
||||||
|
|
||||||
|
for (let i = 0; i < values.length; i++) {
|
||||||
|
if (predicate(values[i])) {
|
||||||
|
[minMax] = values[i];
|
||||||
|
j = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (j > -1) {
|
||||||
|
return values[j];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [Infinity, true];
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
/** @type {Array<RangeValue>} */
|
||||||
|
this._left = [];
|
||||||
|
/** @type {Array<RangeValue>} */
|
||||||
|
|
||||||
|
this._right = [];
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {number} value
|
||||||
|
* @param {boolean=} exclusive
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
left(value, exclusive = false) {
|
||||||
|
this._left.push([value, exclusive]);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {number} value
|
||||||
|
* @param {boolean=} exclusive
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
right(value, exclusive = false) {
|
||||||
|
this._right.push([value, exclusive]);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {boolean} logic is not logic applied
|
||||||
|
* @return {string} "smart" range string representation
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
format(logic = true) {
|
||||||
|
const [start, leftExclusive] = Range.getRangeValue(this._left, logic);
|
||||||
|
const [end, rightExclusive] = Range.getRangeValue(this._right, !logic);
|
||||||
|
|
||||||
|
if (!Number.isFinite(start) && !Number.isFinite(end)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
const realStart = leftExclusive ? start + 1 : start;
|
||||||
|
const realEnd = rightExclusive ? end - 1 : end; // e.g. 5 < x < 7, 5 < x <= 6, 6 <= x <= 6
|
||||||
|
|
||||||
|
if (realStart === realEnd) {
|
||||||
|
return `should be ${logic ? '' : '!'}= ${realStart}`;
|
||||||
|
} // e.g. 4 < x < ∞
|
||||||
|
|
||||||
|
|
||||||
|
if (Number.isFinite(start) && !Number.isFinite(end)) {
|
||||||
|
return Range.formatLeft(start, logic, leftExclusive);
|
||||||
|
} // e.g. ∞ < x < 4
|
||||||
|
|
||||||
|
|
||||||
|
if (!Number.isFinite(start) && Number.isFinite(end)) {
|
||||||
|
return Range.formatRight(end, logic, rightExclusive);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Range.formatRange(start, end, leftExclusive, rightExclusive, logic);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Range;
|
||||||
+154
@@ -0,0 +1,154 @@
|
|||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = void 0;
|
||||||
|
|
||||||
|
var _ajv = _interopRequireDefault(require("ajv"));
|
||||||
|
|
||||||
|
var _ajvKeywords = _interopRequireDefault(require("ajv-keywords"));
|
||||||
|
|
||||||
|
var _absolutePath = _interopRequireDefault(require("./keywords/absolutePath"));
|
||||||
|
|
||||||
|
var _ValidationError = _interopRequireDefault(require("./ValidationError"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
/** @typedef {import("json-schema").JSONSchema4} JSONSchema4 */
|
||||||
|
|
||||||
|
/** @typedef {import("json-schema").JSONSchema6} JSONSchema6 */
|
||||||
|
|
||||||
|
/** @typedef {import("json-schema").JSONSchema7} JSONSchema7 */
|
||||||
|
|
||||||
|
/** @typedef {import("ajv").ErrorObject} ErrorObject */
|
||||||
|
|
||||||
|
/** @typedef {(JSONSchema4 | JSONSchema6 | JSONSchema7)} Schema */
|
||||||
|
|
||||||
|
/** @typedef {ErrorObject & { children?: Array<ErrorObject>}} SchemaUtilErrorObject */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @callback PostFormatter
|
||||||
|
* @param {string} formattedError
|
||||||
|
* @param {SchemaUtilErrorObject} error
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} ValidationErrorConfiguration
|
||||||
|
* @property {string=} name
|
||||||
|
* @property {string=} baseDataPath
|
||||||
|
* @property {PostFormatter=} postFormatter
|
||||||
|
*/
|
||||||
|
const ajv = new _ajv.default({
|
||||||
|
allErrors: true,
|
||||||
|
verbose: true,
|
||||||
|
$data: true,
|
||||||
|
coerceTypes: true
|
||||||
|
});
|
||||||
|
(0, _ajvKeywords.default)(ajv, ['instanceof', 'formatMinimum', 'formatMaximum', 'patternRequired']); // Custom keywords
|
||||||
|
|
||||||
|
(0, _absolutePath.default)(ajv);
|
||||||
|
/**
|
||||||
|
* @param {Schema} schema
|
||||||
|
* @param {Array<object> | object} options
|
||||||
|
* @param {ValidationErrorConfiguration=} configuration
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
|
||||||
|
function validate(schema, options, configuration) {
|
||||||
|
let errors = [];
|
||||||
|
|
||||||
|
if (Array.isArray(options)) {
|
||||||
|
errors = Array.from(options).map(nestedOptions => validateObject(schema, nestedOptions));
|
||||||
|
errors.forEach((list, idx) => {
|
||||||
|
const applyPrefix =
|
||||||
|
/**
|
||||||
|
* @param {SchemaUtilErrorObject} error
|
||||||
|
*/
|
||||||
|
error => {
|
||||||
|
// eslint-disable-next-line no-param-reassign
|
||||||
|
error.dataPath = `[${idx}]${error.dataPath}`;
|
||||||
|
|
||||||
|
if (error.children) {
|
||||||
|
error.children.forEach(applyPrefix);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
list.forEach(applyPrefix);
|
||||||
|
});
|
||||||
|
errors = errors.reduce((arr, items) => arr.concat(items), []);
|
||||||
|
} else {
|
||||||
|
errors = validateObject(schema, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (errors.length > 0) {
|
||||||
|
throw new _ValidationError.default(errors, schema, configuration);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {Schema} schema
|
||||||
|
* @param {Array<object> | object} options
|
||||||
|
* @returns {Array<SchemaUtilErrorObject>}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
function validateObject(schema, options) {
|
||||||
|
const compiledSchema = ajv.compile(schema);
|
||||||
|
const valid = compiledSchema(options);
|
||||||
|
|
||||||
|
if (!compiledSchema.errors) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return valid ? [] : filterErrors(compiledSchema.errors);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param {Array<ErrorObject>} errors
|
||||||
|
* @returns {Array<SchemaUtilErrorObject>}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
function filterErrors(errors) {
|
||||||
|
/** @type {Array<SchemaUtilErrorObject>} */
|
||||||
|
let newErrors = [];
|
||||||
|
|
||||||
|
for (const error of
|
||||||
|
/** @type {Array<SchemaUtilErrorObject>} */
|
||||||
|
errors) {
|
||||||
|
const {
|
||||||
|
dataPath
|
||||||
|
} = error;
|
||||||
|
/** @type {Array<SchemaUtilErrorObject>} */
|
||||||
|
|
||||||
|
let children = [];
|
||||||
|
newErrors = newErrors.filter(oldError => {
|
||||||
|
if (oldError.dataPath.includes(dataPath)) {
|
||||||
|
if (oldError.children) {
|
||||||
|
children = children.concat(oldError.children.slice(0));
|
||||||
|
} // eslint-disable-next-line no-undefined, no-param-reassign
|
||||||
|
|
||||||
|
|
||||||
|
oldError.children = undefined;
|
||||||
|
children.push(oldError);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (children.length) {
|
||||||
|
error.children = children;
|
||||||
|
}
|
||||||
|
|
||||||
|
newErrors.push(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return newErrors;
|
||||||
|
} // TODO change after resolve https://github.com/microsoft/TypeScript/issues/34994
|
||||||
|
|
||||||
|
|
||||||
|
validate.ValidationError = _ValidationError.default;
|
||||||
|
validate.ValidateError = _ValidationError.default;
|
||||||
|
var _default = validate;
|
||||||
|
exports.default = _default;
|
||||||
+78
@@ -0,0 +1,78 @@
|
|||||||
|
{
|
||||||
|
"name": "@develar/schema-utils",
|
||||||
|
"version": "2.6.5",
|
||||||
|
"description": "webpack Validation Utils",
|
||||||
|
"license": "MIT",
|
||||||
|
"repository": "webpack/schema-utils",
|
||||||
|
"author": "webpack Contrib (https://github.com/webpack-contrib)",
|
||||||
|
"homepage": "https://github.com/webpack/schema-utils",
|
||||||
|
"bugs": "https://github.com/webpack/schema-utils/issues",
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/webpack"
|
||||||
|
},
|
||||||
|
"main": "dist/index.js",
|
||||||
|
"types": "declarations/index.d.ts",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 8.9.0"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"start": "npm run build -- -w",
|
||||||
|
"clean": "del-cli dist declarations",
|
||||||
|
"prebuild": "npm run clean",
|
||||||
|
"build:types": "tsc --declaration --emitDeclarationOnly --outDir declarations && prettier \"declarations/**/*.ts\" --write",
|
||||||
|
"build:code": "cross-env NODE_ENV=production babel src -d dist --copy-files",
|
||||||
|
"build": "npm-run-all -p \"build:**\"",
|
||||||
|
"commitlint": "commitlint --from=master",
|
||||||
|
"security": "npm audit",
|
||||||
|
"lint:prettier": "prettier \"{**/*,*}.{js,json,md,yml,css,ts}\" --list-different",
|
||||||
|
"lint:js": "eslint --cache .",
|
||||||
|
"lint:types": "tsc --pretty --noEmit",
|
||||||
|
"lint": "npm-run-all -l -p \"lint:**\"",
|
||||||
|
"test:only": "cross-env NODE_ENV=test jest",
|
||||||
|
"test:watch": "npm run test:only -- --watch",
|
||||||
|
"test:coverage": "npm run test:only -- --collectCoverageFrom=\"src/**/*.js\" --coverage",
|
||||||
|
"pretest": "npm run lint",
|
||||||
|
"test": "npm run test:coverage",
|
||||||
|
"prepare": "npm run build",
|
||||||
|
"release": "standard-version",
|
||||||
|
"defaults": "webpack-defaults"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"dist",
|
||||||
|
"declarations"
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"ajv": "^6.12.0",
|
||||||
|
"ajv-keywords": "^3.4.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/cli": "^7.8.3",
|
||||||
|
"@babel/core": "^7.8.3",
|
||||||
|
"@babel/preset-env": "^7.8.3",
|
||||||
|
"@commitlint/cli": "^8.3.5",
|
||||||
|
"@commitlint/config-conventional": "^8.3.4",
|
||||||
|
"@types/json-schema": "^7.0.4",
|
||||||
|
"@webpack-contrib/defaults": "^6.3.0",
|
||||||
|
"@webpack-contrib/eslint-config-webpack": "^3.0.0",
|
||||||
|
"babel-jest": "^24.9.0",
|
||||||
|
"commitlint-azure-pipelines-cli": "^1.0.3",
|
||||||
|
"cross-env": "^6.0.3",
|
||||||
|
"del": "^5.1.0",
|
||||||
|
"del-cli": "^3.0.0",
|
||||||
|
"eslint": "^6.8.0",
|
||||||
|
"eslint-config-prettier": "^6.9.0",
|
||||||
|
"eslint-plugin-import": "^2.20.0",
|
||||||
|
"husky": "^4.0.10",
|
||||||
|
"jest": "^24.9.0",
|
||||||
|
"jest-junit": "^10.0.0",
|
||||||
|
"lint-staged": "^9.5.0",
|
||||||
|
"npm-run-all": "^4.1.5",
|
||||||
|
"prettier": "^1.19.1",
|
||||||
|
"standard-version": "^7.0.1",
|
||||||
|
"typescript": "^3.7.5"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"webpack"
|
||||||
|
]
|
||||||
|
}
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
Copyright (c) 2014 GitHub Inc.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
+208
@@ -0,0 +1,208 @@
|
|||||||
|
# @electron/asar - Electron Archive
|
||||||
|
|
||||||
|
[](https://github.com/electron/asar/actions/workflows/test.yml)
|
||||||
|
[](https://npmjs.org/package/@electron/asar)
|
||||||
|
|
||||||
|
Asar is a simple extensive archive format, it works like `tar` that concatenates
|
||||||
|
all files together without compression, while having random access support.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
* Support random access
|
||||||
|
* Use JSON to store files' information
|
||||||
|
* Very easy to write a parser
|
||||||
|
|
||||||
|
## Command line utility
|
||||||
|
|
||||||
|
### Install
|
||||||
|
|
||||||
|
This module requires Node 10 or later.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ npm install --engine-strict @electron/asar
|
||||||
|
```
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ asar --help
|
||||||
|
|
||||||
|
Usage: asar [options] [command]
|
||||||
|
|
||||||
|
Commands:
|
||||||
|
|
||||||
|
pack|p <dir> <output>
|
||||||
|
create asar archive
|
||||||
|
|
||||||
|
list|l <archive>
|
||||||
|
list files of asar archive
|
||||||
|
|
||||||
|
extract-file|ef <archive> <filename>
|
||||||
|
extract one file from archive
|
||||||
|
|
||||||
|
extract|e <archive> <dest>
|
||||||
|
extract archive
|
||||||
|
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
-h, --help output usage information
|
||||||
|
-V, --version output the version number
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Excluding multiple resources from being packed
|
||||||
|
|
||||||
|
Given:
|
||||||
|
```
|
||||||
|
app
|
||||||
|
(a) ├── x1
|
||||||
|
(b) ├── x2
|
||||||
|
(c) ├── y3
|
||||||
|
(d) │ ├── x1
|
||||||
|
(e) │ └── z1
|
||||||
|
(f) │ └── x2
|
||||||
|
(g) └── z4
|
||||||
|
(h) └── w1
|
||||||
|
```
|
||||||
|
|
||||||
|
Exclude: a, b
|
||||||
|
```bash
|
||||||
|
$ asar pack app app.asar --unpack-dir "{x1,x2}"
|
||||||
|
```
|
||||||
|
|
||||||
|
Exclude: a, b, d, f
|
||||||
|
```bash
|
||||||
|
$ asar pack app app.asar --unpack-dir "**/{x1,x2}"
|
||||||
|
```
|
||||||
|
|
||||||
|
Exclude: a, b, d, f, h
|
||||||
|
```bash
|
||||||
|
$ asar pack app app.asar --unpack-dir "{**/x1,**/x2,z4/w1}"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Using programmatically
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const asar = require('@electron/asar');
|
||||||
|
|
||||||
|
const src = 'some/path/';
|
||||||
|
const dest = 'name.asar';
|
||||||
|
|
||||||
|
await asar.createPackage(src, dest);
|
||||||
|
console.log('done.');
|
||||||
|
```
|
||||||
|
|
||||||
|
Please note that there is currently **no** error handling provided!
|
||||||
|
|
||||||
|
### Transform
|
||||||
|
You can pass in a `transform` option, that is a function, which either returns
|
||||||
|
nothing, or a `stream.Transform`. The latter will be used on files that will be
|
||||||
|
in the `.asar` file to transform them (e.g. compress).
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const asar = require('@electron/asar');
|
||||||
|
|
||||||
|
const src = 'some/path/';
|
||||||
|
const dest = 'name.asar';
|
||||||
|
|
||||||
|
function transform (filename) {
|
||||||
|
return new CustomTransformStream()
|
||||||
|
}
|
||||||
|
|
||||||
|
await asar.createPackageWithOptions(src, dest, { transform: transform });
|
||||||
|
console.log('done.');
|
||||||
|
```
|
||||||
|
|
||||||
|
## Format
|
||||||
|
|
||||||
|
Asar uses [Pickle][pickle] to safely serialize binary value to file.
|
||||||
|
|
||||||
|
The format of asar is very flat:
|
||||||
|
|
||||||
|
```
|
||||||
|
| UInt32: header_size | String: header | Bytes: file1 | ... | Bytes: file42 |
|
||||||
|
```
|
||||||
|
|
||||||
|
The `header_size` and `header` are serialized with [Pickle][pickle] class, and
|
||||||
|
`header_size`'s [Pickle][pickle] object is 8 bytes.
|
||||||
|
|
||||||
|
The `header` is a JSON string, and the `header_size` is the size of `header`'s
|
||||||
|
`Pickle` object.
|
||||||
|
|
||||||
|
Structure of `header` is something like this:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"files": {
|
||||||
|
"tmp": {
|
||||||
|
"files": {}
|
||||||
|
},
|
||||||
|
"usr" : {
|
||||||
|
"files": {
|
||||||
|
"bin": {
|
||||||
|
"files": {
|
||||||
|
"ls": {
|
||||||
|
"offset": "0",
|
||||||
|
"size": 100,
|
||||||
|
"executable": true,
|
||||||
|
"integrity": {
|
||||||
|
"algorithm": "SHA256",
|
||||||
|
"hash": "...",
|
||||||
|
"blockSize": 1024,
|
||||||
|
"blocks": ["...", "..."]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cd": {
|
||||||
|
"offset": "100",
|
||||||
|
"size": 100,
|
||||||
|
"executable": true,
|
||||||
|
"integrity": {
|
||||||
|
"algorithm": "SHA256",
|
||||||
|
"hash": "...",
|
||||||
|
"blockSize": 1024,
|
||||||
|
"blocks": ["...", "..."]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"etc": {
|
||||||
|
"files": {
|
||||||
|
"hosts": {
|
||||||
|
"offset": "200",
|
||||||
|
"size": 32,
|
||||||
|
"integrity": {
|
||||||
|
"algorithm": "SHA256",
|
||||||
|
"hash": "...",
|
||||||
|
"blockSize": 1024,
|
||||||
|
"blocks": ["...", "..."]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`offset` and `size` records the information to read the file from archive, the
|
||||||
|
`offset` starts from 0 so you have to manually add the size of `header_size` and
|
||||||
|
`header` to the `offset` to get the real offset of the file.
|
||||||
|
|
||||||
|
`offset` is a UINT64 number represented in string, because there is no way to
|
||||||
|
precisely represent UINT64 in JavaScript `Number`. `size` is a JavaScript
|
||||||
|
`Number` that is no larger than `Number.MAX_SAFE_INTEGER`, which has a value of
|
||||||
|
`9007199254740991` and is about 8PB in size. We didn't store `size` in UINT64
|
||||||
|
because file size in Node.js is represented as `Number` and it is not safe to
|
||||||
|
convert `Number` to UINT64.
|
||||||
|
|
||||||
|
`integrity` is an object consisting of a few keys:
|
||||||
|
* A hashing `algorithm`, currently only `SHA256` is supported.
|
||||||
|
* A hex encoded `hash` value representing the hash of the entire file.
|
||||||
|
* An array of hex encoded hashes for the `blocks` of the file. i.e. for a blockSize of 4KB this array contains the hash of every block if you split the file into N 4KB blocks.
|
||||||
|
* A integer value `blockSize` representing the size in bytes of each block in the `blocks` hashes above
|
||||||
|
|
||||||
|
[pickle]: https://chromium.googlesource.com/chromium/src/+/main/base/pickle.h
|
||||||
+82
@@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
var packageJSON = require('../package.json')
|
||||||
|
var splitVersion = function (version) { return version.split('.').map(function (part) { return Number(part) }) }
|
||||||
|
var requiredNodeVersion = splitVersion(packageJSON.engines.node.slice(2))
|
||||||
|
var actualNodeVersion = splitVersion(process.versions.node)
|
||||||
|
|
||||||
|
if (actualNodeVersion[0] < requiredNodeVersion[0] || (actualNodeVersion[0] === requiredNodeVersion[0] && actualNodeVersion[1] < requiredNodeVersion[1])) {
|
||||||
|
console.error('CANNOT RUN WITH NODE ' + process.versions.node)
|
||||||
|
console.error('asar requires Node ' + packageJSON.engines.node + '.')
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not consts so that this file can load in Node < 4.0
|
||||||
|
var asar = require('../lib/asar')
|
||||||
|
var program = require('commander')
|
||||||
|
|
||||||
|
program.version('v' + packageJSON.version)
|
||||||
|
.description('Manipulate asar archive files')
|
||||||
|
|
||||||
|
program.command('pack <dir> <output>')
|
||||||
|
.alias('p')
|
||||||
|
.description('create asar archive')
|
||||||
|
.option('--ordering <file path>', 'path to a text file for ordering contents')
|
||||||
|
.option('--unpack <expression>', 'do not pack files matching glob <expression>')
|
||||||
|
.option('--unpack-dir <expression>', 'do not pack dirs matching glob <expression> or starting with literal <expression>')
|
||||||
|
.option('--exclude-hidden', 'exclude hidden files')
|
||||||
|
.action(function (dir, output, options) {
|
||||||
|
options = {
|
||||||
|
unpack: options.unpack,
|
||||||
|
unpackDir: options.unpackDir,
|
||||||
|
ordering: options.ordering,
|
||||||
|
version: options.sv,
|
||||||
|
arch: options.sa,
|
||||||
|
builddir: options.sb,
|
||||||
|
dot: !options.excludeHidden
|
||||||
|
}
|
||||||
|
asar.createPackageWithOptions(dir, output, options).catch(error => {
|
||||||
|
console.error(error)
|
||||||
|
process.exit(1)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
program.command('list <archive>')
|
||||||
|
.alias('l')
|
||||||
|
.description('list files of asar archive')
|
||||||
|
.option('-i, --is-pack', 'each file in the asar is pack or unpack')
|
||||||
|
.action(function (archive, options) {
|
||||||
|
options = {
|
||||||
|
isPack: options.isPack
|
||||||
|
}
|
||||||
|
var files = asar.listPackage(archive, options)
|
||||||
|
for (var i in files) {
|
||||||
|
console.log(files[i])
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
program.command('extract-file <archive> <filename>')
|
||||||
|
.alias('ef')
|
||||||
|
.description('extract one file from archive')
|
||||||
|
.action(function (archive, filename) {
|
||||||
|
require('fs').writeFileSync(require('path').basename(filename),
|
||||||
|
asar.extractFile(archive, filename))
|
||||||
|
})
|
||||||
|
|
||||||
|
program.command('extract <archive> <dest>')
|
||||||
|
.alias('e')
|
||||||
|
.description('extract archive')
|
||||||
|
.action(function (archive, dest) {
|
||||||
|
asar.extractAll(archive, dest)
|
||||||
|
})
|
||||||
|
|
||||||
|
program.command('*')
|
||||||
|
.action(function (_cmd, args) {
|
||||||
|
console.log('asar: \'%s\' is not an asar command. See \'asar --help\'.', args[0])
|
||||||
|
})
|
||||||
|
|
||||||
|
program.parse(process.argv)
|
||||||
|
|
||||||
|
if (program.args.length === 0) {
|
||||||
|
program.help()
|
||||||
|
}
|
||||||
+96
@@ -0,0 +1,96 @@
|
|||||||
|
import { FilesystemDirectoryEntry, FilesystemEntry, FilesystemLinkEntry } from './filesystem';
|
||||||
|
import * as disk from './disk';
|
||||||
|
import { CrawledFileType } from './crawlfs';
|
||||||
|
import { IOptions } from './types/glob';
|
||||||
|
export declare function createPackage(src: string, dest: string): Promise<NodeJS.WritableStream>;
|
||||||
|
export type CreateOptions = {
|
||||||
|
dot?: boolean;
|
||||||
|
globOptions?: IOptions;
|
||||||
|
/**
|
||||||
|
* Path to a file containing the list of relative filepaths relative to `src` and the specific order they should be inserted into the asar.
|
||||||
|
* Formats allowed below:
|
||||||
|
* filepath
|
||||||
|
* : filepath
|
||||||
|
* <anything>:filepath
|
||||||
|
*/
|
||||||
|
ordering?: string;
|
||||||
|
pattern?: string;
|
||||||
|
transform?: (filePath: string) => NodeJS.ReadWriteStream | void;
|
||||||
|
unpack?: string;
|
||||||
|
unpackDir?: string;
|
||||||
|
};
|
||||||
|
export declare function createPackageWithOptions(src: string, dest: string, options: CreateOptions): Promise<NodeJS.WritableStream>;
|
||||||
|
/**
|
||||||
|
* Create an ASAR archive from a list of filenames.
|
||||||
|
*
|
||||||
|
* @param src - Base path. All files are relative to this.
|
||||||
|
* @param dest - Archive filename (& path).
|
||||||
|
* @param filenames - List of filenames relative to src.
|
||||||
|
* @param [metadata] - Object with filenames as keys and {type='directory|file|link', stat: fs.stat} as values. (Optional)
|
||||||
|
* @param [options] - Options passed to `createPackageWithOptions`.
|
||||||
|
*/
|
||||||
|
export declare function createPackageFromFiles(src: string, dest: string, filenames: string[], metadata?: disk.InputMetadata, options?: CreateOptions): Promise<NodeJS.WritableStream>;
|
||||||
|
export type AsarStream = {
|
||||||
|
/**
|
||||||
|
Relative path to the file or directory from within the archive
|
||||||
|
*/
|
||||||
|
path: string;
|
||||||
|
/**
|
||||||
|
Function that returns a read stream for a file.
|
||||||
|
Note: this is called multiple times per "file", so a new NodeJS.ReadableStream needs to be created each time
|
||||||
|
*/
|
||||||
|
streamGenerator: () => NodeJS.ReadableStream;
|
||||||
|
/**
|
||||||
|
Whether the file/link should be unpacked
|
||||||
|
*/
|
||||||
|
unpacked: boolean;
|
||||||
|
stat: CrawledFileType['stat'];
|
||||||
|
};
|
||||||
|
export type AsarDirectory = Pick<AsarStream, 'path' | 'unpacked'> & {
|
||||||
|
type: 'directory';
|
||||||
|
};
|
||||||
|
export type AsarSymlinkStream = AsarStream & {
|
||||||
|
type: 'link';
|
||||||
|
symlink: string;
|
||||||
|
};
|
||||||
|
export type AsarFileStream = AsarStream & {
|
||||||
|
type: 'file';
|
||||||
|
};
|
||||||
|
export type AsarStreamType = AsarDirectory | AsarFileStream | AsarSymlinkStream;
|
||||||
|
/**
|
||||||
|
* Create an ASAR archive from a list of streams.
|
||||||
|
*
|
||||||
|
* @param dest - Archive filename (& path).
|
||||||
|
* @param streams - List of streams to be piped in-memory into asar filesystem. Insertion order is preserved.
|
||||||
|
*/
|
||||||
|
export declare function createPackageFromStreams(dest: string, streams: AsarStreamType[]): Promise<import("fs").WriteStream>;
|
||||||
|
export declare function statFile(archivePath: string, filename: string, followLinks?: boolean): FilesystemEntry;
|
||||||
|
export declare function getRawHeader(archivePath: string): disk.ArchiveHeader;
|
||||||
|
export interface ListOptions {
|
||||||
|
isPack: boolean;
|
||||||
|
}
|
||||||
|
export declare function listPackage(archivePath: string, options: ListOptions): string[];
|
||||||
|
export declare function extractFile(archivePath: string, filename: string, followLinks?: boolean): Buffer;
|
||||||
|
export declare function extractAll(archivePath: string, dest: string): void;
|
||||||
|
export declare function uncache(archivePath: string): boolean;
|
||||||
|
export declare function uncacheAll(): void;
|
||||||
|
export { EntryMetadata } from './filesystem';
|
||||||
|
export { InputMetadata, DirectoryRecord, FileRecord, ArchiveHeader } from './disk';
|
||||||
|
export type InputMetadataType = 'directory' | 'file' | 'link';
|
||||||
|
export type DirectoryMetadata = FilesystemDirectoryEntry;
|
||||||
|
export type FileMetadata = FilesystemEntry;
|
||||||
|
export type LinkMetadata = FilesystemLinkEntry;
|
||||||
|
declare const _default: {
|
||||||
|
createPackage: typeof createPackage;
|
||||||
|
createPackageWithOptions: typeof createPackageWithOptions;
|
||||||
|
createPackageFromFiles: typeof createPackageFromFiles;
|
||||||
|
createPackageFromStreams: typeof createPackageFromStreams;
|
||||||
|
statFile: typeof statFile;
|
||||||
|
getRawHeader: typeof getRawHeader;
|
||||||
|
listPackage: typeof listPackage;
|
||||||
|
extractFile: typeof extractFile;
|
||||||
|
extractAll: typeof extractAll;
|
||||||
|
uncache: typeof uncache;
|
||||||
|
uncacheAll: typeof uncacheAll;
|
||||||
|
};
|
||||||
|
export default _default;
|
||||||
+337
@@ -0,0 +1,337 @@
|
|||||||
|
"use strict";
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc);
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.createPackage = createPackage;
|
||||||
|
exports.createPackageWithOptions = createPackageWithOptions;
|
||||||
|
exports.createPackageFromFiles = createPackageFromFiles;
|
||||||
|
exports.createPackageFromStreams = createPackageFromStreams;
|
||||||
|
exports.statFile = statFile;
|
||||||
|
exports.getRawHeader = getRawHeader;
|
||||||
|
exports.listPackage = listPackage;
|
||||||
|
exports.extractFile = extractFile;
|
||||||
|
exports.extractAll = extractAll;
|
||||||
|
exports.uncache = uncache;
|
||||||
|
exports.uncacheAll = uncacheAll;
|
||||||
|
const path = __importStar(require("path"));
|
||||||
|
const minimatch_1 = __importDefault(require("minimatch"));
|
||||||
|
const wrapped_fs_1 = __importDefault(require("./wrapped-fs"));
|
||||||
|
const filesystem_1 = require("./filesystem");
|
||||||
|
const disk = __importStar(require("./disk"));
|
||||||
|
const crawlfs_1 = require("./crawlfs");
|
||||||
|
/**
|
||||||
|
* Whether a directory should be excluded from packing due to the `--unpack-dir" option.
|
||||||
|
*
|
||||||
|
* @param dirPath - directory path to check
|
||||||
|
* @param pattern - literal prefix [for backward compatibility] or glob pattern
|
||||||
|
* @param unpackDirs - Array of directory paths previously marked as unpacked
|
||||||
|
*/
|
||||||
|
function isUnpackedDir(dirPath, pattern, unpackDirs) {
|
||||||
|
if (dirPath.startsWith(pattern) || (0, minimatch_1.default)(dirPath, pattern)) {
|
||||||
|
if (!unpackDirs.includes(dirPath)) {
|
||||||
|
unpackDirs.push(dirPath);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return unpackDirs.some((unpackDir) => dirPath.startsWith(unpackDir) && !path.relative(unpackDir, dirPath).startsWith('..'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async function createPackage(src, dest) {
|
||||||
|
return createPackageWithOptions(src, dest, {});
|
||||||
|
}
|
||||||
|
async function createPackageWithOptions(src, dest, options) {
|
||||||
|
const globOptions = options.globOptions ? options.globOptions : {};
|
||||||
|
globOptions.dot = options.dot === undefined ? true : options.dot;
|
||||||
|
const pattern = src + (options.pattern ? options.pattern : '/**/*');
|
||||||
|
const [filenames, metadata] = await (0, crawlfs_1.crawl)(pattern, globOptions);
|
||||||
|
return createPackageFromFiles(src, dest, filenames, metadata, options);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Create an ASAR archive from a list of filenames.
|
||||||
|
*
|
||||||
|
* @param src - Base path. All files are relative to this.
|
||||||
|
* @param dest - Archive filename (& path).
|
||||||
|
* @param filenames - List of filenames relative to src.
|
||||||
|
* @param [metadata] - Object with filenames as keys and {type='directory|file|link', stat: fs.stat} as values. (Optional)
|
||||||
|
* @param [options] - Options passed to `createPackageWithOptions`.
|
||||||
|
*/
|
||||||
|
async function createPackageFromFiles(src, dest, filenames, metadata = {}, options = {}) {
|
||||||
|
src = path.normalize(src);
|
||||||
|
dest = path.normalize(dest);
|
||||||
|
filenames = filenames.map(function (filename) {
|
||||||
|
return path.normalize(filename);
|
||||||
|
});
|
||||||
|
const filesystem = new filesystem_1.Filesystem(src);
|
||||||
|
const files = [];
|
||||||
|
const links = [];
|
||||||
|
const unpackDirs = [];
|
||||||
|
let filenamesSorted = [];
|
||||||
|
if (options.ordering) {
|
||||||
|
const orderingFiles = (await wrapped_fs_1.default.readFile(options.ordering))
|
||||||
|
.toString()
|
||||||
|
.split('\n')
|
||||||
|
.map((line) => {
|
||||||
|
if (line.includes(':')) {
|
||||||
|
line = line.split(':').pop();
|
||||||
|
}
|
||||||
|
line = line.trim();
|
||||||
|
if (line.startsWith('/')) {
|
||||||
|
line = line.slice(1);
|
||||||
|
}
|
||||||
|
return line;
|
||||||
|
});
|
||||||
|
const ordering = [];
|
||||||
|
for (const file of orderingFiles) {
|
||||||
|
const pathComponents = file.split(path.sep);
|
||||||
|
let str = src;
|
||||||
|
for (const pathComponent of pathComponents) {
|
||||||
|
str = path.join(str, pathComponent);
|
||||||
|
ordering.push(str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let missing = 0;
|
||||||
|
const total = filenames.length;
|
||||||
|
for (const file of ordering) {
|
||||||
|
if (!filenamesSorted.includes(file) && filenames.includes(file)) {
|
||||||
|
filenamesSorted.push(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (const file of filenames) {
|
||||||
|
if (!filenamesSorted.includes(file)) {
|
||||||
|
filenamesSorted.push(file);
|
||||||
|
missing += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(`Ordering file has ${((total - missing) / total) * 100}% coverage.`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
filenamesSorted = filenames;
|
||||||
|
}
|
||||||
|
const handleFile = async function (filename) {
|
||||||
|
if (!metadata[filename]) {
|
||||||
|
const fileType = await (0, crawlfs_1.determineFileType)(filename);
|
||||||
|
if (!fileType) {
|
||||||
|
throw new Error('Unknown file type for file: ' + filename);
|
||||||
|
}
|
||||||
|
metadata[filename] = fileType;
|
||||||
|
}
|
||||||
|
const file = metadata[filename];
|
||||||
|
const shouldUnpackPath = function (relativePath, unpack, unpackDir) {
|
||||||
|
let shouldUnpack = false;
|
||||||
|
if (unpack) {
|
||||||
|
shouldUnpack = (0, minimatch_1.default)(filename, unpack, { matchBase: true });
|
||||||
|
}
|
||||||
|
if (!shouldUnpack && unpackDir) {
|
||||||
|
shouldUnpack = isUnpackedDir(relativePath, unpackDir, unpackDirs);
|
||||||
|
}
|
||||||
|
return shouldUnpack;
|
||||||
|
};
|
||||||
|
let shouldUnpack;
|
||||||
|
switch (file.type) {
|
||||||
|
case 'directory':
|
||||||
|
shouldUnpack = shouldUnpackPath(path.relative(src, filename), undefined, options.unpackDir);
|
||||||
|
filesystem.insertDirectory(filename, shouldUnpack);
|
||||||
|
break;
|
||||||
|
case 'file':
|
||||||
|
shouldUnpack = shouldUnpackPath(path.relative(src, path.dirname(filename)), options.unpack, options.unpackDir);
|
||||||
|
files.push({ filename, unpack: shouldUnpack });
|
||||||
|
return filesystem.insertFile(filename, () => wrapped_fs_1.default.createReadStream(filename), shouldUnpack, file, options);
|
||||||
|
case 'link':
|
||||||
|
shouldUnpack = shouldUnpackPath(path.relative(src, filename), options.unpack, options.unpackDir);
|
||||||
|
links.push({ filename, unpack: shouldUnpack });
|
||||||
|
filesystem.insertLink(filename, shouldUnpack);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return Promise.resolve();
|
||||||
|
};
|
||||||
|
const insertsDone = async function () {
|
||||||
|
await wrapped_fs_1.default.mkdirp(path.dirname(dest));
|
||||||
|
return disk.writeFilesystem(dest, filesystem, { files, links }, metadata);
|
||||||
|
};
|
||||||
|
const names = filenamesSorted.slice();
|
||||||
|
const next = async function (name) {
|
||||||
|
if (!name) {
|
||||||
|
return insertsDone();
|
||||||
|
}
|
||||||
|
await handleFile(name);
|
||||||
|
return next(names.shift());
|
||||||
|
};
|
||||||
|
return next(names.shift());
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Create an ASAR archive from a list of streams.
|
||||||
|
*
|
||||||
|
* @param dest - Archive filename (& path).
|
||||||
|
* @param streams - List of streams to be piped in-memory into asar filesystem. Insertion order is preserved.
|
||||||
|
*/
|
||||||
|
async function createPackageFromStreams(dest, streams) {
|
||||||
|
// We use an ambiguous root `src` since we're piping directly from a stream and the `filePath` for the stream is already relative to the src/root
|
||||||
|
const src = '.';
|
||||||
|
const filesystem = new filesystem_1.Filesystem(src);
|
||||||
|
const files = [];
|
||||||
|
const links = [];
|
||||||
|
const handleFile = async function (stream) {
|
||||||
|
const { path: destinationPath, type } = stream;
|
||||||
|
const filename = path.normalize(destinationPath);
|
||||||
|
switch (type) {
|
||||||
|
case 'directory':
|
||||||
|
filesystem.insertDirectory(filename, stream.unpacked);
|
||||||
|
break;
|
||||||
|
case 'file':
|
||||||
|
files.push({
|
||||||
|
filename,
|
||||||
|
streamGenerator: stream.streamGenerator,
|
||||||
|
link: undefined,
|
||||||
|
mode: stream.stat.mode,
|
||||||
|
unpack: stream.unpacked,
|
||||||
|
});
|
||||||
|
return filesystem.insertFile(filename, stream.streamGenerator, stream.unpacked, {
|
||||||
|
type: 'file',
|
||||||
|
stat: stream.stat,
|
||||||
|
});
|
||||||
|
case 'link':
|
||||||
|
links.push({
|
||||||
|
filename,
|
||||||
|
streamGenerator: stream.streamGenerator,
|
||||||
|
link: stream.symlink,
|
||||||
|
mode: stream.stat.mode,
|
||||||
|
unpack: stream.unpacked,
|
||||||
|
});
|
||||||
|
filesystem.insertLink(filename, stream.unpacked, path.dirname(filename), stream.symlink, src);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return Promise.resolve();
|
||||||
|
};
|
||||||
|
const insertsDone = async function () {
|
||||||
|
await wrapped_fs_1.default.mkdirp(path.dirname(dest));
|
||||||
|
return disk.streamFilesystem(dest, filesystem, { files, links });
|
||||||
|
};
|
||||||
|
const streamQueue = streams.slice();
|
||||||
|
const next = async function (stream) {
|
||||||
|
if (!stream) {
|
||||||
|
return insertsDone();
|
||||||
|
}
|
||||||
|
await handleFile(stream);
|
||||||
|
return next(streamQueue.shift());
|
||||||
|
};
|
||||||
|
return next(streamQueue.shift());
|
||||||
|
}
|
||||||
|
function statFile(archivePath, filename, followLinks = true) {
|
||||||
|
const filesystem = disk.readFilesystemSync(archivePath);
|
||||||
|
return filesystem.getFile(filename, followLinks);
|
||||||
|
}
|
||||||
|
function getRawHeader(archivePath) {
|
||||||
|
return disk.readArchiveHeaderSync(archivePath);
|
||||||
|
}
|
||||||
|
function listPackage(archivePath, options) {
|
||||||
|
return disk.readFilesystemSync(archivePath).listFiles(options);
|
||||||
|
}
|
||||||
|
function extractFile(archivePath, filename, followLinks = true) {
|
||||||
|
const filesystem = disk.readFilesystemSync(archivePath);
|
||||||
|
const fileInfo = filesystem.getFile(filename, followLinks);
|
||||||
|
if ('link' in fileInfo || 'files' in fileInfo) {
|
||||||
|
throw new Error('Expected to find file at: ' + filename + ' but found a directory or link');
|
||||||
|
}
|
||||||
|
return disk.readFileSync(filesystem, filename, fileInfo);
|
||||||
|
}
|
||||||
|
function extractAll(archivePath, dest) {
|
||||||
|
const filesystem = disk.readFilesystemSync(archivePath);
|
||||||
|
const filenames = filesystem.listFiles();
|
||||||
|
// under windows just extract links as regular files
|
||||||
|
const followLinks = process.platform === 'win32';
|
||||||
|
// create destination directory
|
||||||
|
wrapped_fs_1.default.mkdirpSync(dest);
|
||||||
|
const extractionErrors = [];
|
||||||
|
for (const fullPath of filenames) {
|
||||||
|
// Remove leading slash
|
||||||
|
const filename = fullPath.substr(1);
|
||||||
|
const destFilename = path.join(dest, filename);
|
||||||
|
const file = filesystem.getFile(filename, followLinks);
|
||||||
|
if (path.relative(dest, destFilename).startsWith('..')) {
|
||||||
|
throw new Error(`${fullPath}: file "${destFilename}" writes out of the package`);
|
||||||
|
}
|
||||||
|
if ('files' in file) {
|
||||||
|
// it's a directory, create it and continue with the next entry
|
||||||
|
wrapped_fs_1.default.mkdirpSync(destFilename);
|
||||||
|
}
|
||||||
|
else if ('link' in file) {
|
||||||
|
// it's a symlink, create a symlink
|
||||||
|
const linkSrcPath = path.dirname(path.join(dest, file.link));
|
||||||
|
const linkDestPath = path.dirname(destFilename);
|
||||||
|
const relativePath = path.relative(linkDestPath, linkSrcPath);
|
||||||
|
// try to delete output file, because we can't overwrite a link
|
||||||
|
try {
|
||||||
|
wrapped_fs_1.default.unlinkSync(destFilename);
|
||||||
|
}
|
||||||
|
catch (_a) { }
|
||||||
|
const linkTo = path.join(relativePath, path.basename(file.link));
|
||||||
|
if (path.relative(dest, linkSrcPath).startsWith('..')) {
|
||||||
|
throw new Error(`${fullPath}: file "${file.link}" links out of the package to "${linkSrcPath}"`);
|
||||||
|
}
|
||||||
|
wrapped_fs_1.default.symlinkSync(linkTo, destFilename);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// it's a file, try to extract it
|
||||||
|
try {
|
||||||
|
const content = disk.readFileSync(filesystem, filename, file);
|
||||||
|
wrapped_fs_1.default.writeFileSync(destFilename, content);
|
||||||
|
if (file.executable) {
|
||||||
|
wrapped_fs_1.default.chmodSync(destFilename, '755');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
extractionErrors.push(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (extractionErrors.length) {
|
||||||
|
throw new Error('Unable to extract some files:\n\n' +
|
||||||
|
extractionErrors.map((error) => error.stack).join('\n\n'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function uncache(archivePath) {
|
||||||
|
return disk.uncacheFilesystem(archivePath);
|
||||||
|
}
|
||||||
|
function uncacheAll() {
|
||||||
|
disk.uncacheAll();
|
||||||
|
}
|
||||||
|
// Export everything in default, too
|
||||||
|
exports.default = {
|
||||||
|
createPackage,
|
||||||
|
createPackageWithOptions,
|
||||||
|
createPackageFromFiles,
|
||||||
|
createPackageFromStreams,
|
||||||
|
statFile,
|
||||||
|
getRawHeader,
|
||||||
|
listPackage,
|
||||||
|
extractFile,
|
||||||
|
extractAll,
|
||||||
|
uncache,
|
||||||
|
uncacheAll,
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=asar.js.map
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"asar.js","sourceRoot":"","sources":["../src/asar.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,sCAEC;AAmBD,4DAQC;AAWD,wDA4IC;AAoCD,4DAiEC;AAED,4BAOC;AAED,oCAEC;AAMD,kCAEC;AAED,kCAOC;AAED,gCAyDC;AAED,0BAEC;AAED,gCAEC;AA7ZD,2CAA6B;AAC7B,0DAAkC;AAElC,8DAA8B;AAC9B,6CAKsB;AACtB,6CAA+B;AAC/B,uCAAyF;AAGzF;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,OAAe,EAAE,OAAe,EAAE,UAAoB;IAC3E,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAA,mBAAS,EAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,CAAC;QACN,OAAO,UAAU,CAAC,IAAI,CACpB,CAAC,SAAS,EAAE,EAAE,CACZ,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CACvF,CAAC;IACJ,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,IAAY;IAC3D,OAAO,wBAAwB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAmBM,KAAK,UAAU,wBAAwB,CAAC,GAAW,EAAE,IAAY,EAAE,OAAsB;IAC9F,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IAEjE,MAAM,OAAO,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAEpE,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,MAAM,IAAA,eAAe,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC1E,OAAO,sBAAsB,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,sBAAsB,CAC1C,GAAW,EACX,IAAY,EACZ,SAAmB,EACnB,WAA+B,EAAE,EACjC,UAAyB,EAAE;IAE3B,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,QAAQ;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAI,uBAAU,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,IAAI,eAAe,GAAa,EAAE,CAAC;IACnC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,aAAa,GAAG,CAAC,MAAM,oBAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;aACxD,QAAQ,EAAE;aACV,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC;YAChC,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEL,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,GAAG,GAAG,GAAG,CAAC;YACd,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;gBAC3C,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;gBACpC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,OAAO,IAAI,CAAC,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC;IACnF,CAAC;SAAM,CAAC;QACN,eAAe,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,WAAW,QAAgB;QACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,MAAM,IAAA,2BAAiB,EAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,QAAQ,CAAC,CAAC;YAC7D,CAAC;YACD,QAAQ,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;QAChC,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEhC,MAAM,gBAAgB,GAAG,UACvB,YAAoB,EACpB,MAA0B,EAC1B,SAA6B;YAE7B,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,IAAI,MAAM,EAAE,CAAC;gBACX,YAAY,GAAG,IAAA,mBAAS,EAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,CAAC;YACD,IAAI,CAAC,YAAY,IAAI,SAAS,EAAE,CAAC;gBAC/B,YAAY,GAAG,aAAa,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,YAAY,CAAC;QACtB,CAAC,CAAC;QAEF,IAAI,YAAqB,CAAC;QAC1B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,WAAW;gBACd,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC5F,UAAU,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;gBACnD,MAAM;YACR,KAAK,MAAM;gBACT,YAAY,GAAG,gBAAgB,CAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAC1C,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,SAAS,CAClB,CAAC;gBACF,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;gBAC/C,OAAO,UAAU,CAAC,UAAU,CAC1B,QAAQ,EACR,GAAG,EAAE,CAAC,oBAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EACnC,YAAY,EACZ,IAAI,EACJ,OAAO,CACR,CAAC;YACJ,KAAK,MAAM;gBACT,YAAY,GAAG,gBAAgB,CAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,EAC5B,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,SAAS,CAClB,CAAC;gBACF,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;gBAC/C,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;gBAC9C,MAAM;QACLine truncated
|
||||||
Loaded 100 of 7585 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user