@weborigami/origami 0.0.73 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/main.js +12 -0
- package/package.json +5 -7
- package/src/builtins.js +62 -0
- package/src/builtinsTree.js +36 -0
- package/src/calc/calc.js +71 -0
- package/src/cli/cli.js +6 -4
- package/src/{misc → common}/assertTreeIsDefined.js +4 -1
- package/src/common/constructHref.js +20 -0
- package/src/common/constructSiteTree.js +34 -0
- package/src/common/fetchAndHandleExtension.js +26 -0
- package/src/{misc → common}/getTreeArgument.js +11 -5
- package/src/common/processUnpackedContent.js +4 -13
- package/src/common/utilities.d.ts +1 -2
- package/src/common/utilities.js +24 -31
- package/src/deprecated.js +140 -0
- package/src/{common → dev}/ExplorableSiteTransform.js +1 -1
- package/src/{misc → dev}/OriCommandTransform.js +2 -2
- package/src/{builtins/@code.js → dev/code.js} +2 -2
- package/src/{builtins/@debug.js → dev/debug.js} +4 -7
- package/src/dev/dev.js +9 -0
- package/src/{builtins/@explore.js → dev/explore.js} +24 -30
- package/src/{misc → dev}/explore.js.inline +4 -4
- package/src/{misc → dev}/explore.ori +4 -4
- package/src/{builtins/@log.js → dev/log.js} +1 -1
- package/src/{builtins/@serve.js → dev/serve.js} +5 -8
- package/src/{builtins/@svg.js → dev/svg.js} +9 -6
- package/src/{misc → dev}/treeDot.js +2 -5
- package/src/{builtins/@watch.js → dev/watch.js} +8 -6
- package/src/handlers/handlerExports.js +16 -0
- package/src/handlers/handlers.js +37 -0
- package/src/{builtins → handlers}/js.handler.js +1 -1
- package/src/{builtins → handlers}/json.handler.js +9 -1
- package/src/handlers/mjs.handler.js +2 -0
- package/src/{builtins → handlers}/ori.handler.js +5 -7
- package/src/{builtins → handlers}/oridocument.handler.js +1 -1
- package/src/{builtins → handlers}/wasm.handler.js +1 -1
- package/src/{builtins → handlers}/yaml.handler.js +8 -1
- package/src/handlers/yml.handler.js +2 -0
- package/src/help/help.js +103 -0
- package/src/help/help.yaml +428 -0
- package/src/{builtins/@image → image}/format.js +2 -2
- package/src/{builtins/@image → image}/formatFn.js +1 -1
- package/src/image/image.js +2 -0
- package/src/{builtins/@image → image}/resize.js +2 -2
- package/src/{builtins/@image → image}/resizeFn.js +1 -1
- package/src/internal.js +24 -0
- package/src/{builtins/@js.js → js.js} +7 -6
- package/src/{builtins/@node.js → node.js} +1 -6
- package/src/{builtins/@basename.js → origami/basename.js} +2 -2
- package/src/{builtins/@config.js → origami/config.js} +1 -4
- package/src/{builtins/@json.js → origami/json.js} +2 -5
- package/src/{builtins/@jsonParse.js → origami/jsonParse.js} +0 -3
- package/src/{builtins/@once.js → origami/once.js} +2 -2
- package/src/{builtins/@ori.js → origami/ori.js} +4 -7
- package/src/origami/origami.js +29 -0
- package/src/{builtins/@pack.js → origami/pack.js} +2 -2
- package/src/{builtins/@project.js → origami/project.js} +7 -11
- package/src/{builtins/@regexMatch.js → origami/regexMatch.js} +1 -1
- package/src/origami/repeat.js +5 -0
- package/src/{builtins/@shell.js → origami/shell.js} +0 -3
- package/src/{builtins/@stdin.js → origami/stdin.js} +0 -3
- package/src/{builtins/@string.js → origami/string.js} +2 -2
- package/src/{builtins/@unpack.js → origami/unpack.js} +2 -2
- package/src/{builtins/@yaml.js → origami/yaml.js} +2 -5
- package/src/{builtins/@yamlParse.js → origami/yamlParse.js} +0 -3
- package/src/protocols/explore.js +19 -0
- package/src/{builtins/@files.js → protocols/files.js} +2 -5
- package/src/protocols/http.js +18 -0
- package/src/protocols/https.js +18 -0
- package/src/protocols/httpstree.js +19 -0
- package/src/protocols/httptree.js +19 -0
- package/src/protocols/inherited.js +18 -0
- package/src/protocols/new.js +42 -0
- package/src/{builtins/@package.js → protocols/package.js} +32 -10
- package/src/protocols/scope.js +24 -0
- package/src/server/constructResponse.js +5 -5
- package/src/{builtins/@siteAudit.js → site/audit.js} +4 -4
- package/src/{builtins/@crawl.js → site/crawler/crawl.js} +3 -6
- package/src/{crawler → site/crawler}/findPaths.js +2 -3
- package/src/{crawler → site/crawler}/utilities.js +2 -3
- package/src/{builtins/@index.js → site/index.js} +4 -7
- package/src/{builtins/@jsonKeys.js → site/jsonKeys.js} +5 -5
- package/src/{builtins/@rss.js → site/rss.js} +2 -5
- package/src/site/site.js +9 -0
- package/src/{builtins/@sitemap.js → site/sitemap.js} +8 -12
- package/src/{builtins/@static.js → site/static.js} +7 -7
- package/src/{builtins/@document.js → text/document.js} +2 -2
- package/src/{builtins/@inline.js → text/inline.js} +10 -13
- package/src/{builtins/@mdHtml.js → text/mdHtml.js} +7 -10
- package/src/text/origamiHighlightDefinition.js +57 -0
- package/src/text/text.js +4 -0
- package/src/{builtins/@addNextPrevious.js → tree/addNextPrevious.js} +7 -2
- package/src/{builtins/@cache.js → tree/cache.js} +2 -5
- package/src/{builtins/@clean.js → tree/clear.js} +4 -4
- package/src/{builtins/@concat.js → tree/concat.js} +2 -5
- package/src/{builtins/@copy.js → tree/copy.js} +3 -10
- package/src/{builtins/@deepMapFn.js → tree/deepMap.js} +13 -6
- package/src/{builtins/@deepMerge.js → tree/deepMerge.js} +4 -7
- package/src/{builtins/@deepReverse.js → tree/deepReverse.js} +8 -2
- package/src/tree/deepTake.js +26 -0
- package/src/{builtins/@deepValues.js → tree/deepValues.js} +2 -6
- package/src/{builtins/@defineds.js → tree/defineds.js} +7 -2
- package/src/{builtins/@filter.js → tree/filter.js} +3 -6
- package/src/{builtins/@first.js → tree/first.js} +2 -5
- package/src/{builtins/@fnTree.js → tree/fromFn.js} +3 -6
- package/src/{builtins/@globs.js → tree/globs.js} +3 -6
- package/src/tree/group.js +26 -0
- package/src/{builtins/@inners.js → tree/inners.js} +2 -5
- package/src/{builtins/@keys.js → tree/keys.js} +2 -5
- package/src/{builtins/@length.js → tree/length.js} +2 -2
- package/src/{builtins → tree}/map.d.ts +3 -6
- package/src/tree/map.js +154 -0
- package/src/{builtins/@mapFn.js → tree/mapFn.js} +14 -6
- package/src/{builtins/@match.js → tree/match.js} +2 -5
- package/src/{builtins/@merge.js → tree/merge.js} +2 -5
- package/src/tree/paginate.js +61 -0
- package/src/{builtins/@parent.js → tree/parent.js} +2 -5
- package/src/{builtins/@plain.js → tree/plain.js} +2 -5
- package/src/{builtins/@reverse.js → tree/reverse.js} +2 -5
- package/src/{builtins/@setDeep.js → tree/setDeep.js} +0 -3
- package/src/{builtins/@shuffle.js → tree/shuffle.js} +3 -9
- package/src/{builtins/@sortFn.js → tree/sort.js} +12 -17
- package/src/tree/take.js +19 -0
- package/src/tree/tree.js +50 -0
- package/src/{builtins/@values.js → tree/values.js} +2 -5
- package/exports/PathTransform.d.ts +0 -5
- package/exports/PathTransform.js +0 -20
- package/exports/buildExports.js +0 -112
- package/exports/exports.js +0 -148
- package/src/builtins/@builtins.js +0 -15
- package/src/builtins/@deepMap.js +0 -19
- package/src/builtins/@deepTake.js +0 -21
- package/src/builtins/@deepTakeFn.js +0 -21
- package/src/builtins/@equals.js +0 -6
- package/src/builtins/@exploreSite.js +0 -16
- package/src/builtins/@false.js +0 -1
- package/src/builtins/@fetch.js +0 -7
- package/src/builtins/@group.js +0 -20
- package/src/builtins/@groupFn.js +0 -33
- package/src/builtins/@help.js +0 -49
- package/src/builtins/@http.js +0 -19
- package/src/builtins/@https.js +0 -19
- package/src/builtins/@if.js +0 -28
- package/src/builtins/@inherited.js +0 -17
- package/src/builtins/@map.js +0 -19
- package/src/builtins/@math.js +0 -17
- package/src/builtins/@not.js +0 -6
- package/src/builtins/@or.js +0 -6
- package/src/builtins/@paginate.js +0 -18
- package/src/builtins/@paginateFn.js +0 -58
- package/src/builtins/@repeat.js +0 -8
- package/src/builtins/@sort.js +0 -23
- package/src/builtins/@table.js +0 -69
- package/src/builtins/@take.js +0 -20
- package/src/builtins/@takeFn.js +0 -20
- package/src/builtins/@tree.js +0 -4
- package/src/builtins/@treeHttp.js +0 -19
- package/src/builtins/@treeHttps.js +0 -19
- package/src/builtins/@true.js +0 -1
- package/src/builtins/mjs.handler.js +0 -2
- package/src/builtins/yml.handler.js +0 -2
- package/src/builtins/~.js +0 -9
- package/src/cli/showUsage.js +0 -86
- package/src/common/CommandModulesTransform.d.ts +0 -5
- package/src/common/CommandModulesTransform.js +0 -39
- package/src/common/arrowsMapFn.js +0 -35
- package/src/misc/origamiHighlightDefinition.js +0 -36
- /package/src/{misc → common}/assertTreeIsDefined.d.ts +0 -0
- /package/src/{common → dev}/ExplorableSiteTransform.d.ts +0 -0
- /package/src/{misc → dev}/OriCommandTransform.d.ts +0 -0
- /package/src/{builtins/@breakpoint.js → dev/breakpoint.js} +0 -0
- /package/src/{builtins/@changes.js → dev/changes.js} +0 -0
- /package/src/{misc → dev}/explore.css +0 -0
- /package/src/{builtins → handlers}/css.handler.js +0 -0
- /package/src/{builtins → handlers}/htm.handler.js +0 -0
- /package/src/{builtins → handlers}/html.handler.js +0 -0
- /package/src/{builtins → handlers}/jpeg.handler.js +0 -0
- /package/src/{builtins → handlers}/jpg.handler.js +0 -0
- /package/src/{builtins → handlers}/md.handler.js +0 -0
- /package/src/{builtins → handlers}/txt.handler.js +0 -0
- /package/src/{builtins → handlers}/xhtml.handler.js +0 -0
- /package/src/{builtins/@naturalOrder.js → origami/naturalOrder.js} +0 -0
- /package/src/{builtins/@post.js → origami/post.js} +0 -0
- /package/src/{builtins/@regexMatchFn.js → origami/regexMatchFn.js} +0 -0
- /package/src/{builtins/@slash.js → origami/slash.js} +0 -0
- /package/src/{builtins/@version.js → origami/version.js} +0 -0
- /package/src/{crawler → site/crawler}/crawlResources.js +0 -0
- /package/src/{builtins/@redirect.js → site/redirect.js} +0 -0
- /package/src/{builtins/@slug.js → site/slug.js} +0 -0
- /package/src/{builtins/@indent.js → text/indent.js} +0 -0
- /package/src/{common → tree}/FilterTree.js +0 -0
- /package/src/{common → tree}/GlobTree.js +0 -0
- /package/src/{common → tree}/ShuffleTransform.js +0 -0
- /package/src/{builtins/@calendarTree.js → tree/calendar.js} +0 -0
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { Tree } from "@weborigami/async-tree";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Return a new grouping of the treelike's values into "pages" of the specified
|
|
5
|
-
* size.
|
|
6
|
-
*
|
|
7
|
-
* @typedef {import("@weborigami/types").AsyncTree} AsyncTree
|
|
8
|
-
* @typedef {import("@weborigami/async-tree").Treelike} Treelike
|
|
9
|
-
*
|
|
10
|
-
* @this {AsyncTree|null}
|
|
11
|
-
* @param {number} [size=10]
|
|
12
|
-
*/
|
|
13
|
-
export default function paginateFn(size = 10) {
|
|
14
|
-
const parent = this;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* @param {Treelike} [treelike]
|
|
18
|
-
*/
|
|
19
|
-
return async function (treelike) {
|
|
20
|
-
const tree = Tree.from(treelike, { parent });
|
|
21
|
-
const keys = Array.from(await tree.keys());
|
|
22
|
-
const pageCount = Math.ceil(keys.length / size);
|
|
23
|
-
|
|
24
|
-
return {
|
|
25
|
-
async get(pageKey) {
|
|
26
|
-
// Note: page numbers are 1-based.
|
|
27
|
-
const pageNumber = Number(pageKey);
|
|
28
|
-
if (Number.isNaN(pageNumber)) {
|
|
29
|
-
return undefined;
|
|
30
|
-
}
|
|
31
|
-
const nextPage = pageNumber + 1 <= pageCount ? pageNumber + 1 : null;
|
|
32
|
-
const previousPage = pageNumber - 1 >= 1 ? pageNumber - 1 : null;
|
|
33
|
-
const items = {};
|
|
34
|
-
for (
|
|
35
|
-
let index = (pageNumber - 1) * size;
|
|
36
|
-
index < Math.min(keys.length, pageNumber * size);
|
|
37
|
-
index++
|
|
38
|
-
) {
|
|
39
|
-
const key = keys[index];
|
|
40
|
-
items[key] = await tree.get(keys[index]);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return {
|
|
44
|
-
items,
|
|
45
|
-
nextPage,
|
|
46
|
-
pageCount,
|
|
47
|
-
pageNumber,
|
|
48
|
-
previousPage,
|
|
49
|
-
};
|
|
50
|
-
},
|
|
51
|
-
|
|
52
|
-
async keys() {
|
|
53
|
-
// Return an array from 1..totalPages
|
|
54
|
-
return Array.from({ length: pageCount }, (_, index) => index + 1);
|
|
55
|
-
},
|
|
56
|
-
};
|
|
57
|
-
};
|
|
58
|
-
}
|
package/src/builtins/@repeat.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export default async function repeat(count, content) {
|
|
2
|
-
const array = new Array(count);
|
|
3
|
-
array.fill(content);
|
|
4
|
-
return array;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
repeat.usage = `@repeat <count>, <content>\tRepeats the content the given number of times`;
|
|
8
|
-
repeat.documentation = "https://weborigami.org/language/@repeat.html";
|
package/src/builtins/@sort.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import getTreeArgument from "../misc/getTreeArgument.js";
|
|
2
|
-
import sortFn from "./@sortFn.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Return a new tree with the original's keys sorted.
|
|
6
|
-
*
|
|
7
|
-
* @typedef {import("@weborigami/types").AsyncTree} AsyncTree
|
|
8
|
-
* @typedef {import("@weborigami/async-tree").Treelike} Treelike
|
|
9
|
-
* @typedef {import("@weborigami/async-tree").ValueKeyFn} ValueKeyFn
|
|
10
|
-
* @typedef {{ compare?: (a: any, b: any) => number, sortKey?: ValueKeyFn }}
|
|
11
|
-
* SortOptions
|
|
12
|
-
*
|
|
13
|
-
* @this {AsyncTree|null}
|
|
14
|
-
* @param {Treelike} [treelike]
|
|
15
|
-
* @param {ValueKeyFn|SortOptions} [options]
|
|
16
|
-
*/
|
|
17
|
-
export default async function sortBuiltin(treelike, options) {
|
|
18
|
-
const tree = await getTreeArgument(this, arguments, treelike, "@sort");
|
|
19
|
-
return sortFn.call(this, options)(tree);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
sortBuiltin.usage = `@sort <tree>, [options]\tReturn a new tree with the original's keys sorted`;
|
|
23
|
-
sortBuiltin.documentation = "https://weborigami.org/builtins/@sort.html";
|
package/src/builtins/@table.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { Tree } from "@weborigami/async-tree";
|
|
2
|
-
import getTreeArgument from "../misc/getTreeArgument.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @typedef {import("@weborigami/types").AsyncTree} AsyncTree
|
|
6
|
-
* @typedef {import("@weborigami/async-tree").Treelike} Treelike
|
|
7
|
-
* @this {AsyncTree|null}
|
|
8
|
-
* @param {Treelike} treelike
|
|
9
|
-
*/
|
|
10
|
-
export default async function table(treelike) {
|
|
11
|
-
const tree = await getTreeArgument(this, arguments, treelike, "@table");
|
|
12
|
-
const firstValue = await valueForFirstKey(tree);
|
|
13
|
-
if (Tree.isAsyncTree(firstValue)) {
|
|
14
|
-
return fullTable(tree, firstValue);
|
|
15
|
-
} else {
|
|
16
|
-
return simpleTable(tree);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// Tree's values are subtrees.
|
|
21
|
-
//
|
|
22
|
-
// Return an R x C table, where R is the number of top-level keys in the tree
|
|
23
|
-
// (plus a header row), and C is the number of 2nd-level keys (plus a labeling
|
|
24
|
-
// column).
|
|
25
|
-
//
|
|
26
|
-
// The 2nd-level keys are obtain by inspecting the given model object, which is
|
|
27
|
-
// taken to represent top-level objects in the tree.
|
|
28
|
-
async function fullTable(tree, model) {
|
|
29
|
-
// Construct the header.
|
|
30
|
-
const modelKeys = Array.from(await model.keys());
|
|
31
|
-
const header = " \t" + modelKeys.join("\t");
|
|
32
|
-
const rows = [header];
|
|
33
|
-
|
|
34
|
-
// Add a row for each top-level object.
|
|
35
|
-
for (const key of await tree.keys()) {
|
|
36
|
-
let row = key;
|
|
37
|
-
const value = await tree.get(key);
|
|
38
|
-
for (const modelKey of await model.keys()) {
|
|
39
|
-
const value2 = await value.get(modelKey);
|
|
40
|
-
row += `\t${value2}`;
|
|
41
|
-
}
|
|
42
|
-
rows.push(row);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return rows.join("\n");
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Tree's values are not subtrees.
|
|
49
|
-
// Return the (key, value) pairs as a simple two-column table.
|
|
50
|
-
async function simpleTable(tree) {
|
|
51
|
-
const header = `Key\tValue`;
|
|
52
|
-
const rows = [header];
|
|
53
|
-
for (const key of await tree.keys()) {
|
|
54
|
-
const value = await tree.get(key);
|
|
55
|
-
rows.push(`${key}\t${value}`);
|
|
56
|
-
}
|
|
57
|
-
const text = rows.join("\n");
|
|
58
|
-
return text;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Return the value for the tree's first key.
|
|
62
|
-
async function valueForFirstKey(tree) {
|
|
63
|
-
const [value] = await tree.keys();
|
|
64
|
-
return value;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
table.usage =
|
|
68
|
-
"@table <tree>\tFormat the tree's top level as a tab-delimited table";
|
|
69
|
-
table.documentation = "https://weborigami.org/cli/builtins.html#table";
|
package/src/builtins/@take.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import getTreeArgument from "../misc/getTreeArgument.js";
|
|
2
|
-
import takeFn from "./@takeFn.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Given a tree, take the first n items from it.
|
|
6
|
-
*
|
|
7
|
-
* @typedef {import("@weborigami/types").AsyncTree} AsyncTree
|
|
8
|
-
* @typedef {import("@weborigami/async-tree").Treelike} Treelike
|
|
9
|
-
*
|
|
10
|
-
* @this {AsyncTree|null}
|
|
11
|
-
* @param {Treelike} treelike
|
|
12
|
-
* @param {number} n
|
|
13
|
-
*/
|
|
14
|
-
export default async function take(treelike, n) {
|
|
15
|
-
const tree = await getTreeArgument(this, arguments, treelike, "@take");
|
|
16
|
-
return takeFn.call(this, n)(tree);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
take.usage = `@take tree, n\tReturn the first n items from tree`;
|
|
20
|
-
take.documentation = "https://weborigami.org/cli/builtins.html#take";
|
package/src/builtins/@takeFn.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { takeFn } from "@weborigami/async-tree";
|
|
2
|
-
import assertTreeIsDefined from "../misc/assertTreeIsDefined.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Limit the number of keys to the indicated count.
|
|
6
|
-
*
|
|
7
|
-
* @typedef {import("@weborigami/types").AsyncTree} AsyncTree
|
|
8
|
-
*
|
|
9
|
-
* @this {AsyncTree|null}
|
|
10
|
-
* @param {number} count
|
|
11
|
-
*/
|
|
12
|
-
export default function takeFnBuiltin(count) {
|
|
13
|
-
assertTreeIsDefined(this, "takeFn");
|
|
14
|
-
const parent = this;
|
|
15
|
-
return (treelike) => {
|
|
16
|
-
const taken = takeFn(count)(treelike);
|
|
17
|
-
taken.parent = parent;
|
|
18
|
-
return taken;
|
|
19
|
-
};
|
|
20
|
-
}
|
package/src/builtins/@tree.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { ops } from "@weborigami/language";
|
|
2
|
-
import assertTreeIsDefined from "../misc/assertTreeIsDefined.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @typedef {import("@weborigami/types").AsyncTree} AsyncTree
|
|
6
|
-
* @typedef {import("@weborigami/async-tree").Treelike} Treelike
|
|
7
|
-
* @typedef {import("../../index.ts").Invocable} Invocable
|
|
8
|
-
*
|
|
9
|
-
* @this {AsyncTree|null}
|
|
10
|
-
* @param {string} host
|
|
11
|
-
* @param {...string} keys
|
|
12
|
-
*/
|
|
13
|
-
export default function treeHttp(host, ...keys) {
|
|
14
|
-
assertTreeIsDefined(this, "treeHttp");
|
|
15
|
-
return ops.treeHttp.call(this, host, ...keys);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
treeHttp.usage = `@treeHttp <domain>, <...keys>\tA web site tree via HTTP`;
|
|
19
|
-
treeHttp.documentation = "https://weborigami.org/language/@treeHttp.html";
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { ops } from "@weborigami/language";
|
|
2
|
-
import assertTreeIsDefined from "../misc/assertTreeIsDefined.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @typedef {import("@weborigami/types").AsyncTree} AsyncTree
|
|
6
|
-
* @typedef {import("@weborigami/async-tree").Treelike} Treelike
|
|
7
|
-
* @typedef {import("../../index.ts").Invocable} Invocable
|
|
8
|
-
*
|
|
9
|
-
* @this {AsyncTree|null}
|
|
10
|
-
* @param {string} host
|
|
11
|
-
* @param {...string} keys
|
|
12
|
-
*/
|
|
13
|
-
export default function treeHttps(host, ...keys) {
|
|
14
|
-
assertTreeIsDefined(this, "treeHttps");
|
|
15
|
-
return ops.treeHttps.call(this, host, ...keys);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
treeHttps.usage = `@treeHttps <domain>, <...keys>\tA web site tree via HTTPS`;
|
|
19
|
-
treeHttps.documentation = "https://weborigami.org/language/@treeHttps.html";
|
package/src/builtins/@true.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default true;
|
package/src/builtins/~.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { OrigamiFiles } from "@weborigami/language";
|
|
2
|
-
import os from "node:os";
|
|
3
|
-
import builtins from "./@builtins.js";
|
|
4
|
-
|
|
5
|
-
/** @type {import("@weborigami/types").AsyncTree} */
|
|
6
|
-
const tree = new OrigamiFiles(os.homedir());
|
|
7
|
-
tree.parent = builtins;
|
|
8
|
-
|
|
9
|
-
export default tree;
|
package/src/cli/showUsage.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
const groupDescriptions = {
|
|
2
|
-
"@cache": "Functions for caching data",
|
|
3
|
-
"@tree": "Functions for working with trees",
|
|
4
|
-
"@image": "Functions for working with images",
|
|
5
|
-
"@parse": "Parsing functions",
|
|
6
|
-
"@scope": "Functions for working with tree scopes",
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
export default async function showUsage(scope) {
|
|
10
|
-
console.log(`Usage: ori <expression>, which could be:
|
|
11
|
-
- a string in single quotes, or a number
|
|
12
|
-
- a file or folder name
|
|
13
|
-
- an https: or http: URL
|
|
14
|
-
- a name like "foo" that refers to an object/function exported by a project file foo.js
|
|
15
|
-
- the name of a function below:
|
|
16
|
-
`);
|
|
17
|
-
|
|
18
|
-
// Gather usages.
|
|
19
|
-
const usages = [];
|
|
20
|
-
for (const key of await scope.keys()) {
|
|
21
|
-
let command;
|
|
22
|
-
// We get the command associated with the key in a try/catch because
|
|
23
|
-
// we want to ignore any syntax errors.
|
|
24
|
-
try {
|
|
25
|
-
command = await scope.get(key);
|
|
26
|
-
} catch (error) {
|
|
27
|
-
if (error instanceof SyntaxError) {
|
|
28
|
-
continue;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
if (groupDescriptions[key]) {
|
|
32
|
-
usages.push(`${key}\t${groupDescriptions[key]}`);
|
|
33
|
-
} else if (typeof command === "function") {
|
|
34
|
-
let usage = command?.usage;
|
|
35
|
-
if (!usage) {
|
|
36
|
-
usage = defaultUsage(key, command);
|
|
37
|
-
}
|
|
38
|
-
usages.push(usage);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Case-insensitive sort
|
|
43
|
-
usages.sort(function (a, b) {
|
|
44
|
-
return a.toLowerCase().localeCompare(b.toLowerCase());
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
// Split into signatures and descriptions.
|
|
48
|
-
const signatures = [];
|
|
49
|
-
const descriptions = [];
|
|
50
|
-
usages.forEach((usage) => {
|
|
51
|
-
const [signature, description] = usage.split("\t");
|
|
52
|
-
signatures.push(signature);
|
|
53
|
-
descriptions.push(description || "");
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
// Calculate length of longest signature.
|
|
57
|
-
const lengths = signatures.map((signature) => signature.length);
|
|
58
|
-
const maxLength = Math.max(...lengths);
|
|
59
|
-
|
|
60
|
-
// Format lines, padding the descriptions to that length + gap.
|
|
61
|
-
const gap = 4;
|
|
62
|
-
const length = maxLength + gap;
|
|
63
|
-
const formatted = signatures.map(
|
|
64
|
-
(signature, index) => `${signature.padEnd(length)}${descriptions[index]}`
|
|
65
|
-
);
|
|
66
|
-
|
|
67
|
-
console.log(formatted.join("\n"));
|
|
68
|
-
console.log(
|
|
69
|
-
`\nMore details: "ori @help"; or get help on a function like @serve with "ori @help/@serve"`
|
|
70
|
-
);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function defaultUsage(name, fn) {
|
|
74
|
-
const arity = fn.length;
|
|
75
|
-
if (arity === 0) {
|
|
76
|
-
return `${name}()`;
|
|
77
|
-
} else if (arity === 1) {
|
|
78
|
-
return `${name}(arg)`;
|
|
79
|
-
} else {
|
|
80
|
-
let args = [];
|
|
81
|
-
for (let i = 0; i < arity; i++) {
|
|
82
|
-
args.push(`arg${i + 1}`);
|
|
83
|
-
}
|
|
84
|
-
return `${name}(${args.join(", ")})`;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { trailingSlash } from "@weborigami/async-tree";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* This mixin can be used to turn a collection of .js modules in a folder into a collection
|
|
6
|
-
* of commands. For every module `foo.js`, the tree will expose a key `foo` with the value
|
|
7
|
-
* of the module's export(s).
|
|
8
|
-
*
|
|
9
|
-
* @typedef {import("@weborigami/types").AsyncTree} AsyncTree
|
|
10
|
-
* @typedef {import("../../index.ts").Constructor<AsyncTree & { import: function }>} BaseConstructor
|
|
11
|
-
* @param {BaseConstructor} Base
|
|
12
|
-
*/
|
|
13
|
-
export default function CommandsModulesTransform(Base) {
|
|
14
|
-
return class CommandModules extends Base {
|
|
15
|
-
async get(key) {
|
|
16
|
-
const value = await super.get(key);
|
|
17
|
-
if (value !== undefined) {
|
|
18
|
-
return value;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// See if we have a JS module for the requested key.
|
|
22
|
-
key = trailingSlash.remove(key);
|
|
23
|
-
if (key === undefined || key.endsWith?.(".js")) {
|
|
24
|
-
return undefined;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const moduleKey = `${key}.js`;
|
|
28
|
-
return this.import?.(moduleKey);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
async keys() {
|
|
32
|
-
const keys = Array.from(await super.keys());
|
|
33
|
-
// If we find a key like "foo.js", then return "foo" as the key.
|
|
34
|
-
return keys.map((key) =>
|
|
35
|
-
key.endsWith(".js") ? path.basename(key, ".js") : key
|
|
36
|
-
);
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { cachedKeyFunctions, mapFn } from "@weborigami/async-tree";
|
|
2
|
-
import { toFunction } from "./utilities.js";
|
|
3
|
-
|
|
4
|
-
export default function arrowsMapFn() {
|
|
5
|
-
const deep = true;
|
|
6
|
-
return mapFn({
|
|
7
|
-
deep,
|
|
8
|
-
description: "arrowFunctions",
|
|
9
|
-
value: valueFn,
|
|
10
|
-
...cachedKeyFunctions(keyFn, deep),
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
function keyFn(sourceKey, tree) {
|
|
15
|
-
return parseArrowKey(sourceKey) ?? sourceKey;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// If the key is of the form "lhs←rhs", return "lhs".
|
|
19
|
-
// Whitespace between the lhs and the arrow is ignored.
|
|
20
|
-
function parseArrowKey(sourceKey) {
|
|
21
|
-
const regex = /^(?<lhs>.+?)\s*←.+$/;
|
|
22
|
-
const match = sourceKey.match(regex);
|
|
23
|
-
return match?.groups.lhs;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function valueFn(sourceValue, sourceKey, tree) {
|
|
27
|
-
let resultValue;
|
|
28
|
-
if (parseArrowKey(sourceKey)) {
|
|
29
|
-
// Treat the value as a function to be invoked.
|
|
30
|
-
resultValue = toFunction(sourceValue);
|
|
31
|
-
} else {
|
|
32
|
-
resultValue = sourceValue;
|
|
33
|
-
}
|
|
34
|
-
return resultValue;
|
|
35
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Origami language definition for highlight.js
|
|
3
|
-
*/
|
|
4
|
-
export default function origamiHighlightDefinition(hljs) {
|
|
5
|
-
return {
|
|
6
|
-
name: "Origami",
|
|
7
|
-
contains: [
|
|
8
|
-
hljs.C_LINE_COMMENT_MODE,
|
|
9
|
-
hljs.C_BLOCK_COMMENT_MODE,
|
|
10
|
-
hljs.C_NUMBER_MODE,
|
|
11
|
-
hljs.APOS_STRING_MODE,
|
|
12
|
-
hljs.QUOTE_STRING_MODE,
|
|
13
|
-
hljs.BACKSLASH_ESCAPE,
|
|
14
|
-
{
|
|
15
|
-
// Backtick template strings
|
|
16
|
-
className: "string",
|
|
17
|
-
begin: "`",
|
|
18
|
-
end: "`",
|
|
19
|
-
contains: [
|
|
20
|
-
hljs.BACKSLASH_ESCAPE,
|
|
21
|
-
{
|
|
22
|
-
className: "subst",
|
|
23
|
-
begin: "\\$\\{",
|
|
24
|
-
end: "\\}",
|
|
25
|
-
contains: [hljs.C_NUMBER_MODE, hljs.QUOTE_STRING_MODE],
|
|
26
|
-
},
|
|
27
|
-
],
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
// Treat all `@` builtins as keywords.
|
|
31
|
-
className: "keyword",
|
|
32
|
-
begin: /@\w+\b/,
|
|
33
|
-
},
|
|
34
|
-
],
|
|
35
|
-
};
|
|
36
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|