12 Commits

Author SHA1 Message Date
dfd39b406a 3.0.3 2024-01-19 21:10:15 +01:00
2c9515fb86 fix(core): update 2024-01-19 21:10:14 +01:00
cfa7807f8f 3.0.2 2024-01-19 21:09:28 +01:00
ba3210c7f5 fix(core): update 2024-01-19 21:09:27 +01:00
91424492ba switch to new org scheme 2023-07-11 01:08:41 +02:00
d524a86921 switch to new org scheme 2023-07-10 10:16:25 +02:00
6a1d91d5da 3.0.1 2022-06-26 20:45:40 +02:00
035e8dc0cd fix(core): update 2022-06-26 20:45:40 +02:00
57cadd079c 3.0.0 2022-05-28 21:05:37 +02:00
0ead80750a BREAKING CHANGE(core): switch to esm 2022-05-28 21:05:37 +02:00
3b2f8928de 2.0.14 2022-05-20 16:03:36 +02:00
92a1b589e7 fix(core): update 2022-05-20 16:03:35 +02:00
12 changed files with 8714 additions and 1057 deletions

View File

@ -123,7 +123,7 @@ pages:
stage: metadata
script:
- npmci node install lts
- npmci command npm install -g @gitzone/tsdoc
- npmci command npm install -g @git.zone/tsdoc
- npmci npm prepare
- npmci npm install
- npmci command tsdoc

View File

@ -7,10 +7,10 @@
"projectType": "npm",
"module": {
"githost": "gitlab.com",
"gitscope": "pushrocks",
"gitscope": "push.rocks",
"gitrepo": "smartmarkdown",
"description": "do more with markdown files",
"npmPackagename": "@pushrocks/smartmarkdown",
"npmPackagename": "@push.rocks/smartmarkdown",
"license": "MIT"
}
}

