@weborigami/origami 0.3.4-jse.7 → 0.3.4-jse.8

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 (62) hide show
  1. package/main.js +4 -1
  2. package/package.json +4 -4
  3. package/src/builtinsJse.js +15 -5
  4. package/src/builtinsProgram.js +81 -0
  5. package/src/builtinsShell.js +41 -30
  6. package/src/cli/cli.js +1 -1
  7. package/src/common/documentObject.js +14 -3
  8. package/src/common/utilities.js +1 -1
  9. package/src/{tree → dev}/copy.js +2 -2
  10. package/src/dev/dev.js +6 -0
  11. package/src/dev/explore.js +2 -2
  12. package/src/{help → dev}/help.js +5 -5
  13. package/src/{help → dev}/help.yaml +80 -170
  14. package/src/dev/serve.js +1 -1
  15. package/src/{origami → dev}/version.js +2 -2
  16. package/src/dev/watch.js +1 -1
  17. package/src/handlers/ori.handler.js +2 -2
  18. package/src/handlers/oridocument.handler.js +2 -2
  19. package/src/handlers/txt.handler.js +15 -3
  20. package/src/handlers/xhtml.handler.js +1 -1
  21. package/src/handlers/yml.handler.js +1 -1
  22. package/src/image/format.js +1 -1
  23. package/src/image/resize.js +1 -1
  24. package/src/origami/csv.js +1 -1
  25. package/src/origami/json.js +1 -1
  26. package/src/origami/once.js +1 -1
  27. package/src/origami/ori.js +1 -1
  28. package/src/origami/origami.js +1 -3
  29. package/src/origami/pack.js +1 -1
  30. package/src/origami/project.js +1 -1
  31. package/src/origami/regexMatch.js +7 -4
  32. package/src/origami/string.js +1 -1
  33. package/src/origami/unpack.js +1 -1
  34. package/src/origami/yaml.js +1 -1
  35. package/src/protocols/explore.js +1 -1
  36. package/src/protocols/files.js +1 -1
  37. package/src/protocols/http.js +1 -1
  38. package/src/protocols/https.js +1 -1
  39. package/src/protocols/httpstree.js +1 -1
  40. package/src/protocols/httptree.js +1 -1
  41. package/src/protocols/inherited.js +7 -2
  42. package/src/protocols/js.js +10 -0
  43. package/src/protocols/new.js +7 -2
  44. package/src/protocols/scope.js +6 -1
  45. package/src/site/rss.js +1 -1
  46. package/src/site/sitemap.js +1 -1
  47. package/src/text/document.js +1 -1
  48. package/src/text/inline.js +1 -1
  49. package/src/text/mdHtml.js +1 -1
  50. package/src/tree/cache.js +1 -1
  51. package/src/tree/concat.js +1 -1
  52. package/src/tree/deepMerge.js +1 -1
  53. package/src/tree/filter.js +1 -1
  54. package/src/tree/fromFn.js +1 -1
  55. package/src/tree/globKeys.js +1 -1
  56. package/src/tree/mask.js +1 -1
  57. package/src/tree/match.js +1 -1
  58. package/src/tree/merge.js +1 -1
  59. package/src/tree/regExpKeys.js +1 -1
  60. package/src/tree/tree.js +0 -1
  61. package/src/BuiltinsTree.js +0 -18
  62. /package/src/{origami → dev}/stdin.js +0 -0
@@ -14,6 +14,6 @@ import constructSiteTree from "../common/constructSiteTree.js";
14
14
  * @param {...string} keys
15
15
  */
16
16
  export default function httptree(host, ...keys) {
17
- assertTreeIsDefined(this, "httptree:");
17
+ assertTreeIsDefined(this, "httptree");
18
18
  return constructSiteTree("http:", SiteTree, this, host, ...keys);
19
19
  }
@@ -1,4 +1,5 @@
1
1
  import { scope, Tree } from "@weborigami/async-tree";
2
+ import { attachWarning } from "@weborigami/language";
2
3
  import assertTreeIsDefined from "../common/assertTreeIsDefined.js";
3
4
 
