Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: syntax highlighting #55

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 77 additions & 1 deletion dist/npm-to-yarn.mjs
Original file line number Diff line number Diff line change
@@ -1,3 +1,58 @@
import { codeToHtml } from 'shiki';

/*! *****************************************************************************
Copyright (c) Microsoft Corporation.

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.

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.
***************************************************************************** */

function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}

function __generator(thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
}

var unchangedCLICommands = [
'test',
'login',
Expand Down Expand Up @@ -632,6 +687,27 @@ function convert(str, to) {
return str.replace(/npm(?: +([^&\n\r]*))?/gm, npmToYarn);
}
}
/**
* Returns highlighted html string
*/
function highlight(command, theme) {
if (theme === void 0) { theme = 'light'; }
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, codeToHtml(command, {
lang: 'shell',
theme: "github-".concat(theme)
}).then(function (html) {
console.log(html);
})];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
}

export { convert as default };
export { convert, highlight };
//# sourceMappingURL=npm-to-yarn.mjs.map
2 changes: 1 addition & 1 deletion dist/npm-to-yarn.mjs.map

Large diffs are not rendered by default.

85 changes: 80 additions & 5 deletions dist/npm-to-yarn.umd.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/npm-to-yarn.umd.js.map

Large diffs are not rendered by default.

6 changes: 5 additions & 1 deletion dist/types/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
/**
* Converts between npm and yarn command
*/
export default function convert(str: string, to: 'npm' | 'yarn' | 'pnpm' | 'bun'): string;
export declare function convert(str: string, to: 'npm' | 'yarn' | 'pnpm' | 'bun'): string;
/**
* Returns highlighted html string
*/
export declare function highlight(command: string, theme?: 'light' | 'dark'): Promise<void>;
57 changes: 57 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
"prettier-standard": "^16.4.1",
"rimraf": "^3.0.2",
"rollup": "^3.18.0",
"shiki": "^1.12.1",
"ts-jest": "^29.0.5",
"typescript": "^4.9.4"
}
Expand Down
14 changes: 11 additions & 3 deletions rollup.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,19 @@ export default [
file: 'dist/npm-to-yarn.mjs',
format: 'es',
name: 'n2y',
sourcemap: true
sourcemap: true,
globals: {
shiki: 'shiki'
}
},
{
file: 'dist/npm-to-yarn.umd.js',
format: 'umd',
name: 'n2y',
sourcemap: true
sourcemap: true,
globals: {
shiki: 'shiki'
}
}
],
plugins: [
Expand All @@ -28,7 +34,9 @@ export default [
})
],
// Indicate here external modules you don't wanna include in your bundle (i.e.: 'lodash')
external: [],
external: [
'shiki',
],
watch: {
include: 'src/**'
}
Expand Down
16 changes: 15 additions & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@ import { npmToYarn } from './npmToYarn'
import { npmToPnpm } from './npmToPnpm'
import { npmToBun } from './npmToBun'

import { codeToHtml } from 'shiki'

/**
* Converts between npm and yarn command
*/
export default function convert (str: string, to: 'npm' | 'yarn' | 'pnpm' | 'bun'): string {
export function convert (str: string, to: 'npm' | 'yarn' | 'pnpm' | 'bun'): string {
if (to === 'npm') {
return str.replace(/yarn(?: +([^&\n\r]*))?/gm, yarnToNPM)
} else if (to === 'pnpm') {
Expand All @@ -17,3 +19,15 @@ export default function convert (str: string, to: 'npm' | 'yarn' | 'pnpm' | 'bun
return str.replace(/npm(?: +([^&\n\r]*))?/gm, npmToYarn)
}
}

/**
* Returns highlighted html string
*/
export async function highlight (command: string, theme: 'light' | 'dark' = 'light') {
await codeToHtml(command, {
lang: 'shell',
theme: `github-${theme}`
}).then((html) => {
console.log(html)
})
}
2 changes: 1 addition & 1 deletion test/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* global it, expect, describe */

import convert from '../src'
import { convert } from '../src'

describe('NPM tests', () => {
const tests: [npm: string, yarn: string, pnpm: string, bun: string][] = [
Expand Down
Loading