feat: Complete zCode CLI X with Telegram bot integration

- Add full Telegram bot functionality with Z.AI API integration
- Implement 4 tools: Bash, FileEdit, WebSearch, Git
- Add 3 agents: Code Reviewer, Architect, DevOps Engineer
- Add 6 skills for common coding tasks
- Add systemd service file for 24/7 operation
- Add nginx configuration for HTTPS webhook
- Add comprehensive documentation
- Implement WebSocket server for real-time updates
- Add logging system with Winston
- Add environment validation

🤖 zCode CLI X - Agentic coder with Z.AI + Telegram integration
This commit is contained in:
admin
2026-05-05 09:01:26 +00:00
Unverified
parent 4a7035dd92
commit 875c7f9b91
24688 changed files with 3224957 additions and 221 deletions

View File

@@ -0,0 +1,15 @@
ISC License
Copyright (c) 2016, Felix Frederick Becker
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

View File

@@ -0,0 +1,88 @@
# cli-highlight
> Syntax highlighting in your terminal
[![npm](https://img.shields.io/npm/v/cli-highlight.svg)](https://www.npmjs.com/package/cli-highlight)
[![downloads](https://img.shields.io/npm/dm/cli-highlight.svg)](https://www.npmjs.com/package/cli-highlight)
[![CI status](https://github.com/felixfbecker/cli-highlight/workflows/build/badge.svg?branch=main)](https://github.com/felixfbecker/cli-highlight/actions)
[![codecov](https://codecov.io/gh/felixfbecker/cli-highlight/branch/main/graph/badge.svg)](https://codecov.io/gh/felixfbecker/cli-highlight)
![node](http://img.shields.io/node/v/cli-highlight.svg)
[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)
[![license](https://img.shields.io/npm/l/cli-highlight.svg)](https://github.com/felixfbecker/cli-highlight/blob/main/LICENSE.txt)
## Example
![Example Output](media/screenshot.svg)
## CLI Usage
Output a file
```sh
$ highlight package.json
```
Color output of another program with piping. Example: A database migration script that logs SQL Queries
```sh
$ db-migrate --dry-run | highlight
```
Command line options:
```html
Usage: highlight [options] [file]
Outputs a file or STDIN input with syntax highlighting
Options:
--language, -l Set the langugage explicitely
If omitted will try to auto-detect
--theme, -t Use a theme defined in a JSON file
--version, -v Show version number [boolean]
--help, -h Show help [boolean]
```
## Programmatic Usage
You can use this module programmatically to highlight logs of your Node app. Example:
```js
const highlight = require('cli-highlight').highlight
const Sequelize = require('sequelize')
const db = new Sequelize(process.env.DB, {
logging(log) {
console.log(highlight(log, {language: 'sql', ignoreIllegals: true}))
}
})
```
Detailed API documenation can be found [here](http://cli-highlight.surge.sh/).
## Themes
You can write your own theme in a JSON file and pass it with `--theme`.
The key must be one of the [highlight.js CSS class names](http://highlightjs.readthedocs.io/en/latest/css-classes-reference.html) or `"default"`,
and the value must be one or an array of [Chalk styles](https://github.com/chalk/chalk#styles) to be applied to that token.
```json
{
"keyword": "blue",
"built_in": ["cyan", "dim"],
"string": "red",
"default": "gray"
}
```
The style for `"default"` will be applied to any substrings not handled by highlight.js. The specifics depend on the language but this typically includes things like commas in parameter lists, semicolons at the end of lines, etc.
The theme is combined with the [default theme](http://cli-highlight.surge.sh/globals.html#default_theme).
The default theme is still not colored a lot or optimized for many languages, PRs welcome!
## Supported Languages
[All languages of highlight.js](https://highlightjs.org/static/demo/) are supported.
Check a [CI build](https://travis-ci.org/felixfbecker/cli-highlight) for examples of all the different languages and their highlighting.
## Contributing
The module is written in TypeScript and can be compiled with `npm run build`.
`npm run watch` starts `tsc` in watch mode. Tests are written with mocha.
Improving language support is done by adding more colors to the tokens in the default theme and writing more tests.

View File

@@ -0,0 +1,2 @@
#!/usr/bin/env node
require('../dist/cli');

View File

@@ -0,0 +1 @@
export {};

View File

@@ -0,0 +1,102 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var fs = __importStar(require("mz/fs"));
var path = __importStar(require("path"));
var yargs_1 = __importDefault(require("yargs"));
var _1 = require(".");
var theme_1 = require("./theme");
yargs_1.default
.option('theme', {
alias: 't',
nargs: 1,
description: 'Use a theme defined in a JSON file',
})
.usage(['', 'Usage: highlight [options] [file]', '', 'Outputs a file or STDIN input with syntax highlighting'].join('\n'))
.option('language', {
alias: 'l',
nargs: 1,
description: 'Set the langugage explicitely\nIf omitted will try to auto-detect',
})
.version()
.help('help')
.alias('help', 'h')
.alias('version', 'v');
var argv = yargs_1.default.argv;
var file = argv._[0];
var codePromise;
if (!file && !process.stdin.isTTY) {
// Input from STDIN
process.stdin.setEncoding('utf8');
var code_1 = '';
process.stdin.on('readable', function () {
var chunk = process.stdin.read();
if (chunk !== null) {
code_1 += chunk;
}
});
codePromise = new Promise(function (resolve) {
process.stdin.on('end', function () {
var chunk = process.stdin.read();
if (chunk !== null) {
code_1 += chunk;
}
resolve(code_1);
});
});
}
else if (file) {
// Read file
codePromise = fs.readFile(file, 'utf-8');
}
else {
yargs_1.default.showHelp();
process.exit(1);
}
Promise.all([codePromise, argv.theme ? fs.readFile(argv.theme, 'utf8') : undefined])
.then(function (_a) {
var code = _a[0], theme = _a[1];
var options = {
ignoreIllegals: true,
theme: (theme && theme_1.parse(theme)) || undefined,
};
if (file) {
var extension = path.extname(file).slice(1);
if (extension && _1.supportsLanguage(extension)) {
options.language = extension;
}
}
options.language = argv.language;
return new Promise(function (resolve, reject) {
return process.stdout.write(_1.highlight(code, options), function (error) { return (error ? reject(error) : resolve()); });
});
})
.then(function () {
process.exit(0);
})
.catch(function (error) {
console.error(error);
process.exit(1);
});
//# sourceMappingURL=cli.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,53 @@
import { Theme } from './theme';
/**
* Options passed to [[highlight]]
*/
export interface HighlightOptions {
/**
* Can be a name, file extension, alias etc. If omitted, tries to auto-detect language.
*/
language?: string;
/**
* When present and evaluates to a true value, forces highlighting to finish even in case of
* detecting illegal syntax for the language instead of throwing an exception.
*/
ignoreIllegals?: boolean;
/**
* Optional array of language names and aliases restricting detection to only those languages.
*/
languageSubset?: string[];
/**
* Supply a custom theme where you override language tokens with own formatter functions. Every
* token that is not overriden falls back to the [[DEFAULT_THEME]]
*/
theme?: Theme;
}
/**
* Apply syntax highlighting to `code` with ASCII color codes. The language is automatically
* detected if not set.
*
* ```ts
* import {highlight} from 'cli-highlight';
* import * as fs from 'fs';
*
* fs.readFile('package.json', 'utf8', (err: any, json: string) => {
* console.log('package.json:');
* console.log(highlight(json));
* });
* ```
*
* @param code The code to highlight
* @param options Optional options
*/
export declare function highlight(code: string, options?: HighlightOptions): string;
/**
* Returns all supported languages
*/
export declare function listLanguages(): string[];
/**
* Returns true if the language is supported
* @param name A language name, alias or file extension
*/
export declare function supportsLanguage(name: string): boolean;
export default highlight;
export * from './theme';

View File

@@ -0,0 +1,112 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.supportsLanguage = exports.listLanguages = exports.highlight = void 0;
var hljs = __importStar(require("highlight.js"));
var parse5 = __importStar(require("parse5"));
var parse5_htmlparser2_tree_adapter_1 = __importDefault(require("parse5-htmlparser2-tree-adapter"));
var theme_1 = require("./theme");
function colorizeNode(node, theme, context) {
if (theme === void 0) { theme = {}; }
switch (node.type) {
case 'text': {
var text = node.data;
if (context === undefined) {
return (theme.default || theme_1.DEFAULT_THEME.default || theme_1.plain)(text);
}
return text;
}
case 'tag': {
var hljsClass = /hljs-(\w+)/.exec(node.attribs.class);
if (hljsClass) {
var token_1 = hljsClass[1];
var nodeData = node.childNodes
.map(function (node) { return colorizeNode(node, theme, token_1); })
.join('');
return (theme[token_1] || theme_1.DEFAULT_THEME[token_1] || theme_1.plain)(nodeData);
}
// Return the data itself when the class name isn't prefixed with a highlight.js token prefix.
// This is common in instances of sublanguages (JSX, Markdown Code Blocks, etc.)
return node.childNodes.map(function (node) { return colorizeNode(node, theme); }).join('');
}
}
throw new Error('Invalid node type ' + node.type);
}
function colorize(code, theme) {
if (theme === void 0) { theme = {}; }
var fragment = parse5.parseFragment(code, {
treeAdapter: parse5_htmlparser2_tree_adapter_1.default,
});
return fragment.childNodes.map(function (node) { return colorizeNode(node, theme); }).join('');
}
/**
* Apply syntax highlighting to `code` with ASCII color codes. The language is automatically
* detected if not set.
*
* ```ts
* import {highlight} from 'cli-highlight';
* import * as fs from 'fs';
*
* fs.readFile('package.json', 'utf8', (err: any, json: string) => {
* console.log('package.json:');
* console.log(highlight(json));
* });
* ```
*
* @param code The code to highlight
* @param options Optional options
*/
function highlight(code, options) {
if (options === void 0) { options = {}; }
var html;
if (options.language) {
html = hljs.highlight(code, { language: options.language, ignoreIllegals: options.ignoreIllegals }).value;
}
else {
html = hljs.highlightAuto(code, options.languageSubset).value;
}
return colorize(html, options.theme);
}
exports.highlight = highlight;
/**
* Returns all supported languages
*/
function listLanguages() {
return hljs.listLanguages();
}
exports.listLanguages = listLanguages;
/**
* Returns true if the language is supported
* @param name A language name, alias or file extension
*/
function supportsLanguage(name) {
return !!hljs.getLanguage(name);
}
exports.supportsLanguage = supportsLanguage;
exports.default = highlight;
__exportStar(require("./theme"), exports);
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1 @@
export {};

View File

@@ -0,0 +1,62 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-disable no-sync */
var fs = __importStar(require("fs"));
var __1 = require("..");
function test(language, code) {
it("should color " + language + " correctly", function () {
var highlighted = __1.highlight(code);
if (process.env.OUTPUT_CODE_SAMPLES) {
console.log(language + ':\n\n' + highlighted);
}
expect(highlighted).toMatchSnapshot();
});
}
describe('highlight()', function () {
var fixtures = fs.readdirSync(__dirname + "/__fixtures__");
for (var _i = 0, fixtures_1 = fixtures; _i < fixtures_1.length; _i++) {
var fixture = fixtures_1[_i];
var fixturePath = __dirname + "/__fixtures__/" + fixture;
if (fs.statSync(fixturePath).isFile()) {
var language = fixture.split('.')[0];
test(language, fs.readFileSync(fixturePath, 'utf8'));
}
}
});
describe('listLanguages()', function () {
it('should list the supported languages', function () {
var languages = __1.listLanguages();
expect(languages).toBeInstanceOf(Array);
expect(languages.length).toBeGreaterThan(0);
});
});
describe('supportsLanguage()', function () {
it('should return true if the language is supported', function () {
var supports = __1.supportsLanguage('json');
expect(supports).toBe(true);
});
it('should return false if the language is not supported', function () {
var supports = __1.supportsLanguage('notsupported');
expect(supports).toBe(false);
});
});
//# sourceMappingURL=test.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/test/test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,4BAA4B;AAC5B,qCAAwB;AACxB,wBAA+D;AAE/D,SAAS,IAAI,CAAC,QAAgB,EAAE,IAAY;IACxC,EAAE,CAAC,kBAAgB,QAAQ,eAAY,EAAE;QACrC,IAAM,WAAW,GAAG,aAAS,CAAC,IAAI,CAAC,CAAA;QAEnC,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE;YACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC,CAAA;SAChD;QAED,MAAM,CAAC,WAAW,CAAC,CAAC,eAAe,EAAE,CAAA;IACzC,CAAC,CAAC,CAAA;AACN,CAAC;AAED,QAAQ,CAAC,aAAa,EAAE;IACpB,IAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAI,SAAS,kBAAe,CAAC,CAAA;IAE5D,KAAsB,UAAQ,EAAR,qBAAQ,EAAR,sBAAQ,EAAR,IAAQ,EAAE;QAA3B,IAAM,OAAO,iBAAA;QACd,IAAM,WAAW,GAAM,SAAS,sBAAiB,OAAS,CAAA;QAE1D,IAAI,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,EAAE;YAC5B,IAAA,QAAQ,GAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAtB,CAAsB;YAErC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAA;SACvD;KACJ;AACL,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,iBAAiB,EAAE;IACxB,EAAE,CAAC,qCAAqC,EAAE;QACtC,IAAM,SAAS,GAAG,iBAAa,EAAE,CAAA;QACjC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QACvC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,oBAAoB,EAAE;IAC3B,EAAE,CAAC,iDAAiD,EAAE;QAClD,IAAM,QAAQ,GAAG,oBAAgB,CAAC,MAAM,CAAC,CAAA;QACzC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;IACF,EAAE,CAAC,sDAAsD,EAAE;QACvD,IAAM,QAAQ,GAAG,oBAAgB,CAAC,cAAc,CAAC,CAAA;QACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA"}

View File

@@ -0,0 +1,270 @@
/**
* A generic interface that holds all available language tokens.
*/
export interface Tokens<T> {
/**
* keyword in a regular Algol-style language
*/
keyword?: T;
/**
* built-in or library object (constant, class, function)
*/
built_in?: T;
/**
* user-defined type in a language with first-class syntactically significant types, like Haskell
*/
type?: T;
/**
* special identifier for a built-in value ("true", "false", "null")
*/
literal?: T;
/**
* number, including units and modifiers, if any.
*/
number?: T;
/**
* literal regular expression
*/
regexp?: T;
/**
* literal string, character
*/
string?: T;
/**
* parsed section inside a literal string
*/
subst?: T;
/**
* symbolic constant, interned string, goto label
*/
symbol?: T;
/**
* class or class-level declaration (interfaces, traits, modules, etc)
*/
class?: T;
/**
* function or method declaration
*/
function?: T;
/**
* name of a class or a function at the place of declaration
*/
title?: T;
/**
* block of function arguments (parameters) at the place of declaration
*/
params?: T;
/**
* comment
*/
comment?: T;
/**
* documentation markup within comments
*/
doctag?: T;
/**
* flags, modifiers, annotations, processing instructions, preprocessor directive, etc
*/
meta?: T;
/**
* keyword or built-in within meta construct
*/
'meta-keyword'?: T;
/**
* string within meta construct
*/
'meta-string'?: T;
/**
* heading of a section in a config file, heading in text markup
*/
section?: T;
/**
* XML/HTML tag
*/
tag?: T;
/**
* name of an XML tag, the first word in an s-expression
*/
name?: T;
/**
* s-expression name from the language standard library
*/
'builtin-name'?: T;
/**
* name of an attribute with no language defined semantics (keys in JSON, setting names in .ini), also sub-attribute within another highlighted object, like XML tag
*/
attr?: T;
/**
* name of an attribute followed by a structured value part, like CSS properties
*/
attribute?: T;
/**
* variable in a config or a template file, environment var expansion in a script
*/
variable?: T;
/**
* list item bullet in text markup
*/
bullet?: T;
/**
* code block in text markup
*/
code?: T;
/**
* emphasis in text markup
*/
emphasis?: T;
/**
* strong emphasis in text markup
*/
strong?: T;
/**
* mathematical formula in text markup
*/
formula?: T;
/**
* hyperlink in text markup
*/
link?: T;
/**
* quotation in text markup
*/
quote?: T;
/**
* tag selector in CSS
*/
'selector-tag'?: T;
/**
* #id selector in CSS
*/
'selector-id'?: T;
/**
* .class selector in CSS
*/
'selector-class'?: T;
/**
* [attr] selector in CSS
*/
'selector-attr'?: T;
/**
* :pseudo selector in CSS
*/
'selector-pseudo'?: T;
/**
* tag of a template language
*/
'template-tag'?: T;
/**
* variable in a template language
*/
'template-variable'?: T;
/**
* added or changed line in a diff
*/
addition?: T;
/**
* deleted line in a diff
*/
deletion?: T;
}
/**
* Possible styles that can be used on a token in a JSON theme.
* See the [chalk](https://github.com/chalk/chalk) module for more information.
* `plain` means no styling.
*/
export declare type Style = 'reset' | 'bold' | 'dim' | 'italic' | 'underline' | 'inverse' | 'hidden' | 'strikethrough' | 'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'gray' | 'bgBlack' | 'bgRed' | 'bgGreen' | 'bgYellow' | 'bgBlue' | 'bgMagenta' | 'bgCyan' | 'plain';
/**
* The schema of a JSON file defining a custom scheme. The key is a language token, while the value
* is a [chalk](https://github.com/chalk/chalk#styles) style.
*
* Example:
* ```json
* {
* "keyword": ["red", "bold"],
* "addition": "green",
* "deletion": ["red", "strikethrough"],
* "number": "plain"
* }
* ```
*/
export interface JsonTheme extends Tokens<Style | Style[]> {
}
/**
* Passed to [[highlight]] as the `theme` option. A theme is a map of language tokens to a function
* that takes in string value of the token and returns a new string with colorization applied
* (typically a [chalk](https://github.com/chalk/chalk) style), but you can also provide your own
* formatting functions.
*
* Example:
* ```ts
* import {Theme, plain} from 'cli-highlight';
* import chalk = require('chalk');
*
* const myTheme: Theme = {
* keyword: chalk.red.bold,
* addition: chalk.green,
* deletion: chalk.red.strikethrough,
* number: plain
* };
* ```
*/
export interface Theme extends Tokens<(codePart: string) => string> {
/**
* things not matched by any token
*/
default?: (codePart: string) => string;
}
/**
* Identity function for tokens that should not be styled (returns the input string as-is).
* See [[Theme]] for an example.
*/
export declare const plain: (codePart: string) => string;
/**
* The default theme. It is possible to override just individual keys.
*/
export declare const DEFAULT_THEME: Theme;
/**
* Converts a [[JsonTheme]] with string values to a [[Theme]] with formatter functions. Used by [[parse]].
*/
export declare function fromJson(json: JsonTheme): Theme;
/**
* Converts a [[Theme]] with formatter functions to a [[JsonTheme]] with string values. Used by [[stringify]].
*/
export declare function toJson(theme: Theme): JsonTheme;
/**
* Stringifies a [[Theme]] with formatter functions to a JSON string.
*
* ```ts
* import chalk = require('chalk');
* import {stringify} from 'cli-highlight';
* import * as fs from 'fs';
*
* const myTheme: Theme = {
* keyword: chalk.red.bold,
* addition: chalk.green,
* deletion: chalk.red.strikethrough,
* number: plain
* }
* const json = stringify(myTheme);
* fs.writeFile('mytheme.json', json, (err: any) => {
* if (err) throw err;
* console.log('Theme saved');
* });
* ```
*/
export declare function stringify(theme: Theme): string;
/**
* Parses a JSON string into a [[Theme]] with formatter functions.
*
* ```ts
* import * as fs from 'fs';
* import {parse, highlight} from 'cli-highlight';
*
* fs.readFile('mytheme.json', 'utf8', (err: any, json: string) => {
* if (err) throw err;
* const code = highlight('SELECT * FROM table', {theme: parse(json)});
* console.log(code);
* });
* ```
*/
export declare function parse(json: string): Theme;

View File

@@ -0,0 +1,265 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parse = exports.stringify = exports.toJson = exports.fromJson = exports.DEFAULT_THEME = exports.plain = void 0;
var chalk_1 = __importDefault(require("chalk"));
/**
* Identity function for tokens that should not be styled (returns the input string as-is).
* See [[Theme]] for an example.
*/
var plain = function (codePart) { return codePart; };
exports.plain = plain;
/**
* The default theme. It is possible to override just individual keys.
*/
exports.DEFAULT_THEME = {
/**
* keyword in a regular Algol-style language
*/
keyword: chalk_1.default.blue,
/**
* built-in or library object (constant, class, function)
*/
built_in: chalk_1.default.cyan,
/**
* user-defined type in a language with first-class syntactically significant types, like
* Haskell
*/
type: chalk_1.default.cyan.dim,
/**
* special identifier for a built-in value ("true", "false", "null")
*/
literal: chalk_1.default.blue,
/**
* number, including units and modifiers, if any.
*/
number: chalk_1.default.green,
/**
* literal regular expression
*/
regexp: chalk_1.default.red,
/**
* literal string, character
*/
string: chalk_1.default.red,
/**
* parsed section inside a literal string
*/
subst: exports.plain,
/**
* symbolic constant, interned string, goto label
*/
symbol: exports.plain,
/**
* class or class-level declaration (interfaces, traits, modules, etc)
*/
class: chalk_1.default.blue,
/**
* function or method declaration
*/
function: chalk_1.default.yellow,
/**
* name of a class or a function at the place of declaration
*/
title: exports.plain,
/**
* block of function arguments (parameters) at the place of declaration
*/
params: exports.plain,
/**
* comment
*/
comment: chalk_1.default.green,
/**
* documentation markup within comments
*/
doctag: chalk_1.default.green,
/**
* flags, modifiers, annotations, processing instructions, preprocessor directive, etc
*/
meta: chalk_1.default.grey,
/**
* keyword or built-in within meta construct
*/
'meta-keyword': exports.plain,
/**
* string within meta construct
*/
'meta-string': exports.plain,
/**
* heading of a section in a config file, heading in text markup
*/
section: exports.plain,
/**
* XML/HTML tag
*/
tag: chalk_1.default.grey,
/**
* name of an XML tag, the first word in an s-expression
*/
name: chalk_1.default.blue,
/**
* s-expression name from the language standard library
*/
'builtin-name': exports.plain,
/**
* name of an attribute with no language defined semantics (keys in JSON, setting names in
* .ini), also sub-attribute within another highlighted object, like XML tag
*/
attr: chalk_1.default.cyan,
/**
* name of an attribute followed by a structured value part, like CSS properties
*/
attribute: exports.plain,
/**
* variable in a config or a template file, environment var expansion in a script
*/
variable: exports.plain,
/**
* list item bullet in text markup
*/
bullet: exports.plain,
/**
* code block in text markup
*/
code: exports.plain,
/**
* emphasis in text markup
*/
emphasis: chalk_1.default.italic,
/**
* strong emphasis in text markup
*/
strong: chalk_1.default.bold,
/**
* mathematical formula in text markup
*/
formula: exports.plain,
/**
* hyperlink in text markup
*/
link: chalk_1.default.underline,
/**
* quotation in text markup
*/
quote: exports.plain,
/**
* tag selector in CSS
*/
'selector-tag': exports.plain,
/**
* #id selector in CSS
*/
'selector-id': exports.plain,
/**
* .class selector in CSS
*/
'selector-class': exports.plain,
/**
* [attr] selector in CSS
*/
'selector-attr': exports.plain,
/**
* :pseudo selector in CSS
*/
'selector-pseudo': exports.plain,
/**
* tag of a template language
*/
'template-tag': exports.plain,
/**
* variable in a template language
*/
'template-variable': exports.plain,
/**
* added or changed line in a diff
*/
addition: chalk_1.default.green,
/**
* deleted line in a diff
*/
deletion: chalk_1.default.red,
/**
* things not matched by any token
*/
default: exports.plain,
};
/**
* Converts a [[JsonTheme]] with string values to a [[Theme]] with formatter functions. Used by [[parse]].
*/
function fromJson(json) {
var theme = {};
for (var _i = 0, _a = Object.keys(json); _i < _a.length; _i++) {
var key = _a[_i];
var style = json[key];
if (Array.isArray(style)) {
;
theme[key] = style.reduce(function (previous, current) { return (current === 'plain' ? exports.plain : previous[current]); }, chalk_1.default);
}
else {
;
theme[key] = chalk_1.default[style];
}
}
return theme;
}
exports.fromJson = fromJson;
/**
* Converts a [[Theme]] with formatter functions to a [[JsonTheme]] with string values. Used by [[stringify]].
*/
function toJson(theme) {
var jsonTheme = {};
for (var _i = 0, _a = Object.keys(jsonTheme); _i < _a.length; _i++) {
var key = _a[_i];
var style = jsonTheme[key];
jsonTheme[key] = style._styles;
}
return jsonTheme;
}
exports.toJson = toJson;
/**
* Stringifies a [[Theme]] with formatter functions to a JSON string.
*
* ```ts
* import chalk = require('chalk');
* import {stringify} from 'cli-highlight';
* import * as fs from 'fs';
*
* const myTheme: Theme = {
* keyword: chalk.red.bold,
* addition: chalk.green,
* deletion: chalk.red.strikethrough,
* number: plain
* }
* const json = stringify(myTheme);
* fs.writeFile('mytheme.json', json, (err: any) => {
* if (err) throw err;
* console.log('Theme saved');
* });
* ```
*/
function stringify(theme) {
return JSON.stringify(toJson(theme));
}
exports.stringify = stringify;
/**
* Parses a JSON string into a [[Theme]] with formatter functions.
*
* ```ts
* import * as fs from 'fs';
* import {parse, highlight} from 'cli-highlight';
*
* fs.readFile('mytheme.json', 'utf8', (err: any, json: string) => {
* if (err) throw err;
* const code = highlight('SELECT * FROM table', {theme: parse(json)});
* console.log(code);
* });
* ```
*/
function parse(json) {
return fromJson(JSON.parse(json));
}
exports.parse = parse;
//# sourceMappingURL=theme.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,129 @@
{
"name": "cli-highlight",
"version": "2.1.11",
"description": "Syntax highlighting in your terminal",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"files": [
"dist",
"bin",
"README.md",
"LICENSE.txt"
],
"bin": {
"highlight": "bin/highlight"
},
"engines": {
"node": ">=8.0.0",
"npm": ">=5.0.0"
},
"scripts": {
"test": "jest",
"lint": "npm run eslint && npm run prettier",
"eslint": "eslint 'src/**/*.ts'",
"prettier": "prettier --write --list-different '**/{*.ts,*.json,.prettierrc}'",
"build": "tsc -p .",
"watch": "tsc -p . -w",
"typedoc": "typedoc --media media --mode file --excludeNotExported --out typedoc src/index.ts",
"semantic-release": "semantic-release"
},
"jest": {
"collectCoverage": true,
"transform": {
"^.+\\.tsx?$": "ts-jest"
},
"testRegex": "(/test/.*|/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$",
"testPathIgnorePatterns": [
"/node_modules/",
"/dist/",
"/src/test/__fixtures__/"
],
"coverageReporters": [
"json",
"text"
],
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"jsx",
"json"
]
},
"husky": {
"hooks": {
"commit-msg": "commitlint -e $HUSKY_GIT_PARAMS"
}
},
"release": {
"branches": [
"main"
],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/npm",
"@semantic-release/github",
[
"@eclass/semantic-release-surge",
{
"alias": "cli-highlight.surge.sh",
"assets": "./typedoc/",
"buildScriptName": "typedoc"
}
]
]
},
"commitlint": {
"extends": [
"@commitlint/config-conventional"
]
},
"repository": {
"type": "git",
"url": "https://github.com/felixfbecker/cli-highlight.git"
},
"keywords": [
"terminal",
"syntax",
"highlight",
"color",
"cli",
"ansi"
],
"author": "Felix Becker <felix.b@outlook.com>",
"license": "ISC",
"bugs": {
"url": "https://github.com/felixfbecker/cli-highlight/issues"
},
"homepage": "https://github.com/felixfbecker/cli-highlight#readme",
"dependencies": {
"chalk": "^4.0.0",
"highlight.js": "^10.7.1",
"mz": "^2.4.0",
"parse5": "^5.1.1",
"parse5-htmlparser2-tree-adapter": "^6.0.0",
"yargs": "^16.0.0"
},
"devDependencies": {
"@commitlint/cli": "^11.0.0",
"@commitlint/config-conventional": "^11.0.0",
"@eclass/semantic-release-surge": "^1.0.7",
"@sourcegraph/eslint-config": "^0.20.16",
"@sourcegraph/prettierrc": "^3.0.3",
"@types/jest": "^24.0.9",
"@types/mz": "0.0.32",
"@types/node": "^14.14.9",
"@types/parse5": "^5.0.2",
"@types/parse5-htmlparser2-tree-adapter": "^5.0.1",
"@types/yargs": "^13.0.0",
"eslint": "^7.14.0",
"husky": "^3.0.0",
"jest": "^24.1.0",
"prettier": "^2.2.0",
"semantic-release": "^17.2.4",
"ts-jest": "^24.0.0",
"typedoc": "^0.19.0",
"typescript": "^4.1.2"
}
}