4
5
  /**
@@ -10,12 +11,16 @@ import assertTreeIsDefined from "../common/assertTreeIsDefined.js";
10
11
  * @param {string[]} keys
11
12
  */
12
13
  export default async function inherited(...keys) {
13
- assertTreeIsDefined(this, "inherited:");
14
+ assertTreeIsDefined(this, "inherited");
14
15
  const key = keys.shift();
15
16
  if (!this?.parent) {
16
17
  return undefined;
17
18
  }
18
19
  const parentScope = scope(this.parent);
19
20
  const value = await parentScope.get(key);
20
- return keys.length > 0 ? await Tree.traverse(value, ...keys) : value;
21
+ const result = keys.length > 0 ? await Tree.traverse(value, ...keys) : value;
22
+ return attachWarning(
23
+ result,
24
+ "The inherited protocol is deprecated. In most cases it can be dropped."
25
+ );
21
26
  }
@@ -0,0 +1,10 @@
1
+ import { Tree } from "@weborigami/async-tree";
2
+ import { attachWarning, jsGlobals } from "@weborigami/language";
3
+
4
+ export default async function js(...keys) {
5
+ const result = await Tree.traverseOrThrow.call(this, jsGlobals, ...keys);
6
+ return attachWarning(
7
+ result,
8
+ "The js:<name> protocol is deprecated. Drop the js: and just use <name> instead."
9
+ );
10
+ }
@@ -1,4 +1,5 @@
1
1
  import { isUnpackable, scope as scopeFn, Tree } from "@weborigami/async-tree";
2
+ import { attachWarning } from "@weborigami/language";
2
3
  import assertTreeIsDefined from "../common/assertTreeIsDefined.js";
3
4
 
4
5
  /**
@@ -11,7 +12,7 @@ import assertTreeIsDefined from "../common/assertTreeIsDefined.js";
11
12
  * @param {...any} keys
12
13
  */
