Compare commits
6 commits
Author | SHA1 | Date | |
---|---|---|---|
8e1d658344 | |||
d58495d22e | |||
ebb569b9db | |||
4da4f98ce1 | |||
93c786eb23 | |||
65c18ad226 |
|
@ -12,12 +12,12 @@ pipeline:
|
|||
when:
|
||||
event: [push, manual]
|
||||
|
||||
# test:
|
||||
# image: registry.gitlab.com/dmoonfire/nix-flake-docker:latest
|
||||
# commands:
|
||||
# - nix develop --command scripts/test.sh
|
||||
# when:
|
||||
# event: [push, manual]
|
||||
test:
|
||||
image: registry.gitlab.com/dmoonfire/nix-flake-docker:latest
|
||||
commands:
|
||||
- nix develop --command scripts/test.sh
|
||||
when:
|
||||
event: [push, manual]
|
||||
|
||||
release:
|
||||
image: registry.gitlab.com/dmoonfire/nix-flake-docker:latest
|
||||
|
|
15
README.md
15
README.md
|
@ -63,6 +63,21 @@ Options:
|
|||
* `-y`, `--yaml`: Extract the data as YAML instead of JSON (default).
|
||||
* `--content PROPERTY`: Extract the content as a property of the given name instead of just removing it. Defaults to not extracting the content.
|
||||
|
||||
### list
|
||||
|
||||
> Displays each file as a Markdown ordered list.
|
||||
|
||||
```sh
|
||||
markdowny list *.markdown
|
||||
```
|
||||
|
||||
Options:
|
||||
|
||||
* `-o`, `--output`: Direct the output to a file or (default) standard out with `-`.
|
||||
* `-s`, `--trim-whitespace`: If included, then newlines between the fields will be collapsed down to a single space and the resulting string trimmed at both ends.
|
||||
* `-t`, `--template`: The Handlebars template using the YAML metadata for each file in addition to a `_number` which is the one-based number of the file. The default value is `{{_number}}. {{{title}}}: {{{summary}}}`.
|
||||
* Some additional conditional operations are allowed such as `ge`, `le`, `gt`, `ge`, `eq`, and `ne`. They can be used like `{{#if (lt _number 10)}}0{{/if}}`.
|
||||
|
||||
### sections
|
||||
|
||||
> Displays each file as a heading 1 section with the title and contents provided.
|
||||
|
|
26
package-lock.json
generated
26
package-lock.json
generated
|
@ -1,15 +1,16 @@
|
|||
{
|
||||
"name": "markdowny",
|
||||
"version": "1.0.0",
|
||||
"version": "1.1.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "markdowny",
|
||||
"version": "1.0.0",
|
||||
"version": "1.1.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"add-commas": "0.0.4",
|
||||
"handlebars": "^4.7.7",
|
||||
"lodash": "^4.16.5",
|
||||
"markdown-table": "^1.0.0",
|
||||
"read-pkg-up": "^4.0.0",
|
||||
|
@ -3508,8 +3509,6 @@
|
|||
"version": "4.7.7",
|
||||
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
|
||||
"integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"minimist": "^1.2.5",
|
||||
"neo-async": "^2.6.0",
|
||||
|
@ -4811,7 +4810,6 @@
|
|||
"version": "1.2.7",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
|
||||
"integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
|
@ -4870,7 +4868,6 @@
|
|||
"version": "2.6.2",
|
||||
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
|
||||
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/nerf-dart": {
|
||||
|
@ -9002,7 +8999,6 @@
|
|||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"dev": true,
|
||||
"license": "BSD-3-Clause",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
|
@ -9583,7 +9579,6 @@
|
|||
"version": "3.17.4",
|
||||
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
|
||||
"integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"optional": true,
|
||||
"bin": {
|
||||
|
@ -9770,7 +9765,6 @@
|
|||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
|
||||
"integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/wrap-ansi": {
|
||||
|
@ -12337,7 +12331,6 @@
|
|||
"version": "4.7.7",
|
||||
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
|
||||
"integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"minimist": "^1.2.5",
|
||||
"neo-async": "^2.6.0",
|
||||
|
@ -13215,8 +13208,7 @@
|
|||
"minimist": {
|
||||
"version": "1.2.7",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
|
||||
"integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
|
||||
"dev": true
|
||||
"integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g=="
|
||||
},
|
||||
"minimist-options": {
|
||||
"version": "4.1.0",
|
||||
|
@ -13258,8 +13250,7 @@
|
|||
"neo-async": {
|
||||
"version": "2.6.2",
|
||||
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
|
||||
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
|
||||
},
|
||||
"nerf-dart": {
|
||||
"version": "1.0.0",
|
||||
|
@ -16111,8 +16102,7 @@
|
|||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"dev": true
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
|
||||
},
|
||||
"spawn-error-forwarder": {
|
||||
"version": "1.0.0",
|
||||
|
@ -16500,7 +16490,6 @@
|
|||
"version": "3.17.4",
|
||||
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
|
||||
"integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"unbox-primitive": {
|
||||
|
@ -16639,8 +16628,7 @@
|
|||
"wordwrap": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
|
||||
"integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
|
||||
"dev": true
|
||||
"integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="
|
||||
},
|
||||
"wrap-ansi": {
|
||||
"version": "7.0.0",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "markdowny",
|
||||
"version": "1.0.0",
|
||||
"version": "1.1.0",
|
||||
"description": "A set of command-line tools for working with Markdown files with YAML headers.",
|
||||
"keywords": [
|
||||
"markdown"
|
||||
|
@ -27,10 +27,9 @@
|
|||
},
|
||||
"scripts": {
|
||||
"barrels": "barrelsby --delete --location all --directory src --exclude '(tests|cli|tools)'",
|
||||
"prebuild": "run-s barrels lint format clean",
|
||||
"prebuild": "run-s barrels format lint clean",
|
||||
"build": "tsc",
|
||||
"clean": "rimraf lib",
|
||||
"commitmsg": "commitlint -E GIT_PARAMS",
|
||||
"clean": "rimraf lib *.tsbuildinfo",
|
||||
"format": "prettier src --write \"**/*.ts\" --loglevel warn",
|
||||
"lint": "eslint -c .eslintrc.yml src/**/*.ts --fix",
|
||||
"prepack": "npm run build",
|
||||
|
@ -38,6 +37,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"add-commas": "0.0.4",
|
||||
"handlebars": "^4.7.7",
|
||||
"lodash": "^4.16.5",
|
||||
"markdown-table": "^1.0.0",
|
||||
"read-pkg-up": "^4.0.0",
|
||||
|
|
|
@ -8,4 +8,4 @@ cd $(dirname $(dirname $0))
|
|||
./scripts/setup.sh || exit 1
|
||||
|
||||
log "verifying conventional commits in Git log"
|
||||
npx commitlint --from=$CI_BUILD_BEFORE_SHA
|
||||
npx commitlint --from=$CI_PREV_COMMIT_SHA
|
||||
|
|
|
@ -1,19 +1,21 @@
|
|||
import * as _ from "lodash";
|
||||
import * as yargs from "yargs";
|
||||
import * as scanner from "../scanner";
|
||||
import * as handlebars from "handlebars";
|
||||
import * as fs from "fs";
|
||||
|
||||
export var command = "list";
|
||||
export var describe = "Extracts a YAML field into an order list";
|
||||
export var describe = "Extracts a YAML field into an ordered list";
|
||||
|
||||
export function builder(yargs: yargs.Arguments) {
|
||||
return yargs
|
||||
.help("help")
|
||||
|
||||
.alias("f", "field")
|
||||
.default("field", "summary")
|
||||
.alias("t", "template")
|
||||
.default("template", "{{_number}}. {{{title}}}: {{{summary}}}")
|
||||
|
||||
.alias("t", "title")
|
||||
.default("title", "title")
|
||||
.alias("s", "trim-whitespace")
|
||||
.boolean("trim-whitspace")
|
||||
|
||||
.alias("o", "output")
|
||||
.default("output", "-")
|
||||
|
@ -27,21 +29,54 @@ export function handler(argv: any) {
|
|||
render(argv, data);
|
||||
}
|
||||
|
||||
export function render(argv, data) {
|
||||
for (var key in data) {
|
||||
var number = 1 + parseInt(key.toString());
|
||||
var item = data[key];
|
||||
var title = _.get(item, argv.title);
|
||||
var value = _.get(item, argv.field);
|
||||
export function render(argv, files) {
|
||||
// Compile the handlebars template.
|
||||
handlebars.registerHelper("eq", function (a, b) {
|
||||
return a === b;
|
||||
});
|
||||
handlebars.registerHelper("gt", function (a, b) {
|
||||
return a > b;
|
||||
});
|
||||
handlebars.registerHelper("gte", function (a, b) {
|
||||
return a >= b;
|
||||
});
|
||||
handlebars.registerHelper("lt", function (a, b) {
|
||||
return a < b;
|
||||
});
|
||||
handlebars.registerHelper("lte", function (a, b) {
|
||||
return a <= b;
|
||||
});
|
||||
handlebars.registerHelper("ne", function (a, b) {
|
||||
return a !== b;
|
||||
});
|
||||
|
||||
// Build up the parts so we can do this as a single line.
|
||||
const parts = [`${number}. `, title];
|
||||
const template = handlebars.compile(argv.template);
|
||||
|
||||
if (value) {
|
||||
parts.push(": " + value.replace(/\n/g, " "));
|
||||
// Go through each of the files and create a row from each one.
|
||||
const trim = /\s+/g;
|
||||
let output: string[] = [];
|
||||
|
||||
for (var key in files) {
|
||||
// Combine everything into a single parameters object including `_number`
|
||||
// to represent the one-based index from the beginning.
|
||||
const number = 1 + parseInt(key.toString());
|
||||
|
||||
let params = { ...files[key], _number: number };
|
||||
|
||||
// Render the results and write it out.
|
||||
let result = template(params);
|
||||
|
||||
if (argv.trimWhitespace) {
|
||||
result = result.replace(trim, " ").trim();
|
||||
}
|
||||
|
||||
// Write out the line.
|
||||
console.log(parts.join(""));
|
||||
output.push(result);
|
||||
}
|
||||
|
||||
// Write out the results as requested.
|
||||
if (argv.output === "-") {
|
||||
console.log(output.join("\n"));
|
||||
} else {
|
||||
fs.writeFileSync(argv.output, Buffer.from(output.join("\n"), "utf-8"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -149,20 +149,20 @@ class Column {
|
|||
|
||||
for (var s of m[2]) {
|
||||
switch (s) {
|
||||
case "c":
|
||||
case "l":
|
||||
case "r":
|
||||
case ".":
|
||||
this.align = s;
|
||||
break;
|
||||
case "c":
|
||||
case "l":
|
||||
case "r":
|
||||
case ".":
|
||||
this.align = s;
|
||||
break;
|
||||
|
||||
case "s":
|
||||
this.comma = true;
|
||||
break;
|
||||
case "s":
|
||||
this.comma = true;
|
||||
break;
|
||||
|
||||
case "t":
|
||||
this.total = true;
|
||||
break;
|
||||
case "t":
|
||||
this.total = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -190,8 +190,3 @@ function parse(argv, titles, fields): Column[] {
|
|||
|
||||
return columns;
|
||||
}
|
||||
|
||||
/* Notes
|
||||
|
||||
Comma-separated list of lists. I like spaces.
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue