@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.
Files changed (71) hide show
  1. package/main.js +3 -6
  2. package/package.json +12 -12
  3. package/src/builtinsProgram.js +49 -71
  4. package/src/builtinsShell.js +3 -48
  5. package/src/common/documentObject.js +4 -16
  6. package/src/common/utilities.js +3 -3
  7. package/src/dev/ExplorableSiteTransform.js +1 -1
  8. package/src/dev/code.js +10 -8
  9. package/src/dev/crawler/audit.js +1 -1
  10. package/src/dev/crawler/crawl.js +1 -1
  11. package/src/dev/debug.js +1 -1
  12. package/src/dev/dev.js +1 -1
  13. package/src/dev/explore.ori +2 -2
  14. package/src/dev/help.yaml +11 -2
  15. package/src/dev/serve.js +3 -1
  16. package/src/dev/svg.js +1 -7
  17. package/src/dev/watch.js +1 -6
  18. package/src/handlers/handlerBuiltins.js +3 -2
  19. package/src/handlers/handlers.js +0 -4
  20. package/src/handlers/ori.handler.js +4 -2
  21. package/src/handlers/oridocument.handler.js +7 -7
  22. package/src/handlers/txt.handler.js +4 -17
  23. package/src/origami/fetch.js +22 -0
  24. package/src/{image → origami/image}/format.js +5 -3
  25. package/src/{image → origami/image}/resize.js +1 -1
  26. package/src/{site → origami}/indexPage.js +1 -1
  27. package/src/{text → origami}/inline.js +5 -10
  28. package/src/{site → origami}/jsonKeys.js +11 -12
  29. package/src/{text → origami}/mdHtml.js +1 -2
  30. package/src/origami/origami.js +15 -2
  31. package/src/{text → origami}/origamiHighlightDefinition.js +5 -20
  32. package/src/origami/project.js +2 -0
  33. package/src/{site → origami}/sitemap.js +1 -1
  34. package/src/{site → origami}/static.js +11 -12
  35. package/src/tree/addNextPrevious.js +1 -1
  36. package/src/tree/clear.js +1 -1
  37. package/src/tree/deepMap.js +1 -1
  38. package/src/tree/deepReverse.js +1 -1
  39. package/src/tree/deepTake.js +1 -1
  40. package/src/tree/deepValues.js +1 -1
  41. package/src/tree/defineds.js +1 -6
  42. package/src/tree/first.js +1 -1
  43. package/src/tree/group.js +1 -1
  44. package/src/tree/inners.js +1 -1
  45. package/src/tree/keys.js +1 -1
  46. package/src/tree/length.js +1 -1
  47. package/src/tree/map.js +6 -1
  48. package/src/tree/paginate.js +1 -6
  49. package/src/tree/parent.js +1 -1
  50. package/src/tree/plain.js +1 -1
  51. package/src/tree/reverse.js +1 -1
  52. package/src/tree/shuffle.js +1 -1
  53. package/src/tree/sort.js +1 -1
  54. package/src/tree/take.js +1 -1
  55. package/src/tree/values.js +1 -1
  56. package/src/builtinsJse.js +0 -77
  57. package/src/handlers/jse.handler.js +0 -17
  58. package/src/handlers/jsedocument.handler.js +0 -17
  59. package/src/image/formatFn.js +0 -18
  60. package/src/origami/regexMatch.js +0 -16
  61. package/src/protocols/inherited.js +0 -26
  62. package/src/protocols/new.js +0 -51
  63. package/src/protocols/scope.js +0 -31
  64. package/src/site/site.js +0 -7
  65. package/src/text/text.js +0 -5
  66. /package/src/{text → origami}/document.js +0 -0
  67. /package/src/{text → origami}/htmlDom.js +0 -0
  68. /package/src/{image → origami/image}/image.js +0 -0
  69. /package/src/{site → origami}/redirect.js +0 -0
  70. /package/src/{site → origami}/rss.js +0 -0
  71. /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 assertTreeIsDefined from "../common/assertTreeIsDefined.js";
2
- import imageFormatFn from "./formatFn.js";
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 imageFormatFn.call(this, format, options)(input);
17
+ return input instanceof Uint8Array || input instanceof ArrayBuffer
18
+ ? sharp(input).toFormat(format, options).toBuffer()
19
+ : undefined;
18
20
  }
@@ -1,5 +1,5 @@
1
1
  import sharp from "sharp";
2
- import assertTreeIsDefined from "../common/assertTreeIsDefined.js";
2
+ import assertTreeIsDefined from "../../common/assertTreeIsDefined.js";
3
3
 
4
4
  /**
5
5
  * Resize an image.
@@ -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, "site:index");
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 { jsedocumentHandler } from "../handlers/handlers.js";
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
- input["@text"] !== undefined || input._body !== undefined;
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 jsedocumentHandler.unpack(origami, {
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
- "site:jsonKeys",
17
+ "jsonKeys",
19
18
  true
20
19
  );
21
- return transformObject(JsonKeysTransform, tree);
20
+ return jsonKeysTree(tree);
22
21
  }
23
22
 
24
- function JsonKeysTransform(Base) {
25
- return class Static extends Base {
23
+ function jsonKeysTree(tree) {
24
+ return Object.assign(Object.create(tree), {
26
25
  async get(key) {
27
- let value = await super.get(key);
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 tree = Tree.from(value, { deep: true, parent: this });
32
- value = transformObject(JsonKeysTransform, tree);
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 super.keys());
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.");
@@ -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
- begin: /\b[^(){}\[\]<>\?!\|=,/:\`"'«»\\→⇒… \t\n\r]+\b/,
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
  };
@@ -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, "site:sitemap");
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, "site:static");
16
- const result = transformObject(StaticTransform, tree);
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 StaticTransform(Base) {
25
- return class Static extends Base {
23
+ function staticTree(tree) {
24
+ return Object.assign(Object.create(tree), {
26
25
  async get(key) {
27
- let value = await super.get(key);
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 tree = Tree.from(value, { parent: this });
34
- value = transformObject(StaticTransform, tree);
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 super.keys());
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
  }
@@ -14,7 +14,7 @@ export default async function addNextPreviousBuiltin(treelike) {
14
14
  this,
15
15
  arguments,
16
16
  treelike,
17
- "tree:addNextPrevious"
17
+ "addNextPrevious"
18
18
  );
19
19
  const result = await addNextPrevious(tree);
20
20
  result[symbols.parent] = this;
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, "tree:clear");
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
  }
@@ -19,7 +19,7 @@ export default async function deepMap(treelike, operation) {
19
19
  this,
20
20
  arguments,
21
21
  treelike,
22
- "tree:deepMap",
22
+ "deepMap",
23
23
  true
24
24
  );
25
25
  /** @type {TreeMapOptions} */
@@ -15,7 +15,7 @@ export default async function deepReverseBuiltin(treelike) {
15
15
  this,
16
16
  arguments,
17
17
  treelike,
18
- "tree:deepReverse",
18
+ "deepReverse",
19
19
  true
20
20
  );
21
21
  const reversed = deepReverse(tree);
@@ -17,7 +17,7 @@ export default async function deepTake(treelike, count) {
17
17
  this,
18
18
  arguments,
19
19
  treelike,
20
- "tree:deepTake",
20
+ "deepTake",
21
21
  true
22
22
  );
23
23
  const taken = await deepTakeTransform(tree, count);
@@ -15,7 +15,7 @@ export default async function deepValuesBuiltin(treelike) {
15
15
  this,
16
16
  arguments,
17
17
  treelike,
18
- "tree:deepValues",
18
+ "deepValues",
19
19
  true
20
20
  );
21
21
  return deepValues(tree);
@@ -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, "tree:first");
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, "tree:group");
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.
@@ -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, "tree:inners");
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, "tree:keys");
12
+ const tree = await getTreeArgument(this, arguments, treelike, "keys");
13
13
  const keys = await tree.keys();
14
14
  return Array.from(keys);
15
15
  }
@@ -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, "tree:length");
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
- "tree:map",
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.`
@@ -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;
@@ -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, "tree:parent");
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, "tree:plain");
13
+ const tree = await getTreeArgument(this, arguments, treelike, "plain");
14
14
  return Tree.plain(tree);
15
15
  }
@@ -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, "tree:reverse");
14
+ const tree = await getTreeArgument(this, arguments, treelike, "reverse");
15
15
  const reversed = reverse(tree);
16
16
  return reversed;
17
17
  }
@@ -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, "tree:shuffle");
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, "tree:sort");
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, "tree:take");
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;
@@ -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, "tree:values");
13
+ const tree = await getTreeArgument(this, arguments, treelike, "values");
14
14
  return Tree.values(tree);
15
15
  }
@@ -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
- };