13
14
  export default async function instantiate(...keys) {
14
- assertTreeIsDefined(this, "new:");
15
+ assertTreeIsDefined(this, "new");
15
16
  let constructor;
16
17
 
17
18
  const scope = this ? scopeFn(this) : null;
@@ -33,7 +34,7 @@ export default async function instantiate(...keys) {
33
34
  }
34
35
  // Origami may pass `undefined` as the first argument to the constructor. We
35
36
  // don't pass that along, because constructors like `Date` don't like it.
36
- return (...args) => {
37
+ const result = (...args) => {
37
38
  const object =
38
39
  args.length === 1 && args[0] === undefined
39
40
  ? new constructor()
@@ -43,4 +44,8 @@ export default async function instantiate(...keys) {
43
44
  }
44
45
  return object;
45
46
  };
47
+ return attachWarning(
48
+ result,
49
+ "The new:Class() syntax is deprecated. Use `new Class()` instead."
50
+ );
46
51
  }
@@ -1,4 +1,5 @@
1
1
  import { Tree, scope as scopeFn } from "@weborigami/async-tree";
2
+ import { attachWarning } from "@weborigami/language";
2
3
 
3
4
  /**
4
5
  * @typedef {import("@weborigami/types").AsyncTree} AsyncTree
@@ -20,5 +21,9 @@ export default async function scope(...keys) {
20
21
  throw error;
21
22
  }
22
23
  }
23
- return keys.length > 0 ? await Tree.traverse(value, ...keys) : value;
24
+ const result = keys.length > 0 ? await Tree.traverse(value, ...keys) : value;
25
+ return attachWarning(
26
+ result,
27
+ "The scope protocol is deprecated. In most cases it can be dropped."
28
+ );
24
29
  }
package/src/site/rss.js CHANGED
@@ -10,7 +10,7 @@ import assertTreeIsDefined from "../common/assertTreeIsDefined.js";
10
10
  * @param {any} options
11
11
  */
12
12
  export default async function rss(jsonFeedTree, options = {}) {
13
- assertTreeIsDefined(this, "site:rss");
13
+ assertTreeIsDefined(this, "rss");
14
14
  const jsonFeed = await Tree.plain(jsonFeedTree);
15
15
  return jsonFeedToRss(jsonFeed, options);
16
16
  }
@@ -20,7 +20,7 @@ const templateText = `(urls) => \`<?xml version="1.0" encoding="UTF-8"?>
20
20
  * @param {string} [baseHref ]
21
21
  */
22
22
  export default async function sitemap(treelike, baseHref = "") {
23
- assertTreeIsDefined(this, "site:sitemap");
23
+ assertTreeIsDefined(this, "sitemap");
24
24
  const tree = await getTreeArgument(this, arguments, treelike, "site:sitemap");
25
25
 
26
26
  // We're only interested in keys that end in .html or with no extension.
@@ -10,6 +10,6 @@ import documentObject from "../common/documentObject.js";
10
10
  * @param {any} [data]
11
11
  */
12
12
  export default async function documentBuiltin(text, data) {
13
- assertTreeIsDefined(this, "text:document");
13
+ assertTreeIsDefined(this, "document");
14
14
  return documentObject(text, data);
15
15
  }
@@ -14,7 +14,7 @@ import { jsedocumentHandler } from "../handlers/handlers.js";
14
14
  * @param {StringLike} input
15
15
  */
16
16
  export default async function inline(input) {
17
- assertTreeIsDefined(this, "text:inline");
17
+ assertTreeIsDefined(this, "inline");
18
18
 
19
19
  // Get the input text and any attached front matter.
20
20
  if (isUnpackable(input)) {
@@ -48,7 +48,7 @@ export default async function mdHtml(input) {
48
48
  input = await input.unpack();
49
49
  }
50
50
  const inputIsDocument =
51
- input["@text"] !== undefined || input._body !== undefined;
51
+ typeof input === "object" && ("_body" in input || "@text" in input);
52
52
  const markdown = toString(input);
53
53
  if (markdown === null) {
54
54
  throw new Error("mdHtml: The provided input couldn't be treated as text.");
package/src/tree/cache.js CHANGED
@@ -12,7 +12,7 @@ import assertTreeIsDefined from "../common/assertTreeIsDefined.js";
12
12
  * @this {AsyncTree|null}
13
13
  */
14
14
  export default async function cacheBuiltin(sourceTreelike, cacheTreelike) {
15
- assertTreeIsDefined(this, "tree:cache");
15
+ assertTreeIsDefined(this, "cache");
16
16
  /** @type {any} */
17
17
  const cacheTree = cacheTreelike
18
18
  ? Tree.from(cacheTreelike, { parent: this })
@@ -11,7 +11,7 @@ import assertTreeIsDefined from "../common/assertTreeIsDefined.js";
11
11
  * @param {any[]} args
12
12
  */
13
13
  export default async function concat(...args) {
14
- assertTreeIsDefined(this, "tree:concat");
14
+ assertTreeIsDefined(this, "concat");
15
15
  const tree = args.length === 0 ? this : Tree.from(args, { parent: this });
16
16
  return ops.concat.call(this, tree);
17
17
  }
@@ -10,7 +10,7 @@ import assertTreeIsDefined from "../common/assertTreeIsDefined.js";
10
10
  * @param {Treelike[]} trees
11
11
  */
12
12
  export default async function treeDeepMerge(...trees) {
13
- assertTreeIsDefined(this, "tree:deepMerge");
13
+ assertTreeIsDefined(this, "deepMerge");
14
14
  // Merge the trees.
15
15
  const result = deepMerge(...trees);
16
16
  result.parent = this;
@@ -12,7 +12,7 @@ import assertTreeIsDefined from "../common/assertTreeIsDefined.js";
12
12
  * @param {Treelike} filterTreelike
13
13
  */
14
14
  export default async function filterBuiltin(sourceTreelike, filterTreelike) {
15
- assertTreeIsDefined(this, "tree:filter");
15
+ assertTreeIsDefined(this, "filter");
16
16
  const result = filter(sourceTreelike, filterTreelike);
17
17
  result.parent = this;
18
18
  return result;
@@ -13,7 +13,7 @@ import { toFunction } from "../common/utilities.js";
13
13
  * @param {Invocable} [invocable]
14
14
  */
15
15
  export default async function fromFn(invocable, keys = []) {
16
- assertTreeIsDefined(this, "tree:fromFn");
16
+ assertTreeIsDefined(this, "fromFn");
17
17
  if (invocable === undefined) {
18
18
  throw new Error(
19
19
  "An Origami function was called with an initial argument, but its value is undefined."
@@ -12,7 +12,7 @@ import assertTreeIsDefined from "../common/assertTreeIsDefined.js";
12
12
  * @this {AsyncTree|null}
13
13
  */
14
14
  export default async function globKeysBuiltin(tree) {
15
- assertTreeIsDefined(this, "tree:globs");
15
+ assertTreeIsDefined(this, "globs");
16
16
  const result = globKeys(tree);
17
17
  setParent(this, result);
18
18
  return result;
package/src/tree/mask.js CHANGED
@@ -12,7 +12,7 @@ import assertTreeIsDefined from "../common/assertTreeIsDefined.js";
12
12
  * @param {Treelike} maskTreelike
13
13
  */
14
14
  export default async function maskBuiltin(sourceTreelike, maskTreelike) {
15
- assertTreeIsDefined(this, "tree:mask");
15
+ assertTreeIsDefined(this, "mask");
16
16
  const result = mask(sourceTreelike, maskTreelike);
17
17
  result.parent = this;
18
18
  return result;
package/src/tree/match.js CHANGED
@@ -24,7 +24,7 @@ import assertTreeIsDefined from "../common/assertTreeIsDefined.js";
24
24
  * @param {Treelike} [keys]
25
25
  */
26
26
  export default function match(pattern, resultFn, keys = []) {
27
- assertTreeIsDefined(this, "tree:match");
27
+ assertTreeIsDefined(this, "match");
28
28
  let regex;
29
29
  if (typeof pattern === "string") {
30
30
  // Convert the simple pattern format into a regular expression.
package/src/tree/merge.js CHANGED
@@ -11,7 +11,7 @@ import assertTreeIsDefined from "../common/assertTreeIsDefined.js";
11
11
  * @param {(Treelike|null)[]} trees
12
12
  */
13
13
  export default async function treeMerge(...trees) {
14
- assertTreeIsDefined(this, "tree:merge");
14
+ assertTreeIsDefined(this, "merge");
15
15
 
16
16
  // Filter out null or undefined trees.
17
17
  /** @type {Treelike[]}
@@ -12,7 +12,7 @@ import assertTreeIsDefined from "../common/assertTreeIsDefined.js";
12
12
  * @this {AsyncTree|null}
13
13
  */
14
14
  export default async function regExpKeysBuiltin(tree) {
15
- assertTreeIsDefined(this, "tree:globs");
15
+ assertTreeIsDefined(this, "regExpKeys");
16
16
  const result = regExpKeys(tree);
17
17
  setParent(this, result);
18
18
  return result;
package/src/tree/tree.js CHANGED
@@ -5,7 +5,6 @@ export { default as calendar } from "./calendar.js";
5
5
  export { default as clear } from "./clear.js";
6
6
  export { default as concat } from "./concat.js";
7
7
  export { default as constant } from "./constant.js";
8
- export { default as copy } from "./copy.js";
9
8
  export { default as deepMap } from "./deepMap.js";
10
9
  export { default as deepMerge } from "./deepMerge.js";
11
10
  export { default as deepReverse } from "./deepReverse.js";
@@ -1,18 +0,0 @@
1
- import { trailingSlash } from "@weborigami/async-tree";
2
-
3
- // We create our own tree instead of using ObjectTree, since that binds the
4
- // functions would be bound to the object. We want to leave them unbound.
5
- export default class BuiltinsTree {
6
- constructor(object) {
7
- this.object = object;
8
- }
9
-
10
- async get(key) {
11
- const normalizedKey = trailingSlash.remove(key);
12
- return this.object[normalizedKey];
13
- }
14
-
15
- async keys() {
16
- return Object.keys(this.object);
17
- }
18
- }
File without changes