@weborigami/origami 0.4.1 → 0.5.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 +3 -6
- package/package.json +12 -12
- package/src/builtinsProgram.js +49 -71
- package/src/builtinsShell.js +3 -48
- package/src/common/documentObject.js +4 -16
- package/src/common/utilities.js +3 -3
- package/src/dev/ExplorableSiteTransform.js +1 -1
- package/src/dev/code.js +10 -8
- package/src/dev/crawler/audit.js +1 -1
- package/src/dev/crawler/crawl.js +1 -1
- package/src/dev/debug.js +1 -1
- package/src/dev/dev.js +1 -1
- package/src/dev/explore.ori +2 -2
- package/src/dev/help.yaml +11 -2
- package/src/dev/serve.js +3 -1
- package/src/dev/svg.js +1 -7
- package/src/dev/watch.js +1 -6
- package/src/handlers/handlerBuiltins.js +3 -2
- package/src/handlers/handlers.js +0 -4
- package/src/handlers/ori.handler.js +4 -2
- package/src/handlers/oridocument.handler.js +7 -7
- package/src/handlers/txt.handler.js +4 -17
- package/src/origami/fetch.js +22 -0
- package/src/{image → origami/image}/format.js +5 -3
- package/src/{image → origami/image}/resize.js +1 -1
- package/src/{site → origami}/indexPage.js +1 -1
- package/src/{text → origami}/inline.js +5 -10
- package/src/{site → origami}/jsonKeys.js +11 -12
- package/src/{text → origami}/mdHtml.js +1 -2
- package/src/origami/origami.js +15 -2
- package/src/{text → origami}/origamiHighlightDefinition.js +5 -20
- package/src/origami/project.js +2 -0
- package/src/{site → origami}/sitemap.js +1 -1
- package/src/{site → origami}/static.js +11 -12
- package/src/tree/addNextPrevious.js +1 -1
- package/src/tree/clear.js +1 -1
- package/src/tree/deepMap.js +1 -1
- package/src/tree/deepReverse.js +1 -1
- package/src/tree/deepTake.js +1 -1
- package/src/tree/deepValues.js +1 -1
- package/src/tree/defineds.js +1 -6
- package/src/tree/first.js +1 -1
- package/src/tree/group.js +1 -1
- package/src/tree/inners.js +1 -1
- package/src/tree/keys.js +1 -1
- package/src/tree/length.js +1 -1
- package/src/tree/map.js +6 -1
- package/src/tree/paginate.js +1 -6
- package/src/tree/parent.js +1 -1
- package/src/tree/plain.js +1 -1
- package/src/tree/reverse.js +1 -1
- package/src/tree/shuffle.js +1 -1
- package/src/tree/sort.js +1 -1
- package/src/tree/take.js +1 -1
- package/src/tree/values.js +1 -1
- package/src/builtinsJse.js +0 -77
- package/src/handlers/jse.handler.js +0 -17
- package/src/handlers/jsedocument.handler.js +0 -17
- package/src/image/formatFn.js +0 -18
- package/src/origami/regexMatch.js +0 -16
- package/src/protocols/inherited.js +0 -26
- package/src/protocols/new.js +0 -51
- package/src/protocols/scope.js +0 -31
- package/src/site/site.js +0 -7
- package/src/text/text.js +0 -5
- /package/src/{text → origami}/document.js +0 -0
- /package/src/{text → origami}/htmlDom.js +0 -0
- /package/src/{image → origami/image}/image.js +0 -0
- /package/src/{site → origami}/redirect.js +0 -0
- /package/src/{site → origami}/rss.js +0 -0
- /package/src/{site → origami}/slug.js +0 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { getHandlers, handleExtension } from "@weborigami/language";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @this {import("@weborigami/types").AsyncTree|null|undefined}
|
|
5
|
+
*/
|
|
6
|
+
export default async function fetchBuiltin(resource, options) {
|
|
7
|
+
const response = await fetch(resource, options);
|
|
8
|
+
if (!response.ok) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const value = await response.arrayBuffer();
|
|
13
|
+
if (!this) {
|
|
14
|
+
// Can't get extension handlers
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const handlers = getHandlers(this);
|
|
19
|
+
const url = new URL(resource);
|
|
20
|
+
const key = url.pathname;
|
|
21
|
+
return handleExtension(this, value, key, handlers);
|
|
22
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import sharp from "sharp";
|
|
2
|
+
import assertTreeIsDefined from "../../common/assertTreeIsDefined.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Return the image in a different format.
|
|
@@ -14,5 +14,7 @@ import imageFormatFn from "./formatFn.js";
|
|
|
14
14
|
*/
|
|
15
15
|
export default async function imageFormat(input, format, options) {
|
|
16
16
|
assertTreeIsDefined(this, "format");
|
|
17
|
-
return
|
|
17
|
+
return input instanceof Uint8Array || input instanceof ArrayBuffer
|
|
18
|
+
? sharp(input).toFormat(format, options).toBuffer()
|
|
19
|
+
: undefined;
|
|
18
20
|
}
|
|
@@ -11,7 +11,7 @@ import { getDescriptor } from "../common/utilities.js";
|
|
|
11
11
|
* @param {string} [basePath]
|
|
12
12
|
*/
|
|
13
13
|
export default async function indexPage(treelike, basePath) {
|
|
14
|
-
const tree = await getTreeArgument(this, arguments, treelike, "
|
|
14
|
+
const tree = await getTreeArgument(this, arguments, treelike, "indexPage");
|
|
15
15
|
const keys = Array.from(await tree.keys());
|
|
16
16
|
|
|
17
17
|
// Skip system-ish files that start with a period. Also skip `index.html`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isUnpackable, symbols, toString } from "@weborigami/async-tree";
|
|
2
2
|
import assertTreeIsDefined from "../common/assertTreeIsDefined.js";
|
|
3
3
|
import documentObject from "../common/documentObject.js";
|
|
4
|
-
import {
|
|
4
|
+
import { oridocumentHandler } from "../handlers/handlers.js";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Inline any Origami expressions found inside ${...} placeholders in the input
|
|
@@ -20,11 +20,8 @@ export default async function inline(input) {
|
|
|
20
20
|
if (isUnpackable(input)) {
|
|
21
21
|
input = await input.unpack();
|
|
22
22
|
}
|
|
23
|
-
const inputIsDocument =
|
|
24
|
-
|
|
25
|
-
const origami = inputIsDocument
|
|
26
|
-
? input["@text"] ?? input._body
|
|
27
|
-
: toString(input);
|
|
23
|
+
const inputIsDocument = input._body !== undefined;
|
|
24
|
+
const origami = inputIsDocument ? input._body : toString(input);
|
|
28
25
|
if (origami === null) {
|
|
29
26
|
return undefined;
|
|
30
27
|
}
|
|
@@ -38,16 +35,14 @@ export default async function inline(input) {
|
|
|
38
35
|
if (inputIsDocument) {
|
|
39
36
|
// Collect all document properties except the body
|
|
40
37
|
front = Object.fromEntries(
|
|
41
|
-
Object.entries(input).filter(
|
|
42
|
-
([key]) => key !== "@text" && key !== "_body"
|
|
43
|
-
)
|
|
38
|
+
Object.entries(input).filter(([key]) => key !== "_body")
|
|
44
39
|
);
|
|
45
40
|
} else {
|
|
46
41
|
front = null;
|
|
47
42
|
}
|
|
48
43
|
|
|
49
44
|
// @ts-ignore
|
|
50
|
-
let result = await
|
|
45
|
+
let result = await oridocumentHandler.unpack(origami, {
|
|
51
46
|
front,
|
|
52
47
|
parent,
|
|
53
48
|
});
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Tree, jsonKeys } from "@weborigami/async-tree";
|
|
2
2
|
import getTreeArgument from "../common/getTreeArgument.js";
|
|
3
|
-
import { transformObject } from "../common/utilities.js";
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* Expose .keys.json for a tree.
|
|
@@ -15,29 +14,29 @@ export default async function jsonKeysBuiltin(treelike) {
|
|
|
15
14
|
this,
|
|
16
15
|
arguments,
|
|
17
16
|
treelike,
|
|
18
|
-
"
|
|
17
|
+
"jsonKeys",
|
|
19
18
|
true
|
|
20
19
|
);
|
|
21
|
-
return
|
|
20
|
+
return jsonKeysTree(tree);
|
|
22
21
|
}
|
|
23
22
|
|
|
24
|
-
function
|
|
25
|
-
return
|
|
23
|
+
function jsonKeysTree(tree) {
|
|
24
|
+
return Object.assign(Object.create(tree), {
|
|
26
25
|
async get(key) {
|
|
27
|
-
let value = await
|
|
26
|
+
let value = await tree.get(key);
|
|
28
27
|
if (value === undefined && key === ".keys.json") {
|
|
29
28
|
value = await jsonKeys.stringify(this);
|
|
30
29
|
} else if (Tree.isTreelike(value)) {
|
|
31
|
-
const
|
|
32
|
-
value =
|
|
30
|
+
const subtree = Tree.from(value, { deep: true, parent: this });
|
|
31
|
+
value = jsonKeysTree(subtree);
|
|
33
32
|
}
|
|
34
33
|
return value;
|
|
35
|
-
}
|
|
34
|
+
},
|
|
36
35
|
|
|
37
36
|
async keys() {
|
|
38
|
-
const keys = new Set(await
|
|
37
|
+
const keys = new Set(await tree.keys());
|
|
39
38
|
keys.add(".keys.json");
|
|
40
39
|
return keys;
|
|
41
|
-
}
|
|
42
|
-
};
|
|
40
|
+
},
|
|
41
|
+
});
|
|
43
42
|
}
|
|
@@ -47,8 +47,7 @@ export default async function mdHtml(input) {
|
|
|
47
47
|
if (isUnpackable(input)) {
|
|
48
48
|
input = await input.unpack();
|
|
49
49
|
}
|
|
50
|
-
const inputIsDocument =
|
|
51
|
-
typeof input === "object" && ("_body" in input || "@text" in input);
|
|
50
|
+
const inputIsDocument = typeof input === "object" && "_body" in input;
|
|
52
51
|
const markdown = toString(input);
|
|
53
52
|
if (markdown === null) {
|
|
54
53
|
throw new Error("mdHtml: The provided input couldn't be treated as text.");
|
package/src/origami/origami.js
CHANGED
|
@@ -1,10 +1,24 @@
|
|
|
1
1
|
export { extension } from "@weborigami/async-tree";
|
|
2
2
|
export { toFunction } from "../common/utilities.js";
|
|
3
|
-
|
|
4
3
|
export { default as help } from "../dev/help.js"; // Alias
|
|
4
|
+
export { default as document } from "../origami/document.js";
|
|
5
|
+
export { default as htmlDom } from "../origami/htmlDom.js";
|
|
6
|
+
export { default as indexPage } from "../origami/indexPage.js";
|
|
7
|
+
export { default as inline } from "../origami/inline.js";
|
|
8
|
+
export { default as jsonKeys } from "../origami/jsonKeys.js";
|
|
9
|
+
export { default as mdHtml } from "../origami/mdHtml.js";
|
|
10
|
+
export { default as redirect } from "../origami/redirect.js";
|
|
11
|
+
export { default as rss } from "../origami/rss.js";
|
|
12
|
+
export { default as sitemap } from "../origami/sitemap.js";
|
|
13
|
+
export { default as slug } from "../origami/slug.js";
|
|
14
|
+
export { default as static } from "../origami/static.js";
|
|
5
15
|
export { default as basename } from "./basename.js";
|
|
6
16
|
export { default as config } from "./config.js";
|
|
7
17
|
export { default as csv } from "./csv.js";
|
|
18
|
+
export { default as fetch } from "./fetch.js";
|
|
19
|
+
export { default as format } from "./image/format.js";
|
|
20
|
+
export * as image from "./image/image.js";
|
|
21
|
+
export { default as resize } from "./image/resize.js";
|
|
8
22
|
export { default as json } from "./json.js";
|
|
9
23
|
export { default as jsonParse } from "./jsonParse.js";
|
|
10
24
|
export { default as naturalOrder } from "./naturalOrder.js";
|
|
@@ -13,7 +27,6 @@ export { default as ori } from "./ori.js";
|
|
|
13
27
|
export { default as pack } from "./pack.js";
|
|
14
28
|
export { default as post } from "./post.js";
|
|
15
29
|
export { default as project } from "./project.js";
|
|
16
|
-
export { default as regexMatch } from "./regexMatch.js";
|
|
17
30
|
export { default as repeat } from "./repeat.js";
|
|
18
31
|
export { default as shell } from "./shell.js";
|
|
19
32
|
export { default as slash } from "./slash.js";
|
|
@@ -26,32 +26,17 @@ export default function origamiHighlightDefinition(hljs) {
|
|
|
26
26
|
},
|
|
27
27
|
],
|
|
28
28
|
},
|
|
29
|
-
{
|
|
30
|
-
// Treat namespaces as keywords
|
|
31
|
-
className: "keyword",
|
|
32
|
-
begin:
|
|
33
|
-
/\b(calc|dev|explore|files|http|https|httpstree|httptree|image|inherited|js|new|node|origami|package|scope|site|text|tree):\b/,
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
// Treat identifier containing a period before an open paren or backtick as a variable
|
|
37
|
-
className: "variable",
|
|
38
|
-
begin:
|
|
39
|
-
/\b[^(){}\[\]<>\?!\|=,/:\`"'«»\\→⇒… \t\n\r]+\.[^(){}\[\]<>\?!\|=,/:\`"'«»\\→⇒… \t\n\r]+(?=(\(|\`))\b/,
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
className: "built_in",
|
|
43
|
-
// Treat shorthands before open paren or backtick as a builtin
|
|
44
|
-
begin: /\b[A-Za-z][A-Za-z0-9]*(?=(\(|\`))\b/,
|
|
45
|
-
},
|
|
46
29
|
{
|
|
47
30
|
className: "operator",
|
|
48
31
|
begin:
|
|
49
|
-
|
|
32
|
+
/===|!==|==|!=|<=|<|>=|>|\*|\*\*|\/|%|\+|-|=>|⇒|->|→|=|:|\.\.\.|&&|&|\|\||\||!|\^|~|\?\?|\?|#!/,
|
|
50
33
|
},
|
|
51
34
|
{
|
|
52
|
-
// Treat remaining identifiers as variables
|
|
53
35
|
className: "variable",
|
|
54
|
-
|
|
36
|
+
// This is simpler than the corresponding definition in the VS Code
|
|
37
|
+
// extension; we couldn't figure out how to get the Unicode ID_Continue
|
|
38
|
+
// pattern to match.
|
|
39
|
+
begin: /[$_A-Za-z0-9\.~][$_A-Za-z0-9\.~@!+\-*%&|^]*/,
|
|
55
40
|
},
|
|
56
41
|
],
|
|
57
42
|
};
|
package/src/origami/project.js
CHANGED
|
@@ -36,6 +36,8 @@ export default async function project() {
|
|
|
36
36
|
const foundConfig = await findAncestorFile(currentTree, configFileName);
|
|
37
37
|
if (foundConfig) {
|
|
38
38
|
root = foundConfig.container;
|
|
39
|
+
// Attach standard extension handlers so config can use them
|
|
40
|
+
root.handlers = handlerBuiltins();
|
|
39
41
|
// Unpack Origami configuration file
|
|
40
42
|
const buffer = foundConfig.value;
|
|
41
43
|
config = await oriHandler.unpack(buffer, {
|
|
@@ -21,7 +21,7 @@ const templateText = `(urls) => \`<?xml version="1.0" encoding="UTF-8"?>
|
|
|
21
21
|
*/
|
|
22
22
|
export default async function sitemap(treelike, baseHref = "") {
|
|
23
23
|
assertTreeIsDefined(this, "sitemap");
|
|
24
|
-
const tree = await getTreeArgument(this, arguments, treelike, "
|
|
24
|
+
const tree = await getTreeArgument(this, arguments, treelike, "sitemap");
|
|
25
25
|
|
|
26
26
|
// We're only interested in keys that end in .html or with no extension.
|
|
27
27
|
function test(key) {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Tree, jsonKeys } from "@weborigami/async-tree";
|
|
2
2
|
import getTreeArgument from "../common/getTreeArgument.js";
|
|
3
|
-
import { transformObject } from "../common/utilities.js";
|
|
4
3
|
import index from "./indexPage.js";
|
|
5
4
|
|
|
6
5
|
/**
|
|
@@ -12,8 +11,8 @@ import index from "./indexPage.js";
|
|
|
12
11
|
* @param {Treelike} treelike
|
|
13
12
|
*/
|
|
14
13
|
export default async function staticBuiltin(treelike) {
|
|
15
|
-
const tree = await getTreeArgument(this, arguments, treelike, "
|
|
16
|
-
const result =
|
|
14
|
+
const tree = await getTreeArgument(this, arguments, treelike, "static");
|
|
15
|
+
const result = staticTree(tree);
|
|
17
16
|
result.parent = this;
|
|
18
17
|
return result;
|
|
19
18
|
}
|
|
@@ -21,26 +20,26 @@ export default async function staticBuiltin(treelike) {
|
|
|
21
20
|
// The name we'll register as a builtin
|
|
22
21
|
staticBuiltin.key = "static";
|
|
23
22
|
|
|
24
|
-
function
|
|
25
|
-
return
|
|
23
|
+
function staticTree(tree) {
|
|
24
|
+
return Object.assign(Object.create(tree), {
|
|
26
25
|
async get(key) {
|
|
27
|
-
let value = await
|
|
26
|
+
let value = await tree.get(key);
|
|
28
27
|
if (value === undefined && key === "index.html") {
|
|
29
28
|
value = await index.call(this, this);
|
|
30
29
|
} else if (value === undefined && key === ".keys.json") {
|
|
31
30
|
value = await jsonKeys.stringify(this);
|
|
32
31
|
} else if (Tree.isTreelike(value)) {
|
|
33
|
-
const
|
|
34
|
-
value =
|
|
32
|
+
const subtree = Tree.from(value, { parent: this });
|
|
33
|
+
value = staticTree(subtree);
|
|
35
34
|
}
|
|
36
35
|
return value;
|
|
37
|
-
}
|
|
36
|
+
},
|
|
38
37
|
|
|
39
38
|
async keys() {
|
|
40
|
-
const keys = new Set(await
|
|
39
|
+
const keys = new Set(await tree.keys());
|
|
41
40
|
keys.add("index.html");
|
|
42
41
|
keys.add(".keys.json");
|
|
43
42
|
return keys;
|
|
44
|
-
}
|
|
45
|
-
};
|
|
43
|
+
},
|
|
44
|
+
});
|
|
46
45
|
}
|
package/src/tree/clear.js
CHANGED
|
@@ -8,7 +8,7 @@ import getTreeArgument from "../common/getTreeArgument.js";
|
|
|
8
8
|
* @param {import("@weborigami/async-tree").Treelike} treelike
|
|
9
9
|
*/
|
|
10
10
|
export default async function clear(treelike) {
|
|
11
|
-
const tree = await getTreeArgument(this, arguments, treelike, "
|
|
11
|
+
const tree = await getTreeArgument(this, arguments, treelike, "clear");
|
|
12
12
|
if (!Tree.isAsyncMutableTree(tree)) {
|
|
13
13
|
throw new TypeError("clean: the given tree is read-only.");
|
|
14
14
|
}
|
package/src/tree/deepMap.js
CHANGED
package/src/tree/deepReverse.js
CHANGED
package/src/tree/deepTake.js
CHANGED
package/src/tree/deepValues.js
CHANGED
package/src/tree/defineds.js
CHANGED
|
@@ -11,12 +11,7 @@ import getTreeArgument from "../common/getTreeArgument.js";
|
|
|
11
11
|
* @param {Treelike} treelike
|
|
12
12
|
*/
|
|
13
13
|
export default async function defineds(treelike) {
|
|
14
|
-
const tree = await getTreeArgument(
|
|
15
|
-
this,
|
|
16
|
-
arguments,
|
|
17
|
-
treelike,
|
|
18
|
-
"tree:defineds"
|
|
19
|
-
);
|
|
14
|
+
const tree = await getTreeArgument(this, arguments, treelike, "defineds");
|
|
20
15
|
|
|
21
16
|
const result = await Tree.mapReduce(tree, null, async (values, keys) => {
|
|
22
17
|
const object = {};
|
package/src/tree/first.js
CHANGED
|
@@ -9,7 +9,7 @@ import getTreeArgument from "../common/getTreeArgument.js";
|
|
|
9
9
|
* @param {Treelike} [treelike]
|
|
10
10
|
*/
|
|
11
11
|
export default async function first(treelike) {
|
|
12
|
-
const tree = await getTreeArgument(this, arguments, treelike, "
|
|
12
|
+
const tree = await getTreeArgument(this, arguments, treelike, "first");
|
|
13
13
|
for (const key of await tree.keys()) {
|
|
14
14
|
// Just return first value immediately.
|
|
15
15
|
const value = await tree.get(key);
|
package/src/tree/group.js
CHANGED
|
@@ -13,7 +13,7 @@ import { toFunction } from "../common/utilities.js";
|
|
|
13
13
|
* @param {import("../../index.ts").Invocable} groupKey
|
|
14
14
|
*/
|
|
15
15
|
export default async function groupBuiltin(treelike, groupKey) {
|
|
16
|
-
const tree = await getTreeArgument(this, arguments, treelike, "
|
|
16
|
+
const tree = await getTreeArgument(this, arguments, treelike, "group");
|
|
17
17
|
|
|
18
18
|
const groupKeyFn = toFunction(groupKey);
|
|
19
19
|
// Have the group key function run in this tree.
|
package/src/tree/inners.js
CHANGED
|
@@ -11,7 +11,7 @@ import getTreeArgument from "../common/getTreeArgument.js";
|
|
|
11
11
|
* @param {Treelike} [treelike]
|
|
12
12
|
*/
|
|
13
13
|
export default async function inners(treelike) {
|
|
14
|
-
const tree = await getTreeArgument(this, arguments, treelike, "
|
|
14
|
+
const tree = await getTreeArgument(this, arguments, treelike, "inners");
|
|
15
15
|
|
|
16
16
|
const result = {
|
|
17
17
|
async get(key) {
|
package/src/tree/keys.js
CHANGED
|
@@ -9,7 +9,7 @@ import getTreeArgument from "../common/getTreeArgument.js";
|
|
|
9
9
|
* @param {Treelike} [treelike]
|
|
10
10
|
*/
|
|
11
11
|
export default async function keys(treelike) {
|
|
12
|
-
const tree = await getTreeArgument(this, arguments, treelike, "
|
|
12
|
+
const tree = await getTreeArgument(this, arguments, treelike, "keys");
|
|
13
13
|
const keys = await tree.keys();
|
|
14
14
|
return Array.from(keys);
|
|
15
15
|
}
|
package/src/tree/length.js
CHANGED
|
@@ -9,7 +9,7 @@ import getTreeArgument from "../common/getTreeArgument.js";
|
|
|
9
9
|
* @param {Treelike} [treelike]
|
|
10
10
|
*/
|
|
11
11
|
export default async function length(treelike) {
|
|
12
|
-
const tree = await getTreeArgument(this, arguments, treelike, "
|
|
12
|
+
const tree = await getTreeArgument(this, arguments, treelike, "length");
|
|
13
13
|
const keys = Array.from(await tree.keys());
|
|
14
14
|
return keys.length;
|
|
15
15
|
}
|
package/src/tree/map.js
CHANGED
|
@@ -31,7 +31,7 @@ export default async function map(treelike, operation) {
|
|
|
31
31
|
this,
|
|
32
32
|
arguments,
|
|
33
33
|
treelike,
|
|
34
|
-
"
|
|
34
|
+
"map",
|
|
35
35
|
options?.deep
|
|
36
36
|
);
|
|
37
37
|
|
|
@@ -67,6 +67,11 @@ function extendedOptions(context, operation) {
|
|
|
67
67
|
) {
|
|
68
68
|
valueFn = operation;
|
|
69
69
|
options = {};
|
|
70
|
+
} else if (operation === undefined) {
|
|
71
|
+
/** @type {any} */
|
|
72
|
+
const error = new TypeError(`map: The second parameter was undefined.`);
|
|
73
|
+
error.position = 1;
|
|
74
|
+
throw error;
|
|
70
75
|
} else {
|
|
71
76
|
throw new TypeError(
|
|
72
77
|
`map: You must specify a value function or options dictionary as the second parameter.`
|
package/src/tree/paginate.js
CHANGED
|
@@ -13,12 +13,7 @@ import getTreeArgument from "../common/getTreeArgument.js";
|
|
|
13
13
|
* @param {number} [size=10]
|
|
14
14
|
*/
|
|
15
15
|
export default async function paginateBuiltin(treelike, size = 10) {
|
|
16
|
-
const tree = await getTreeArgument(
|
|
17
|
-
this,
|
|
18
|
-
arguments,
|
|
19
|
-
treelike,
|
|
20
|
-
"tree:paginate"
|
|
21
|
-
);
|
|
16
|
+
const tree = await getTreeArgument(this, arguments, treelike, "paginate");
|
|
22
17
|
const paginated = await paginate(tree, size);
|
|
23
18
|
paginated.parent = this;
|
|
24
19
|
return paginated;
|
package/src/tree/parent.js
CHANGED
|
@@ -10,6 +10,6 @@ import getTreeArgument from "../common/getTreeArgument.js";
|
|
|
10
10
|
* @param {Treelike} [treelike]
|
|
11
11
|
*/
|
|
12
12
|
export default async function parent(treelike) {
|
|
13
|
-
const tree = await getTreeArgument(this, arguments, treelike, "
|
|
13
|
+
const tree = await getTreeArgument(this, arguments, treelike, "parent");
|
|
14
14
|
return tree.parent;
|
|
15
15
|
}
|
package/src/tree/plain.js
CHANGED
|
@@ -10,6 +10,6 @@ import getTreeArgument from "../common/getTreeArgument.js";
|
|
|
10
10
|
* @param {Treelike} [treelike]
|
|
11
11
|
*/
|
|
12
12
|
export default async function plain(treelike) {
|
|
13
|
-
const tree = await getTreeArgument(this, arguments, treelike, "
|
|
13
|
+
const tree = await getTreeArgument(this, arguments, treelike, "plain");
|
|
14
14
|
return Tree.plain(tree);
|
|
15
15
|
}
|
package/src/tree/reverse.js
CHANGED
|
@@ -11,7 +11,7 @@ import getTreeArgument from "../common/getTreeArgument.js";
|
|
|
11
11
|
* @param {Treelike} [treelike]
|
|
12
12
|
*/
|
|
13
13
|
export default async function reverseBuiltin(treelike) {
|
|
14
|
-
const tree = await getTreeArgument(this, arguments, treelike, "
|
|
14
|
+
const tree = await getTreeArgument(this, arguments, treelike, "reverse");
|
|
15
15
|
const reversed = reverse(tree);
|
|
16
16
|
return reversed;
|
|
17
17
|
}
|
package/src/tree/shuffle.js
CHANGED
|
@@ -23,7 +23,7 @@ export default async function shuffleTree(treelike, reshuffle = false) {
|
|
|
23
23
|
return array;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
const tree = await getTreeArgument(this, arguments, treelike, "
|
|
26
|
+
const tree = await getTreeArgument(this, arguments, treelike, "shuffle");
|
|
27
27
|
|
|
28
28
|
let keys;
|
|
29
29
|
return {
|
package/src/tree/sort.js
CHANGED
|
@@ -23,7 +23,7 @@ import { toFunction } from "../common/utilities.js";
|
|
|
23
23
|
* @param {SortOptions|ValueKeyFn} [options]
|
|
24
24
|
*/
|
|
25
25
|
export default async function sortBuiltin(treelike, options) {
|
|
26
|
-
const tree = await getTreeArgument(this, arguments, treelike, "
|
|
26
|
+
const tree = await getTreeArgument(this, arguments, treelike, "sort");
|
|
27
27
|
|
|
28
28
|
if (typeof options === "function") {
|
|
29
29
|
// Take the function as the `sortKey` option
|
package/src/tree/take.js
CHANGED
|
@@ -12,7 +12,7 @@ import getTreeArgument from "../common/getTreeArgument.js";
|
|
|
12
12
|
* @param {number} count
|
|
13
13
|
*/
|
|
14
14
|
export default async function take(treelike, count) {
|
|
15
|
-
const tree = await getTreeArgument(this, arguments, treelike, "
|
|
15
|
+
const tree = await getTreeArgument(this, arguments, treelike, "take");
|
|
16
16
|
const taken = await takeTransform(tree, count);
|
|
17
17
|
taken.parent = this;
|
|
18
18
|
return taken;
|
package/src/tree/values.js
CHANGED
|
@@ -10,6 +10,6 @@ import getTreeArgument from "../common/getTreeArgument.js";
|
|
|
10
10
|
* @param {Treelike} [treelike]
|
|
11
11
|
*/
|
|
12
12
|
export default async function values(treelike) {
|
|
13
|
-
const tree = await getTreeArgument(this, arguments, treelike, "
|
|
13
|
+
const tree = await getTreeArgument(this, arguments, treelike, "values");
|
|
14
14
|
return Tree.values(tree);
|
|
15
15
|
}
|
package/src/builtinsJse.js
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { text as treeText } from "@weborigami/async-tree";
|
|
2
|
-
import { jsGlobals } from "@weborigami/language";
|
|
3
|
-
import * as dev from "./dev/dev.js";
|
|
4
|
-
import help from "./dev/help.js";
|
|
5
|
-
import handlerBuiltins from "./handlers/handlerBuiltins.js";
|
|
6
|
-
import * as image from "./image/image.js";
|
|
7
|
-
import * as origami from "./origami/origami.js";
|
|
8
|
-
import explore from "./protocols/explore.js";
|
|
9
|
-
import files from "./protocols/files.js";
|
|
10
|
-
import http from "./protocols/http.js";
|
|
11
|
-
import https from "./protocols/https.js";
|
|
12
|
-
import httpstree from "./protocols/httpstree.js";
|
|
13
|
-
import httptree from "./protocols/httptree.js";
|
|
14
|
-
import node from "./protocols/node.js";
|
|
15
|
-
import packageNamespace from "./protocols/package.js";
|
|
16
|
-
import scope from "./protocols/scope.js";
|
|
17
|
-
import * as site from "./site/site.js";
|
|
18
|
-
import * as text from "./text/text.js";
|
|
19
|
-
import * as tree from "./tree/tree.js";
|
|
20
|
-
|
|
21
|
-
let builtins;
|
|
22
|
-
|
|
23
|
-
export default function builtinsJse() {
|
|
24
|
-
if (!builtins) {
|
|
25
|
-
const Tree = {
|
|
26
|
-
...tree,
|
|
27
|
-
indent: text.indent,
|
|
28
|
-
json: origami.json,
|
|
29
|
-
text: treeText,
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
const Origami = {
|
|
33
|
-
image,
|
|
34
|
-
...origami,
|
|
35
|
-
...site,
|
|
36
|
-
static: site.staticBuiltin,
|
|
37
|
-
...text,
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
const Protocol = {
|
|
41
|
-
explore,
|
|
42
|
-
files,
|
|
43
|
-
http,
|
|
44
|
-
https,
|
|
45
|
-
httpstree,
|
|
46
|
-
httptree,
|
|
47
|
-
node,
|
|
48
|
-
package: packageNamespace,
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
/** @type {any} */
|
|
52
|
-
builtins = {
|
|
53
|
-
...jsGlobals,
|
|
54
|
-
|
|
55
|
-
"explore:": explore,
|
|
56
|
-
"files:": files,
|
|
57
|
-
"help:": help,
|
|
58
|
-
"http:": http,
|
|
59
|
-
"https:": https,
|
|
60
|
-
"httpstree:": httpstree,
|
|
61
|
-
"httptree:": httptree,
|
|
62
|
-
"node:": node,
|
|
63
|
-
"package:": packageNamespace,
|
|
64
|
-
"scope:": scope,
|
|
65
|
-
|
|
66
|
-
Dev: dev,
|
|
67
|
-
Tree,
|
|
68
|
-
Origami,
|
|
69
|
-
Protocol,
|
|
70
|
-
|
|
71
|
-
// Handlers need to be exposed at top level
|
|
72
|
-
...handlerBuiltins(),
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return builtins;
|
|
77
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import builtinsJse from "../builtinsJse.js";
|
|
2
|
-
import getParent from "./getParent.js";
|
|
3
|
-
import { oriHandler } from "./handlers.js";
|
|
4
|
-
|
|
5
|
-
export default {
|
|
6
|
-
...oriHandler,
|
|
7
|
-
|
|
8
|
-
async unpack(packed, options = {}) {
|
|
9
|
-
const parent = getParent(packed, options);
|
|
10
|
-
return oriHandler.unpack(packed, {
|
|
11
|
-
...options,
|
|
12
|
-
globals: builtinsJse(),
|
|
13
|
-
mode: "jse",
|
|
14
|
-
parent,
|
|
15
|
-
});
|
|
16
|
-
},
|
|
17
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import builtinsJse from "../builtinsJse.js";
|
|
2
|
-
import getParent from "./getParent.js";
|
|
3
|
-
import { oridocumentHandler } from "./handlers.js";
|
|
4
|
-
|
|
5
|
-
export default {
|
|
6
|
-
...oridocumentHandler,
|
|
7
|
-
|
|
8
|
-
async unpack(packed, options = {}) {
|
|
9
|
-
const parent = getParent(packed, options);
|
|
10
|
-
return oridocumentHandler.unpack(packed, {
|
|
11
|
-
...options,
|
|
12
|
-
globals: builtinsJse(),
|
|
13
|
-
mode: "jse",
|
|
14
|
-
parent,
|
|
15
|
-
});
|
|
16
|
-
},
|
|
17
|
-
};
|