@weborigami/origami 0.0.65 → 0.0.66-beta.1
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/package.json +4 -4
- package/src/builtins/@cache.js +3 -1
- package/src/builtins/@changes.js +13 -5
- package/src/builtins/@concat.js +1 -1
- package/src/builtins/@copy.js +3 -3
- package/src/builtins/@crawl.js +1 -1
- package/src/builtins/@debug.js +2 -8
- package/src/builtins/@filter.js +8 -4
- package/src/builtins/@jsonKeys.js +1 -1
- package/src/builtins/@mdHtml.js +1 -1
- package/src/builtins/@paginateFn.js +3 -1
- package/src/builtins/@serve.js +1 -1
- package/src/builtins/@setDeep.js +9 -2
- package/src/builtins/@static.js +6 -4
- package/src/builtins/@watch.js +4 -4
- package/src/common/FilterTree.js +9 -10
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@weborigami/origami",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.66-beta.1",
|
|
4
4
|
"description": "Web Origami language, CLI, framework, and server",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
"typescript": "5.5.4"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@weborigami/async-tree": "0.0.
|
|
21
|
-
"@weborigami/language": "0.0.
|
|
22
|
-
"@weborigami/types": "0.0.
|
|
20
|
+
"@weborigami/async-tree": "0.0.66-beta.1",
|
|
21
|
+
"@weborigami/language": "0.0.66-beta.1",
|
|
22
|
+
"@weborigami/types": "0.0.66-beta.1",
|
|
23
23
|
"exif-parser": "0.1.12",
|
|
24
24
|
"graphviz-wasm": "3.0.2",
|
|
25
25
|
"highlight.js": "11.10.0",
|
package/src/builtins/@cache.js
CHANGED
|
@@ -19,7 +19,9 @@ export default async function cacheBuiltin(
|
|
|
19
19
|
) {
|
|
20
20
|
assertTreeIsDefined(this, "cache");
|
|
21
21
|
/** @type {any} */
|
|
22
|
-
const cacheTree = cacheTreelike
|
|
22
|
+
const cacheTree = cacheTreelike
|
|
23
|
+
? Tree.from(cacheTreelike, { parent: this })
|
|
24
|
+
: undefined;
|
|
23
25
|
const result = cache(sourceTreelike, cacheTree, filterTreelike);
|
|
24
26
|
return result;
|
|
25
27
|
}
|
package/src/builtins/@changes.js
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
import { Tree } from "@weborigami/async-tree";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Given an old tree and a new tree, return a tree of changes indicated
|
|
5
|
+
* by the values: "added", "changed", or "deleted".
|
|
6
|
+
*
|
|
7
|
+
* @typedef {import("@weborigami/async-tree").Treelike} Treelike
|
|
8
|
+
*
|
|
9
|
+
* @this {import("@weborigami/types").AsyncTree|null}
|
|
10
|
+
* @param {Treelike} oldTreelike
|
|
11
|
+
* @param {Treelike} newTreelike
|
|
12
|
+
*/
|
|
5
13
|
export default async function changes(oldTreelike, newTreelike) {
|
|
6
|
-
const oldTree = Tree.from(oldTreelike, { deep: true });
|
|
7
|
-
const newTree = Tree.from(newTreelike, { deep: true });
|
|
14
|
+
const oldTree = Tree.from(oldTreelike, { deep: true, parent: this });
|
|
15
|
+
const newTree = Tree.from(newTreelike, { deep: true, parent: this });
|
|
8
16
|
|
|
9
17
|
const oldKeys = Array.from(await oldTree.keys());
|
|
10
18
|
const newKeys = Array.from(await newTree.keys());
|
|
@@ -21,7 +29,7 @@ export default async function changes(oldTreelike, newTreelike) {
|
|
|
21
29
|
const newValue = await newTree.get(key);
|
|
22
30
|
|
|
23
31
|
if (Tree.isAsyncTree(oldValue) && Tree.isAsyncTree(newValue)) {
|
|
24
|
-
const treeChanges = await changes(oldValue, newValue);
|
|
32
|
+
const treeChanges = await changes.call(this, oldValue, newValue);
|
|
25
33
|
if (Object.keys(treeChanges).length > 0) {
|
|
26
34
|
result[key] = treeChanges;
|
|
27
35
|
}
|
package/src/builtins/@concat.js
CHANGED
|
@@ -12,7 +12,7 @@ import assertTreeIsDefined from "../misc/assertTreeIsDefined.js";
|
|
|
12
12
|
*/
|
|
13
13
|
export default async function concat(...args) {
|
|
14
14
|
assertTreeIsDefined(this, "concat");
|
|
15
|
-
const tree = args.length === 0 ? this : Tree.from(args);
|
|
15
|
+
const tree = args.length === 0 ? this : Tree.from(args, { parent: this });
|
|
16
16
|
return ops.concat.call(this, tree);
|
|
17
17
|
}
|
|
18
18
|
|
package/src/builtins/@copy.js
CHANGED
|
@@ -16,8 +16,8 @@ import setDeep from "./@setDeep.js";
|
|
|
16
16
|
export default async function copy(source, target) {
|
|
17
17
|
assertTreeIsDefined(this, "copy");
|
|
18
18
|
// const start = performance.now();
|
|
19
|
-
const sourceTree = Tree.from(source);
|
|
20
|
-
/** @type {any} */ let targetTree = Tree.from(target);
|
|
19
|
+
const sourceTree = Tree.from(source, { parent: this });
|
|
20
|
+
/** @type {any} */ let targetTree = Tree.from(target, { parent: this });
|
|
21
21
|
|
|
22
22
|
if (stdout.isTTY) {
|
|
23
23
|
targetTree = transformObject(ProgressTransform, targetTree);
|
|
@@ -26,7 +26,7 @@ export default async function copy(source, target) {
|
|
|
26
26
|
countCopied = 0;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
await setDeep(targetTree, sourceTree);
|
|
29
|
+
await setDeep.call(this, targetTree, sourceTree);
|
|
30
30
|
|
|
31
31
|
if (stdout.isTTY) {
|
|
32
32
|
process.stdout.clearLine(0);
|
package/src/builtins/@crawl.js
CHANGED
|
@@ -34,7 +34,7 @@ export default async function crawl(treelike, baseHref) {
|
|
|
34
34
|
const tree =
|
|
35
35
|
typeof treelike === "string"
|
|
36
36
|
? treeHttps.call(this, treelike)
|
|
37
|
-
: Tree.from(treelike);
|
|
37
|
+
: Tree.from(treelike, { parent: this });
|
|
38
38
|
|
|
39
39
|
if (baseHref === undefined) {
|
|
40
40
|
// Ask tree or original treelike if it has an `href` property we can use as
|
package/src/builtins/@debug.js
CHANGED
|
@@ -41,10 +41,7 @@ function DebugTransform(Base) {
|
|
|
41
41
|
// Since this transform is for diagnostic purposes, cast any treelike
|
|
42
42
|
// result to a tree so we can debug the result too.
|
|
43
43
|
if (Tree.isTreelike(value)) {
|
|
44
|
-
value = Tree.from(value);
|
|
45
|
-
if (!value.parent) {
|
|
46
|
-
value.parent = parent;
|
|
47
|
-
}
|
|
44
|
+
value = Tree.from(value, { parent });
|
|
48
45
|
if (!isTransformApplied(DebugTransform, value)) {
|
|
49
46
|
value = transformObject(DebugTransform, value);
|
|
50
47
|
}
|
|
@@ -58,10 +55,7 @@ function DebugTransform(Base) {
|
|
|
58
55
|
return content;
|
|
59
56
|
}
|
|
60
57
|
/** @type {any} */
|
|
61
|
-
let tree = Tree.from(content);
|
|
62
|
-
if (!tree.parent) {
|
|
63
|
-
tree.parent = parent;
|
|
64
|
-
}
|
|
58
|
+
let tree = Tree.from(content, { parent });
|
|
65
59
|
if (!isTransformApplied(DebugTransform, tree)) {
|
|
66
60
|
tree = transformObject(DebugTransform, tree);
|
|
67
61
|
}
|
package/src/builtins/@filter.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Tree } from "@weborigami/async-tree";
|
|
1
2
|
import FilterTree from "../common/FilterTree.js";
|
|
2
3
|
import assertTreeIsDefined from "../misc/assertTreeIsDefined.js";
|
|
3
4
|
|
|
@@ -7,12 +8,15 @@ import assertTreeIsDefined from "../misc/assertTreeIsDefined.js";
|
|
|
7
8
|
* @typedef {import("@weborigami/types").AsyncTree} AsyncTree
|
|
8
9
|
* @typedef {import("@weborigami/async-tree").Treelike} Treelike
|
|
9
10
|
* @this {AsyncTree|null}
|
|
10
|
-
* @param {Treelike}
|
|
11
|
-
* @param {Treelike}
|
|
11
|
+
* @param {Treelike} sourceTreelike
|
|
12
|
+
* @param {Treelike} filterTreelike
|
|
12
13
|
*/
|
|
13
|
-
export default async function filter(
|
|
14
|
+
export default async function filter(sourceTreelike, filterTreelike) {
|
|
14
15
|
assertTreeIsDefined(this, "filter");
|
|
15
|
-
const
|
|
16
|
+
const sourceTree = Tree.from(sourceTreelike, { parent: this });
|
|
17
|
+
const filterTree = Tree.from(filterTreelike, { deep: true, parent: this });
|
|
18
|
+
const result = new FilterTree(sourceTree, filterTree);
|
|
19
|
+
result.parent = this;
|
|
16
20
|
return result;
|
|
17
21
|
}
|
|
18
22
|
|
|
@@ -28,7 +28,7 @@ function KeysJsonTransform(Base) {
|
|
|
28
28
|
if (value === undefined && key === ".keys.json") {
|
|
29
29
|
value = await jsonKeys.stringify(this);
|
|
30
30
|
} else if (Tree.isTreelike(value)) {
|
|
31
|
-
const tree = Tree.from(value, { deep: true });
|
|
31
|
+
const tree = Tree.from(value, { deep: true, parent: this });
|
|
32
32
|
value = transformObject(KeysJsonTransform, tree);
|
|
33
33
|
}
|
|
34
34
|
return value;
|
package/src/builtins/@mdHtml.js
CHANGED
|
@@ -38,7 +38,7 @@ marked.use(
|
|
|
38
38
|
* @param {StringLike|UnpackableStringlike} input
|
|
39
39
|
*/
|
|
40
40
|
export default async function mdHtml(input) {
|
|
41
|
-
if (
|
|
41
|
+
if (input == null) {
|
|
42
42
|
const error = new TypeError("@mdHtml: The input is not defined.");
|
|
43
43
|
/** @type {any} */ (error).position = 0;
|
|
44
44
|
throw error;
|
|
@@ -11,11 +11,13 @@ import { Tree } from "@weborigami/async-tree";
|
|
|
11
11
|
* @param {number} [size=10]
|
|
12
12
|
*/
|
|
13
13
|
export default function paginateFn(size = 10) {
|
|
14
|
+
const parent = this;
|
|
15
|
+
|
|
14
16
|
/**
|
|
15
17
|
* @param {Treelike} [treelike]
|
|
16
18
|
*/
|
|
17
19
|
return async function (treelike) {
|
|
18
|
-
const tree = Tree.from(treelike);
|
|
20
|
+
const tree = Tree.from(treelike, { parent });
|
|
19
21
|
const keys = Array.from(await tree.keys());
|
|
20
22
|
const pageCount = Math.ceil(keys.length / size);
|
|
21
23
|
|
package/src/builtins/@serve.js
CHANGED
|
@@ -25,7 +25,7 @@ export default async function serve(treelike, port) {
|
|
|
25
25
|
assertTreeIsDefined(this, "serve");
|
|
26
26
|
let tree;
|
|
27
27
|
if (treelike) {
|
|
28
|
-
tree = Tree.from(treelike);
|
|
28
|
+
tree = Tree.from(treelike, { parent: this });
|
|
29
29
|
|
|
30
30
|
// TODO: Instead of applying ExplorableSiteTransform, apply a transform
|
|
31
31
|
// that just maps the empty string to index.html.
|
package/src/builtins/@setDeep.js
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import { Tree } from "@weborigami/async-tree";
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* @typedef {import("@weborigami/async-tree").Treelike} Treelike
|
|
5
|
+
*
|
|
6
|
+
* @this {import("@weborigami/types").AsyncTree|null}
|
|
7
|
+
* @param {Treelike} target
|
|
8
|
+
* @param {Treelike} source
|
|
9
|
+
*/
|
|
3
10
|
export default async function setDeep(target, source) {
|
|
4
|
-
const targetTree = Tree.from(target);
|
|
5
|
-
const sourceTree = Tree.from(source);
|
|
11
|
+
const targetTree = Tree.from(target, { parent: this });
|
|
12
|
+
const sourceTree = Tree.from(source, { parent: this });
|
|
6
13
|
await applyUpdates(sourceTree, targetTree);
|
|
7
14
|
}
|
|
8
15
|
|
package/src/builtins/@static.js
CHANGED
|
@@ -14,6 +14,7 @@ import index from "./@index.js";
|
|
|
14
14
|
export default async function staticTree(treelike) {
|
|
15
15
|
const tree = await getTreeArgument(this, arguments, treelike, "@static");
|
|
16
16
|
const result = transformObject(StaticTransform, tree);
|
|
17
|
+
result.parent = this;
|
|
17
18
|
return result;
|
|
18
19
|
}
|
|
19
20
|
|
|
@@ -22,11 +23,12 @@ function StaticTransform(Base) {
|
|
|
22
23
|
async get(key) {
|
|
23
24
|
let value = await super.get(key);
|
|
24
25
|
if (value === undefined && key === "index.html") {
|
|
25
|
-
value = index.call(this, this);
|
|
26
|
+
value = await index.call(this, this);
|
|
26
27
|
} else if (value === undefined && key === ".keys.json") {
|
|
27
|
-
value = jsonKeys.stringify(this);
|
|
28
|
-
} else if (Tree.
|
|
29
|
-
|
|
28
|
+
value = await jsonKeys.stringify(this);
|
|
29
|
+
} else if (Tree.isTreelike(value)) {
|
|
30
|
+
const tree = Tree.from(value, { parent: this });
|
|
31
|
+
value = transformObject(StaticTransform, tree);
|
|
30
32
|
}
|
|
31
33
|
return value;
|
|
32
34
|
}
|
package/src/builtins/@watch.js
CHANGED
|
@@ -42,16 +42,16 @@ export default async function watch(treelike, fn) {
|
|
|
42
42
|
return handle;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
async function evaluateTree(
|
|
45
|
+
async function evaluateTree(parent, fn) {
|
|
46
46
|
let tree;
|
|
47
47
|
let message;
|
|
48
48
|
let result;
|
|
49
49
|
try {
|
|
50
|
-
result = await fn.call(
|
|
50
|
+
result = await fn.call(parent);
|
|
51
51
|
} catch (error) {
|
|
52
52
|
message = messageForError(error);
|
|
53
53
|
}
|
|
54
|
-
tree = result ? Tree.from(result) : undefined;
|
|
54
|
+
tree = result ? Tree.from(result, { parent }) : undefined;
|
|
55
55
|
if (tree) {
|
|
56
56
|
return tree;
|
|
57
57
|
}
|
|
@@ -60,7 +60,7 @@ async function evaluateTree(container, fn) {
|
|
|
60
60
|
}
|
|
61
61
|
console.warn(message);
|
|
62
62
|
tree = new ConstantTree(message);
|
|
63
|
-
tree.parent =
|
|
63
|
+
tree.parent = parent;
|
|
64
64
|
return tree;
|
|
65
65
|
}
|
|
66
66
|
|
package/src/common/FilterTree.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Tree } from "@weborigami/async-tree";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @typedef {import("@weborigami/types").AsyncTree} AsyncTree
|
|
@@ -7,9 +7,8 @@ import { DeepObjectTree, Tree, isPlainObject } from "@weborigami/async-tree";
|
|
|
7
7
|
export default class FilterTree {
|
|
8
8
|
constructor(tree, filter) {
|
|
9
9
|
this.tree = Tree.from(tree);
|
|
10
|
-
this.filter =
|
|
11
|
-
|
|
12
|
-
: Tree.from(filter);
|
|
10
|
+
this.filter = Tree.from(filter, { deep: true });
|
|
11
|
+
this.parent = null;
|
|
13
12
|
}
|
|
14
13
|
|
|
15
14
|
async get(key) {
|
|
@@ -50,12 +49,12 @@ export default class FilterTree {
|
|
|
50
49
|
// Also include any keys in the filter that are found in the tree. This
|
|
51
50
|
// lets the filter "pull" values from a tree that, e.g., is defined by a
|
|
52
51
|
// function without an explicit domain.
|
|
53
|
-
for (const key of await this.filter.keys()) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
52
|
+
// for (const key of await this.filter.keys()) {
|
|
53
|
+
// const value = await this.tree.get(key);
|
|
54
|
+
// if (value !== undefined) {
|
|
55
|
+
// keys.add(key);
|
|
56
|
+
// }
|
|
57
|
+
// }
|
|
59
58
|
|
|
60
59
|
return keys;
|
|
61
60
|
}
|