add initial marp implementation with sample content and build configuration
This commit is contained in:
1
node_modules/.bin/browsers
generated
vendored
Symbolic link
1
node_modules/.bin/browsers
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../@puppeteer/browsers/lib/cjs/main-cli.js
|
||||
1
node_modules/.bin/cssesc
generated
vendored
Symbolic link
1
node_modules/.bin/cssesc
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../cssesc/bin/cssesc
|
||||
1
node_modules/.bin/escodegen
generated
vendored
Symbolic link
1
node_modules/.bin/escodegen
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../escodegen/bin/escodegen.js
|
||||
1
node_modules/.bin/esgenerate
generated
vendored
Symbolic link
1
node_modules/.bin/esgenerate
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../escodegen/bin/esgenerate.js
|
||||
1
node_modules/.bin/esparse
generated
vendored
Symbolic link
1
node_modules/.bin/esparse
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../esprima/bin/esparse.js
|
||||
1
node_modules/.bin/esvalidate
generated
vendored
Symbolic link
1
node_modules/.bin/esvalidate
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../esprima/bin/esvalidate.js
|
||||
1
node_modules/.bin/extract-zip
generated
vendored
Symbolic link
1
node_modules/.bin/extract-zip
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../extract-zip/cli.js
|
||||
1
node_modules/.bin/js-yaml
generated
vendored
Symbolic link
1
node_modules/.bin/js-yaml
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../js-yaml/bin/js-yaml.js
|
||||
1
node_modules/.bin/katex
generated
vendored
Symbolic link
1
node_modules/.bin/katex
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../katex/cli.js
|
||||
1
node_modules/.bin/markdown-it
generated
vendored
Symbolic link
1
node_modules/.bin/markdown-it
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../markdown-it/bin/markdown-it.mjs
|
||||
1
node_modules/.bin/marp
generated
vendored
Symbolic link
1
node_modules/.bin/marp
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../@marp-team/marp-cli/marp-cli.js
|
||||
1
node_modules/.bin/nanoid
generated
vendored
Symbolic link
1
node_modules/.bin/nanoid
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../nanoid/bin/nanoid.cjs
|
||||
1
node_modules/.bin/semver
generated
vendored
Symbolic link
1
node_modules/.bin/semver
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../semver/bin/semver.js
|
||||
1
node_modules/.bin/sre
generated
vendored
Symbolic link
1
node_modules/.bin/sre
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../speech-rule-engine/bin/sre
|
||||
1
node_modules/.bin/xss
generated
vendored
Symbolic link
1
node_modules/.bin/xss
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../xss/bin/xss
|
||||
1878
node_modules/.package-lock.json
generated
vendored
Normal file
1878
node_modules/.package-lock.json
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
22
node_modules/@babel/code-frame/LICENSE
generated
vendored
Normal file
22
node_modules/@babel/code-frame/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2014-present Sebastian McKenzie 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.
|
||||
19
node_modules/@babel/code-frame/README.md
generated
vendored
Normal file
19
node_modules/@babel/code-frame/README.md
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
# @babel/code-frame
|
||||
|
||||
> Generate errors that contain a code frame that point to source locations.
|
||||
|
||||
See our website [@babel/code-frame](https://babeljs.io/docs/babel-code-frame) for more information.
|
||||
|
||||
## Install
|
||||
|
||||
Using npm:
|
||||
|
||||
```sh
|
||||
npm install --save-dev @babel/code-frame
|
||||
```
|
||||
|
||||
or using yarn:
|
||||
|
||||
```sh
|
||||
yarn add @babel/code-frame --dev
|
||||
```
|
||||
216
node_modules/@babel/code-frame/lib/index.js
generated
vendored
Normal file
216
node_modules/@babel/code-frame/lib/index.js
generated
vendored
Normal file
@@ -0,0 +1,216 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
|
||||
var picocolors = require('picocolors');
|
||||
var jsTokens = require('js-tokens');
|
||||
var helperValidatorIdentifier = require('@babel/helper-validator-identifier');
|
||||
|
||||
function isColorSupported() {
|
||||
return (typeof process === "object" && (process.env.FORCE_COLOR === "0" || process.env.FORCE_COLOR === "false") ? false : picocolors.isColorSupported
|
||||
);
|
||||
}
|
||||
const compose = (f, g) => v => f(g(v));
|
||||
function buildDefs(colors) {
|
||||
return {
|
||||
keyword: colors.cyan,
|
||||
capitalized: colors.yellow,
|
||||
jsxIdentifier: colors.yellow,
|
||||
punctuator: colors.yellow,
|
||||
number: colors.magenta,
|
||||
string: colors.green,
|
||||
regex: colors.magenta,
|
||||
comment: colors.gray,
|
||||
invalid: compose(compose(colors.white, colors.bgRed), colors.bold),
|
||||
gutter: colors.gray,
|
||||
marker: compose(colors.red, colors.bold),
|
||||
message: compose(colors.red, colors.bold),
|
||||
reset: colors.reset
|
||||
};
|
||||
}
|
||||
const defsOn = buildDefs(picocolors.createColors(true));
|
||||
const defsOff = buildDefs(picocolors.createColors(false));
|
||||
function getDefs(enabled) {
|
||||
return enabled ? defsOn : defsOff;
|
||||
}
|
||||
|
||||
const sometimesKeywords = new Set(["as", "async", "from", "get", "of", "set"]);
|
||||
const NEWLINE$1 = /\r\n|[\n\r\u2028\u2029]/;
|
||||
const BRACKET = /^[()[\]{}]$/;
|
||||
let tokenize;
|
||||
{
|
||||
const JSX_TAG = /^[a-z][\w-]*$/i;
|
||||
const getTokenType = function (token, offset, text) {
|
||||
if (token.type === "name") {
|
||||
if (helperValidatorIdentifier.isKeyword(token.value) || helperValidatorIdentifier.isStrictReservedWord(token.value, true) || sometimesKeywords.has(token.value)) {
|
||||
return "keyword";
|
||||
}
|
||||
if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.slice(offset - 2, offset) === "</")) {
|
||||
return "jsxIdentifier";
|
||||
}
|
||||
if (token.value[0] !== token.value[0].toLowerCase()) {
|
||||
return "capitalized";
|
||||
}
|
||||
}
|
||||
if (token.type === "punctuator" && BRACKET.test(token.value)) {
|
||||
return "bracket";
|
||||
}
|
||||
if (token.type === "invalid" && (token.value === "@" || token.value === "#")) {
|
||||
return "punctuator";
|
||||
}
|
||||
return token.type;
|
||||
};
|
||||
tokenize = function* (text) {
|
||||
let match;
|
||||
while (match = jsTokens.default.exec(text)) {
|
||||
const token = jsTokens.matchToToken(match);
|
||||
yield {
|
||||
type: getTokenType(token, match.index, text),
|
||||
value: token.value
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
function highlight(text) {
|
||||
if (text === "") return "";
|
||||
const defs = getDefs(true);
|
||||
let highlighted = "";
|
||||
for (const {
|
||||
type,
|
||||
value
|
||||
} of tokenize(text)) {
|
||||
if (type in defs) {
|
||||
highlighted += value.split(NEWLINE$1).map(str => defs[type](str)).join("\n");
|
||||
} else {
|
||||
highlighted += value;
|
||||
}
|
||||
}
|
||||
return highlighted;
|
||||
}
|
||||
|
||||
let deprecationWarningShown = false;
|
||||
const NEWLINE = /\r\n|[\n\r\u2028\u2029]/;
|
||||
function getMarkerLines(loc, source, opts) {
|
||||
const startLoc = Object.assign({
|
||||
column: 0,
|
||||
line: -1
|
||||
}, loc.start);
|
||||
const endLoc = Object.assign({}, startLoc, loc.end);
|
||||
const {
|
||||
linesAbove = 2,
|
||||
linesBelow = 3
|
||||
} = opts || {};
|
||||
const startLine = startLoc.line;
|
||||
const startColumn = startLoc.column;
|
||||
const endLine = endLoc.line;
|
||||
const endColumn = endLoc.column;
|
||||
let start = Math.max(startLine - (linesAbove + 1), 0);
|
||||
let end = Math.min(source.length, endLine + linesBelow);
|
||||
if (startLine === -1) {
|
||||
start = 0;
|
||||
}
|
||||
if (endLine === -1) {
|
||||
end = source.length;
|
||||
}
|
||||
const lineDiff = endLine - startLine;
|
||||
const markerLines = {};
|
||||
if (lineDiff) {
|
||||
for (let i = 0; i <= lineDiff; i++) {
|
||||
const lineNumber = i + startLine;
|
||||
if (!startColumn) {
|
||||
markerLines[lineNumber] = true;
|
||||
} else if (i === 0) {
|
||||
const sourceLength = source[lineNumber - 1].length;
|
||||
markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];
|
||||
} else if (i === lineDiff) {
|
||||
markerLines[lineNumber] = [0, endColumn];
|
||||
} else {
|
||||
const sourceLength = source[lineNumber - i].length;
|
||||
markerLines[lineNumber] = [0, sourceLength];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (startColumn === endColumn) {
|
||||
if (startColumn) {
|
||||
markerLines[startLine] = [startColumn, 0];
|
||||
} else {
|
||||
markerLines[startLine] = true;
|
||||
}
|
||||
} else {
|
||||
markerLines[startLine] = [startColumn, endColumn - startColumn];
|
||||
}
|
||||
}
|
||||
return {
|
||||
start,
|
||||
end,
|
||||
markerLines
|
||||
};
|
||||
}
|
||||
function codeFrameColumns(rawLines, loc, opts = {}) {
|
||||
const shouldHighlight = opts.forceColor || isColorSupported() && opts.highlightCode;
|
||||
const defs = getDefs(shouldHighlight);
|
||||
const lines = rawLines.split(NEWLINE);
|
||||
const {
|
||||
start,
|
||||
end,
|
||||
markerLines
|
||||
} = getMarkerLines(loc, lines, opts);
|
||||
const hasColumns = loc.start && typeof loc.start.column === "number";
|
||||
const numberMaxWidth = String(end).length;
|
||||
const highlightedLines = shouldHighlight ? highlight(rawLines) : rawLines;
|
||||
let frame = highlightedLines.split(NEWLINE, end).slice(start, end).map((line, index) => {
|
||||
const number = start + 1 + index;
|
||||
const paddedNumber = ` ${number}`.slice(-numberMaxWidth);
|
||||
const gutter = ` ${paddedNumber} |`;
|
||||
const hasMarker = markerLines[number];
|
||||
const lastMarkerLine = !markerLines[number + 1];
|
||||
if (hasMarker) {
|
||||
let markerLine = "";
|
||||
if (Array.isArray(hasMarker)) {
|
||||
const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " ");
|
||||
const numberOfMarkers = hasMarker[1] || 1;
|
||||
markerLine = ["\n ", defs.gutter(gutter.replace(/\d/g, " ")), " ", markerSpacing, defs.marker("^").repeat(numberOfMarkers)].join("");
|
||||
if (lastMarkerLine && opts.message) {
|
||||
markerLine += " " + defs.message(opts.message);
|
||||
}
|
||||
}
|
||||
return [defs.marker(">"), defs.gutter(gutter), line.length > 0 ? ` ${line}` : "", markerLine].join("");
|
||||
} else {
|
||||
return ` ${defs.gutter(gutter)}${line.length > 0 ? ` ${line}` : ""}`;
|
||||
}
|
||||
}).join("\n");
|
||||
if (opts.message && !hasColumns) {
|
||||
frame = `${" ".repeat(numberMaxWidth + 1)}${opts.message}\n${frame}`;
|
||||
}
|
||||
if (shouldHighlight) {
|
||||
return defs.reset(frame);
|
||||
} else {
|
||||
return frame;
|
||||
}
|
||||
}
|
||||
function index (rawLines, lineNumber, colNumber, opts = {}) {
|
||||
if (!deprecationWarningShown) {
|
||||
deprecationWarningShown = true;
|
||||
const message = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.";
|
||||
if (process.emitWarning) {
|
||||
process.emitWarning(message, "DeprecationWarning");
|
||||
} else {
|
||||
const deprecationError = new Error(message);
|
||||
deprecationError.name = "DeprecationWarning";
|
||||
console.warn(new Error(message));
|
||||
}
|
||||
}
|
||||
colNumber = Math.max(colNumber, 0);
|
||||
const location = {
|
||||
start: {
|
||||
column: colNumber,
|
||||
line: lineNumber
|
||||
}
|
||||
};
|
||||
return codeFrameColumns(rawLines, location, opts);
|
||||
}
|
||||
|
||||
exports.codeFrameColumns = codeFrameColumns;
|
||||
exports.default = index;
|
||||
exports.highlight = highlight;
|
||||
//# sourceMappingURL=index.js.map
|
||||
1
node_modules/@babel/code-frame/lib/index.js.map
generated
vendored
Normal file
1
node_modules/@babel/code-frame/lib/index.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
31
node_modules/@babel/code-frame/package.json
generated
vendored
Normal file
31
node_modules/@babel/code-frame/package.json
generated
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"name": "@babel/code-frame",
|
||||
"version": "7.27.1",
|
||||
"description": "Generate errors that contain a code frame that point to source locations.",
|
||||
"author": "The Babel Team (https://babel.dev/team)",
|
||||
"homepage": "https://babel.dev/docs/en/next/babel-code-frame",
|
||||
"bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen",
|
||||
"license": "MIT",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/babel/babel.git",
|
||||
"directory": "packages/babel-code-frame"
|
||||
},
|
||||
"main": "./lib/index.js",
|
||||
"dependencies": {
|
||||
"@babel/helper-validator-identifier": "^7.27.1",
|
||||
"js-tokens": "^4.0.0",
|
||||
"picocolors": "^1.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"import-meta-resolve": "^4.1.0",
|
||||
"strip-ansi": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
},
|
||||
"type": "commonjs"
|
||||
}
|
||||
22
node_modules/@babel/helper-validator-identifier/LICENSE
generated
vendored
Normal file
22
node_modules/@babel/helper-validator-identifier/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2014-present Sebastian McKenzie 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.
|
||||
19
node_modules/@babel/helper-validator-identifier/README.md
generated
vendored
Normal file
19
node_modules/@babel/helper-validator-identifier/README.md
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
# @babel/helper-validator-identifier
|
||||
|
||||
> Validate identifier/keywords name
|
||||
|
||||
See our website [@babel/helper-validator-identifier](https://babeljs.io/docs/babel-helper-validator-identifier) for more information.
|
||||
|
||||
## Install
|
||||
|
||||
Using npm:
|
||||
|
||||
```sh
|
||||
npm install --save @babel/helper-validator-identifier
|
||||
```
|
||||
|
||||
or using yarn:
|
||||
|
||||
```sh
|
||||
yarn add @babel/helper-validator-identifier
|
||||
```
|
||||
70
node_modules/@babel/helper-validator-identifier/lib/identifier.js
generated
vendored
Normal file
70
node_modules/@babel/helper-validator-identifier/lib/identifier.js
generated
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.isIdentifierChar = isIdentifierChar;
|
||||
exports.isIdentifierName = isIdentifierName;
|
||||
exports.isIdentifierStart = isIdentifierStart;
|
||||
let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c8a\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7cd\ua7d0\ua7d1\ua7d3\ua7d5-\ua7dc\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
|
||||
let nonASCIIidentifierChars = "\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0897-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0cf3\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ece\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\u30fb\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f\uff65";
|
||||
const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
|
||||
const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
|
||||
nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
|
||||
const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 4, 51, 13, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 39, 27, 10, 22, 251, 41, 7, 1, 17, 2, 60, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 31, 9, 2, 0, 3, 0, 2, 37, 2, 0, 26, 0, 2, 0, 45, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 200, 32, 32, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 26, 3994, 6, 582, 6842, 29, 1763, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 433, 44, 212, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 42, 9, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 229, 29, 3, 0, 496, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 4191];
|
||||
const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 7, 9, 32, 4, 318, 1, 80, 3, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 68, 8, 2, 0, 3, 0, 2, 3, 2, 4, 2, 0, 15, 1, 83, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 7, 19, 58, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 343, 9, 54, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 10, 5350, 0, 7, 14, 11465, 27, 2343, 9, 87, 9, 39, 4, 60, 6, 26, 9, 535, 9, 470, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4178, 9, 519, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 245, 1, 2, 9, 726, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
|
||||
function isInAstralSet(code, set) {
|
||||
let pos = 0x10000;
|
||||
for (let i = 0, length = set.length; i < length; i += 2) {
|
||||
pos += set[i];
|
||||
if (pos > code) return false;
|
||||
pos += set[i + 1];
|
||||
if (pos >= code) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function isIdentifierStart(code) {
|
||||
if (code < 65) return code === 36;
|
||||
if (code <= 90) return true;
|
||||
if (code < 97) return code === 95;
|
||||
if (code <= 122) return true;
|
||||
if (code <= 0xffff) {
|
||||
return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));
|
||||
}
|
||||
return isInAstralSet(code, astralIdentifierStartCodes);
|
||||
}
|
||||
function isIdentifierChar(code) {
|
||||
if (code < 48) return code === 36;
|
||||
if (code < 58) return true;
|
||||
if (code < 65) return false;
|
||||
if (code <= 90) return true;
|
||||
if (code < 97) return code === 95;
|
||||
if (code <= 122) return true;
|
||||
if (code <= 0xffff) {
|
||||
return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));
|
||||
}
|
||||
return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);
|
||||
}
|
||||
function isIdentifierName(name) {
|
||||
let isFirst = true;
|
||||
for (let i = 0; i < name.length; i++) {
|
||||
let cp = name.charCodeAt(i);
|
||||
if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {
|
||||
const trail = name.charCodeAt(++i);
|
||||
if ((trail & 0xfc00) === 0xdc00) {
|
||||
cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);
|
||||
}
|
||||
}
|
||||
if (isFirst) {
|
||||
isFirst = false;
|
||||
if (!isIdentifierStart(cp)) {
|
||||
return false;
|
||||
}
|
||||
} else if (!isIdentifierChar(cp)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return !isFirst;
|
||||
}
|
||||
|
||||
//# sourceMappingURL=identifier.js.map
|
||||
1
node_modules/@babel/helper-validator-identifier/lib/identifier.js.map
generated
vendored
Normal file
1
node_modules/@babel/helper-validator-identifier/lib/identifier.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
57
node_modules/@babel/helper-validator-identifier/lib/index.js
generated
vendored
Normal file
57
node_modules/@babel/helper-validator-identifier/lib/index.js
generated
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "isIdentifierChar", {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _identifier.isIdentifierChar;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, "isIdentifierName", {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _identifier.isIdentifierName;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, "isIdentifierStart", {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _identifier.isIdentifierStart;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, "isKeyword", {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _keyword.isKeyword;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, "isReservedWord", {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _keyword.isReservedWord;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, "isStrictBindOnlyReservedWord", {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _keyword.isStrictBindOnlyReservedWord;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, "isStrictBindReservedWord", {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _keyword.isStrictBindReservedWord;
|
||||
}
|
||||
});
|
||||
Object.defineProperty(exports, "isStrictReservedWord", {
|
||||
enumerable: true,
|
||||
get: function () {
|
||||
return _keyword.isStrictReservedWord;
|
||||
}
|
||||
});
|
||||
var _identifier = require("./identifier.js");
|
||||
var _keyword = require("./keyword.js");
|
||||
|
||||
//# sourceMappingURL=index.js.map
|
||||
1
node_modules/@babel/helper-validator-identifier/lib/index.js.map
generated
vendored
Normal file
1
node_modules/@babel/helper-validator-identifier/lib/index.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"names":["_identifier","require","_keyword"],"sources":["../src/index.ts"],"sourcesContent":["export {\n isIdentifierName,\n isIdentifierChar,\n isIdentifierStart,\n} from \"./identifier.ts\";\nexport {\n isReservedWord,\n isStrictBindOnlyReservedWord,\n isStrictBindReservedWord,\n isStrictReservedWord,\n isKeyword,\n} from \"./keyword.ts\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAKA,IAAAC,QAAA,GAAAD,OAAA","ignoreList":[]}
|
||||
35
node_modules/@babel/helper-validator-identifier/lib/keyword.js
generated
vendored
Normal file
35
node_modules/@babel/helper-validator-identifier/lib/keyword.js
generated
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.isKeyword = isKeyword;
|
||||
exports.isReservedWord = isReservedWord;
|
||||
exports.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord;
|
||||
exports.isStrictBindReservedWord = isStrictBindReservedWord;
|
||||
exports.isStrictReservedWord = isStrictReservedWord;
|
||||
const reservedWords = {
|
||||
keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"],
|
||||
strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"],
|
||||
strictBind: ["eval", "arguments"]
|
||||
};
|
||||
const keywords = new Set(reservedWords.keyword);
|
||||
const reservedWordsStrictSet = new Set(reservedWords.strict);
|
||||
const reservedWordsStrictBindSet = new Set(reservedWords.strictBind);
|
||||
function isReservedWord(word, inModule) {
|
||||
return inModule && word === "await" || word === "enum";
|
||||
}
|
||||
function isStrictReservedWord(word, inModule) {
|
||||
return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);
|
||||
}
|
||||
function isStrictBindOnlyReservedWord(word) {
|
||||
return reservedWordsStrictBindSet.has(word);
|
||||
}
|
||||
function isStrictBindReservedWord(word, inModule) {
|
||||
return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);
|
||||
}
|
||||
function isKeyword(word) {
|
||||
return keywords.has(word);
|
||||
}
|
||||
|
||||
//# sourceMappingURL=keyword.js.map
|
||||
1
node_modules/@babel/helper-validator-identifier/lib/keyword.js.map
generated
vendored
Normal file
1
node_modules/@babel/helper-validator-identifier/lib/keyword.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"names":["reservedWords","keyword","strict","strictBind","keywords","Set","reservedWordsStrictSet","reservedWordsStrictBindSet","isReservedWord","word","inModule","isStrictReservedWord","has","isStrictBindOnlyReservedWord","isStrictBindReservedWord","isKeyword"],"sources":["../src/keyword.ts"],"sourcesContent":["const reservedWords = {\n keyword: [\n \"break\",\n \"case\",\n \"catch\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"do\",\n \"else\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"return\",\n \"switch\",\n \"throw\",\n \"try\",\n \"var\",\n \"const\",\n \"while\",\n \"with\",\n \"new\",\n \"this\",\n \"super\",\n \"class\",\n \"extends\",\n \"export\",\n \"import\",\n \"null\",\n \"true\",\n \"false\",\n \"in\",\n \"instanceof\",\n \"typeof\",\n \"void\",\n \"delete\",\n ],\n strict: [\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"yield\",\n ],\n strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n word: string,\n inModule: boolean,\n): boolean {\n return (\n isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n );\n}\n\nexport function isKeyword(word: string): boolean {\n return keywords.has(word);\n}\n"],"mappings":";;;;;;;;;;AAAA,MAAMA,aAAa,GAAG;EACpBC,OAAO,EAAE,CACP,OAAO,EACP,MAAM,EACN,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,IAAI,EACJ,MAAM,EACN,SAAS,EACT,KAAK,EACL,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,QAAQ,CACT;EACDC,MAAM,EAAE,CACN,YAAY,EACZ,WAAW,EACX,KAAK,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,OAAO,CACR;EACDC,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW;AAClC,CAAC;AACD,MAAMC,QAAQ,GAAG,IAAIC,GAAG,CAACL,aAAa,CAACC,OAAO,CAAC;AAC/C,MAAMK,sBAAsB,GAAG,IAAID,GAAG,CAACL,aAAa,CAACE,MAAM,CAAC;AAC5D,MAAMK,0BAA0B,GAAG,IAAIF,GAAG,CAACL,aAAa,CAACG,UAAU,CAAC;AAK7D,SAASK,cAAcA,CAACC,IAAY,EAAEC,QAAiB,EAAW;EACvE,OAAQA,QAAQ,IAAID,IAAI,KAAK,OAAO,IAAKA,IAAI,KAAK,MAAM;AAC1D;AAOO,SAASE,oBAAoBA,CAACF,IAAY,EAAEC,QAAiB,EAAW;EAC7E,OAAOF,cAAc,CAACC,IAAI,EAAEC,QAAQ,CAAC,IAAIJ,sBAAsB,CAACM,GAAG,CAACH,IAAI,CAAC;AAC3E;AAMO,SAASI,4BAA4BA,CAACJ,IAAY,EAAW;EAClE,OAAOF,0BAA0B,CAACK,GAAG,CAACH,IAAI,CAAC;AAC7C;AAOO,SAASK,wBAAwBA,CACtCL,IAAY,EACZC,QAAiB,EACR;EACT,OACEC,oBAAoB,CAACF,IAAI,EAAEC,QAAQ,CAAC,IAAIG,4BAA4B,CAACJ,IAAI,CAAC;AAE9E;AAEO,SAASM,SAASA,CAACN,IAAY,EAAW;EAC/C,OAAOL,QAAQ,CAACQ,GAAG,CAACH,IAAI,CAAC;AAC3B","ignoreList":[]}
|
||||
31
node_modules/@babel/helper-validator-identifier/package.json
generated
vendored
Normal file
31
node_modules/@babel/helper-validator-identifier/package.json
generated
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"name": "@babel/helper-validator-identifier",
|
||||
"version": "7.27.1",
|
||||
"description": "Validate identifier/keywords name",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/babel/babel.git",
|
||||
"directory": "packages/babel-helper-validator-identifier"
|
||||
},
|
||||
"license": "MIT",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"main": "./lib/index.js",
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./lib/index.d.ts",
|
||||
"default": "./lib/index.js"
|
||||
},
|
||||
"./package.json": "./package.json"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@unicode/unicode-16.0.0": "^1.0.0",
|
||||
"charcodes": "^0.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
},
|
||||
"author": "The Babel Team (https://babel.dev/team)",
|
||||
"type": "commonjs"
|
||||
}
|
||||
9
node_modules/@csstools/postcss-is-pseudo-class/CHANGELOG.md
generated
vendored
Normal file
9
node_modules/@csstools/postcss-is-pseudo-class/CHANGELOG.md
generated
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
# Changes to PostCSS Is Pseudo Class
|
||||
|
||||
### 5.0.3
|
||||
|
||||
_June 11, 2025_
|
||||
|
||||
- Fix support for more complex selector patterns. `.a > :is(.b > .c)` -> `.a.b > .c`
|
||||
|
||||
[Full CHANGELOG](https://github.com/csstools/postcss-plugins/tree/main/plugins/postcss-is-pseudo-class/CHANGELOG.md)
|
||||
18
node_modules/@csstools/postcss-is-pseudo-class/LICENSE.md
generated
vendored
Normal file
18
node_modules/@csstools/postcss-is-pseudo-class/LICENSE.md
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
MIT No Attribution (MIT-0)
|
||||
|
||||
Copyright © CSSTools 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.
|
||||
|
||||
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.
|
||||
253
node_modules/@csstools/postcss-is-pseudo-class/README.md
generated
vendored
Normal file
253
node_modules/@csstools/postcss-is-pseudo-class/README.md
generated
vendored
Normal file
@@ -0,0 +1,253 @@
|
||||
# PostCSS Is Pseudo [<img src="https://postcss.github.io/postcss/logo.svg" alt="PostCSS" width="90" height="90" align="right">][postcss]
|
||||
|
||||
[![NPM Version][npm-img]][npm-url]
|
||||
[<img alt="Build Status" src="https://github.com/csstools/postcss-plugins/actions/workflows/test.yml/badge.svg?branch=main" height="20">][cli-url]
|
||||
[<img alt="Discord" src="https://shields.io/badge/Discord-5865F2?logo=discord&logoColor=white">][discord]
|
||||
<br><br>
|
||||
[<img alt="Baseline Status" src="https://cssdb.org/images/badges-baseline/is-pseudo-class.svg" height="20">][css-url]
|
||||
[![CSS Standard Status][css-img]][css-url]
|
||||
|
||||
[PostCSS Is Pseudo Class] lets you use the `:is` pseudo class function, following the
|
||||
[CSS Selector] specification.
|
||||
|
||||
```css
|
||||
:is(input, button):is(:hover, :focus) {
|
||||
order: 1;
|
||||
}
|
||||
```
|
||||
|
||||
Becomes :
|
||||
|
||||
```css
|
||||
input:hover {
|
||||
order: 1;
|
||||
}
|
||||
input:focus {
|
||||
order: 1;
|
||||
}
|
||||
button:hover {
|
||||
order: 1;
|
||||
}
|
||||
button:focus {
|
||||
order: 1;
|
||||
}
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
Add [PostCSS Is Pseudo Class] to your project:
|
||||
|
||||
```bash
|
||||
npm install @csstools/postcss-is-pseudo-class --save-dev
|
||||
```
|
||||
|
||||
Use [PostCSS Is Pseudo Class] as a [PostCSS] plugin:
|
||||
|
||||
```js
|
||||
import postcss from 'postcss';
|
||||
import postcssIsPseudoClass from '@csstools/postcss-is-pseudo-class';
|
||||
|
||||
postcss([
|
||||
postcssIsPseudoClass(/* pluginOptions */)
|
||||
]).process(YOUR_CSS /*, processOptions */);
|
||||
```
|
||||
|
||||
[PostCSS Is Pseudo Class] runs in all Node environments, with special instructions for:
|
||||
|
||||
| [Node](INSTALL.md#node) | [Webpack](INSTALL.md#webpack) | [Gulp](INSTALL.md#gulp) | [Grunt](INSTALL.md#grunt) |
|
||||
| --- | --- | --- | --- |
|
||||
|
||||
## Options
|
||||
|
||||
### preserve
|
||||
|
||||
The `preserve` option determines whether the original notation
|
||||
is preserved. By default, it is not preserved.
|
||||
|
||||
```js
|
||||
postcss([
|
||||
postcssIsPseudoClass({ preserve: true })
|
||||
]).process(YOUR_CSS /*, processOptions */);
|
||||
```
|
||||
|
||||
```css
|
||||
:is(input, button):is(:hover, :focus) {
|
||||
order: 1;
|
||||
}
|
||||
```
|
||||
|
||||
Becomes :
|
||||
|
||||
```css
|
||||
input:hover {
|
||||
order: 1;
|
||||
}
|
||||
input:focus {
|
||||
order: 1;
|
||||
}
|
||||
button:hover {
|
||||
order: 1;
|
||||
}
|
||||
button:focus {
|
||||
order: 1;
|
||||
}
|
||||
:is(input, button):is(:hover, :focus) {
|
||||
order: 1;
|
||||
}
|
||||
```
|
||||
|
||||
### specificityMatchingName
|
||||
|
||||
The `specificityMatchingName` option allows you to change the selector used to adjust specificity.
|
||||
The default value is `does-not-exist`.
|
||||
If this is an actual class, id or tag name in your code, you will need to set a different option here.
|
||||
|
||||
See how `:not` is used to modify [specificity](#specificity).
|
||||
|
||||
```js
|
||||
postcss([
|
||||
postcssIsPseudoClass({ specificityMatchingName: 'something-random' })
|
||||
]).process(YOUR_CSS /*, processOptions */);
|
||||
```
|
||||
|
||||
```css
|
||||
:is(.button, button):hover {
|
||||
order: 7;
|
||||
}
|
||||
```
|
||||
|
||||
Becomes :
|
||||
|
||||
```css
|
||||
.button:hover {
|
||||
order: 7;
|
||||
}
|
||||
|
||||
button:not(.something-random):hover {
|
||||
order: 7;
|
||||
}
|
||||
```
|
||||
|
||||
### onComplexSelector
|
||||
|
||||
Warn on complex selectors in `:is` pseudo class functions.
|
||||
|
||||
```js
|
||||
postcss([
|
||||
postcssIsPseudoClass({ onComplexSelector: 'warning' })
|
||||
]).process(YOUR_CSS /*, processOptions */);
|
||||
```
|
||||
|
||||
### onPseudoElement
|
||||
|
||||
Warn when pseudo elements are used in `:is` pseudo class functions.
|
||||
|
||||
⚠️ Pseudo elements are always invalid and will be transformed to `::-csstools-invalid-<pseudo-name>`.
|
||||
|
||||
```js
|
||||
postcss([
|
||||
postcssIsPseudoClass({ onPseudoElement: 'warning' })
|
||||
]).process(YOUR_CSS /*, processOptions */);
|
||||
```
|
||||
|
||||
```css
|
||||
:is(::after):hover {
|
||||
order: 1.0;
|
||||
}
|
||||
|
||||
/* becomes */
|
||||
|
||||
::-csstools-invalid-after:hover {
|
||||
order: 1.0;
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ Known shortcomings
|
||||
|
||||
### Specificity
|
||||
|
||||
`:is` takes the specificity of the most specific list item.
|
||||
We can increase specificity with `:not` selectors, but we can't decrease it.
|
||||
|
||||
Converted selectors are ensured to have the same specificity as `:is` for the most important bit.
|
||||
Less important bits can have higher specificity that `:is`.
|
||||
|
||||
Before :
|
||||
|
||||
[specificity: 0, 2, 0](https://polypane.app/css-specificity-calculator/#selector=%3Ais(%3Ahover%2C%20%3Afocus)%3Ais(.button%2C%20button))
|
||||
|
||||
```css
|
||||
:is(:hover, :focus):is(.button, button) {
|
||||
order: 7;
|
||||
}
|
||||
```
|
||||
|
||||
After :
|
||||
|
||||
```css
|
||||
/* specificity: [0, 2, 0] */
|
||||
.button:hover {
|
||||
order: 7;
|
||||
}
|
||||
|
||||
/* specificity: [0, 2, 1] */
|
||||
/* last bit is higher than it should be, but middle bit matches */
|
||||
button:not(.does-not-exist):hover {
|
||||
order: 7;
|
||||
}
|
||||
|
||||
/* specificity: [0, 2, 0] */
|
||||
.button:focus {
|
||||
order: 7;
|
||||
}
|
||||
|
||||
/* specificity: [0, 2, 1] */
|
||||
/* last bit is higher than it should be, but middle bit matches */
|
||||
button:not(.does-not-exist):focus {
|
||||
order: 7;
|
||||
}
|
||||
```
|
||||
|
||||
### Complex selectors
|
||||
|
||||
Before :
|
||||
|
||||
|
||||
```css
|
||||
:is(.alpha > .beta) ~ :is(:focus > .beta) {
|
||||
order: 2;
|
||||
}
|
||||
```
|
||||
|
||||
After :
|
||||
|
||||
```css
|
||||
.alpha > .beta ~ :focus > .beta {
|
||||
order: 2;
|
||||
}
|
||||
```
|
||||
|
||||
_this is a different selector than expected as `.beta ~ :focus` matches `.beta` followed by `:focus`._<br>
|
||||
_avoid these cases._<br>
|
||||
_writing the selector without `:is()` is advised here_
|
||||
|
||||
```css
|
||||
/* without is */
|
||||
.alpha:focus > .beta ~ .beta {
|
||||
order: 2;
|
||||
}
|
||||
```
|
||||
|
||||
If you have a specific pattern you can open an issue to discuss it.
|
||||
We can detect and transform some cases but can't generalize them into a single solution that tackles all of them.
|
||||
|
||||
[cli-url]: https://github.com/csstools/postcss-plugins/actions/workflows/test.yml?query=workflow/test
|
||||
[css-img]: https://cssdb.org/images/badges/is-pseudo-class.svg
|
||||
[css-url]: https://cssdb.org/#is-pseudo-class
|
||||
[discord]: https://discord.gg/bUadyRwkJS
|
||||
[npm-img]: https://img.shields.io/npm/v/@csstools/postcss-is-pseudo-class.svg
|
||||
[npm-url]: https://www.npmjs.com/package/@csstools/postcss-is-pseudo-class
|
||||
|
||||
[CSS Selector]: https://www.w3.org/TR/selectors-4/#matches
|
||||
[PostCSS]: https://github.com/postcss/postcss
|
||||
[PostCSS Is Pseudo Class]: https://github.com/csstools/postcss-plugins/tree/main/plugins/postcss-is-pseudo-class
|
||||
1
node_modules/@csstools/postcss-is-pseudo-class/dist/index.cjs
generated
vendored
Normal file
1
node_modules/@csstools/postcss-is-pseudo-class/dist/index.cjs
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
27
node_modules/@csstools/postcss-is-pseudo-class/dist/index.d.ts
generated
vendored
Normal file
27
node_modules/@csstools/postcss-is-pseudo-class/dist/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
import type { PluginCreator } from 'postcss';
|
||||
|
||||
declare const creator: PluginCreator<pluginOptions>;
|
||||
export default creator;
|
||||
|
||||
/** postcss-is-pseudo-class plugin options */
|
||||
export declare type pluginOptions = {
|
||||
/** Preserve the original notation. default: false */
|
||||
preserve?: boolean;
|
||||
/**
|
||||
* Warn on complex selectors in `:is` pseudo class functions.
|
||||
* default: _not set_
|
||||
*/
|
||||
onComplexSelector?: 'warning';
|
||||
/**
|
||||
* Warn when pseudo elements are used in `:is` pseudo class functions.
|
||||
* default: _not set_
|
||||
*/
|
||||
onPseudoElement?: 'warning';
|
||||
/**
|
||||
* Change the selector used to adjust specificity.
|
||||
* default: `does-not-exist`.
|
||||
*/
|
||||
specificityMatchingName?: string;
|
||||
};
|
||||
|
||||
export { }
|
||||
1
node_modules/@csstools/postcss-is-pseudo-class/dist/index.mjs
generated
vendored
Normal file
1
node_modules/@csstools/postcss-is-pseudo-class/dist/index.mjs
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
65
node_modules/@csstools/postcss-is-pseudo-class/package.json
generated
vendored
Normal file
65
node_modules/@csstools/postcss-is-pseudo-class/package.json
generated
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"name": "@csstools/postcss-is-pseudo-class",
|
||||
"description": "A pseudo-class for matching elements in a selector list",
|
||||
"version": "5.0.3",
|
||||
"author": "Jonathan Neal <jonathantneal@hotmail.com>",
|
||||
"license": "MIT-0",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/csstools"
|
||||
},
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/csstools"
|
||||
}
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"type": "module",
|
||||
"main": "dist/index.cjs",
|
||||
"module": "dist/index.mjs",
|
||||
"exports": {
|
||||
".": {
|
||||
"import": {
|
||||
"types": "./dist/index.d.ts",
|
||||
"default": "./dist/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"default": "./dist/index.cjs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
"CHANGELOG.md",
|
||||
"LICENSE.md",
|
||||
"README.md",
|
||||
"dist"
|
||||
],
|
||||
"dependencies": {
|
||||
"@csstools/selector-specificity": "^5.0.0",
|
||||
"postcss-selector-parser": "^7.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"postcss": "^8.4"
|
||||
},
|
||||
"scripts": {},
|
||||
"homepage": "https://github.com/csstools/postcss-plugins/tree/main/plugins/postcss-is-pseudo-class#readme",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/csstools/postcss-plugins.git",
|
||||
"directory": "plugins/postcss-is-pseudo-class"
|
||||
},
|
||||
"bugs": "https://github.com/csstools/postcss-plugins/issues",
|
||||
"keywords": [
|
||||
"css",
|
||||
"is",
|
||||
"matches",
|
||||
"polyfill",
|
||||
"postcss",
|
||||
"postcss-plugin",
|
||||
"pseudo",
|
||||
"selector"
|
||||
]
|
||||
}
|
||||
9
node_modules/@csstools/selector-resolve-nested/CHANGELOG.md
generated
vendored
Normal file
9
node_modules/@csstools/selector-resolve-nested/CHANGELOG.md
generated
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
# Changes to Selector Resolve Nested
|
||||
|
||||
### 3.1.0
|
||||
|
||||
_June 6, 2025_
|
||||
|
||||
- Add `ignoreImplicitNesting` option to `resolveNestedSelector`
|
||||
|
||||
[Full CHANGELOG](https://github.com/csstools/postcss-plugins/tree/main/packages/selector-resolve-nested/CHANGELOG.md)
|
||||
18
node_modules/@csstools/selector-resolve-nested/LICENSE.md
generated
vendored
Normal file
18
node_modules/@csstools/selector-resolve-nested/LICENSE.md
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
MIT No Attribution (MIT-0)
|
||||
|
||||
Copyright © CSSTools 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.
|
||||
|
||||
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.
|
||||
34
node_modules/@csstools/selector-resolve-nested/README.md
generated
vendored
Normal file
34
node_modules/@csstools/selector-resolve-nested/README.md
generated
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
# Selector Resolve Nested [<img src="https://postcss.github.io/postcss/logo.svg" alt="for PostCSS" width="90" height="90" align="right">][postcss]
|
||||
|
||||
[<img alt="npm version" src="https://img.shields.io/npm/v/@csstools/selector-resolve-nested.svg" height="20">][npm-url]
|
||||
[<img alt="Build Status" src="https://github.com/csstools/postcss-plugins/actions/workflows/test.yml/badge.svg?branch=main" height="20">][cli-url]
|
||||
[<img alt="Discord" src="https://shields.io/badge/Discord-5865F2?logo=discord&logoColor=white">][discord]
|
||||
|
||||
## API
|
||||
|
||||
[Read the API docs](./docs/selector-resolve-nested.md)
|
||||
|
||||
## Usage
|
||||
|
||||
Add [Selector Resolve Nested] to your project:
|
||||
|
||||
```bash
|
||||
npm install @csstools/selector-resolve-nested --save-dev
|
||||
```
|
||||
|
||||
```js
|
||||
import { resolveNestedSelector } from '@csstools/selector-resolve-nested';
|
||||
import parser from 'postcss-selector-parser';
|
||||
|
||||
const a = parser().astSync('.foo &');
|
||||
const b = parser().astSync('.bar');
|
||||
|
||||
resolveNestedSelector(a, b); // '.foo .bar'
|
||||
```
|
||||
|
||||
[cli-url]: https://github.com/csstools/postcss-plugins/actions/workflows/test.yml?query=workflow/test
|
||||
[discord]: https://discord.gg/bUadyRwkJS
|
||||
[npm-url]: https://www.npmjs.com/package/@csstools/selector-resolve-nested
|
||||
[postcss]: https://github.com/postcss/postcss
|
||||
|
||||
[Selector Resolve Nested]: https://github.com/csstools/postcss-plugins/tree/main/packages/selector-resolve-nested
|
||||
1
node_modules/@csstools/selector-resolve-nested/dist/index.cjs
generated
vendored
Normal file
1
node_modules/@csstools/selector-resolve-nested/dist/index.cjs
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";var e=require("postcss-selector-parser");function sourceFrom(e){return{sourceIndex:e.sourceIndex??0,source:e.source}}function sortCompoundSelectorsInsideComplexSelector(o){const t=[];let r=[];o.each((o=>{if("combinator"===o.type)return t.push(r,[o]),void(r=[]);if(e.isPseudoElement(o))return t.push(r),void(r=[o]);if("universal"===o.type&&r.find((e=>"universal"===e.type)))o.remove();else{if("tag"===o.type&&r.find((e=>"tag"===e.type))){o.remove();const t=e.selector({value:"",...sourceFrom(o)});t.append(o);const n=e.pseudo({value:":is",...sourceFrom(o)});return n.append(t),void r.push(n)}r.push(o)}})),t.push(r);const n=[];for(let e=0;e<t.length;e++){const o=t[e];o.sort(((e,o)=>selectorTypeOrder(e)-selectorTypeOrder(o))),n.push(...o)}o.removeAll();for(let e=n.length-1;e>=0;e--)n[e].remove(),n[e].parent=o,o.nodes.unshift(n[e])}function selectorTypeOrder(t){return e.isPseudoElement(t)?o.pseudoElement:o[t.type]}const o={universal:0,tag:1,pseudoElement:2,nesting:3,id:4,class:5,attribute:6,pseudo:7,comment:8};function prepareParentSelectors(o,t=!1){if(t||!isCompoundSelector(o.nodes)){const t=e.pseudo({value:":is",...sourceFrom(o)});return o.nodes.forEach((e=>{t.append(e.clone())})),[t]}return o.nodes[0].nodes.map((e=>e.clone()))}function isCompoundSelector(o){return 1===o.length&&!o[0].nodes.some((o=>"combinator"===o.type||e.isPseudoElement(o)))}function combinationsWithSizeN(e,o){if(o<2)throw new Error("n must be greater than 1");if(e.length<2)throw new Error("s must be greater than 1");if(Math.pow(e.length,o)>1e4)throw new Error("Too many combinations when trying to resolve a nested selector with lists, reduce the complexity of your selectors");const t=[];for(let e=0;e<o;e++)t[e]=0;const r=[];for(;;){const n=[];for(let s=o-1;s>=0;s--){let o=t[s];if(o>=e.length){if(o=0,t[s]=0,0===s)return r;t[s-1]+=1}n[s]=e[o].clone()}r.push(n),t[t.length-1]++}}exports.flattenNestedSelector=function flattenNestedSelector(o,t){const r=[];for(let n=0;n<o.nodes.length;n++){const s=o.nodes[n].clone();let c,l=0;{let o=!1;s.walkNesting((()=>{o=!0,l++})),o?"combinator"===s.nodes[0]?.type&&(s.prepend(e.nesting({...sourceFrom(s)})),l++):(s.prepend(e.combinator({value:" ",...sourceFrom(s)})),s.prepend(e.nesting({...sourceFrom(s)})),l++)}let p=[];if(l>1&&t.nodes.length>1)p=combinationsWithSizeN(t.nodes,l),c=p.length;else{c=t.nodes.length;for(let e=0;e<t.nodes.length;e++){p.push([]);for(let o=0;o<l;o++)p[e].push(t.nodes[e].clone())}}for(let e=0;e<c;e++){let o=0;const t=s.clone();t.walkNesting((t=>{const r=p[e][o];o++,t.replaceWith(...r.nodes)})),r.push(t)}}const n=e.root({value:"",...sourceFrom(o)});return r.forEach((e=>{n.append(e)})),n},exports.resolveNestedSelector=function resolveNestedSelector(o,t,r){const n=[];for(let s=0;s<o.nodes.length;s++){const c=o.nodes[s].clone();if(!r?.ignoreImplicitNesting){let o=!1;c.walkNesting((()=>(o=!0,!1))),o?"combinator"===c.nodes[0]?.type&&c.prepend(e.nesting({...sourceFrom(c)})):(c.prepend(e.combinator({value:" ",...sourceFrom(c)})),c.prepend(e.nesting({...sourceFrom(c)})))}{const e=new Set;c.walkNesting((o=>{const r=o.parent;r&&(e.add(r),"pseudo"===r.parent?.type&&":has"===r.parent.value?.toLowerCase()?o.replaceWith(...prepareParentSelectors(t,!0)):o.replaceWith(...prepareParentSelectors(t)))}));for(const o of e)sortCompoundSelectorsInsideComplexSelector(o)}c.walk((e=>{"combinator"===e.type&&""!==e.value.trim()?(e.rawSpaceAfter=" ",e.rawSpaceBefore=" "):(e.rawSpaceAfter="",e.rawSpaceBefore="")})),n.push(c)}const s=e.root({value:"",...sourceFrom(o)});return n.forEach((e=>{s.append(e)})),s};
|
||||
55
node_modules/@csstools/selector-resolve-nested/dist/index.d.ts
generated
vendored
Normal file
55
node_modules/@csstools/selector-resolve-nested/dist/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
/**
|
||||
* Resolve nested selectors following the CSS nesting specification.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* ```js
|
||||
* import { resolveNestedSelector } from '@csstools/selector-resolve-nested';
|
||||
* import parser from 'postcss-selector-parser';
|
||||
*
|
||||
* const selector = parser().astSync('.foo &');
|
||||
* const parent = parser().astSync('.bar');
|
||||
*
|
||||
* // .foo .bar
|
||||
* console.log(
|
||||
* resolveNestedSelector(selector, parent).toString()
|
||||
* )
|
||||
* ```
|
||||
*
|
||||
* @packageDocumentation
|
||||
*/
|
||||
|
||||
import type { Root } from 'postcss-selector-parser';
|
||||
|
||||
/**
|
||||
* Flatten a nested selector against a given parent selector.
|
||||
*
|
||||
* ⚠️ This is not a method to generate the equivalent un-nested selector.
|
||||
* It is purely a method to construct a single selector AST that contains the parts of both the current and parent selector.
|
||||
* It will not have the correct specificity and it will not match the right elements when used as a selector.
|
||||
* It will not always serialize to a valid selector.
|
||||
*
|
||||
* @param selector - The selector to resolve.
|
||||
* @param parentSelector - The parent selector to resolve against.
|
||||
* @returns The resolved selector.
|
||||
*/
|
||||
export declare function flattenNestedSelector(selector: Root, parentSelector: Root): Root;
|
||||
|
||||
/**
|
||||
* Resolve a nested selector against a given parent selector.
|
||||
*
|
||||
* @param selector - The selector to resolve.
|
||||
* @param parentSelector - The parent selector to resolve against.
|
||||
* @param options - Change how resolving happens.
|
||||
* @returns The resolved selector.
|
||||
*/
|
||||
export declare function resolveNestedSelector(selector: Root, parentSelector: Root, options?: ResolveOptions): Root;
|
||||
|
||||
export declare interface ResolveOptions {
|
||||
/**
|
||||
* If implicit `&` selectors should be prepended to the selector before resolving
|
||||
*/
|
||||
ignoreImplicitNesting: boolean;
|
||||
}
|
||||
|
||||
export { }
|
||||
1
node_modules/@csstools/selector-resolve-nested/dist/index.mjs
generated
vendored
Normal file
1
node_modules/@csstools/selector-resolve-nested/dist/index.mjs
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import e from"postcss-selector-parser";function sourceFrom(e){return{sourceIndex:e.sourceIndex??0,source:e.source}}function sortCompoundSelectorsInsideComplexSelector(o){const t=[];let r=[];o.each((o=>{if("combinator"===o.type)return t.push(r,[o]),void(r=[]);if(e.isPseudoElement(o))return t.push(r),void(r=[o]);if("universal"===o.type&&r.find((e=>"universal"===e.type)))o.remove();else{if("tag"===o.type&&r.find((e=>"tag"===e.type))){o.remove();const t=e.selector({value:"",...sourceFrom(o)});t.append(o);const n=e.pseudo({value:":is",...sourceFrom(o)});return n.append(t),void r.push(n)}r.push(o)}})),t.push(r);const n=[];for(let e=0;e<t.length;e++){const o=t[e];o.sort(((e,o)=>selectorTypeOrder(e)-selectorTypeOrder(o))),n.push(...o)}o.removeAll();for(let e=n.length-1;e>=0;e--)n[e].remove(),n[e].parent=o,o.nodes.unshift(n[e])}function selectorTypeOrder(t){return e.isPseudoElement(t)?o.pseudoElement:o[t.type]}const o={universal:0,tag:1,pseudoElement:2,nesting:3,id:4,class:5,attribute:6,pseudo:7,comment:8};function resolveNestedSelector(o,t,r){const n=[];for(let s=0;s<o.nodes.length;s++){const c=o.nodes[s].clone();if(!r?.ignoreImplicitNesting){let o=!1;c.walkNesting((()=>(o=!0,!1))),o?"combinator"===c.nodes[0]?.type&&c.prepend(e.nesting({...sourceFrom(c)})):(c.prepend(e.combinator({value:" ",...sourceFrom(c)})),c.prepend(e.nesting({...sourceFrom(c)})))}{const e=new Set;c.walkNesting((o=>{const r=o.parent;r&&(e.add(r),"pseudo"===r.parent?.type&&":has"===r.parent.value?.toLowerCase()?o.replaceWith(...prepareParentSelectors(t,!0)):o.replaceWith(...prepareParentSelectors(t)))}));for(const o of e)sortCompoundSelectorsInsideComplexSelector(o)}c.walk((e=>{"combinator"===e.type&&""!==e.value.trim()?(e.rawSpaceAfter=" ",e.rawSpaceBefore=" "):(e.rawSpaceAfter="",e.rawSpaceBefore="")})),n.push(c)}const s=e.root({value:"",...sourceFrom(o)});return n.forEach((e=>{s.append(e)})),s}function prepareParentSelectors(o,t=!1){if(t||!isCompoundSelector(o.nodes)){const t=e.pseudo({value:":is",...sourceFrom(o)});return o.nodes.forEach((e=>{t.append(e.clone())})),[t]}return o.nodes[0].nodes.map((e=>e.clone()))}function isCompoundSelector(o){return 1===o.length&&!o[0].nodes.some((o=>"combinator"===o.type||e.isPseudoElement(o)))}function combinationsWithSizeN(e,o){if(o<2)throw new Error("n must be greater than 1");if(e.length<2)throw new Error("s must be greater than 1");if(Math.pow(e.length,o)>1e4)throw new Error("Too many combinations when trying to resolve a nested selector with lists, reduce the complexity of your selectors");const t=[];for(let e=0;e<o;e++)t[e]=0;const r=[];for(;;){const n=[];for(let s=o-1;s>=0;s--){let o=t[s];if(o>=e.length){if(o=0,t[s]=0,0===s)return r;t[s-1]+=1}n[s]=e[o].clone()}r.push(n),t[t.length-1]++}}function flattenNestedSelector(o,t){const r=[];for(let n=0;n<o.nodes.length;n++){const s=o.nodes[n].clone();let c,l=0;{let o=!1;s.walkNesting((()=>{o=!0,l++})),o?"combinator"===s.nodes[0]?.type&&(s.prepend(e.nesting({...sourceFrom(s)})),l++):(s.prepend(e.combinator({value:" ",...sourceFrom(s)})),s.prepend(e.nesting({...sourceFrom(s)})),l++)}let p=[];if(l>1&&t.nodes.length>1)p=combinationsWithSizeN(t.nodes,l),c=p.length;else{c=t.nodes.length;for(let e=0;e<t.nodes.length;e++){p.push([]);for(let o=0;o<l;o++)p[e].push(t.nodes[e].clone())}}for(let e=0;e<c;e++){let o=0;const t=s.clone();t.walkNesting((t=>{const r=p[e][o];o++,t.replaceWith(...r.nodes)})),r.push(t)}}const n=e.root({value:"",...sourceFrom(o)});return r.forEach((e=>{n.append(e)})),n}export{flattenNestedSelector,resolveNestedSelector};
|
||||
66
node_modules/@csstools/selector-resolve-nested/package.json
generated
vendored
Normal file
66
node_modules/@csstools/selector-resolve-nested/package.json
generated
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"name": "@csstools/selector-resolve-nested",
|
||||
"description": "Resolve nested CSS selectors",
|
||||
"version": "3.1.0",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Antonio Laguna",
|
||||
"email": "antonio@laguna.es",
|
||||
"url": "https://antonio.laguna.es"
|
||||
},
|
||||
{
|
||||
"name": "Romain Menke",
|
||||
"email": "romainmenke@gmail.com"
|
||||
}
|
||||
],
|
||||
"license": "MIT-0",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/csstools"
|
||||
},
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/csstools"
|
||||
}
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"type": "module",
|
||||
"main": "dist/index.cjs",
|
||||
"module": "dist/index.mjs",
|
||||
"exports": {
|
||||
".": {
|
||||
"import": {
|
||||
"types": "./dist/index.d.ts",
|
||||
"default": "./dist/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"default": "./dist/index.cjs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
"CHANGELOG.md",
|
||||
"LICENSE.md",
|
||||
"README.md",
|
||||
"dist"
|
||||
],
|
||||
"peerDependencies": {
|
||||
"postcss-selector-parser": "^7.0.0"
|
||||
},
|
||||
"scripts": {},
|
||||
"homepage": "https://github.com/csstools/postcss-plugins/tree/main/packages/selector-resolve-nested#readme",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/csstools/postcss-plugins.git",
|
||||
"directory": "packages/selector-resolve-nested"
|
||||
},
|
||||
"bugs": "https://github.com/csstools/postcss-plugins/issues",
|
||||
"keywords": [
|
||||
"css",
|
||||
"nested",
|
||||
"postcss-selector-parser"
|
||||
]
|
||||
}
|
||||
9
node_modules/@csstools/selector-specificity/CHANGELOG.md
generated
vendored
Normal file
9
node_modules/@csstools/selector-specificity/CHANGELOG.md
generated
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
# Changes to Selector Specificity
|
||||
|
||||
### 5.0.0
|
||||
|
||||
_October 23, 2024_
|
||||
|
||||
- Updated: `postcss-selector-parser`
|
||||
|
||||
[Full CHANGELOG](https://github.com/csstools/postcss-plugins/tree/main/packages/selector-specificity/CHANGELOG.md)
|
||||
18
node_modules/@csstools/selector-specificity/LICENSE.md
generated
vendored
Normal file
18
node_modules/@csstools/selector-specificity/LICENSE.md
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
MIT No Attribution (MIT-0)
|
||||
|
||||
Copyright © CSSTools 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.
|
||||
|
||||
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.
|
||||
57
node_modules/@csstools/selector-specificity/README.md
generated
vendored
Normal file
57
node_modules/@csstools/selector-specificity/README.md
generated
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
# Selector Specificity
|
||||
|
||||
[<img alt="npm version" src="https://img.shields.io/npm/v/@csstools/selector-specificity.svg" height="20">][npm-url]
|
||||
[<img alt="Build Status" src="https://github.com/csstools/postcss-plugins/workflows/test/badge.svg" height="20">][cli-url]
|
||||
[<img alt="Discord" src="https://shields.io/badge/Discord-5865F2?logo=discord&logoColor=white">][discord]
|
||||
|
||||
## Usage
|
||||
|
||||
Add [Selector Specificity] to your project:
|
||||
|
||||
```bash
|
||||
npm install @csstools/selector-specificity --save-dev
|
||||
```
|
||||
|
||||
```js
|
||||
import parser from 'postcss-selector-parser';
|
||||
import { selectorSpecificity } from '@csstools/selector-specificity';
|
||||
|
||||
const selectorAST = parser().astSync('#foo:has(> .foo)');
|
||||
const specificity = selectorSpecificity(selectorAST);
|
||||
|
||||
console.log(specificity.a); // 1
|
||||
console.log(specificity.b); // 1
|
||||
console.log(specificity.c); // 0
|
||||
```
|
||||
|
||||
_`selectorSpecificity` takes a single selector, not a list of selectors (not : `a, b, c`).
|
||||
To compare or otherwise manipulate lists of selectors you need to call `selectorSpecificity` on each part._
|
||||
|
||||
### Comparing
|
||||
|
||||
The package exports a utility function to compare two specificities.
|
||||
|
||||
```js
|
||||
import { selectorSpecificity, compare } from '@csstools/selector-specificity';
|
||||
|
||||
const s1 = selectorSpecificity(ast1);
|
||||
const s2 = selectorSpecificity(ast2);
|
||||
compare(s1, s2); // -1 | 0 | 1
|
||||
```
|
||||
|
||||
- if `s1 < s2` then `compare(s1, s2)` returns a negative number (`< 0`)
|
||||
- if `s1 > s2` then `compare(s1, s2)` returns a positive number (`> 0`)
|
||||
- if `s1 === s2` then `compare(s1, s2)` returns zero (`=== 0`)
|
||||
|
||||
## Prior Art
|
||||
|
||||
- [keeganstreet/specificity](https://github.com/keeganstreet/specificity)
|
||||
- [bramus/specificity](https://github.com/bramus/specificity)
|
||||
|
||||
For CSSTools we always use `postcss-selector-parser` and want to calculate specificity from this AST.
|
||||
|
||||
[cli-url]: https://github.com/csstools/postcss-plugins/actions/workflows/test.yml?query=workflow/test
|
||||
[discord]: https://discord.gg/bUadyRwkJS
|
||||
[npm-url]: https://www.npmjs.com/package/@csstools/selector-specificity
|
||||
|
||||
[Selector Specificity]: https://github.com/csstools/postcss-plugins/tree/main/packages/selector-specificity
|
||||
1
node_modules/@csstools/selector-specificity/dist/index.cjs
generated
vendored
Normal file
1
node_modules/@csstools/selector-specificity/dist/index.cjs
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";var e=require("postcss-selector-parser");function compare(e,t){return e.a===t.a?e.b===t.b?e.c-t.c:e.b-t.b:e.a-t.a}function selectorSpecificity(t,s){const i=s?.customSpecificity?.(t);if(i)return i;if(!t)return{a:0,b:0,c:0};let c=0,n=0,o=0;if("universal"==t.type)return{a:0,b:0,c:0};if("id"===t.type)c+=1;else if("tag"===t.type)o+=1;else if("class"===t.type)n+=1;else if("attribute"===t.type)n+=1;else if(isPseudoElement(t))switch(t.value.toLowerCase()){case"::slotted":if(o+=1,t.nodes&&t.nodes.length>0){const e=specificityOfMostSpecificListItem(t.nodes,s);c+=e.a,n+=e.b,o+=e.c}break;case"::view-transition-group":case"::view-transition-image-pair":case"::view-transition-old":case"::view-transition-new":return t.nodes&&1===t.nodes.length&&"selector"===t.nodes[0].type&&selectorNodeContainsNothingOrOnlyUniversal(t.nodes[0])?{a:0,b:0,c:0}:{a:0,b:0,c:1};default:o+=1}else if(e.isPseudoClass(t))switch(t.value.toLowerCase()){case":-webkit-any":case":any":default:n+=1;break;case":-moz-any":case":has":case":is":case":matches":case":not":if(t.nodes&&t.nodes.length>0){const e=specificityOfMostSpecificListItem(t.nodes,s);c+=e.a,n+=e.b,o+=e.c}break;case":where":break;case":nth-child":case":nth-last-child":if(n+=1,t.nodes&&t.nodes.length>0){const i=t.nodes[0].nodes.findIndex((e=>"tag"===e.type&&"of"===e.value.toLowerCase()));if(i>-1){const a=e.selector({nodes:[],value:""});t.nodes[0].nodes.slice(i+1).forEach((e=>{a.append(e.clone())}));const r=[a];t.nodes.length>1&&r.push(...t.nodes.slice(1));const l=specificityOfMostSpecificListItem(r,s);c+=l.a,n+=l.b,o+=l.c}}break;case":local":case":global":t.nodes&&t.nodes.length>0&&t.nodes.forEach((e=>{const t=selectorSpecificity(e,s);c+=t.a,n+=t.b,o+=t.c}));break;case":host":case":host-context":if(n+=1,t.nodes&&t.nodes.length>0){const e=specificityOfMostSpecificListItem(t.nodes,s);c+=e.a,n+=e.b,o+=e.c}break;case":active-view-transition":case":active-view-transition-type":return{a:0,b:1,c:0}}else e.isContainer(t)&&t.nodes?.length>0&&t.nodes.forEach((e=>{const t=selectorSpecificity(e,s);c+=t.a,n+=t.b,o+=t.c}));return{a:c,b:n,c:o}}function specificityOfMostSpecificListItem(e,t){let s={a:0,b:0,c:0};return e.forEach((e=>{const i=selectorSpecificity(e,t);compare(i,s)<0||(s=i)})),s}function isPseudoElement(t){return e.isPseudoElement(t)}function selectorNodeContainsNothingOrOnlyUniversal(e){if(!e)return!1;if(!e.nodes)return!1;const t=e.nodes.filter((e=>"comment"!==e.type));return 0===t.length||1===t.length&&"universal"===t[0].type}exports.compare=compare,exports.selectorSpecificity=selectorSpecificity,exports.specificityOfMostSpecificListItem=specificityOfMostSpecificListItem;
|
||||
58
node_modules/@csstools/selector-specificity/dist/index.d.ts
generated
vendored
Normal file
58
node_modules/@csstools/selector-specificity/dist/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
import type { Node } from 'postcss-selector-parser';
|
||||
|
||||
/**
|
||||
* Options for the calculation of the specificity of a selector
|
||||
*/
|
||||
export declare type CalculationOptions = {
|
||||
/**
|
||||
* The callback to calculate a custom specificity for a node
|
||||
*/
|
||||
customSpecificity?: CustomSpecificityCallback;
|
||||
};
|
||||
|
||||
/**
|
||||
* Compare two specificities
|
||||
* @param s1 The first specificity
|
||||
* @param s2 The second specificity
|
||||
* @returns A value smaller than `0` if `s1` is less specific than `s2`, `0` if `s1` is equally specific as `s2`, a value larger than `0` if `s1` is more specific than `s2`
|
||||
*/
|
||||
export declare function compare(s1: Specificity, s2: Specificity): number;
|
||||
|
||||
/**
|
||||
* Calculate a custom specificity for a node
|
||||
*/
|
||||
export declare type CustomSpecificityCallback = (node: Node) => Specificity | void | false | null | undefined;
|
||||
|
||||
/**
|
||||
* Calculate the specificity for a selector
|
||||
*/
|
||||
export declare function selectorSpecificity(node: Node, options?: CalculationOptions): Specificity;
|
||||
|
||||
/**
|
||||
* The specificity of a selector
|
||||
*/
|
||||
export declare type Specificity = {
|
||||
/**
|
||||
* The number of ID selectors in the selector
|
||||
*/
|
||||
a: number;
|
||||
/**
|
||||
* The number of class selectors, attribute selectors, and pseudo-classes in the selector
|
||||
*/
|
||||
b: number;
|
||||
/**
|
||||
* The number of type selectors and pseudo-elements in the selector
|
||||
*/
|
||||
c: number;
|
||||
};
|
||||
|
||||
/**
|
||||
* Calculate the most specific selector in a list
|
||||
*/
|
||||
export declare function specificityOfMostSpecificListItem(nodes: Array<Node>, options?: CalculationOptions): {
|
||||
a: number;
|
||||
b: number;
|
||||
c: number;
|
||||
};
|
||||
|
||||
export { }
|
||||
1
node_modules/@csstools/selector-specificity/dist/index.mjs
generated
vendored
Normal file
1
node_modules/@csstools/selector-specificity/dist/index.mjs
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import e from"postcss-selector-parser";function compare(e,t){return e.a===t.a?e.b===t.b?e.c-t.c:e.b-t.b:e.a-t.a}function selectorSpecificity(t,s){const i=s?.customSpecificity?.(t);if(i)return i;if(!t)return{a:0,b:0,c:0};let c=0,n=0,o=0;if("universal"==t.type)return{a:0,b:0,c:0};if("id"===t.type)c+=1;else if("tag"===t.type)o+=1;else if("class"===t.type)n+=1;else if("attribute"===t.type)n+=1;else if(isPseudoElement(t))switch(t.value.toLowerCase()){case"::slotted":if(o+=1,t.nodes&&t.nodes.length>0){const e=specificityOfMostSpecificListItem(t.nodes,s);c+=e.a,n+=e.b,o+=e.c}break;case"::view-transition-group":case"::view-transition-image-pair":case"::view-transition-old":case"::view-transition-new":return t.nodes&&1===t.nodes.length&&"selector"===t.nodes[0].type&&selectorNodeContainsNothingOrOnlyUniversal(t.nodes[0])?{a:0,b:0,c:0}:{a:0,b:0,c:1};default:o+=1}else if(e.isPseudoClass(t))switch(t.value.toLowerCase()){case":-webkit-any":case":any":default:n+=1;break;case":-moz-any":case":has":case":is":case":matches":case":not":if(t.nodes&&t.nodes.length>0){const e=specificityOfMostSpecificListItem(t.nodes,s);c+=e.a,n+=e.b,o+=e.c}break;case":where":break;case":nth-child":case":nth-last-child":if(n+=1,t.nodes&&t.nodes.length>0){const i=t.nodes[0].nodes.findIndex((e=>"tag"===e.type&&"of"===e.value.toLowerCase()));if(i>-1){const a=e.selector({nodes:[],value:""});t.nodes[0].nodes.slice(i+1).forEach((e=>{a.append(e.clone())}));const r=[a];t.nodes.length>1&&r.push(...t.nodes.slice(1));const l=specificityOfMostSpecificListItem(r,s);c+=l.a,n+=l.b,o+=l.c}}break;case":local":case":global":t.nodes&&t.nodes.length>0&&t.nodes.forEach((e=>{const t=selectorSpecificity(e,s);c+=t.a,n+=t.b,o+=t.c}));break;case":host":case":host-context":if(n+=1,t.nodes&&t.nodes.length>0){const e=specificityOfMostSpecificListItem(t.nodes,s);c+=e.a,n+=e.b,o+=e.c}break;case":active-view-transition":case":active-view-transition-type":return{a:0,b:1,c:0}}else e.isContainer(t)&&t.nodes?.length>0&&t.nodes.forEach((e=>{const t=selectorSpecificity(e,s);c+=t.a,n+=t.b,o+=t.c}));return{a:c,b:n,c:o}}function specificityOfMostSpecificListItem(e,t){let s={a:0,b:0,c:0};return e.forEach((e=>{const i=selectorSpecificity(e,t);compare(i,s)<0||(s=i)})),s}function isPseudoElement(t){return e.isPseudoElement(t)}function selectorNodeContainsNothingOrOnlyUniversal(e){if(!e)return!1;if(!e.nodes)return!1;const t=e.nodes.filter((e=>"comment"!==e.type));return 0===t.length||1===t.length&&"universal"===t[0].type}export{compare,selectorSpecificity,specificityOfMostSpecificListItem};
|
||||
66
node_modules/@csstools/selector-specificity/package.json
generated
vendored
Normal file
66
node_modules/@csstools/selector-specificity/package.json
generated
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"name": "@csstools/selector-specificity",
|
||||
"description": "Determine selector specificity with postcss-selector-parser",
|
||||
"version": "5.0.0",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Antonio Laguna",
|
||||
"email": "antonio@laguna.es",
|
||||
"url": "https://antonio.laguna.es"
|
||||
},
|
||||
{
|
||||
"name": "Romain Menke",
|
||||
"email": "romainmenke@gmail.com"
|
||||
}
|
||||
],
|
||||
"license": "MIT-0",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/csstools"
|
||||
},
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/csstools"
|
||||
}
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"type": "module",
|
||||
"main": "dist/index.cjs",
|
||||
"module": "dist/index.mjs",
|
||||
"exports": {
|
||||
".": {
|
||||
"import": {
|
||||
"types": "./dist/index.d.ts",
|
||||
"default": "./dist/index.mjs"
|
||||
},
|
||||
"require": {
|
||||
"default": "./dist/index.cjs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
"CHANGELOG.md",
|
||||
"LICENSE.md",
|
||||
"README.md",
|
||||
"dist"
|
||||
],
|
||||
"peerDependencies": {
|
||||
"postcss-selector-parser": "^7.0.0"
|
||||
},
|
||||
"scripts": {},
|
||||
"homepage": "https://github.com/csstools/postcss-plugins/tree/main/packages/selector-specificity#readme",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/csstools/postcss-plugins.git",
|
||||
"directory": "packages/selector-specificity"
|
||||
},
|
||||
"bugs": "https://github.com/csstools/postcss-plugins/issues",
|
||||
"keywords": [
|
||||
"css",
|
||||
"postcss-selector-parser",
|
||||
"specificity"
|
||||
]
|
||||
}
|
||||
21
node_modules/@marp-team/marp-cli/LICENSE
generated
vendored
Normal file
21
node_modules/@marp-team/marp-cli/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2018 Marp team (marp-team@marp.app)
|
||||
|
||||
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.
|
||||
838
node_modules/@marp-team/marp-cli/README.md
generated
vendored
Normal file
838
node_modules/@marp-team/marp-cli/README.md
generated
vendored
Normal file
@@ -0,0 +1,838 @@
|
||||
# @marp-team/marp-cli
|
||||
|
||||
[](https://circleci.com/gh/marp-team/marp-cli/)
|
||||
[](https://github.com/marp-team/marp-cli/actions?query=workflow%3A%22Test+for+Windows%22+branch%3Amain)
|
||||
[](https://codecov.io/gh/marp-team/marp-cli)
|
||||
[](https://www.npmjs.com/package/@marp-team/marp-cli)
|
||||
[](https://hub.docker.com/r/marpteam/marp-cli/)
|
||||
[](./LICENSE)
|
||||
|
||||
**A CLI interface, for [Marp](https://github.com/marp-team/marp)** (using [@marp-team/marp-core](https://github.com/marp-team/marp-core)) and any slide deck converter based on [Marpit](https://marpit.marp.app/) framework.
|
||||
|
||||
It can convert Marp / Marpit Markdown files into static HTML / CSS, PDF, PowerPoint document, and image(s) easily.
|
||||
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/marp-team/marp-cli/main/docs/images/marp-cli.gif" />
|
||||
</p>
|
||||
|
||||
## Try it now!
|
||||
|
||||
### npx
|
||||
|
||||
[npx (`npm exec`)](https://docs.npmjs.com/cli/commands/npx) is the best way to use the latest Marp CLI if you wanted
|
||||
one-shot Markdown conversion _without install_. Just run below if you have
|
||||
installed [Node.js](https://nodejs.org/) v18 and later.
|
||||
|
||||
```bash
|
||||
# Convert slide deck into HTML
|
||||
npx @marp-team/marp-cli@latest slide-deck.md
|
||||
npx @marp-team/marp-cli@latest slide-deck.md -o output.html
|
||||
|
||||
# Convert slide deck into PDF
|
||||
npx @marp-team/marp-cli@latest slide-deck.md --pdf
|
||||
npx @marp-team/marp-cli@latest slide-deck.md -o output.pdf
|
||||
|
||||
# Convert slide deck into PowerPoint document (PPTX)
|
||||
npx @marp-team/marp-cli@latest slide-deck.md --pptx
|
||||
npx @marp-team/marp-cli@latest slide-deck.md -o output.pptx
|
||||
|
||||
# Watch mode
|
||||
npx @marp-team/marp-cli@latest -w slide-deck.md
|
||||
|
||||
# Server mode (Pass directory to serve)
|
||||
npx @marp-team/marp-cli@latest -s ./slides
|
||||
```
|
||||
|
||||
> [!IMPORTANT]
|
||||
> You have to install any one of [Google Chrome], [Microsoft Edge], or [Mozilla Firefox] to convert slide deck into PDF, PPTX, and image(s).
|
||||
|
||||
[google chrome]: https://www.google.com/chrome/
|
||||
[microsoft edge]: https://www.microsoft.com/edge
|
||||
[mozilla firefox]: https://www.mozilla.org/firefox/new/
|
||||
|
||||
### Container image
|
||||
|
||||
Don't you like installing Node.js and Chrome to local? We have an official container image that is ready to use CLI.
|
||||
|
||||
[**⏩ Please refer how to use at Docker Hub.**][marp-cli-docker]
|
||||
|
||||
[marp-cli-docker]: https://hub.docker.com/r/marpteam/marp-cli/
|
||||
|
||||
#### [Docker Hub][marp-cli-docker]
|
||||
|
||||
```bash
|
||||
docker pull marpteam/marp-cli
|
||||
```
|
||||
|
||||
#### [GitHub Container Registry](https://github.com/marp-team/marp-cli/pkgs/container/marp-cli)
|
||||
|
||||
```bash
|
||||
docker pull ghcr.io/marp-team/marp-cli
|
||||
```
|
||||
|
||||
## Install
|
||||
|
||||
### Use package manager
|
||||
|
||||
You can use the package manager to install and update Marp CLI easily.
|
||||
|
||||
_Disclaimer: Package manifests are maintained by the community, not Marp team._
|
||||
|
||||
<!-- For contributors: This section describes only package managers that Marp manifest has been actively maintained. Each tools are following update within a few days of the latest CLI update. -->
|
||||
|
||||
#### macOS: **[Homebrew](https://brew.sh/)**
|
||||
|
||||
```bash
|
||||
brew install marp-cli
|
||||
```
|
||||
|
||||
<!-- https://github.com/Homebrew/homebrew-core/blob/master/Formula/m/marp-cli.rb -->
|
||||
|
||||
#### Windows: **[Scoop](https://scoop.sh/)**
|
||||
|
||||
```cmd
|
||||
scoop install marp
|
||||
```
|
||||
|
||||
<!-- https://github.com/ScoopInstaller/Main/blob/master/bucket/marp.json -->
|
||||
|
||||
### Local installation
|
||||
|
||||
We recommend to install Marp CLI into your Node.js project. You may control the CLI version (and engine if you want) exactly.
|
||||
|
||||
```bash
|
||||
npm install --save-dev @marp-team/marp-cli
|
||||
```
|
||||
|
||||
The installed `marp` command is available in [npm-scripts](https://docs.npmjs.com/misc/scripts) or `npx marp`.
|
||||
|
||||
> [!NOTE]
|
||||
> Marp CLI is working only with [actively supported Node.js versions](https://endoflife.date/nodejs), so Node.js v18 and later is required when installing into your Node.js project.
|
||||
|
||||
#### Global installation
|
||||
|
||||
You can install with `-g` option if you want to use `marp` command globally.
|
||||
|
||||
```bash
|
||||
npm install -g @marp-team/marp-cli
|
||||
```
|
||||
|
||||
### [Standalone binary][releases]
|
||||
|
||||
We also provide standalone binaries for Linux, macOS (Apple Silicon), and Windows. These have bundled Marp CLI with Node.js binary, so no need to install Node.js separately.
|
||||
|
||||
**[⏩ Download the latest standalone binary from release page.][releases]**
|
||||
|
||||
[releases]: https://github.com/marp-team/marp-cli/releases
|
||||
|
||||
## Basic usage
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Several kind of conversions with 🌐 icon require to install any of compatible browsers, [Google Chrome], [Microsoft Edge], or [Mozilla Firefox]. When an unexpected problem has occurred while converting, please update your browser to the latest version. Check out [browser options](#browser-options) too.
|
||||
|
||||
### Convert to HTML
|
||||
|
||||
The passed markdown will be converted to HTML file by default. In the below example, a converted `slide-deck.html` will output to the same directory.
|
||||
|
||||
```bash
|
||||
marp slide-deck.md
|
||||
```
|
||||
|
||||
You can change the output path by `--output` (`-o`) option.
|
||||
|
||||
```bash
|
||||
marp slide-deck.md -o output.html
|
||||
```
|
||||
|
||||
Marp CLI supports converting multiple files by passing multiple paths, directories, and glob patterns. In this case, `--output` option cannot use.
|
||||
|
||||
When you want to output the converted result to another directory with keeping the origin directory structure, you can use `--input-dir` (`-I`) option. `--output` option would be available for specify the output directory.
|
||||
|
||||
### Convert to PDF (`--pdf`) 🌐
|
||||
|
||||
If you passed `--pdf` option or the output filename specified by `--output` (`-o`) option ends with `.pdf`, Marp CLI will try to convert Markdown into PDF file through the browser.
|
||||
|
||||
```bash
|
||||
marp --pdf slide-deck.md
|
||||
marp slide-deck.md -o converted.pdf
|
||||
```
|
||||
|
||||
#### PDF output options
|
||||
|
||||
- **`--pdf-notes`**: Add PDF note annotations to the lower left when the slide page has [Marpit presenter notes].
|
||||
- **`--pdf-outlines`**: Add PDF outlines/bookmarks.
|
||||
|
||||
`--pdf-outlines` will make outlines based on slide pages and Markdown headings by default. If necessary, you may prevent making outlines from one of them, by setting `--pdf-outlines.pages=false` or `--pdf-outlines.headings=false`.
|
||||
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/marp-team/marp-cli/main/docs/images/pdf-output-options.png" width="500" />
|
||||
</p>
|
||||
|
||||
[marpit presenter notes]: https://marpit.marp.app/usage?id=presenter-notes
|
||||
|
||||
### Convert to PowerPoint document (`--pptx`) 🌐
|
||||
|
||||
Do you want more familiar way to present and share your deck? PPTX conversion to create PowerPoint document is available by passing `--pptx` option or specify the output path with PPTX extension.
|
||||
|
||||
```bash
|
||||
marp --pptx slide-deck.md
|
||||
marp slide-deck.md -o converted.pptx
|
||||
```
|
||||
|
||||
A created PPTX includes rendered Marp slide pages and the support of [Marpit presenter notes]. It can open with PowerPoint, Keynote, Google Slides, LibreOffice Impress, and so on...
|
||||
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/marp-team/marp-cli/main/docs/images/pptx.png" height="300" />
|
||||
</p>
|
||||
|
||||
#### _[EXPERIMENTAL]_ Generate editable pptx (`--pptx-editable`)
|
||||
|
||||
A converted PPTX usually consists of pre-rendered background images, that is meaning **contents cannot to modify or re-use** in PowerPoint. If you want to generate editable PPTX for modifying texts, shapes, and images in GUI, you can pass `--pptx-editable` option together with `--pptx` option.
|
||||
|
||||
```bash
|
||||
marp --pptx --pptx-editable slide-deck.md
|
||||
```
|
||||
|
||||
> [!IMPORTANT]
|
||||
>
|
||||
> The experimental `--pptx-editable` option requires installing both of the browser and [LibreOffice Impress](https://www.libreoffice.org/).
|
||||
>
|
||||
> If the theme and inline styles are providing complex styles into the slide, **`--pptx-editable` may throw an error or output the incomplete result.** (e.g. `gaia` theme in Marp Core)
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> Conversion to the editable PPTX results in **lower slide reproducibility compared to the conversion into regular PPTX and other formats.** Additionally, **presenter notes are not supported.** _We do not recommend to export the editable PPTX if maintaining the slide's appearance is important._
|
||||
|
||||
### Convert to PNG/JPEG image(s) 🌐
|
||||
|
||||
#### Multiple images (`--images`)
|
||||
|
||||
You can convert the slide deck into multiple images when specified `--images [png|jpeg]` option.
|
||||
|
||||
```bash
|
||||
# Convert into multiple PNG image files
|
||||
marp --images png slide-deck.md
|
||||
|
||||
# Convert into multiple JPEG image files
|
||||
marp --images jpeg slide-deck.md
|
||||
```
|
||||
|
||||
Output files have a suffix of page number, like `slide-deck.001.png`, `slide-deck.002.png`, and so on.
|
||||
|
||||
#### Title slide (`--image`)
|
||||
|
||||
When you passed `--image` option or specified the output path with PNG/JPEG extension, Marp CLI will convert _only the first page (title slide)_ of the targeted slide deck into an image.
|
||||
|
||||
```bash
|
||||
# Convert the title slide into an image
|
||||
marp --image png slide-deck.md
|
||||
marp slide-deck.md -o output.png
|
||||
```
|
||||
|
||||
It would be useful for creating [Open Graph] image that can specify with [`image` global directive and `--og-image` option](#metadata).
|
||||
|
||||
#### Scale factor
|
||||
|
||||
You can set the scale factor for rendered image(s) through `--image-scale` option. It is useful for making high-resolution image from the slide.
|
||||
|
||||
```bash
|
||||
# Generate high-resolution image of the title slide
|
||||
marp slide-deck.md -o title-slide@2x.png --image-scale 2
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> `--image-scale` is not affect to the actual size of presentation.
|
||||
>
|
||||
> The scale factor is also available for PPTX conversion. By default, Marp CLI will use `2` as the default scale factor in PPTX, to suppress deterioration of slide rendering in full-screen presentation.
|
||||
|
||||
### Export presenter notes (`--notes`)
|
||||
|
||||
You can export [presenter notes][marpit presenter notes] in Marp / Marpit Markdown as a text file by using `--notes` option or specifying the output path with TXT extension.
|
||||
|
||||
```bash
|
||||
# Export presenter notes as a text
|
||||
marp --notes slide-deck.md
|
||||
marp slide-deck.md -o output.txt
|
||||
```
|
||||
|
||||
### Security about local files
|
||||
|
||||
Because of [the security reason](https://github.com/marp-team/marp-cli/pull/10#user-content-security), **conversion that is using the browser cannot use local files by default.**
|
||||
|
||||
Marp CLI would output incomplete result with warning if the blocked local file accessing is detected. We recommend uploading your assets to online.
|
||||
|
||||
If you really need to use local files in these conversion, `--allow-local-files` option helps to find your local files. _Please use only to the trusted Markdown because there is a potential security risk._
|
||||
|
||||
```bash
|
||||
marp --pdf --allow-local-files slide-deck.md
|
||||
```
|
||||
|
||||
## Conversion modes
|
||||
|
||||
### Parallelism
|
||||
|
||||
When converting multiple files, Marp CLI will process them in parallel with 5 concurrency by default. You can set the number of concurrency by `--parallel` (`-P`) option, or disable parallelism by `--no-parallel`.
|
||||
|
||||
### Watch mode (`--watch` / `-w`) <a name="watch-mode"></a>
|
||||
|
||||
Marp CLI will observe a change of Markdown and using theme CSS when passed with `--watch` (`-w`) option. The conversion will be triggered whenever the content of file is updated.
|
||||
|
||||
While you are opening the converted HTML in browser, it would refresh the opened page automatically.
|
||||
|
||||
### Server mode (`--server` / `-s`)
|
||||
|
||||
Server mode supports on-demand conversion by HTTP request. We require to pass `--server` (`-s`) option and a directory to serve.
|
||||
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/marp-team/marp-cli/main/docs/images/server-mode.gif" />
|
||||
</p>
|
||||
|
||||
In this mode, the converted file outputs as the result of accessing to server, and not to disk.
|
||||
|
||||
You would get the converted PDF, PPTX, PNG, JPEG, and TXT by adding corresponded query string when requesting. e.g. `http://localhost:8080/deck-a.md?pdf` returns converted PDF.
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> You can set the server port by setting the environment variable `PORT`. For example, `PORT=5000 marp -s ./slides` would listen on port number 5000.
|
||||
|
||||
#### `index.md` / `PITCHME.md`
|
||||
|
||||
Marp CLI server will provide the list of served files by default, but you can place the default Markdown deck like a common web server's `index.html`.
|
||||
|
||||
Place Markdown named `index.md` or `PITCHME.md` ([GitPitch style](https://gitpitch.github.io/gitpitch/#/conventions/pitchme-md)) to served directory. It would be redirected just accessing to `http://localhost:8080/`.
|
||||
|
||||
### Preview window (`--preview` / `-p`)
|
||||
|
||||
When conversions were executed together with `--preview` (`-p`) option, Marp CLI will open preview window(s) to check the converted result immediately.
|
||||
|
||||
Unlike opening with browser, you may present deck with the immersive window.
|
||||
[Watch mode](#watch-mode) is automatically enabled while using preview window.
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> `--preview` option cannot use when you are using Marp CLI through official Docker image.
|
||||
|
||||
## Browser options
|
||||
|
||||
### Choose browser (`--browser`)
|
||||
|
||||
You can specify the kind of browser for conversion by `--browser` option. Available browsers are `chrome`, `edge`, and `firefox`. If set comma-separated browsers, Marp CLI will try to use the first available browser among them.
|
||||
|
||||
```bash
|
||||
# Use Firefox for image conversion
|
||||
marp --browser firefox ./slide.md -o slide.png
|
||||
|
||||
# Prefer to use Firefox first, then Chrome
|
||||
marp --browser firefox,chrome ./slide.md -o slide.png
|
||||
```
|
||||
|
||||
The default is a special value `auto`, which means to use the first available browser from `chrome,edge,firefox`.
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> _Firefox support is still early stage._ The PDF output generated by Firefox may include some incompatible renderings compared to the PDF generated by Chrome.
|
||||
|
||||
### Browser path (`--browser-path`)
|
||||
|
||||
If you have a browser binary that cannot find out by Marp CLI automatically, you can explicitly set the path to the browser executable through `--browser-path` option.
|
||||
|
||||
```bash
|
||||
# Use Chromium-flavored browser (Chromium, Brave, Vivaldi, etc...)
|
||||
marp --browser-path /path/to/chromium-flavored-browser ./slide.md -o slide.pdf
|
||||
|
||||
# Use Firefox with explicitly set path
|
||||
marp --browser firefox --browser-path /path/to/firefox ./slide.md -o slide.png
|
||||
```
|
||||
|
||||
### Other browser options
|
||||
|
||||
- **`--browser-protocol`**: Set the preferred protocol for connecting to the browser.
|
||||
- `cdp`: [Chrome DevTools Protocol][cdp] (default)
|
||||
- `webdriver-bidi`: [WebDriver BiDi]
|
||||
- **`--browser-timeout`**: Set the timeout for each browser operation in seconds. (default: `30` seconds)
|
||||
|
||||
[cdp]: https://chromedevtools.github.io/devtools-protocol/
|
||||
[webdriver bidi]: https://w3c.github.io/webdriver-bidi/
|
||||
|
||||
## Template
|
||||
|
||||
You can choose a built-in HTML templates by `--template` option. Default template is `bespoke`.
|
||||
|
||||
```bash
|
||||
marp --template bespoke slide-deck.md
|
||||
```
|
||||
|
||||
### `bespoke` template (default)
|
||||
|
||||
The `bespoke` template is using [Bespoke.js](https://github.com/bespokejs/bespoke) as the name implies. It has several features to be useful in a real presentation. A few features may control by CLI options.
|
||||
|
||||
#### Features
|
||||
|
||||
- **Navigation**: Navigate the deck through keyboard and swipe geasture.
|
||||
- **Fullscreen**: Toggle fullscreen by hitting <kbd>f</kbd> / <kbd>F11</kbd> key.
|
||||
- **On-screen controller**: There is a touch-friendly OSC. You may also disable by `--bespoke.osc=false` if unnecessary.
|
||||
- **Fragmented list**: Recognize [Marpit's fragmented list](https://github.com/marp-team/marpit/issues/145) and appear list one-by-one if used `*` and `1)` as the bullet marker.
|
||||
- **Presenter view**: Open presenter view in external window by hitting <kbd>p</kbd> key. (It may become disabled when not fulfilled requirements for working)
|
||||
- **Progress bar** (optional): By setting `--bespoke.progress` option, you can add a progress bar on the top of the deck.
|
||||
- [**Slide transitions**][transitions]: Support transitions (`transition` local directive) powered by [View Transition API].
|
||||
|
||||
[transitions]: ./docs/bespoke-transitions/README.md
|
||||
[view transition api]: https://www.w3.org/TR/css-view-transitions-1/
|
||||
|
||||
#### Docs
|
||||
|
||||
- **[Slide transitions in `bespoke` template][transitions]**<br />
|
||||
Learn all about of slide transitions for `bespoke` template: Built-in transitions, custom transitions, and morphing animations.
|
||||
|
||||
<p align="center">
|
||||
<a href="./docs/bespoke-transitions/README.md">
|
||||
<img src="https://raw.githubusercontent.com/marp-team/marp-cli/main/docs/bespoke-transitions/images/morphing-animation.gif" width="320" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
### `bare` template
|
||||
|
||||
The `bare` template is a primitive template, and there is no extra features. It only has minimum assets to give your presentation with browser.
|
||||
|
||||
#### Zero-JS slide deck
|
||||
|
||||
When [the conversion engine is changed to Marpit framework by setting `engine` option](#use-marpit-framework), _it would not use any scripts._ Even then, it has enough to use for the browser-based presentation.
|
||||
|
||||
```bash
|
||||
marp --template bare --engine @marp-team/marpit slide-deck.md
|
||||
```
|
||||
|
||||
## Metadata
|
||||
|
||||
Through [global directives] or CLI options, you can set metadata for a converted HTML, PDF, and PPTX slide deck.
|
||||
|
||||
| [Global directives] | CLI option | Description | Available in |
|
||||
| :-----------------: | :-------------: | :------------------------------ | :-------------- |
|
||||
| `title` | `--title` | Define title of the slide deck | HTML, PDF, PPTX |
|
||||
| `description` | `--description` | Define description of the slide | HTML, PDF, PPTX |
|
||||
| `author` | `--author` | Define author of the slide deck | HTML, PDF, PPTX |
|
||||
| `keywords` | `--keywords` | Define comma-separated keywords | HTML, PDF |
|
||||
| `url` | `--url` | Define [canonical URL] | HTML |
|
||||
| `image` | `--og-image` | Define [Open Graph] image URL | HTML |
|
||||
|
||||
[canonical url]: https://en.wikipedia.org/wiki/Canonical_link_element
|
||||
[open graph]: http://ogp.me/
|
||||
|
||||
When a title was not defined, Marp CLI may assign the title from the first heading of Markdown automatically. If not wanted this detection, specify the title as empty string `""`.
|
||||
|
||||
### By [global directives]
|
||||
|
||||
Marp CLI supports _additional [global directives]_ to specify metadata in Markdown. You can define meta values in Markdown front-matter.
|
||||
|
||||
```markdown
|
||||
---
|
||||
title: Marp slide deck
|
||||
description: An example slide deck created by Marp CLI
|
||||
author: Yuki Hattori
|
||||
keywords: marp,marp-cli,slide
|
||||
url: https://marp.app/
|
||||
image: https://marp.app/og-image.jpg
|
||||
---
|
||||
|
||||
# Marp slide deck
|
||||
```
|
||||
|
||||
[global directives]: https://marpit.marp.app/directives?id=global-directives-1
|
||||
|
||||
### By CLI option
|
||||
|
||||
Marp CLI prefers CLI option to global directives. You can override metadata values by `--title`, `--description`, `--author`, `--keywords`, `--url`, and `--og-image`.
|
||||
|
||||
## Theme
|
||||
|
||||
### Override theme
|
||||
|
||||
You can override theme you want to use by `--theme` option. For example to use [Gaia](https://github.com/marp-team/marp-core/tree/main/themes#gaia) built-in theme in Marp Core:
|
||||
|
||||
```bash
|
||||
marp --theme gaia
|
||||
```
|
||||
|
||||
### Use custom theme
|
||||
|
||||
A custom theme created by user also can use easily by passing the path of CSS file.
|
||||
|
||||
```bash
|
||||
marp --theme custom-theme.css
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> [Marpit theme CSS requires `@theme` meta comment](https://marpit.marp.app/theme-css?id=metadata) in regular use, but it's not required in this usage.
|
||||
|
||||
### Theme set
|
||||
|
||||
`--theme-set` option has to specify theme set composed by multiple theme CSS files. The registered themes are usable in [Marpit's `theme` directive](https://marpit.marp.app/directives?id=theme).
|
||||
|
||||
```bash
|
||||
# Multiple theme CSS files
|
||||
marp --theme-set theme-a.css theme-b.css theme-c.css -- deck-a.md deck-b.md
|
||||
|
||||
# Theme directory
|
||||
marp --theme-set ./themes -- deck.md
|
||||
```
|
||||
|
||||
## Engine
|
||||
|
||||
Marp CLI is calling the [Marpit framework](https://marpit.marp.app/) based converter as "Engine". Normally we use the bundled [Marp Core](https://github.com/marp-team/marp-core), but you may swap the conversion engine to another Marpit based engine through `--engine` option.
|
||||
|
||||
You can use Marp (and compatible markdown-it) plugins while converting, or completely swap the converter to the other Marpit-based engine which published to npm.
|
||||
|
||||
### Use Marpit framework
|
||||
|
||||
For example, you can convert Markdown with using the pure Marpit framework.
|
||||
|
||||
```bash
|
||||
# Install Marpit framework
|
||||
npm i @marp-team/marpit
|
||||
|
||||
# Specify engine to use Marpit
|
||||
marp --engine @marp-team/marpit marpit-deck.md
|
||||
```
|
||||
|
||||
Notice that Marpit has not provided theme. It would be good to include inline style in Markdown, or pass CSS file by `--theme` option.
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> If you want to use the Marpit-based custom engine by the module name, the specified module must be exporting a class inherited from Marpit as the default export.
|
||||
|
||||
### Functional engine
|
||||
|
||||
When you specified the path to JavaScript file (`.js`, `.cjs`, or `.mjs`) in `--engine` option, you may use more customized engine by a JavaScript function.
|
||||
|
||||
#### Spec
|
||||
|
||||
The functional engine should export a function as the default export, which should have a single argument representing [the constructor option of Marpit](https://marpit-api.marp.app/marpit)/[Marp Core](https://github.com/marp-team/marp-core#constructor-options).
|
||||
|
||||
The function must return a class inherited from Marpit, or an instance of Marpit-based engine made by the parameter passed by argument.
|
||||
|
||||
```javascript
|
||||
// engine.mjs (ES modules)
|
||||
import { MarpitBasedEngine } from 'marpit-based-engine'
|
||||
|
||||
export default () => MarpitBasedEngine // Return a class inherited from Marpit
|
||||
```
|
||||
|
||||
```javascript
|
||||
// engine.cjs (CommonJS)
|
||||
const { MarpitBasedEngine } = require('marpit-based-engine')
|
||||
|
||||
module.exports = function (constructorOptions) {
|
||||
// Return an instance of Marpit initialized by passed constructor options
|
||||
return new MarpitBasedEngine(constructorOptions)
|
||||
}
|
||||
```
|
||||
|
||||
This function can return [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) object so you can use [async function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function) too.
|
||||
|
||||
```javascript
|
||||
export default async (constructorOptions) => {
|
||||
const { MarpitBasedEngine } = await import('marpit-based-engine')
|
||||
return new MarpitBasedEngine(constructorOptions)
|
||||
}
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> Currently ES Modules can resolve only when using Marp CLI via Node.js. [The standalone binary](#standalone-binary) cannot resolve ESM. ([vercel/pkg#1291](https://github.com/vercel/pkg/issues/1291))
|
||||
|
||||
#### `marp` getter property
|
||||
|
||||
Marp CLI also exposes `marp` getter property to the parameter. It returns a prepared instance of the built-in Marp Core engine, so you can apply several customizations to Marp engine with simple declarations.
|
||||
|
||||
```javascript
|
||||
const marpPlugin = require('marp-plugin-foo')
|
||||
const andMorePlugin = require('marp-plugin-bar')
|
||||
|
||||
module.exports = ({ marp }) => marp.use(marpPlugin).use(andMorePlugin)
|
||||
```
|
||||
|
||||
It allows converting Markdown with additional syntaxes that were provided by Marp (or compatible markdown-it) plugins.
|
||||
|
||||
#### Example: [markdown-it-mark](https://github.com/markdown-it/markdown-it-mark)
|
||||
|
||||
```javascript
|
||||
// engine.mjs
|
||||
import markdownItMark from 'markdown-it-mark'
|
||||
|
||||
export default ({ marp }) => marp.use(markdownItMark)
|
||||
```
|
||||
|
||||
```bash
|
||||
# Install markdown-it-mark into your project
|
||||
npm i markdown-it-mark --save
|
||||
|
||||
# Specify the path to functional engine
|
||||
marp --engine ./engine.mjs slide-deck.md
|
||||
```
|
||||
|
||||
The customized engine will convert `==marked==` to `<mark>marked</mark>`.
|
||||
|
||||
### Confirm engine version
|
||||
|
||||
By using `--version` (`-v`) option, you may confirm the version of engine that is expected to use in current configuration.
|
||||
|
||||
```console
|
||||
$ marp --version
|
||||
@marp-team/marp-cli v4.x.x (w/ @marp-team/marp-core v4.x.x)
|
||||
```
|
||||
|
||||
### Use specific version of Marp Core
|
||||
|
||||
Marp CLI prefers to use _an installed core to local project by user_ than the bundled.
|
||||
|
||||
If the current project has installed `@marp-team/marp-core` individually, it would show its version and the annotation: `w/ user-installed @marp-team/marp-core vX.X.X` or `w/ customized engine`.
|
||||
|
||||
```console
|
||||
$ npm i @marp-team/marp-cli @marp-team/marp-core@^4.0.0 --save-dev
|
||||
$ npx marp --version
|
||||
@marp-team/marp-cli v4.x.x (w/ user-installed @marp-team/marp-core v4.0.0)
|
||||
```
|
||||
|
||||
## Configuration file
|
||||
|
||||
Marp CLI can be configured options with file, such as `marp.config.js`, `marp.config.mjs` (ES Modules), `marp.config.cjs` (CommonJS), `.marprc` (JSON / YAML), and `marp` section of `package.json`.
|
||||
|
||||
It is useful to configure settings for the whole of project.
|
||||
|
||||
```javascript
|
||||
// package.json
|
||||
{
|
||||
"marp": {
|
||||
"inputDir": "./slides",
|
||||
"output": "./public",
|
||||
"themeSet": "./themes"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
```yaml
|
||||
# .marprc.yml
|
||||
allowLocalFiles: true
|
||||
options:
|
||||
looseYAML: false
|
||||
markdown:
|
||||
breaks: false
|
||||
pdf: true
|
||||
```
|
||||
|
||||
```javascript
|
||||
// marp.config.mjs
|
||||
import markdownItContainer from 'markdown-it-container'
|
||||
|
||||
export default {
|
||||
// Customize engine on configuration file directly
|
||||
engine: ({ marp }) => marp.use(markdownItContainer, 'custom'),
|
||||
}
|
||||
```
|
||||
|
||||
By default we use configuration file that is placed on current directory, but you may also specify the path for a configuration file by `--config-file` (`--config` / `-c`) option.
|
||||
|
||||
If you want to prevent looking up a configuration file, you can pass `--no-config-file` (`--no-config`) option.
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> Currently ES Modules can resolve only when using Marp CLI via Node.js. [The standalone binary](#standalone-binary) cannot resolve ESM. ([vercel/pkg#1291](https://github.com/vercel/pkg/issues/1291))
|
||||
|
||||
### Options
|
||||
|
||||
| Key | Type | CLI option | Description |
|
||||
| :---------------- | :-------------------------: | :-----------------------: | :---------------------------------------------------------------------------------------------------------- |
|
||||
| `allowLocalFiles` | boolean | `--allow-local-files` | Allow to access local files from Markdown while converting PDF _(NOT SECURE)_ |
|
||||
| `author` | string | `--author` | Define author of the slide deck |
|
||||
| `bespoke` | object | | Setting options for `bespoke` template |
|
||||
| ┗ `osc` | boolean | `--bespoke.osc` | \[Bespoke\] Use on-screen controller (`true` by default) |
|
||||
| ┗ `progress` | boolean | `--bespoke.progress` | \[Bespoke\] Use progress bar (`false` by default) |
|
||||
| ┗ `transition` | boolean | `--bespoke.transition` | \[Bespoke\] Use [transitions] (Only in browsers supported [View Transition API]: `true` by default) |
|
||||
| `browser` | string \| string[] | `--browser` | The kind of browser for conversion (`auto` by default) |
|
||||
| `browserPath` | string | `--browser-path` | Path to the browser executable |
|
||||
| `browserProtocol` | `cdp` \| `webdriver-bidi` | `--browser-protocol` | Set the preferred protocol for connecting to the browser (`cdp` by default) |
|
||||
| `browserTimeout` | number | `--browser-timeout` | Set the timeout for each browser operation in seconds (`30` by default) |
|
||||
| `description` | string | `--description` | Define description of the slide deck |
|
||||
| `engine` | string \| Class \| Function | `--engine` | Specify Marpit based engine |
|
||||
| `html` | boolean \| object | `--html` | Enable or disable HTML tags (Configuration file can pass [the whitelist object] if you are using Marp Core) |
|
||||
| `image` | `png` \| `jpeg` | `--image` | Convert the first slide page into an image file |
|
||||
| `images` | `png` \| `jpeg` | `--images` | Convert slide deck into multiple image files |
|
||||
| `imageScale` | number | `--image-scale` | The scale factor for rendered images (`1` by default, or `2` for PPTX conversion) |
|
||||
| `inputDir` | string | `--input-dir` `-I` | The base directory to find markdown and theme CSS |
|
||||
| `jpegQuality` | number | `--jpeg-quality` | Setting JPEG image quality (`85` by default) |
|
||||
| `keywords` | string \| string[] | `--keywords` | Define keywords for the slide deck (Accepts comma-separated string and array of string) |
|
||||
| `lang` | string | | Define the language of converted HTML |
|
||||
| `notes` | boolean | `--notes` | Convert slide deck notes into a text file |
|
||||
| `ogImage` | string | `--og-image` | Define [Open Graph] image URL |
|
||||
| `options` | object | | The base options for the constructor of engine |
|
||||
| `output` | string | `--output` `-o` | Output file path (or directory when input-dir is passed) |
|
||||
| `parallel` | boolean \| number | `--parallel` `-P` | Set the number of concurrency for parallel conversion (`5` by default) |
|
||||
| `pdf` | boolean | `--pdf` | Convert slide deck into PDF |
|
||||
| `pdfNotes` | boolean | `--pdf-notes` | Add [presenter notes][marpit presenter notes] to PDF as annotations |
|
||||
| `pdfOutlines` | boolean \| object | `--pdf-outlines` | Add outlines (bookmarks) to PDF |
|
||||
| ┗ `pages` | boolean | `--pdf-outlines.pages` | Make PDF outlines from slide pages (`true` by default when `pdfOutlines` is enabled) |
|
||||
| ┗ `headings` | boolean | `--pdf-outlines.headings` | Make PDF outlines from Markdown headings (`true` by default when `pdfOutlines` is enabled) |
|
||||
| `pptx` | boolean | `--pptx` | Convert slide deck into PowerPoint document |
|
||||
| `pptxEditable` | boolean | `--pptx-editable` | _[EXPERIMENTAL]_ Generate editable PPTX when converting to PPTX |
|
||||
| `preview` | boolean | `--preview` `-p` | Open preview window |
|
||||
| `server` | boolean | `--server` `-s` | Enable server mode |
|
||||
| `template` | `bare` \| `bespoke` | `--template` | Choose template (`bespoke` by default) |
|
||||
| `theme` | string | `--theme` | Override theme by name or CSS file |
|
||||
| `themeSet` | string \| string[] | `--theme-set` | Path to additional theme CSS files |
|
||||
| `title` | string | `--title` | Define title of the slide deck |
|
||||
| `url` | string | `--url` | Define [canonical URL] |
|
||||
| `watch` | boolean | `--watch` `-w` | Watch input markdowns for changes |
|
||||
|
||||
[the whitelist object]: https://github.com/marp-team/marp-core#html-boolean--object
|
||||
|
||||
Some of options that cannot specify through CLI options can be configured by file. (e.g. `options` field for the constructor option of used engine)
|
||||
|
||||
<details>
|
||||
<summary>Example: Customize engine's constructor option</summary>
|
||||
|
||||
You can fine-tune constructor options for the engine, [Marp Core](https://github.com/marp-team/marp-core#constructor-options) / [Marpit](https://marpit-api.marp.app/marpit).
|
||||
|
||||
```json
|
||||
{
|
||||
"options": {
|
||||
"markdown": {
|
||||
"breaks": false
|
||||
},
|
||||
"minifyCSS": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This configuration will set the constructor option for Marp Core as specified:
|
||||
|
||||
- Disables [Marp Core's line breaks conversion](https://github.com/marp-team/marp-core#marp-markdown) (`\n` to `<br />`) to match for CommonMark, by passing [markdown-it's `breaks` option](https://markdown-it.github.io/markdown-it/#MarkdownIt.new) as `false`.
|
||||
- Disable minification for rendered theme CSS to make debug your style easily, by passing [`minifyCSS`](https://github.com/marp-team/marp-core#minifycss-boolean) as `false`.
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> Some options may be overridden by used template.
|
||||
|
||||
</details>
|
||||
|
||||
### Auto completion
|
||||
|
||||
When Marp CLI has been installed into the local project, for getting the power of auto completion for the config, such as [IntelliSense](https://code.visualstudio.com/docs/editor/intellisense), you can annotate the config object through JSDoc, with Marp CLI's `Config` type.
|
||||
|
||||
```javascript
|
||||
/** @type {import('@marp-team/marp-cli').Config} */
|
||||
const config = {
|
||||
// ...
|
||||
}
|
||||
|
||||
export default config
|
||||
```
|
||||
|
||||
Or you can import Vite-like `defineConfig` helper from Marp CLI instead.
|
||||
|
||||
```javascript
|
||||
import { defineConfig } from '@marp-team/marp-cli'
|
||||
|
||||
export default defineConfig({
|
||||
// ...
|
||||
})
|
||||
```
|
||||
|
||||
#### `Config` type with custom engine
|
||||
|
||||
If you've swapped the engine into another Marpit based engine, you can provide better suggestion for `options` field by passing the engine type to generics.
|
||||
|
||||
```javascript
|
||||
/** @type {import('@marp-team/marp-cli').Config<typeof import('@marp-team/marpit').Marpit>} */
|
||||
const config = {
|
||||
engine: '@marp-team/marpit',
|
||||
options: {
|
||||
// Suggest only Marpit constructor options, not Marp Core
|
||||
},
|
||||
}
|
||||
|
||||
export default config
|
||||
```
|
||||
|
||||
#### TypeScript (`marp.config.ts`)
|
||||
|
||||
If you installed `typescript` into your local project together with Marp CLI, you can write a config by TypeScript `marp.config.ts`. Marp CLI will try to transpile `.ts` with the project configuration `tsconfig.json`.
|
||||
|
||||
In TypeScript configuration, you can specify the custom engine as the generics for `defineConfig` helper, like this:
|
||||
|
||||
```typescript
|
||||
// marp.config.ts
|
||||
import { Marpit } from '@marp-team/marpit'
|
||||
import { defineConfig } from '@marp-team/marp-cli'
|
||||
|
||||
export default defineConfig<typeof Marpit>({
|
||||
engine: Marpit,
|
||||
options: {
|
||||
// Suggest only Marpit constructor options
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
## API _(EXPERIMENTAL)_
|
||||
|
||||
You can use Marp CLI through Node.js [if installed Marp CLI into your local project](#local-installation).
|
||||
|
||||
```js
|
||||
const { marpCli } = require('@marp-team/marp-cli')
|
||||
|
||||
marpCli(['test.md', '--pdf'])
|
||||
.then((exitStatus) => {
|
||||
if (exitStatus > 0) {
|
||||
console.error(`Failure (Exit status: ${exitStatus})`)
|
||||
} else {
|
||||
console.log('Success')
|
||||
}
|
||||
})
|
||||
.catch(console.error)
|
||||
```
|
||||
|
||||
`marpCli()` accepts an argument of CLI options as array, and returns `Promise` to resolve an expected exit status in CLI. It would be rejected with the instance of `Error` if CLI met an error to suspend the conversion process.
|
||||
|
||||
### Error handling
|
||||
|
||||
We have exported [`CLIError` class and `CLIErrorCode` enum](https://github.com/marp-team/marp-cli/blob/main/src/error.ts) from `@marp-team/marp-cli`, to allow handling for specific errors that have already known by Marp CLI.
|
||||
|
||||
If `CLIError` instance was thrown, you can identify the reason why CLI threw error by checking `errorCode` member.
|
||||
|
||||
### Wait for observation
|
||||
|
||||
`marpCli()` would not be resolved initiatively if started some observation: Watch mode, server mode, and preview window.
|
||||
|
||||
`waitForObservation()` is helpful to handle them. It returns `Promise` that would be resolved with helper object when ready to observe resources in `marpCli()`.
|
||||
|
||||
```javascript
|
||||
const { marpCli, waitForObservation } = require('@marp-team/marp-cli')
|
||||
|
||||
marpCli(['--server', './slides/'])
|
||||
.then((exitCode) => console.log(`Done with exit code ${exitCode}`))
|
||||
.catch(console.error)
|
||||
|
||||
waitForObservation().then(({ stop }) => {
|
||||
console.log('Observed')
|
||||
|
||||
// Stop observations to resolve marpCli()'s Promise
|
||||
stop()
|
||||
})
|
||||
```
|
||||
|
||||
The resolved helper has `stop()` method for telling Marp CLI to stop observation and resolve `Promise`.
|
||||
|
||||
## Contributing
|
||||
|
||||
Are you interested in contributing? Please see [CONTRIBUTING.md](.github/CONTRIBUTING.md) and [the common contributing guideline for Marp team](https://github.com/marp-team/.github/blob/master/CONTRIBUTING.md).
|
||||
|
||||
## Author
|
||||
|
||||
Managed by [@marp-team](https://github.com/marp-team).
|
||||
|
||||
- <img src="https://github.com/yhatt.png" width="16" height="16"/> Yuki Hattori ([@yhatt](https://github.com/yhatt))
|
||||
|
||||
## License
|
||||
|
||||
This tool releases under the [MIT License](LICENSE).
|
||||
1
node_modules/@marp-team/marp-cli/lib/_commonjs-dynamic-modules-DpMUTZLf.js
generated
vendored
Normal file
1
node_modules/@marp-team/marp-cli/lib/_commonjs-dynamic-modules-DpMUTZLf.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";exports.c=function(r){throw new Error('Could not dynamically require "'+r+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')};
|
||||
2
node_modules/@marp-team/marp-cli/lib/bespoke.js
generated
vendored
Normal file
2
node_modules/@marp-team/marp-cli/lib/bespoke.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
67
node_modules/@marp-team/marp-cli/lib/bespoke.js.LICENSE.txt
generated
vendored
Normal file
67
node_modules/@marp-team/marp-cli/lib/bespoke.js.LICENSE.txt
generated
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
Name: bespoke
|
||||
Version: 1.2.0-dev
|
||||
License: (MIT)
|
||||
Private: false
|
||||
Description: DIY Presentation Micro-Framework
|
||||
Repository: git://github.com/bespokejs/bespoke.git
|
||||
Author: Mark Dalgleish (http://markdalgleish.com)
|
||||
License Copyright:
|
||||
===
|
||||
|
||||
Copyright (c) 2014 Mark Dalgleish
|
||||
|
||||
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.
|
||||
|
||||
---
|
||||
|
||||
Name: vhtml
|
||||
Version: 2.2.0
|
||||
License: MIT
|
||||
Private: false
|
||||
Description: Hyperscript reviver that constructs a sanitized HTML string.
|
||||
Repository: git+https://github.com/developit/vhtml.git
|
||||
Homepage: https://github.com/developit/vhtml
|
||||
Author: Jason Miller <jason@developit.ca>
|
||||
License Copyright:
|
||||
===
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Jason Miller
|
||||
|
||||
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
node_modules/@marp-team/marp-cli/lib/binary-BtVxQo5V.js
generated
vendored
Normal file
1
node_modules/@marp-team/marp-cli/lib/binary-BtVxQo5V.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
228
node_modules/@marp-team/marp-cli/lib/index-BelEQDDf.js
generated
vendored
Normal file
228
node_modules/@marp-team/marp-cli/lib/index-BelEQDDf.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
node_modules/@marp-team/marp-cli/lib/index-D5lJ6vST.js
generated
vendored
Normal file
1
node_modules/@marp-team/marp-cli/lib/index-D5lJ6vST.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";var e=require("node:process"),r=require("node:os"),i=require("node:fs"),u=require("./marp-cli-CBvmXjya.js");require("node:tty"),require("./binary-BtVxQo5V.js"),require("tty"),require("util"),require("os"),require("node:path"),require("fs"),require("fs/promises"),require("path"),require("node:child_process"),require("node:util"),require("child_process"),require("process"),require("events"),require("net"),require("puppeteer-core"),require("node:events"),require("node:util/types"),require("node:crypto"),require("yargs/yargs"),require("cosmiconfig"),require("node:url"),require("module"),require("node:assert"),require("node:module"),require("node:v8"),require("node:fs/promises"),require("stream"),require("node:stream/consumers"),require("node:timers/promises"),require("tmp"),require("@marp-team/marpit"),require("chokidar"),require("ws"),require("node:querystring"),require("serve-index"),require("@marp-team/marp-core/package.json");const s=()=>{if("linux"!==e.platform)return!1;if(r.release().toLowerCase().includes("microsoft"))return!u.i();try{return!!i.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")&&!u.i()}catch{return!1}};var o=e.env.__IS_WSL_TEST__?s:s();exports.default=o;
|
||||
1
node_modules/@marp-team/marp-cli/lib/index.js
generated
vendored
Normal file
1
node_modules/@marp-team/marp-cli/lib/index.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./marp-cli-CBvmXjya.js");require("node:process"),require("node:os"),require("node:tty"),require("./binary-BtVxQo5V.js"),require("tty"),require("util"),require("os"),require("node:fs"),require("node:path"),require("fs"),require("fs/promises"),require("path"),require("node:child_process"),require("node:util"),require("child_process"),require("process"),require("events"),require("net"),require("puppeteer-core"),require("node:events"),require("node:util/types"),require("node:crypto"),require("yargs/yargs"),require("cosmiconfig"),require("node:url"),require("module"),require("node:assert"),require("node:module"),require("node:v8"),require("node:fs/promises"),require("stream"),require("node:stream/consumers"),require("node:timers/promises"),require("tmp"),require("@marp-team/marpit"),require("chokidar"),require("ws"),require("node:querystring"),require("serve-index"),require("@marp-team/marp-core/package.json");const r=e.a;exports.CLIError=e.C,exports.CLIErrorCode=e.b,exports.default=e.a,exports.waitForObservation=e.w,exports.defineConfig=e=>e,exports.marpCli=r;
|
||||
48
node_modules/@marp-team/marp-cli/lib/marp-cli-CBvmXjya.js
generated
vendored
Normal file
48
node_modules/@marp-team/marp-cli/lib/marp-cli-CBvmXjya.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
node_modules/@marp-team/marp-cli/lib/marp-cli.js
generated
vendored
Executable file
1
node_modules/@marp-team/marp-cli/lib/marp-cli.js
generated
vendored
Executable file
@@ -0,0 +1 @@
|
||||
"use strict";var e=require("./marp-cli-CBvmXjya.js");require("node:process"),require("node:os"),require("node:tty"),require("./binary-BtVxQo5V.js"),require("tty"),require("util"),require("os"),require("node:fs"),require("node:path"),require("fs"),require("fs/promises"),require("path"),require("node:child_process"),require("node:util"),require("child_process"),require("process"),require("events"),require("net"),require("puppeteer-core"),require("node:events"),require("node:util/types"),require("node:crypto"),require("yargs/yargs"),require("cosmiconfig"),require("node:url"),require("module"),require("node:assert"),require("node:module"),require("node:v8"),require("node:fs/promises"),require("stream"),require("node:stream/consumers"),require("node:timers/promises"),require("tmp"),require("@marp-team/marpit"),require("chokidar"),require("ws"),require("node:querystring"),require("serve-index"),require("@marp-team/marp-core/package.json"),exports.apiInterface=e.a,exports.cliInterface=e.c,exports.marpCli=e.m,exports.waitForObservation=e.w;
|
||||
1
node_modules/@marp-team/marp-cli/lib/patch.js
generated
vendored
Normal file
1
node_modules/@marp-team/marp-cli/lib/patch.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";var e=require("node:module"),r=require("./binary-BtVxQo5V.js");require("tty"),require("util"),require("os");const i=()=>{try{e.enableCompileCache?.()}catch{}},t=()=>{r.i()&&process.config.variables.icu_small&&(r.d("Using a polyfilled implementation for Intl.Segmenter."),require("@formatjs/intl-segmenter/polyfill-force"))};exports.enableCompileCache=i,exports.patch=()=>{t(),i()},exports.patchSegmenter=t;
|
||||
15
node_modules/@marp-team/marp-cli/lib/pdf-lib.esm-CWPXb_Gd.js
generated
vendored
Normal file
15
node_modules/@marp-team/marp-cli/lib/pdf-lib.esm-CWPXb_Gd.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
12
node_modules/@marp-team/marp-cli/lib/pptxgen.es-Bn2D7GhK.js
generated
vendored
Normal file
12
node_modules/@marp-team/marp-cli/lib/pptxgen.es-Bn2D7GhK.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
node_modules/@marp-team/marp-cli/lib/prepare.js
generated
vendored
Normal file
1
node_modules/@marp-team/marp-cli/lib/prepare.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";const e="marp-cli*",s=/^(?:-d|--debug)(?:$|=)/,t=["true","1"],i=["false","0"],r=["all","full"],l=s=>{const l=s.trim(),c=l.toLowerCase();return r.includes(c)?"*":t.includes(c)?e:!i.includes(c)&&(l||e)};exports.cliPrepare=(t=process.argv.slice(2))=>{let i=!1;const r=[...t],c=r.findIndex(e=>s.test(e));if(c>=0){const s=r[c];if(s.startsWith("-d=")||s.startsWith("--debug="))i=l(s.slice(s.indexOf("=")+1)),r.splice(c,1);else{const s=r[c+1];!s||s.startsWith("-")?(i=e,r.splice(c,1)):(i=l(s),r.splice(c,2))}}return{args:r,debug:i}},exports.defaultDebug=e;
|
||||
1
node_modules/@marp-team/marp-cli/lib/server/server-index.js
generated
vendored
Normal file
1
node_modules/@marp-team/marp-cli/lib/server/server-index.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!function(){"use strict";const e="marp-cli-show-all";!function(){const t=document.getElementById("show-all"),s=document.getElementById("index"),c=c=>{t.checked=c,s.classList.toggle("show-all",c);try{sessionStorage.setItem(e,c?"1":"")}catch(e){console.error(e)}};c(!!sessionStorage.getItem(e)),t.addEventListener("change",()=>c(t.checked))}()}();
|
||||
1
node_modules/@marp-team/marp-cli/lib/watch.js
generated
vendored
Normal file
1
node_modules/@marp-team/marp-cli/lib/watch.js
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!function(){"use strict";const e=(n,o=!1)=>{const t=new WebSocket(n);return t.addEventListener("open",()=>{console.info("[Marp CLI] Observing the change of file..."),o&&location.reload()}),t.addEventListener("close",()=>{console.warn("[Marp CLI] WebSocket for file watcher was disconnected. Try re-connecting in 5000ms..."),setTimeout(()=>e(n,!0),5e3)}),t.addEventListener("message",e=>{"reload"===e.data&&location.reload()}),t};(()=>{const n=window.__marpCliWatchWS;n&&e(n)})()}();
|
||||
15
node_modules/@marp-team/marp-cli/marp-cli.js
generated
vendored
Executable file
15
node_modules/@marp-team/marp-cli/marp-cli.js
generated
vendored
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
'use strict'
|
||||
{
|
||||
const prepare = require('./lib/prepare.js')
|
||||
const cli = prepare.cliPrepare()
|
||||
|
||||
if (cli.debug)
|
||||
process.env.DEBUG = `${process.env.DEBUG ? `${process.env.DEBUG},` : ''}${cli.debug}`
|
||||
|
||||
require('./lib/patch.js').patch()
|
||||
require('./lib/marp-cli.js')
|
||||
.cliInterface(cli.args)
|
||||
.then((exitCode) => process.on('exit', () => process.exit(exitCode)))
|
||||
}
|
||||
174
node_modules/@marp-team/marp-cli/package.json
generated
vendored
Normal file
174
node_modules/@marp-team/marp-cli/package.json
generated
vendored
Normal file
@@ -0,0 +1,174 @@
|
||||
{
|
||||
"name": "@marp-team/marp-cli",
|
||||
"version": "4.2.3",
|
||||
"description": "A CLI interface for Marp and Marpit based converters",
|
||||
"license": "MIT",
|
||||
"author": {
|
||||
"name": "Marp team",
|
||||
"url": "https://github.com/marp-team"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Yuki Hattori",
|
||||
"url": "https://github.com/yhatt"
|
||||
}
|
||||
],
|
||||
"keywords": [
|
||||
"marp",
|
||||
"markdown",
|
||||
"cli",
|
||||
"slide",
|
||||
"deck",
|
||||
"presentation"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/marp-team/marp-cli"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"main": "lib/index.js",
|
||||
"types": "types/src/index.d.ts",
|
||||
"files": [
|
||||
"marp-cli.js",
|
||||
"lib/",
|
||||
"types/"
|
||||
],
|
||||
"bin": {
|
||||
"marp": "marp-cli.js"
|
||||
},
|
||||
"pkg": {
|
||||
"scripts": "lib/**/*.js"
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1% and last 3 versions",
|
||||
"Firefox ESR"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "npm -s run clean && rollup -c",
|
||||
"build:standalone": "run-s build standalone",
|
||||
"check:audit": "npm audit --audit-level=moderate",
|
||||
"check:format": "npm -s run format -- -c",
|
||||
"check:ts": "tsc --noEmit",
|
||||
"clean": "node -e \"fs.rmSync('lib',{recursive:true,force:true})\"",
|
||||
"format": "prettier \"**/*.{css,js,jsx,json,md,mjs,scss,ts,tsx,yaml,yml}\"",
|
||||
"format:write": "npm -s run format -- --write",
|
||||
"lint:js": "eslint --cache",
|
||||
"lint:css": "stylelint \"src/**/*.{css,scss}\"",
|
||||
"prepack": "npm-run-all --parallel check:* lint:* test:coverage --parallel build types",
|
||||
"prepare": "npx --no patch-package || exit 0",
|
||||
"preversion": "run-p check:* lint:* test:coverage",
|
||||
"standalone": "node -e \"fs.rmSync('bin',{recursive:true,force:true})\" && pkg -C gzip --out-path ./bin .",
|
||||
"standalone:pack": "node ./scripts/pack.mjs",
|
||||
"test": "jest",
|
||||
"test:coverage": "jest --coverage",
|
||||
"types": "node -e \"fs.rmSync('types',{recursive:true,force:true})\" && tsc --declaration --emitDeclarationOnly --outDir types",
|
||||
"version": "curl https://raw.githubusercontent.com/marp-team/actions/v1/lib/scripts/version.js | node && git add -A CHANGELOG.md",
|
||||
"watch": "rollup -w -c"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/preset-env": "^7.28.0",
|
||||
"@formatjs/intl-segmenter": "^11.7.10",
|
||||
"@rollup/plugin-alias": "^5.1.1",
|
||||
"@rollup/plugin-commonjs": "^28.0.6",
|
||||
"@rollup/plugin-json": "^6.1.0",
|
||||
"@rollup/plugin-node-resolve": "^16.0.1",
|
||||
"@rollup/plugin-replace": "^6.0.2",
|
||||
"@rollup/plugin-terser": "^0.4.4",
|
||||
"@rollup/plugin-typescript": "^12.1.4",
|
||||
"@rollup/plugin-url": "^8.0.2",
|
||||
"@tsconfig/node22": "^22.0.2",
|
||||
"@tsconfig/recommended": "^1.0.10",
|
||||
"@types/debug": "^4.1.12",
|
||||
"@types/dom-view-transitions": "^1.0.6",
|
||||
"@types/express": "^5.0.3",
|
||||
"@types/jest": "^30.0.0",
|
||||
"@types/markdown-it": "^14.1.2",
|
||||
"@types/node": "~18.19.111",
|
||||
"@types/pug": "^2.0.10",
|
||||
"@types/supertest": "^6.0.3",
|
||||
"@types/which": "^3.0.4",
|
||||
"@types/ws": "^8.18.1",
|
||||
"@types/yargs": "^17.0.33",
|
||||
"@yao-pkg/pkg": "^6.6.0",
|
||||
"autoprefixer": "^10.4.21",
|
||||
"bespoke": "bespokejs/bespoke",
|
||||
"chalk": "^5.4.1",
|
||||
"cheerio": "^1.1.0",
|
||||
"chrome-launcher": "^1.2.0",
|
||||
"css.escape": "^1.5.1",
|
||||
"cssnano": "^7.1.0",
|
||||
"debug": "^4.4.1",
|
||||
"eslint": "^9.31.0",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-import-resolver-typescript": "^4.4.4",
|
||||
"eslint-plugin-import-x": "^4.16.1",
|
||||
"eslint-plugin-jest": "^29.0.1",
|
||||
"eslint-plugin-n": "^17.21.0",
|
||||
"express": "^5.1.0",
|
||||
"fast-plist": "^0.1.3",
|
||||
"globals": "^16.3.0",
|
||||
"globby": "~14.0.2",
|
||||
"image-size": "^2.0.2",
|
||||
"import-from": "^4.0.0",
|
||||
"import-meta-resolve": "^4.1.0",
|
||||
"is-inside-container": "^1.0.0",
|
||||
"is-wsl": "^3.1.0",
|
||||
"jest": "^30.0.4",
|
||||
"jest-environment-jsdom": "^30.0.4",
|
||||
"jest-junit": "^16.0.0",
|
||||
"nanoid": "^5.1.5",
|
||||
"npm-check-updates": "^18.0.1",
|
||||
"npm-run-all2": "^8.0.4",
|
||||
"os-locale": "^6.0.2",
|
||||
"package-up": "^5.0.0",
|
||||
"patch-package": "^8.0.0",
|
||||
"pdf-lib": "^1.17.1",
|
||||
"portfinder": "^1.0.37",
|
||||
"postcss": "^8.5.6",
|
||||
"postcss-url": "^10.1.3",
|
||||
"pptxgenjs": "^4.0.1",
|
||||
"prettier": "^3.6.2",
|
||||
"pug": "^3.0.3",
|
||||
"rollup": "^4.45.1",
|
||||
"rollup-plugin-license": "^3.6.0",
|
||||
"rollup-plugin-postcss": "^4.0.2",
|
||||
"sass": "^1.89.2",
|
||||
"strip-ansi": "^7.1.0",
|
||||
"stylelint": "^16.22.0",
|
||||
"stylelint-config-standard-scss": "^15.0.1",
|
||||
"supertest": "^7.1.3",
|
||||
"tar-stream": "^3.1.7",
|
||||
"ts-jest": "^29.4.0",
|
||||
"ts-key-enum": "^3.0.13",
|
||||
"tslib": "^2.8.1",
|
||||
"typed-emitter": "^2.1.0",
|
||||
"typescript": "^5.8.3",
|
||||
"typescript-eslint": "^8.37.0",
|
||||
"vhtml": "^2.2.0",
|
||||
"which": "^4.0.0",
|
||||
"wrap-ansi": "^9.0.0",
|
||||
"yauzl": "^3.2.0",
|
||||
"zip-stream": "^7.0.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"@marp-team/marp-core": "^4.1.0",
|
||||
"@marp-team/marpit": "^3.1.3",
|
||||
"chokidar": "^4.0.3",
|
||||
"cosmiconfig": "^9.0.0",
|
||||
"puppeteer-core": "^24.16.0",
|
||||
"serve-index": "^1.9.1",
|
||||
"tmp": "^0.2.5",
|
||||
"ws": "^8.18.3",
|
||||
"yargs": "^17.7.2"
|
||||
},
|
||||
"overrides": {
|
||||
"patch-package": {
|
||||
"tmp": "^0.2.5"
|
||||
}
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
}
|
||||
}
|
||||
40
node_modules/@marp-team/marp-cli/types/src/browser/browser.d.ts
generated
vendored
Normal file
40
node_modules/@marp-team/marp-cli/types/src/browser/browser.d.ts
generated
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
import type { Browser as PuppeteerBrowser, ProtocolType, LaunchOptions, Page } from 'puppeteer-core';
|
||||
import type TypedEventEmitter from 'typed-emitter';
|
||||
export type BrowserKind = 'chrome' | 'firefox';
|
||||
export type BrowserProtocol = ProtocolType;
|
||||
export interface BrowserOptions {
|
||||
path: string;
|
||||
timeout?: number;
|
||||
}
|
||||
type BrowserEvents = {
|
||||
close: (browser: PuppeteerBrowser) => void;
|
||||
disconnect: (browser: PuppeteerBrowser) => void;
|
||||
launch: (browser: PuppeteerBrowser) => void;
|
||||
};
|
||||
declare const Browser_base: new () => TypedEventEmitter<BrowserEvents>;
|
||||
export declare abstract class Browser extends Browser_base implements AsyncDisposable {
|
||||
#private;
|
||||
static readonly kind: BrowserKind;
|
||||
static readonly protocol: BrowserProtocol;
|
||||
path: string;
|
||||
protocolTimeout: number;
|
||||
timeout: number;
|
||||
private _puppeteerDataDir;
|
||||
private _puppeteer;
|
||||
constructor(opts: BrowserOptions);
|
||||
get kind(): BrowserKind;
|
||||
get protocol(): ProtocolType;
|
||||
launch(opts?: LaunchOptions): Promise<PuppeteerBrowser>;
|
||||
withPage<T>(fn: (page: Page) => T): Promise<T>;
|
||||
close(): Promise<void>;
|
||||
[Symbol.asyncDispose](): Promise<void>;
|
||||
browserInWSLHost(): Promise<boolean>;
|
||||
resolveToFileURI(filePath: string): Promise<string>;
|
||||
/** @internal Overload launch behavior in subclass */
|
||||
protected abstract launchPuppeteer(opts: LaunchOptions): Promise<PuppeteerBrowser>;
|
||||
/** @internal */
|
||||
protected generateLaunchOptions(mergeOptions?: LaunchOptions): Promise<LaunchOptions>;
|
||||
/** @internal */
|
||||
protected puppeteerDataDir(): Promise<string>;
|
||||
}
|
||||
export {};
|
||||
7
node_modules/@marp-team/marp-cli/types/src/browser/browsers/chrome-cdp.d.ts
generated
vendored
Normal file
7
node_modules/@marp-team/marp-cli/types/src/browser/browsers/chrome-cdp.d.ts
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
import type { LaunchOptions } from 'puppeteer-core';
|
||||
import { BrowserProtocol } from '../browser';
|
||||
import { ChromeBrowser } from './chrome';
|
||||
export declare class ChromeCdpBrowser extends ChromeBrowser {
|
||||
static readonly protocol: BrowserProtocol;
|
||||
protected launchPuppeteer(opts: LaunchOptions): Promise<import("puppeteer-core").Browser>;
|
||||
}
|
||||
13
node_modules/@marp-team/marp-cli/types/src/browser/browsers/chrome.d.ts
generated
vendored
Normal file
13
node_modules/@marp-team/marp-cli/types/src/browser/browsers/chrome.d.ts
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
import type { Browser as PuppeteerBrowser, LaunchOptions } from 'puppeteer-core';
|
||||
import { Browser } from '../browser';
|
||||
import type { BrowserKind, BrowserProtocol } from '../browser';
|
||||
export declare class ChromeBrowser extends Browser {
|
||||
static readonly kind: BrowserKind;
|
||||
static readonly protocol: BrowserProtocol;
|
||||
protected launchPuppeteer(opts: Omit<LaunchOptions, 'userDataDir'>): Promise<PuppeteerBrowser>;
|
||||
private puppeteerArgs;
|
||||
private puppeteerArgsEnableSandbox;
|
||||
private puppeteerArgsEnableGPU;
|
||||
private puppeteerPipe;
|
||||
private puppeteerHeadless;
|
||||
}
|
||||
8
node_modules/@marp-team/marp-cli/types/src/browser/browsers/firefox.d.ts
generated
vendored
Normal file
8
node_modules/@marp-team/marp-cli/types/src/browser/browsers/firefox.d.ts
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
import type { Browser as PuppeteerBrowser, LaunchOptions } from 'puppeteer-core';
|
||||
import { Browser } from '../browser';
|
||||
import type { BrowserKind, BrowserProtocol } from '../browser';
|
||||
export declare class FirefoxBrowser extends Browser {
|
||||
static readonly kind: BrowserKind;
|
||||
static readonly protocol: BrowserProtocol;
|
||||
protected launchPuppeteer(opts: LaunchOptions): Promise<PuppeteerBrowser>;
|
||||
}
|
||||
19
node_modules/@marp-team/marp-cli/types/src/browser/finder.d.ts
generated
vendored
Normal file
19
node_modules/@marp-team/marp-cli/types/src/browser/finder.d.ts
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
import type { Browser } from './browser';
|
||||
export interface BrowserFinderResult {
|
||||
path: string;
|
||||
acceptedBrowsers: (typeof Browser)[];
|
||||
}
|
||||
export interface BrowserFinderOptions {
|
||||
preferredPath?: string;
|
||||
}
|
||||
export type BrowserFinder = (opts: BrowserFinderOptions) => Promise<BrowserFinderResult>;
|
||||
export type FinderName = keyof typeof availableFindersMap;
|
||||
declare const availableFindersMap: {
|
||||
readonly chrome: BrowserFinder;
|
||||
readonly edge: BrowserFinder;
|
||||
readonly firefox: BrowserFinder;
|
||||
};
|
||||
export declare const availableFinders: readonly FinderName[];
|
||||
export declare const defaultFinders: readonly ["chrome", "edge", "firefox"];
|
||||
export declare const findBrowser: (finders?: readonly FinderName[], opts?: BrowserFinderOptions) => Promise<BrowserFinderResult>;
|
||||
export {};
|
||||
2
node_modules/@marp-team/marp-cli/types/src/browser/finders/chrome.d.ts
generated
vendored
Normal file
2
node_modules/@marp-team/marp-cli/types/src/browser/finders/chrome.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
import type { BrowserFinder } from '../finder';
|
||||
export declare const chromeFinder: BrowserFinder;
|
||||
2
node_modules/@marp-team/marp-cli/types/src/browser/finders/edge.d.ts
generated
vendored
Normal file
2
node_modules/@marp-team/marp-cli/types/src/browser/finders/edge.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
import type { BrowserFinder } from '../finder';
|
||||
export declare const edgeFinder: BrowserFinder;
|
||||
2
node_modules/@marp-team/marp-cli/types/src/browser/finders/firefox.d.ts
generated
vendored
Normal file
2
node_modules/@marp-team/marp-cli/types/src/browser/finders/firefox.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
import type { BrowserFinder } from '../finder';
|
||||
export declare const firefoxFinder: BrowserFinder;
|
||||
30
node_modules/@marp-team/marp-cli/types/src/browser/manager.d.ts
generated
vendored
Normal file
30
node_modules/@marp-team/marp-cli/types/src/browser/manager.d.ts
generated
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
import type { Browser, BrowserProtocol } from './browser';
|
||||
import { ChromeCdpBrowser } from './browsers/chrome-cdp';
|
||||
import type { BrowserFinderResult, FinderName } from './finder';
|
||||
export interface BrowserManagerConfig {
|
||||
/** Browser finders */
|
||||
finders?: FinderName | FinderName[];
|
||||
/** Preferred path */
|
||||
path?: string;
|
||||
/** Preferred protocol */
|
||||
protocol?: BrowserProtocol;
|
||||
/** Timeout for browser operations */
|
||||
timeout?: number;
|
||||
}
|
||||
export declare class BrowserManager implements AsyncDisposable {
|
||||
private _finders;
|
||||
private _finderPreferredPath?;
|
||||
private _finderResult;
|
||||
private _conversionBrowser;
|
||||
private _preferredProtocol;
|
||||
private _previewBrowser;
|
||||
private _timeout?;
|
||||
constructor(config?: BrowserManagerConfig);
|
||||
get timeout(): number | undefined;
|
||||
configure(config: BrowserManagerConfig): void;
|
||||
findBrowser(): Promise<BrowserFinderResult>;
|
||||
browserForConversion(): Promise<Browser>;
|
||||
browserForPreview(): Promise<ChromeCdpBrowser>;
|
||||
dispose(): Promise<void>;
|
||||
[Symbol.asyncDispose](): Promise<void>;
|
||||
}
|
||||
8
node_modules/@marp-team/marp-cli/types/src/cli.d.ts
generated
vendored
Normal file
8
node_modules/@marp-team/marp-cli/types/src/cli.d.ts
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
interface CLIOption {
|
||||
singleLine?: boolean;
|
||||
}
|
||||
export declare function silence(value: boolean): void;
|
||||
export declare function info(message: string, opts?: CLIOption): void;
|
||||
export declare function warn(message: string, opts?: CLIOption): void;
|
||||
export declare function error(message: string, opts?: CLIOption): void;
|
||||
export {};
|
||||
126
node_modules/@marp-team/marp-cli/types/src/config.d.ts
generated
vendored
Normal file
126
node_modules/@marp-team/marp-cli/types/src/config.d.ts
generated
vendored
Normal file
@@ -0,0 +1,126 @@
|
||||
import type { FinderName } from './browser/finder';
|
||||
import { ConvertType, type ConverterOption } from './converter';
|
||||
import { ResolvableEngine, ResolvedEngine } from './engine';
|
||||
import { TemplateOption } from './templates';
|
||||
import { ThemeSet } from './theme';
|
||||
type Overwrite<T, U> = Omit<T, Extract<keyof T, keyof U>> & U;
|
||||
interface IMarpCLIArguments {
|
||||
_?: string[];
|
||||
allowLocalFiles?: boolean;
|
||||
author?: string;
|
||||
baseUrl?: string;
|
||||
'bespoke.osc'?: boolean;
|
||||
'bespoke.progress'?: boolean;
|
||||
'bespoke.transition'?: boolean;
|
||||
browser?: string | string[];
|
||||
browserPath?: string;
|
||||
browserProtocol?: string;
|
||||
browserTimeout?: number;
|
||||
configFile?: string | false;
|
||||
description?: string;
|
||||
engine?: string;
|
||||
html?: boolean;
|
||||
image?: string;
|
||||
images?: string;
|
||||
imageScale?: number;
|
||||
inputDir?: string;
|
||||
jpegQuality?: number;
|
||||
keywords?: string;
|
||||
notes?: boolean;
|
||||
ogImage?: string;
|
||||
output?: string | false;
|
||||
parallel?: number | boolean;
|
||||
pdf?: boolean;
|
||||
pdfNotes?: boolean;
|
||||
pdfOutlines?: boolean;
|
||||
'pdfOutlines.pages'?: boolean;
|
||||
'pdfOutlines.headings'?: boolean;
|
||||
pptx?: boolean;
|
||||
pptxEditable?: boolean;
|
||||
preview?: boolean;
|
||||
server?: boolean;
|
||||
template?: string;
|
||||
theme?: string;
|
||||
themeSet?: string[];
|
||||
title?: string;
|
||||
url?: string;
|
||||
watch?: boolean;
|
||||
}
|
||||
export type IMarpCLIConfig = Overwrite<Omit<IMarpCLIArguments, '_' | 'configFile' | 'bespoke.osc' | 'bespoke.progress' | 'bespoke.transition' | 'pdfOutlines' | 'pdfOutlines.pages' | 'pdfOutlines.headings'>, {
|
||||
bespoke?: {
|
||||
osc?: boolean;
|
||||
progress?: boolean;
|
||||
transition?: boolean;
|
||||
};
|
||||
browser?: 'auto' | FinderName | FinderName[];
|
||||
browserProtocol?: 'cdp' | 'webdriver-bidi';
|
||||
engine?: ResolvableEngine;
|
||||
html?: ConverterOption['html'];
|
||||
keywords?: string | string[];
|
||||
lang?: string;
|
||||
options?: ConverterOption['options'];
|
||||
pdfOutlines?: boolean | {
|
||||
pages?: boolean;
|
||||
headings?: boolean;
|
||||
};
|
||||
themeSet?: string | string[];
|
||||
}>;
|
||||
export declare const DEFAULT_PARALLEL = 5;
|
||||
export declare class MarpCLIConfig {
|
||||
args: IMarpCLIArguments;
|
||||
conf: IMarpCLIConfig;
|
||||
confPath?: string;
|
||||
engine: ResolvedEngine;
|
||||
static moduleName: "marp";
|
||||
static fromArguments(args: IMarpCLIArguments): Promise<MarpCLIConfig>;
|
||||
static isESMAvailable(): boolean;
|
||||
private constructor();
|
||||
browserManagerOption(): {
|
||||
readonly finders: "chrome" | "firefox" | "edge" | ("chrome" | "firefox" | "edge")[] | undefined;
|
||||
readonly path: string | undefined;
|
||||
readonly protocol: "cdp" | "webDriverBiDi";
|
||||
readonly timeout: number | undefined;
|
||||
};
|
||||
converterOption(): Promise<{
|
||||
readonly imageScale: number | undefined;
|
||||
readonly inputDir: string | undefined;
|
||||
readonly output: string | false | undefined;
|
||||
readonly parallel: number;
|
||||
readonly pdfNotes: boolean;
|
||||
readonly pdfOutlines: false | {
|
||||
pages: boolean;
|
||||
headings: boolean;
|
||||
};
|
||||
readonly pptxEditable: boolean;
|
||||
readonly preview: boolean;
|
||||
readonly server: boolean;
|
||||
readonly template: string;
|
||||
readonly templateOption: TemplateOption;
|
||||
readonly themeSet: ThemeSet;
|
||||
readonly type: ConvertType;
|
||||
readonly allowLocalFiles: boolean;
|
||||
readonly baseUrl: string | undefined;
|
||||
readonly engine: import("./engine").Engine<typeof Marpit.Marpit>;
|
||||
readonly globalDirectives: {
|
||||
readonly author: string | undefined;
|
||||
readonly description: string | undefined;
|
||||
readonly image: string | undefined;
|
||||
readonly keywords: string[] | undefined;
|
||||
readonly theme: string | undefined;
|
||||
readonly title: string | undefined;
|
||||
readonly url: string | undefined;
|
||||
};
|
||||
readonly html: boolean | import("@marp-team/marp-core/types/src/html/allowlist").HTMLAllowList | undefined;
|
||||
readonly jpegQuality: number;
|
||||
readonly lang: string;
|
||||
readonly options: Marpit.Options;
|
||||
readonly pages: boolean;
|
||||
readonly watch: boolean;
|
||||
}>;
|
||||
get files(): string[];
|
||||
private inputDir;
|
||||
private loadConf;
|
||||
private loadTheme;
|
||||
}
|
||||
export declare const fromArguments: typeof MarpCLIConfig.fromArguments;
|
||||
export {};
|
||||
100
node_modules/@marp-team/marp-cli/types/src/converter.d.ts
generated
vendored
Normal file
100
node_modules/@marp-team/marp-cli/types/src/converter.d.ts
generated
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
import type { MarpOptions } from '@marp-team/marp-core';
|
||||
import { Options as MarpitOptions } from '@marp-team/marpit';
|
||||
import type { Browser } from './browser/browser';
|
||||
import type { BrowserManager } from './browser/manager';
|
||||
import { Engine } from './engine';
|
||||
import { File } from './file';
|
||||
import { SOffice } from './soffice/soffice';
|
||||
import { Template, TemplateMeta, TemplateOption, TemplateResult } from './templates/';
|
||||
import { ThemeSet } from './theme';
|
||||
import { type WatchNotifierEntrypointType } from './watcher';
|
||||
export declare enum ConvertType {
|
||||
html = "html",
|
||||
pdf = "pdf",
|
||||
png = "png",
|
||||
pptx = "pptx",
|
||||
jpeg = "jpg",
|
||||
notes = "notes"
|
||||
}
|
||||
export declare const mimeTypes: {
|
||||
html: string;
|
||||
pdf: string;
|
||||
png: string;
|
||||
pptx: string;
|
||||
jpg: string;
|
||||
notes: string;
|
||||
};
|
||||
export interface ConverterOption {
|
||||
allowLocalFiles: boolean;
|
||||
baseUrl?: string;
|
||||
browserManager: BrowserManager;
|
||||
engine: Engine;
|
||||
globalDirectives: {
|
||||
theme?: string;
|
||||
} & Partial<TemplateMeta>;
|
||||
html?: MarpOptions['html'];
|
||||
imageScale?: number;
|
||||
inputDir?: string;
|
||||
lang: string;
|
||||
options: MarpitOptions;
|
||||
output?: string | false;
|
||||
pages?: boolean | number[];
|
||||
parallel?: number;
|
||||
pdfNotes?: boolean;
|
||||
pdfOutlines?: false | {
|
||||
pages: boolean;
|
||||
headings: boolean;
|
||||
};
|
||||
pptxEditable?: boolean;
|
||||
preview?: boolean;
|
||||
jpegQuality?: number;
|
||||
server?: boolean;
|
||||
template: string;
|
||||
templateOption?: TemplateOption;
|
||||
themeSet: ThemeSet;
|
||||
type: ConvertType;
|
||||
watch: boolean | WatchNotifierEntrypointType;
|
||||
}
|
||||
export interface ConvertFileOption {
|
||||
onConverted?: ConvertedCallback;
|
||||
onlyScanning?: boolean;
|
||||
}
|
||||
export interface ConvertPDFOption {
|
||||
postprocess?: boolean;
|
||||
}
|
||||
export interface ConvertImageOption {
|
||||
pages?: boolean | number[];
|
||||
quality?: number;
|
||||
scale?: number;
|
||||
type: ConvertType.png | ConvertType.jpeg;
|
||||
}
|
||||
export interface ConvertResult {
|
||||
file: File;
|
||||
newFile?: File;
|
||||
template: TemplateResult;
|
||||
}
|
||||
export type ConvertedCallback = (result: ConvertResult) => void;
|
||||
export declare class Converter {
|
||||
readonly options: ConverterOption;
|
||||
private _sOffice;
|
||||
private _firefoxPDFConversionWarning;
|
||||
private _experimentalEditablePPTXWarning;
|
||||
constructor(opts: ConverterOption);
|
||||
get browser(): Promise<Browser>;
|
||||
get template(): Template;
|
||||
get sOffice(): SOffice;
|
||||
convert(markdown: string, file?: File, { fallbackToPrintableTemplate, }?: {
|
||||
fallbackToPrintableTemplate?: boolean;
|
||||
}): Promise<TemplateResult>;
|
||||
convertFile(file: File, opts?: ConvertFileOption): Promise<ConvertResult>;
|
||||
convertFiles(files: File[], opts?: ConvertFileOption): Promise<void>;
|
||||
private convertFileToHTML;
|
||||
private convertFileToNotes;
|
||||
private convertFileToPDF;
|
||||
private convertFileToImage;
|
||||
private convertFileToPPTX;
|
||||
private convertFileToEditablePPTX;
|
||||
private generateEngine;
|
||||
private usePuppeteer;
|
||||
private trackFailedLocalFileAccess;
|
||||
}
|
||||
24
node_modules/@marp-team/marp-cli/types/src/engine.d.ts
generated
vendored
Normal file
24
node_modules/@marp-team/marp-cli/types/src/engine.d.ts
generated
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
import type { Marp } from '@marp-team/marp-core';
|
||||
import { Marpit } from '@marp-team/marpit';
|
||||
type FunctionalEngine<T extends typeof Marpit = typeof Marpit> = (constructorOptions: ConstructorParameters<T>[0] & {
|
||||
readonly marp: Marp;
|
||||
}) => Marpit | typeof Marpit | Promise<Marpit | typeof Marpit>;
|
||||
export type Engine<T extends typeof Marpit = typeof Marpit> = Marpit | typeof Marpit | FunctionalEngine<T>;
|
||||
export type ResolvableEngine<T extends typeof Marpit = typeof Marpit> = Engine<T> | string;
|
||||
export declare class ResolvedEngine<T extends Engine = Engine> {
|
||||
klass: T;
|
||||
private _cachedPackage?;
|
||||
private static _defaultEngine;
|
||||
static resolve<T extends Engine = Engine>(engine: ResolvableEngine | ResolvableEngine[], from?: string): Promise<ResolvedEngine<T>>;
|
||||
static resolveDefaultEngine(): Promise<ResolvedEngine<typeof Marp>>;
|
||||
getPackage(): Promise<Record<string, any> | null>;
|
||||
private static resolveModule;
|
||||
private constructor();
|
||||
private resolvePackage;
|
||||
static isESMAvailable(): boolean;
|
||||
private static _silentImportOrRequire;
|
||||
private static _silentImport;
|
||||
private static _silentRequire;
|
||||
private findClassPath;
|
||||
}
|
||||
export {};
|
||||
1
node_modules/@marp-team/marp-cli/types/src/engine/directive-plugin.d.ts
generated
vendored
Normal file
1
node_modules/@marp-team/marp-cli/types/src/engine/directive-plugin.d.ts
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
export declare const generateOverrideGlobalDirectivesPlugin: (directives: Record<string, any>) => (md: any) => void;
|
||||
17
node_modules/@marp-team/marp-cli/types/src/engine/info-plugin.d.ts
generated
vendored
Normal file
17
node_modules/@marp-team/marp-cli/types/src/engine/info-plugin.d.ts
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
export interface EngineInfo {
|
||||
author: string | undefined;
|
||||
description: string | undefined;
|
||||
image: string | undefined;
|
||||
keywords: string[] | undefined;
|
||||
lang: string | undefined;
|
||||
length: number;
|
||||
size: {
|
||||
height: number;
|
||||
width: number;
|
||||
};
|
||||
theme: string | undefined;
|
||||
title: string | undefined;
|
||||
url: string | undefined;
|
||||
}
|
||||
export declare const engineInfo: unique symbol;
|
||||
export default function infoPlugin(md: any): void;
|
||||
9
node_modules/@marp-team/marp-cli/types/src/engine/meta-plugin.d.ts
generated
vendored
Normal file
9
node_modules/@marp-team/marp-cli/types/src/engine/meta-plugin.d.ts
generated
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
import { Marpit } from '@marp-team/marpit';
|
||||
import type MarkdownIt from 'markdown-it';
|
||||
type Token = ReturnType<MarkdownIt['parse']>[number];
|
||||
export declare const keywordsAsArray: (keywords: unknown) => string[] | undefined;
|
||||
export declare const detectTitle: (tokens: Token[]) => string | undefined;
|
||||
export default function metaPlugin(md: MarkdownIt & {
|
||||
marpit: Marpit;
|
||||
}): void;
|
||||
export {};
|
||||
36
node_modules/@marp-team/marp-cli/types/src/engine/pdf/outline-plugin.d.ts
generated
vendored
Normal file
36
node_modules/@marp-team/marp-cli/types/src/engine/pdf/outline-plugin.d.ts
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
import type { Marpit } from '@marp-team/marpit';
|
||||
import type MarkdownIt from 'markdown-it';
|
||||
import type { PDFOutline } from '../../utils/pdf';
|
||||
export interface OutlinePage {
|
||||
pageNumber: number;
|
||||
headings: OutlineHeading[];
|
||||
}
|
||||
export interface OutlineHeading {
|
||||
level: number;
|
||||
key: string;
|
||||
}
|
||||
export type OutlineData = Record<string, [
|
||||
x: number,
|
||||
y: number,
|
||||
text: string
|
||||
] | undefined>;
|
||||
export declare const pdfOutlineAttr: "data-marp-cli-pdf-outline";
|
||||
export declare const pdfOutlineInfo: unique symbol;
|
||||
export declare function pdfOutlinePlugin(md: MarkdownIt & {
|
||||
marpit: Marpit;
|
||||
}): void;
|
||||
export declare const pptrOutlinePositionResolver: (headings: OutlineHeading[], attr: typeof pdfOutlineAttr) => OutlineData;
|
||||
type GeneratePDFOutlinesOptions = {
|
||||
pages: boolean;
|
||||
data?: OutlineData;
|
||||
} & ({
|
||||
headings: false;
|
||||
} | {
|
||||
headings: true;
|
||||
size: {
|
||||
width: number;
|
||||
height: number;
|
||||
};
|
||||
});
|
||||
export declare const generatePDFOutlines: (pages: OutlinePage[], opts: GeneratePDFOutlinesOptions) => PDFOutline[];
|
||||
export {};
|
||||
9
node_modules/@marp-team/marp-cli/types/src/engine/transition-plugin.d.ts
generated
vendored
Normal file
9
node_modules/@marp-team/marp-cli/types/src/engine/transition-plugin.d.ts
generated
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
import { Marpit } from '@marp-team/marpit';
|
||||
import type MarkdownIt from 'markdown-it';
|
||||
export declare const engineTransition: unique symbol;
|
||||
export interface EngineTransition {
|
||||
builtinTransitionStyle: string;
|
||||
}
|
||||
export default function transitionPlugin(md: MarkdownIt & {
|
||||
marpit: Marpit;
|
||||
}): void;
|
||||
19
node_modules/@marp-team/marp-cli/types/src/error.d.ts
generated
vendored
Normal file
19
node_modules/@marp-team/marp-cli/types/src/error.d.ts
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
export declare class CLIError extends Error {
|
||||
readonly errorCode: number;
|
||||
readonly message: string;
|
||||
readonly name = "CLIError";
|
||||
constructor(message: string, errorCode?: number);
|
||||
toString(): string;
|
||||
}
|
||||
export declare const CLIErrorCode: {
|
||||
readonly INVALID_OPTIONS: -1;
|
||||
readonly GENERAL_ERROR: 1;
|
||||
readonly NOT_FOUND_BROWSER: 2;
|
||||
readonly LISTEN_PORT_IS_ALREADY_USED: 3;
|
||||
readonly CANNOT_SPAWN_SNAP_CHROMIUM: 4;
|
||||
readonly NOT_FOUND_SOFFICE: 5;
|
||||
/** @deprecated NOT_FOUND_CHROMIUM is renamed to NOT_FOUND_BROWSER. */
|
||||
readonly NOT_FOUND_CHROMIUM: 2;
|
||||
};
|
||||
export declare function error(msg: string, errorCode?: number): never;
|
||||
export declare const isError: (e: unknown) => e is NodeJS.ErrnoException;
|
||||
44
node_modules/@marp-team/marp-cli/types/src/file.d.ts
generated
vendored
Normal file
44
node_modules/@marp-team/marp-cli/types/src/file.d.ts
generated
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
import { Options as GlobbyOptions } from 'globby';
|
||||
export declare const markdownExtensions: string[];
|
||||
interface GenerateTmpFileInterfaceOptions {
|
||||
extension?: `.${string}`;
|
||||
}
|
||||
export declare const generateTmpFileInterface: ({ extension, }?: GenerateTmpFileInterfaceOptions) => Promise<File.TmpFileInterface>;
|
||||
export interface FileConvertOption {
|
||||
extension?: string;
|
||||
page?: number;
|
||||
}
|
||||
export declare enum FileType {
|
||||
File = 0,
|
||||
StandardIO = 1,
|
||||
Null = 2
|
||||
}
|
||||
export declare class File {
|
||||
buffer?: Buffer;
|
||||
inputDir?: string;
|
||||
type: FileType;
|
||||
readonly path: string;
|
||||
constructor(filepath: string);
|
||||
get absolutePath(): string;
|
||||
get absoluteFileScheme(): string;
|
||||
convert(output: string | false | undefined, opts: FileConvertOption): File;
|
||||
load(): Promise<Buffer<ArrayBufferLike>>;
|
||||
relativePath(from?: string): string;
|
||||
save(): Promise<void>;
|
||||
saveTmpFile({ extension, }?: GenerateTmpFileInterfaceOptions): Promise<File.TmpFileInterface>;
|
||||
private convertName;
|
||||
private saveToFile;
|
||||
private static stdinBuffer?;
|
||||
static findPath(opts: GlobbyOptions, ...paths: string[]): Promise<string[]>;
|
||||
static find(...paths: string[]): Promise<File[]>;
|
||||
static findDir(directory: string): Promise<File[]>;
|
||||
static stdin(): Promise<File | undefined>;
|
||||
private static initialize;
|
||||
}
|
||||
export declare namespace File {
|
||||
interface TmpFileInterface extends AsyncDisposable, Disposable {
|
||||
path: string;
|
||||
cleanup: () => Promise<void>;
|
||||
}
|
||||
}
|
||||
export {};
|
||||
23
node_modules/@marp-team/marp-cli/types/src/index.d.ts
generated
vendored
Normal file
23
node_modules/@marp-team/marp-cli/types/src/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
import type { Marp } from '@marp-team/marp-core';
|
||||
import type { Marpit } from '@marp-team/marpit';
|
||||
import type { IMarpCLIConfig } from './config';
|
||||
import type { ResolvableEngine } from './engine';
|
||||
import { apiInterface } from './marp-cli';
|
||||
type Overwrite<T, U> = Omit<T, Extract<keyof T, keyof U>> & U;
|
||||
export { ObservationHelper, waitForObservation } from './marp-cli';
|
||||
export { CLIError, CLIErrorCode } from './error';
|
||||
export declare const marpCli: (argv: string[], opts?: import("./marp-cli").MarpCLIAPIOptions) => Promise<number>;
|
||||
export default apiInterface;
|
||||
export interface Config<Engine extends typeof Marpit = typeof Marp> extends Overwrite<Omit<IMarpCLIConfig,
|
||||
/**
|
||||
* This option is internal setting for collaboration with Marp team tools such as Marp for VS Code.
|
||||
* It is not designed for users because the result of conversion may break if set wrong base URL.
|
||||
*/
|
||||
'baseUrl'>, {
|
||||
engine?: ResolvableEngine<Engine>;
|
||||
image?: 'png' | 'jpeg';
|
||||
images?: 'png' | 'jpeg';
|
||||
options?: ConstructorParameters<Engine>[0];
|
||||
}> {
|
||||
}
|
||||
export declare const defineConfig: <Engine extends typeof Marpit = typeof Marp>(config: Config<Engine>) => Config<Engine>;
|
||||
16
node_modules/@marp-team/marp-cli/types/src/marp-cli.d.ts
generated
vendored
Normal file
16
node_modules/@marp-team/marp-cli/types/src/marp-cli.d.ts
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
export interface MarpCLIOptions {
|
||||
baseUrl?: string;
|
||||
stdin: boolean;
|
||||
throwErrorAlways: boolean;
|
||||
}
|
||||
export type MarpCLIAPIOptions = Pick<MarpCLIOptions, 'baseUrl'>;
|
||||
export interface MarpCLICLIOptions {
|
||||
debug?: string | boolean;
|
||||
}
|
||||
export interface ObservationHelper {
|
||||
stop: () => void;
|
||||
}
|
||||
export declare const marpCli: (argv: string[], { baseUrl, stdin: defaultStdin, throwErrorAlways }: MarpCLIOptions) => Promise<number>;
|
||||
export declare const waitForObservation: () => Promise<ObservationHelper>;
|
||||
export declare const apiInterface: (argv: string[], opts?: MarpCLIAPIOptions) => Promise<number>;
|
||||
export declare const cliInterface: (argv: string[]) => Promise<number>;
|
||||
3
node_modules/@marp-team/marp-cli/types/src/patch.d.ts
generated
vendored
Normal file
3
node_modules/@marp-team/marp-cli/types/src/patch.d.ts
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
export declare const patch: () => void;
|
||||
export declare const enableCompileCache: () => void;
|
||||
export declare const patchSegmenter: () => void;
|
||||
5
node_modules/@marp-team/marp-cli/types/src/prepare.d.ts
generated
vendored
Normal file
5
node_modules/@marp-team/marp-cli/types/src/prepare.d.ts
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
export declare const defaultDebug = "marp-cli*";
|
||||
export declare const cliPrepare: (args?: string[]) => {
|
||||
args: string[];
|
||||
debug: string | false;
|
||||
};
|
||||
43
node_modules/@marp-team/marp-cli/types/src/preview.d.ts
generated
vendored
Normal file
43
node_modules/@marp-team/marp-cli/types/src/preview.d.ts
generated
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
import { EventEmitter } from 'node:events';
|
||||
import type { Page, Browser } from 'puppeteer-core';
|
||||
import TypedEmitter from 'typed-emitter';
|
||||
import { BrowserManager } from './browser/manager';
|
||||
import { ConvertType } from './converter';
|
||||
import { File } from './file';
|
||||
export declare namespace Preview {
|
||||
type PartialByKeys<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>> & Partial<Pick<T, K>>;
|
||||
export type Events = {
|
||||
close: (window: any) => void;
|
||||
exit: () => void;
|
||||
launch: () => void;
|
||||
open: (window: any, location: string) => void;
|
||||
opening: (location: string) => void;
|
||||
};
|
||||
export interface Options {
|
||||
browserManager: BrowserManager;
|
||||
height: number;
|
||||
width: number;
|
||||
}
|
||||
export type ConstructorOptions = PartialByKeys<Options, 'height' | 'width'>;
|
||||
export interface Window extends EventEmitter {
|
||||
page: Page;
|
||||
close: () => Promise<void>;
|
||||
load: (uri: string) => Promise<void>;
|
||||
}
|
||||
export {};
|
||||
}
|
||||
declare const Preview_base: new () => TypedEmitter<Preview.Events>;
|
||||
export declare class Preview extends Preview_base {
|
||||
readonly options: Preview.Options;
|
||||
private puppeteerInternal;
|
||||
constructor(opts: Preview.ConstructorOptions);
|
||||
get puppeteer(): Browser | undefined;
|
||||
open(location: string): Promise<Preview.Window>;
|
||||
exit(): Promise<void>;
|
||||
private get browserManager();
|
||||
private createWindowObject;
|
||||
private createWindow;
|
||||
private launch;
|
||||
}
|
||||
export declare function fileToURI(file: File, type: ConvertType): string;
|
||||
export {};
|
||||
40
node_modules/@marp-team/marp-cli/types/src/server.d.ts
generated
vendored
Normal file
40
node_modules/@marp-team/marp-cli/types/src/server.d.ts
generated
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
import fs from 'node:fs';
|
||||
import { Server as HttpServer } from 'node:http';
|
||||
import type { Express } from 'express';
|
||||
import TypedEmitter from 'typed-emitter';
|
||||
import { Converter, ConvertedCallback } from './converter';
|
||||
declare const Server_base: new () => TypedEmitter<Server.Events>;
|
||||
export declare class Server extends Server_base {
|
||||
readonly converter: Converter;
|
||||
readonly inputDir: string;
|
||||
readonly options: Server.Options;
|
||||
readonly port: number;
|
||||
directoryIndex: string[];
|
||||
httpServer: HttpServer | undefined;
|
||||
server: Express | undefined;
|
||||
private static script;
|
||||
constructor(converter: Converter, opts?: Server.Options);
|
||||
start(): Promise<void>;
|
||||
stop(): Promise<void>;
|
||||
private convertMarkdown;
|
||||
private loadScript;
|
||||
private preprocess;
|
||||
private setup;
|
||||
private template;
|
||||
private validateMarkdown;
|
||||
}
|
||||
export declare namespace Server {
|
||||
type Events = {
|
||||
converted: ConvertedCallback;
|
||||
error: (err: Error) => void;
|
||||
};
|
||||
interface Options {
|
||||
directoryIndex?: string[];
|
||||
}
|
||||
interface ValidateResult {
|
||||
path: string;
|
||||
stats?: fs.Stats;
|
||||
valid: boolean;
|
||||
}
|
||||
}
|
||||
export {};
|
||||
2
node_modules/@marp-team/marp-cli/types/src/server/server-index.d.ts
generated
vendored
Normal file
2
node_modules/@marp-team/marp-cli/types/src/server/server-index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
export declare const showAllKey = "marp-cli-show-all";
|
||||
export default function serverIndex(): void;
|
||||
5
node_modules/@marp-team/marp-cli/types/src/soffice/finder.d.ts
generated
vendored
Normal file
5
node_modules/@marp-team/marp-cli/types/src/soffice/finder.d.ts
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
export declare const findSOffice: ({ preferredPath, }?: {
|
||||
preferredPath?: string;
|
||||
}) => Promise<{
|
||||
readonly path: string;
|
||||
}>;
|
||||
19
node_modules/@marp-team/marp-cli/types/src/soffice/soffice.d.ts
generated
vendored
Normal file
19
node_modules/@marp-team/marp-cli/types/src/soffice/soffice.d.ts
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
export interface SOfficeOptions {
|
||||
path?: string;
|
||||
}
|
||||
export interface SOfficeProfileDir {
|
||||
path: string;
|
||||
fileURL: string;
|
||||
}
|
||||
export declare class SOffice {
|
||||
#private;
|
||||
preferredPath?: string;
|
||||
private _path;
|
||||
private _profileDir;
|
||||
private static _spawnQueue;
|
||||
constructor(opts?: SOfficeOptions);
|
||||
get path(): Promise<string>;
|
||||
get profileDir(): Promise<SOfficeProfileDir>;
|
||||
spawn(args: string[]): Promise<void>;
|
||||
private setProfileDir;
|
||||
}
|
||||
2
node_modules/@marp-team/marp-cli/types/src/templates/bespoke/bespoke.d.ts
generated
vendored
Normal file
2
node_modules/@marp-team/marp-cli/types/src/templates/bespoke/bespoke.d.ts
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
declare const bespokeTemplate: (target?: HTMLElement) => any;
|
||||
export default bespokeTemplate;
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user