2853
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "@pushrocks/smartmarkdown",
"version": "2.0.13",
"name": "@push.rocks/smartmarkdown",
"version": "3.0.3",
"private": false,
"description": "do more with markdown files",
"main": "dist_ts/index.js",
@ -10,24 +10,26 @@
"license": "MIT",
"scripts": {
"test": "tstest test/",
"build": "tsbuild --web --allowimplicitany --skiplibcheck"
"build": "tsbuild --web --allowimplicitany"
},
"devDependencies": {
"@gitzone/tsbuild": "^2.1.61",
"@gitzone/tsrun": "^1.2.32",
"@gitzone/tstest": "^1.0.71",
"@pushrocks/tapbundle": "^5.0.3",
"@types/node": "^17.0.34",
"tslint": "^6.1.3",
"tslint-config-prettier": "^1.18.0"
"@git.zone/tsbuild": "^2.1.61",
"@git.zone/tsrun": "^1.2.37",
"@git.zone/tstest": "^1.0.86",
"@push.rocks/tapbundle": "^5.0.3",
"@types/node": "^20.11.5"
},
"dependencies": {
"@push.rocks/smartyaml": "^2.0.5",
"@types/turndown": "^5.0.1",
"remark": "^14.0.2",
"remark-frontmatter": "^4.0.1",
"remark-html": "^15.0.1",
"remark-frontmatter": "^5.0.0",
"remark-gfm": "^4.0.0",
"remark-html": "^16.0.1",
"remark-parse": "^11.0.0",
"remark-stringify": "^11.0.0",
"turndown": "^7.1.1",
"turndown-plugin-gfm": "^1.0.2"
"turndown-plugin-gfm": "^1.0.2",
"unified": "^11.0.4"
},
"files": [
"ts/**/*",

6758
pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,8 @@
# @pushrocks/smartmarkdown
# @push.rocks/smartmarkdown
do more with markdown files
## Availabililty and Links
* [npmjs.org (npm package)](https://www.npmjs.com/package/@pushrocks/smartmarkdown)
* [npmjs.org (npm package)](https://www.npmjs.com/package/@push.rocks/smartmarkdown)
* [gitlab.com (source)](https://gitlab.com/pushrocks/smartmarkdown)
* [github.com (source mirror)](https://github.com/pushrocks/smartmarkdown)
* [docs (typedoc)](https://pushrocks.gitlab.io/smartmarkdown/)
@ -13,14 +13,14 @@ Status Category | Status Badge
-- | --
GitLab Pipelines | [![pipeline status](https://gitlab.com/pushrocks/smartmarkdown/badges/master/pipeline.svg)](https://lossless.cloud)
GitLab Pipline Test Coverage | [![coverage report](https://gitlab.com/pushrocks/smartmarkdown/badges/master/coverage.svg)](https://lossless.cloud)
npm | [![npm downloads per month](https://badgen.net/npm/dy/@pushrocks/smartmarkdown)](https://lossless.cloud)
npm | [![npm downloads per month](https://badgen.net/npm/dy/@push.rocks/smartmarkdown)](https://lossless.cloud)
Snyk | [![Known Vulnerabilities](https://badgen.net/snyk/pushrocks/smartmarkdown)](https://lossless.cloud)
TypeScript Support | [![TypeScript](https://badgen.net/badge/TypeScript/>=%203.x/blue?icon=typescript)](https://lossless.cloud)
node Support | [![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
Code Style | [![Code Style](https://badgen.net/badge/style/prettier/purple)](https://lossless.cloud)
PackagePhobia (total standalone install weight) | [![PackagePhobia](https://badgen.net/packagephobia/install/@pushrocks/smartmarkdown)](https://lossless.cloud)
PackagePhobia (package size on registry) | [![PackagePhobia](https://badgen.net/packagephobia/publish/@pushrocks/smartmarkdown)](https://lossless.cloud)
BundlePhobia (total size when bundled) | [![BundlePhobia](https://badgen.net/bundlephobia/minzip/@pushrocks/smartmarkdown)](https://lossless.cloud)
PackagePhobia (total standalone install weight) | [![PackagePhobia](https://badgen.net/packagephobia/install/@push.rocks/smartmarkdown)](https://lossless.cloud)
PackagePhobia (package size on registry) | [![PackagePhobia](https://badgen.net/packagephobia/publish/@push.rocks/smartmarkdown)](https://lossless.cloud)
BundlePhobia (total size when bundled) | [![BundlePhobia](https://badgen.net/bundlephobia/minzip/@push.rocks/smartmarkdown)](https://lossless.cloud)
Platform support | [![Supports Windows 10](https://badgen.net/badge/supports%20Windows%2010/yes/green?icon=windows)](https://lossless.cloud) [![Supports Mac OS X](https://badgen.net/badge/supports%20Mac%20OS%20X/yes/green?icon=apple)](https://lossless.cloud)
## Usage

View File

@ -1,4 +1,4 @@
import { expect, tap } from '@pushrocks/tapbundle';
import { expect, tap } from '@push.rocks/tapbundle';
import * as smartmarkdown from '../ts/index.js';
let smartMarkdownInstance: smartmarkdown.SmartMarkdown;
@ -10,10 +10,24 @@ tap.test('should create a valid instance of SmartMarkdown', async () => {
tap.test('should convert a markdown string to html', async () => {
const markdownString = '# Hi!';
const htmlString = await smartMarkdownInstance.markdownToHtml(markdownString);
const mdParsedResult = await smartMarkdownInstance.getMdParsedResultFromMarkdown(markdownString);
const htmlString = mdParsedResult.html;
expect(htmlString).toEqual('<h1>Hi!</h1>\n');
});
tap.test('should get frontmatter', async () => {
const markdownString = `---
hello: yes
---
# hello there
`;
const mdParsedResult = await smartMarkdownInstance.getMdParsedResultFromMarkdown(markdownString);
expect(mdParsedResult.frontmatterData.hello).toEqual('yes');
});
tap.test('should convert a html string to markdown', async () => {
const htmlString = '<h1 id="hi">Hi!</h1>\n<h2>This is it!</h2>';
const markdownString = smartMarkdownInstance.htmlToMarkdown(htmlString);

View File

@ -2,7 +2,7 @@
* autocreated commitinfo by @pushrocks/commitinfo
*/
export const commitinfo = {
name: '@pushrocks/smartmarkdown',
version: '2.0.13',
name: '@push.rocks/smartmarkdown',
version: '3.0.3',
description: 'do more with markdown files'
}

View File

@ -1,19 +1,22 @@
import * as plugins from './smartmarkdown.plugins.js';
import { MdParsedResult } from './smartmarkdown.classes.mdparsedresult.js';
export class SmartMarkdown {
public static async easyMarkdownToHtml(mdStringArg: string) {
const smartmarkdownInstance = new SmartMarkdown();
const mdParsedResult = await smartmarkdownInstance.getMdParsedResultFromMarkdown(mdStringArg);
return mdParsedResult.html;
}
constructor() {}
/**
* converts markdown to html
* @param mdString
* create a MdParsedResult from markdown
* @param mdStringArg
*/
public async markdownToHtml(mdString: string): Promise<string> {
const result = await plugins
.remark.remark()
.use(plugins.remarkHtml.default)
.use(plugins.remarkFrontmatter.default, ['yaml', 'toml'])
.process(mdString);
return result.toString();
public async getMdParsedResultFromMarkdown(mdStringArg: string): Promise<MdParsedResult> {
const result = await MdParsedResult.createFromMarkdownString(mdStringArg);
return result;
}
public htmlToMarkdown(htmlString: string): string {

View File

@ -0,0 +1,38 @@
import * as plugins from './smartmarkdown.plugins.js';
export class MdParsedResult {
public static async createFromMarkdownString(mdStringArg: string): Promise<MdParsedResult> {
const mdParsedResult = new MdParsedResult();
await mdParsedResult.updateFromMarkdownString(mdStringArg);
return mdParsedResult;
}
public originalString: string;
public title: string;
public html: string;
public frontmatterData: {[key: string]: any};
public async updateFromMarkdownString(mdStringArg: string) {
let yamlString: string;
const result = await plugins.unified()
.use(plugins.remarkParse)
.use(plugins.remarkGfm)
.use(plugins.remarkFrontmatter, ['yaml', 'toml'])
.use(plugins.remarkStringify)
.use(plugins.remarkHtml)
.use(() => (tree) => {
console.dir(tree);
const yamlChild = tree.children.find(objectArg => objectArg.type === 'yaml');
if (yamlChild) {
yamlString = (yamlChild as any).value;
}
})
.process(mdStringArg);
this.html = result.toString();
if (yamlString) {
this.frontmatterData = await plugins.smartyaml.yamlStringToObject(yamlString);
} else {
this.frontmatterData = {};
}
}
}

View File

@ -1,9 +1,19 @@
// third party remark
import * as remark from 'remark';
import * as remarkFrontmatter from 'remark-frontmatter';
import * as remarkHtml from 'remark-html';
// pushrocks scope
import * as smartyaml from '@push.rocks/smartyaml';
export { remark, remarkFrontmatter, remarkHtml };
export {
smartyaml
}
// third party remark
import { unified } from 'unified';
import remarkGfm from 'remark-gfm';
import remarkParse from 'remark-parse';
import remarkFrontmatter from 'remark-frontmatter';
import remarkHtml from 'remark-html';
import remarkStringify from 'remark-stringify';
export { unified, remarkGfm, remarkParse, remarkFrontmatter, remarkHtml, remarkStringify };
// other third party stuff
import turndown from 'turndown';

View File

@ -3,7 +3,12 @@
"experimentalDecorators": true,
"useDefineForClassFields": false,
"target": "ES2022",
"module": "ES2022",
"moduleResolution": "nodenext"
}
"module": "NodeNext",
"moduleResolution": "NodeNext",
"esModuleInterop": true,
"verbatimModuleSyntax": true
},
"exclude": [
"dist_*/**/*.d.ts"
]
}