@weborigami/origami 0.0.35
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/LICENSE +21 -0
- package/ReadMe.md +3 -0
- package/exports/PathTransform.d.ts +5 -0
- package/exports/PathTransform.js +18 -0
- package/exports/buildExports.js +109 -0
- package/exports/exports.js +121 -0
- package/index.ts +25 -0
- package/package.json +40 -0
- package/src/builtins/!.js +21 -0
- package/src/builtins/@apply.js +6 -0
- package/src/builtins/@arrows.js +34 -0
- package/src/builtins/@builtins.js +18 -0
- package/src/builtins/@cache.js +36 -0
- package/src/builtins/@config.js +25 -0
- package/src/builtins/@copy.js +71 -0
- package/src/builtins/@crawl.js +507 -0
- package/src/builtins/@debug.js +89 -0
- package/src/builtins/@document.js +18 -0
- package/src/builtins/@equals.js +6 -0
- package/src/builtins/@explore.js +68 -0
- package/src/builtins/@false.js +1 -0
- package/src/builtins/@files.js +22 -0
- package/src/builtins/@filter.js +23 -0
- package/src/builtins/@globs.js +23 -0
- package/src/builtins/@help.js +49 -0
- package/src/builtins/@http.js +19 -0
- package/src/builtins/@https.js +19 -0
- package/src/builtins/@if.js +27 -0
- package/src/builtins/@image/format.js +5 -0
- package/src/builtins/@image/resize.js +5 -0
- package/src/builtins/@index.js +72 -0
- package/src/builtins/@inherited.js +17 -0
- package/src/builtins/@inline.js +29 -0
- package/src/builtins/@invoke.js +30 -0
- package/src/builtins/@js.js +33 -0
- package/src/builtins/@json.js +22 -0
- package/src/builtins/@loaders/css.js +4 -0
- package/src/builtins/@loaders/htm.js +4 -0
- package/src/builtins/@loaders/html.js +4 -0
- package/src/builtins/@loaders/js.js +14 -0
- package/src/builtins/@loaders/json.js +8 -0
- package/src/builtins/@loaders/md.js +4 -0
- package/src/builtins/@loaders/mjs.js +4 -0
- package/src/builtins/@loaders/ori.js +21 -0
- package/src/builtins/@loaders/orit.js +48 -0
- package/src/builtins/@loaders/txt.js +33 -0
- package/src/builtins/@loaders/xhtml.js +4 -0
- package/src/builtins/@loaders/yaml.js +18 -0
- package/src/builtins/@loaders/yml.js +4 -0
- package/src/builtins/@map.js +182 -0
- package/src/builtins/@match.js +92 -0
- package/src/builtins/@mdHtml.js +45 -0
- package/src/builtins/@new.js +6 -0
- package/src/builtins/@node.js +15 -0
- package/src/builtins/@not.js +6 -0
- package/src/builtins/@or.js +6 -0
- package/src/builtins/@ori.js +83 -0
- package/src/builtins/@pack.js +13 -0
- package/src/builtins/@parse/json.js +7 -0
- package/src/builtins/@parse/yaml.js +9 -0
- package/src/builtins/@project.js +71 -0
- package/src/builtins/@repeat.js +8 -0
- package/src/builtins/@rss.js +49 -0
- package/src/builtins/@scope/extend.js +22 -0
- package/src/builtins/@scope/get.js +25 -0
- package/src/builtins/@scope/invoke.js +22 -0
- package/src/builtins/@scope/set.js +25 -0
- package/src/builtins/@serve.js +74 -0
- package/src/builtins/@shell.js +16 -0
- package/src/builtins/@stdin.js +26 -0
- package/src/builtins/@svg.js +42 -0
- package/src/builtins/@tree/concat.js +21 -0
- package/src/builtins/@tree/count.js +24 -0
- package/src/builtins/@tree/defineds.js +37 -0
- package/src/builtins/@tree/dot.js +201 -0
- package/src/builtins/@tree/exceptions.js +50 -0
- package/src/builtins/@tree/first.js +28 -0
- package/src/builtins/@tree/flowSvg.js +55 -0
- package/src/builtins/@tree/fn.js +34 -0
- package/src/builtins/@tree/from.js +27 -0
- package/src/builtins/@tree/fromJson.js +6 -0
- package/src/builtins/@tree/fromYaml.js +24 -0
- package/src/builtins/@tree/groupBy.js +39 -0
- package/src/builtins/@tree/inners.js +44 -0
- package/src/builtins/@tree/isAsyncTree.js +17 -0
- package/src/builtins/@tree/keys.js +24 -0
- package/src/builtins/@tree/keysJson.js +44 -0
- package/src/builtins/@tree/map.d.ts +19 -0
- package/src/builtins/@tree/merge.js +47 -0
- package/src/builtins/@tree/mergeDeep.js +44 -0
- package/src/builtins/@tree/nextKey.js +29 -0
- package/src/builtins/@tree/parent.js +24 -0
- package/src/builtins/@tree/paths.js +35 -0
- package/src/builtins/@tree/plain.js +22 -0
- package/src/builtins/@tree/previousKey.js +29 -0
- package/src/builtins/@tree/reverse.js +51 -0
- package/src/builtins/@tree/setDeep.js +45 -0
- package/src/builtins/@tree/shuffle.js +31 -0
- package/src/builtins/@tree/sitemap.js +59 -0
- package/src/builtins/@tree/sort.js +25 -0
- package/src/builtins/@tree/sortBy.js +40 -0
- package/src/builtins/@tree/static.js +51 -0
- package/src/builtins/@tree/table.js +74 -0
- package/src/builtins/@tree/take.js +40 -0
- package/src/builtins/@tree/values.js +23 -0
- package/src/builtins/@tree/valuesDeep.js +23 -0
- package/src/builtins/@treeHttp.js +19 -0
- package/src/builtins/@treeHttps.js +19 -0
- package/src/builtins/@true.js +1 -0
- package/src/builtins/@unpack.js +13 -0
- package/src/builtins/@watch.js +108 -0
- package/src/builtins/@with.js +22 -0
- package/src/builtins/@yaml.js +23 -0
- package/src/builtins/~.js +9 -0
- package/src/cli/cli.js +86 -0
- package/src/cli/defaultModuleExport.js +16 -0
- package/src/cli/showUsage.js +86 -0
- package/src/common/CommandModulesTransform.d.ts +5 -0
- package/src/common/CommandModulesTransform.js +37 -0
- package/src/common/ConstantTree.js +17 -0
- package/src/common/ExplorableSiteTransform.d.ts +5 -0
- package/src/common/ExplorableSiteTransform.js +77 -0
- package/src/common/FilterTree.js +60 -0
- package/src/common/GlobTree.js +67 -0
- package/src/common/ShuffleTransform.js +29 -0
- package/src/common/TextDocument.js +57 -0
- package/src/common/addValueKeyToScope.js +30 -0
- package/src/common/arrowFunctionsMap.js +35 -0
- package/src/common/processUnpackedContent.js +39 -0
- package/src/common/serialize.d.ts +8 -0
- package/src/common/serialize.js +138 -0
- package/src/common/utilities.d.ts +7 -0
- package/src/common/utilities.js +132 -0
- package/src/misc/OriCommandTransform.d.ts +5 -0
- package/src/misc/OriCommandTransform.js +54 -0
- package/src/misc/assertScopeIsDefined.js +7 -0
- package/src/misc/explore.orit +241 -0
- package/src/misc/yamlOrigamiTag.js +17 -0
- package/src/server/mediaTypes.js +97 -0
- package/src/server/server.js +258 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021–2023 Jan Miksovsky and other contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/ReadMe.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export default function PathTransform(Base) {
|
|
2
|
+
return class Path extends Base {
|
|
3
|
+
async get(key) {
|
|
4
|
+
let value = await super.get(key);
|
|
5
|
+
if (typeof value === "object" && value !== null) {
|
|
6
|
+
// @ts-ignore
|
|
7
|
+
const path = this[PathTransform.pathKey]
|
|
8
|
+
? // @ts-ignore
|
|
9
|
+
`${this[PathTransform.pathKey]}/${key}`
|
|
10
|
+
: key;
|
|
11
|
+
value[PathTransform.pathKey] = path;
|
|
12
|
+
}
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
PathTransform.pathKey = Symbol("path");
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/** @typedef {import("@weborigami/types").AsyncTree} AsyncTree */
|
|
2
|
+
import { keyMapsForExtensions, map } from "@weborigami/async-tree";
|
|
3
|
+
import unpackOrigamiTemplate from "../src/builtins/@loaders/orit.js";
|
|
4
|
+
import { transformObject } from "../src/common/utilities.js";
|
|
5
|
+
import PathTransform from "./PathTransform.js";
|
|
6
|
+
|
|
7
|
+
// For builtins that should be renamed or not exported
|
|
8
|
+
const specialBuiltinNames = {
|
|
9
|
+
"!": null,
|
|
10
|
+
"@false": null,
|
|
11
|
+
"@new": null,
|
|
12
|
+
"@true": null,
|
|
13
|
+
"~": "homeFiles",
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
// Top-level template for the export file
|
|
17
|
+
const templateText = `// This file is generated by running buildExports.js -- do not edit by hand.
|
|
18
|
+
{{ _ }}`;
|
|
19
|
+
|
|
20
|
+
// Generate a top-level export file for the entire project. For each .js file in
|
|
21
|
+
// the given source tree, generate an appropriate statement that includes that
|
|
22
|
+
// file's export(s) in the top-level export file.
|
|
23
|
+
export default async function exportFile(src) {
|
|
24
|
+
const statements = await exportStatements(src);
|
|
25
|
+
const templateFn = await unpackOrigamiTemplate(templateText);
|
|
26
|
+
const result = await templateFn(statements);
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Given a buffer containing the code for a JavaScript file, generate an
|
|
32
|
+
* appropriate export statement for that file.
|
|
33
|
+
*
|
|
34
|
+
* @this {AsyncTree}
|
|
35
|
+
*/
|
|
36
|
+
async function exportStatementForCode(codeBuffer, key) {
|
|
37
|
+
const code = String(codeBuffer);
|
|
38
|
+
|
|
39
|
+
const exportsAnything = code.match(/^export /m);
|
|
40
|
+
if (!exportsAnything) {
|
|
41
|
+
// Has no exports
|
|
42
|
+
return "";
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// @ts-ignore
|
|
46
|
+
const path = codeBuffer[PathTransform.pathKey] ?? "";
|
|
47
|
+
const pathParts = path.split("/");
|
|
48
|
+
pathParts.pop(); // Drop key
|
|
49
|
+
|
|
50
|
+
const exportsDefault = code.match(/^export default /m);
|
|
51
|
+
if (!exportsDefault) {
|
|
52
|
+
// Export everything.
|
|
53
|
+
return `export * from "../src/${path}";\n`;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Export a single default export.
|
|
57
|
+
|
|
58
|
+
// We construct an identifier for the export based on the path to the file and
|
|
59
|
+
// the file name. This omits the first part of the path, which is the name of
|
|
60
|
+
// a folder that's a direct child of the `src` folder. The remaining parts are
|
|
61
|
+
// joined in camelCase to form the export name. We remove the `@` prefix from
|
|
62
|
+
// any parts that start with it. As an example, the file inside the src folder
|
|
63
|
+
// at `builtins/@tree/concat.js` will be identified as `treeConcat`.
|
|
64
|
+
let exportIdentifierParts = pathParts.slice(1);
|
|
65
|
+
|
|
66
|
+
// The file name is the last part of the path; remove the .js extension.
|
|
67
|
+
let name = key.slice(0, -3);
|
|
68
|
+
|
|
69
|
+
// Ignore certain builtins like `@true` and `@false` that would conflict with
|
|
70
|
+
// JavaScript keywords. Developers can use those JavaScript keywords directly.
|
|
71
|
+
const specialName = specialBuiltinNames[name];
|
|
72
|
+
if (specialName === null) {
|
|
73
|
+
return "";
|
|
74
|
+
}
|
|
75
|
+
if (specialName) {
|
|
76
|
+
name = specialName;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Add the name to the parts.
|
|
80
|
+
exportIdentifierParts.push(name);
|
|
81
|
+
|
|
82
|
+
// Remove the @ prefix from any parts, if present.
|
|
83
|
+
exportIdentifierParts = exportIdentifierParts.map((part) =>
|
|
84
|
+
part.startsWith("@") ? part.slice(1) : part
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
// Join the parts in camelCase to form the identifier.
|
|
88
|
+
const identifier = exportIdentifierParts
|
|
89
|
+
.map((part, index) =>
|
|
90
|
+
index === 0 ? part : part[0].toUpperCase() + part.slice(1)
|
|
91
|
+
)
|
|
92
|
+
.join("");
|
|
93
|
+
|
|
94
|
+
return `export { default as ${identifier} } from "../src/${path}";\n`;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function exportStatements(src) {
|
|
98
|
+
// Add paths to the source tree so they can be used in the export statements.
|
|
99
|
+
const withPaths = transformObject(PathTransform, src);
|
|
100
|
+
|
|
101
|
+
// Map each source file to an export statement.
|
|
102
|
+
const mapped = map({
|
|
103
|
+
deep: true,
|
|
104
|
+
valueMap: exportStatementForCode,
|
|
105
|
+
...keyMapsForExtensions({ sourceExtension: "js" }),
|
|
106
|
+
})(withPaths);
|
|
107
|
+
|
|
108
|
+
return mapped;
|
|
109
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// This file is generated by running buildExports.js -- do not edit by hand.
|
|
2
|
+
export { default as apply } from "../src/builtins/@apply.js";
|
|
3
|
+
export { default as arrows } from "../src/builtins/@arrows.js";
|
|
4
|
+
export { default as builtins } from "../src/builtins/@builtins.js";
|
|
5
|
+
export { default as cache } from "../src/builtins/@cache.js";
|
|
6
|
+
export { default as config } from "../src/builtins/@config.js";
|
|
7
|
+
export { default as copy } from "../src/builtins/@copy.js";
|
|
8
|
+
export { default as crawl } from "../src/builtins/@crawl.js";
|
|
9
|
+
export { default as debug } from "../src/builtins/@debug.js";
|
|
10
|
+
export { default as document } from "../src/builtins/@document.js";
|
|
11
|
+
export { default as equals } from "../src/builtins/@equals.js";
|
|
12
|
+
export { default as explore } from "../src/builtins/@explore.js";
|
|
13
|
+
export { default as files } from "../src/builtins/@files.js";
|
|
14
|
+
export { default as filter } from "../src/builtins/@filter.js";
|
|
15
|
+
export { default as globs } from "../src/builtins/@globs.js";
|
|
16
|
+
export { default as help } from "../src/builtins/@help.js";
|
|
17
|
+
export { default as http } from "../src/builtins/@http.js";
|
|
18
|
+
export { default as https } from "../src/builtins/@https.js";
|
|
19
|
+
export { default as if } from "../src/builtins/@if.js";
|
|
20
|
+
export { default as imageFormat } from "../src/builtins/@image/format.js";
|
|
21
|
+
export { default as imageResize } from "../src/builtins/@image/resize.js";
|
|
22
|
+
export { default as index } from "../src/builtins/@index.js";
|
|
23
|
+
export { default as inherited } from "../src/builtins/@inherited.js";
|
|
24
|
+
export { default as inline } from "../src/builtins/@inline.js";
|
|
25
|
+
export { default as invoke } from "../src/builtins/@invoke.js";
|
|
26
|
+
export { default as js } from "../src/builtins/@js.js";
|
|
27
|
+
export { default as json } from "../src/builtins/@json.js";
|
|
28
|
+
export { default as loadersCss } from "../src/builtins/@loaders/css.js";
|
|
29
|
+
export { default as loadersHtm } from "../src/builtins/@loaders/htm.js";
|
|
30
|
+
export { default as loadersHtml } from "../src/builtins/@loaders/html.js";
|
|
31
|
+
export { default as loadersJs } from "../src/builtins/@loaders/js.js";
|
|
32
|
+
export { default as loadersJson } from "../src/builtins/@loaders/json.js";
|
|
33
|
+
export { default as loadersMd } from "../src/builtins/@loaders/md.js";
|
|
34
|
+
export { default as loadersMjs } from "../src/builtins/@loaders/mjs.js";
|
|
35
|
+
export { default as loadersOri } from "../src/builtins/@loaders/ori.js";
|
|
36
|
+
export { default as loadersOrit } from "../src/builtins/@loaders/orit.js";
|
|
37
|
+
export { default as loadersTxt } from "../src/builtins/@loaders/txt.js";
|
|
38
|
+
export { default as loadersXhtml } from "../src/builtins/@loaders/xhtml.js";
|
|
39
|
+
export { default as loadersYaml } from "../src/builtins/@loaders/yaml.js";
|
|
40
|
+
export { default as loadersYml } from "../src/builtins/@loaders/yml.js";
|
|
41
|
+
export { default as map } from "../src/builtins/@map.js";
|
|
42
|
+
export { default as match } from "../src/builtins/@match.js";
|
|
43
|
+
export { default as mdHtml } from "../src/builtins/@mdHtml.js";
|
|
44
|
+
export { default as node } from "../src/builtins/@node.js";
|
|
45
|
+
export { default as not } from "../src/builtins/@not.js";
|
|
46
|
+
export { default as or } from "../src/builtins/@or.js";
|
|
47
|
+
export { default as ori } from "../src/builtins/@ori.js";
|
|
48
|
+
export { default as pack } from "../src/builtins/@pack.js";
|
|
49
|
+
export { default as parseJson } from "../src/builtins/@parse/json.js";
|
|
50
|
+
export { default as parseYaml } from "../src/builtins/@parse/yaml.js";
|
|
51
|
+
export { default as project } from "../src/builtins/@project.js";
|
|
52
|
+
export { default as repeat } from "../src/builtins/@repeat.js";
|
|
53
|
+
export { default as rss } from "../src/builtins/@rss.js";
|
|
54
|
+
export { default as scopeExtend } from "../src/builtins/@scope/extend.js";
|
|
55
|
+
export { default as scopeGet } from "../src/builtins/@scope/get.js";
|
|
56
|
+
export { default as scopeInvoke } from "../src/builtins/@scope/invoke.js";
|
|
57
|
+
export { default as scopeSet } from "../src/builtins/@scope/set.js";
|
|
58
|
+
export { default as serve } from "../src/builtins/@serve.js";
|
|
59
|
+
export { default as shell } from "../src/builtins/@shell.js";
|
|
60
|
+
export { default as stdin } from "../src/builtins/@stdin.js";
|
|
61
|
+
export { default as svg } from "../src/builtins/@svg.js";
|
|
62
|
+
export { default as treeConcat } from "../src/builtins/@tree/concat.js";
|
|
63
|
+
export { default as treeCount } from "../src/builtins/@tree/count.js";
|
|
64
|
+
export { default as treeDefineds } from "../src/builtins/@tree/defineds.js";
|
|
65
|
+
export { default as treeDot } from "../src/builtins/@tree/dot.js";
|
|
66
|
+
export { default as treeExceptions } from "../src/builtins/@tree/exceptions.js";
|
|
67
|
+
export { default as treeFirst } from "../src/builtins/@tree/first.js";
|
|
68
|
+
export { default as treeFlowSvg } from "../src/builtins/@tree/flowSvg.js";
|
|
69
|
+
export { default as treeFn } from "../src/builtins/@tree/fn.js";
|
|
70
|
+
export { default as treeFrom } from "../src/builtins/@tree/from.js";
|
|
71
|
+
export { default as treeFromJson } from "../src/builtins/@tree/fromJson.js";
|
|
72
|
+
export { default as treeFromYaml } from "../src/builtins/@tree/fromYaml.js";
|
|
73
|
+
export { default as treeGroupBy } from "../src/builtins/@tree/groupBy.js";
|
|
74
|
+
export { default as treeInners } from "../src/builtins/@tree/inners.js";
|
|
75
|
+
export { default as treeIsAsyncTree } from "../src/builtins/@tree/isAsyncTree.js";
|
|
76
|
+
export { default as treeKeys } from "../src/builtins/@tree/keys.js";
|
|
77
|
+
export { default as treeKeysJson } from "../src/builtins/@tree/keysJson.js";
|
|
78
|
+
export { default as treeMerge } from "../src/builtins/@tree/merge.js";
|
|
79
|
+
export { default as treeMergeDeep } from "../src/builtins/@tree/mergeDeep.js";
|
|
80
|
+
export { default as treeNextKey } from "../src/builtins/@tree/nextKey.js";
|
|
81
|
+
export { default as treeParent } from "../src/builtins/@tree/parent.js";
|
|
82
|
+
export { default as treePaths } from "../src/builtins/@tree/paths.js";
|
|
83
|
+
export { default as treePlain } from "../src/builtins/@tree/plain.js";
|
|
84
|
+
export { default as treePreviousKey } from "../src/builtins/@tree/previousKey.js";
|
|
85
|
+
export { default as treeReverse } from "../src/builtins/@tree/reverse.js";
|
|
86
|
+
export { default as treeSetDeep } from "../src/builtins/@tree/setDeep.js";
|
|
87
|
+
export { default as treeShuffle } from "../src/builtins/@tree/shuffle.js";
|
|
88
|
+
export { default as treeSitemap } from "../src/builtins/@tree/sitemap.js";
|
|
89
|
+
export { default as treeSort } from "../src/builtins/@tree/sort.js";
|
|
90
|
+
export { default as treeSortBy } from "../src/builtins/@tree/sortBy.js";
|
|
91
|
+
export { default as treeStatic } from "../src/builtins/@tree/static.js";
|
|
92
|
+
export { default as treeTable } from "../src/builtins/@tree/table.js";
|
|
93
|
+
export { default as treeTake } from "../src/builtins/@tree/take.js";
|
|
94
|
+
export { default as treeValues } from "../src/builtins/@tree/values.js";
|
|
95
|
+
export { default as treeValuesDeep } from "../src/builtins/@tree/valuesDeep.js";
|
|
96
|
+
export { default as treeHttp } from "../src/builtins/@treeHttp.js";
|
|
97
|
+
export { default as treeHttps } from "../src/builtins/@treeHttps.js";
|
|
98
|
+
export { default as unpack } from "../src/builtins/@unpack.js";
|
|
99
|
+
export { default as watch } from "../src/builtins/@watch.js";
|
|
100
|
+
export { default as with } from "../src/builtins/@with.js";
|
|
101
|
+
export { default as yaml } from "../src/builtins/@yaml.js";
|
|
102
|
+
export { default as homeFiles } from "../src/builtins/~.js";
|
|
103
|
+
export { default as defaultModuleExport } from "../src/cli/defaultModuleExport.js";
|
|
104
|
+
export { default as showUsage } from "../src/cli/showUsage.js";
|
|
105
|
+
export { default as addValueKeyToScope } from "../src/common/addValueKeyToScope.js";
|
|
106
|
+
export { default as arrowFunctionsMap } from "../src/common/arrowFunctionsMap.js";
|
|
107
|
+
export { default as CommandModulesTransform } from "../src/common/CommandModulesTransform.js";
|
|
108
|
+
export { default as ConstantTree } from "../src/common/ConstantTree.js";
|
|
109
|
+
export { default as ExplorableSiteTransform } from "../src/common/ExplorableSiteTransform.js";
|
|
110
|
+
export { default as FilterTree } from "../src/common/FilterTree.js";
|
|
111
|
+
export { default as GlobTree } from "../src/common/GlobTree.js";
|
|
112
|
+
export { default as processUnpackedContent } from "../src/common/processUnpackedContent.js";
|
|
113
|
+
export * from "../src/common/serialize.js";
|
|
114
|
+
export { default as ShuffleTransform } from "../src/common/ShuffleTransform.js";
|
|
115
|
+
export { default as TextDocument } from "../src/common/TextDocument.js";
|
|
116
|
+
export * from "../src/common/utilities.js";
|
|
117
|
+
export { default as assertScopeIsDefined } from "../src/misc/assertScopeIsDefined.js";
|
|
118
|
+
export { default as OriCommandTransform } from "../src/misc/OriCommandTransform.js";
|
|
119
|
+
export { default as yamlOrigamiTag } from "../src/misc/yamlOrigamiTag.js";
|
|
120
|
+
export * from "../src/server/mediaTypes.js";
|
|
121
|
+
export * from "../src/server/server.js";
|
package/index.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tree Origami is a JavaScript project, but we use TypeScript as an internal
|
|
3
|
+
* tool to confirm our code is type safe.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { Treelike, Unpackable } from "@weborigami/async-tree";
|
|
7
|
+
import { AsyncTree } from "@weborigami/types";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* A class constructor is an object with a `new` method that returns an
|
|
11
|
+
* instance of the indicated type.
|
|
12
|
+
*/
|
|
13
|
+
export type Constructor<T> = new (...args: any[]) => T;
|
|
14
|
+
|
|
15
|
+
export type Invocable = Function | Unpackable<Function|Treelike> | Treelike;
|
|
16
|
+
|
|
17
|
+
export interface JsonObject {
|
|
18
|
+
[key: string]: JsonValue;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export type JsonValue = boolean | number | string | Date | JsonObject | JsonValue[] | null;
|
|
22
|
+
|
|
23
|
+
export type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array;
|
|
24
|
+
|
|
25
|
+
export type TreelikeTransform = (value: Treelike) => AsyncTree;
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@weborigami/origami",
|
|
3
|
+
"version": "0.0.35",
|
|
4
|
+
"description": "Graph Origami language, CLI, framework, and server",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git://github.com/graphorigami/origami.git"
|
|
9
|
+
},
|
|
10
|
+
"bin": {
|
|
11
|
+
"ori": "src/cli/cli.js"
|
|
12
|
+
},
|
|
13
|
+
"main": "./exports/exports.js",
|
|
14
|
+
"types": "./index.ts",
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"@types/chai": "4.3.9",
|
|
17
|
+
"@types/mocha": "10.0.3",
|
|
18
|
+
"@types/node": "20.8.10",
|
|
19
|
+
"typescript": "5.2.2"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@weborigami/async-tree": "https://gitpkg.now.sh/GraphOrigami/origami/async-tree?main",
|
|
23
|
+
"@weborigami/language": "https://gitpkg.now.sh/GraphOrigami/origami/language?main",
|
|
24
|
+
"@weborigami/types": "0.0.35",
|
|
25
|
+
"graphviz-wasm": "3.0.1",
|
|
26
|
+
"highlight.js": "11.9.0",
|
|
27
|
+
"marked": "9.1.5",
|
|
28
|
+
"marked-gfm-heading-id": "3.1.0",
|
|
29
|
+
"marked-highlight": "2.0.6",
|
|
30
|
+
"marked-smartypants": "1.1.3",
|
|
31
|
+
"sharp": "0.32.6",
|
|
32
|
+
"yaml": "2.3.3"
|
|
33
|
+
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "ori exports/buildExports.js src > exports/exports.js",
|
|
36
|
+
"prepublishOnly": "npm run build",
|
|
37
|
+
"test": "node --test --test-reporter=spec test/*/*.test.js test/*/*/*.test.js",
|
|
38
|
+
"typecheck": "node node_modules/typescript/bin/tsc"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `!` built-in returns `undefined`, and is intended for force function
|
|
3
|
+
* invocation in the shell without requiring the use of parentheses. Parentheses
|
|
4
|
+
* can't be used in the shell without quoting them, which is inconvenient.
|
|
5
|
+
*
|
|
6
|
+
* This parentheses form:
|
|
7
|
+
*
|
|
8
|
+
* ```
|
|
9
|
+
* $ ori "fn1.js(fn2.js())"
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* Can be written as:
|
|
13
|
+
*
|
|
14
|
+
* ```
|
|
15
|
+
* $ ori fn1.js fn2.js !
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* This forces the invocation of `fn2.js`, passing `undefined` as the argument.
|
|
19
|
+
* The result of that invocation is then passed to `fn1.js`.
|
|
20
|
+
*/
|
|
21
|
+
export default undefined;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Tree } from "@weborigami/async-tree";
|
|
2
|
+
import { Scope, functionResultsMap } from "@weborigami/language";
|
|
3
|
+
import builtins from "../../src/builtins/@builtins.js";
|
|
4
|
+
import arrowFunctionsMap from "../common/arrowFunctionsMap.js";
|
|
5
|
+
import { keySymbol } from "../common/utilities.js";
|
|
6
|
+
import assertScopeIsDefined from "../misc/assertScopeIsDefined.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Interpret arrow keys in the tree as function calls.
|
|
10
|
+
*
|
|
11
|
+
* @typedef {import("@weborigami/types").AsyncTree} AsyncTree
|
|
12
|
+
* @typedef {import("@weborigami/async-tree").Treelike} Treelike
|
|
13
|
+
* @this {AsyncTree|null}
|
|
14
|
+
* @param {Treelike} [treelike]
|
|
15
|
+
*/
|
|
16
|
+
export default async function arrows(treelike) {
|
|
17
|
+
assertScopeIsDefined(this);
|
|
18
|
+
treelike = treelike ?? (await this?.get("@current"));
|
|
19
|
+
if (treelike === undefined) {
|
|
20
|
+
throw TypeError(
|
|
21
|
+
"@arrows requires a treelike argument, but received undefined"
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
/** @type {AsyncTree} */
|
|
25
|
+
const tree = Tree.from(treelike);
|
|
26
|
+
const mapped = functionResultsMap(arrowFunctionsMap()(tree));
|
|
27
|
+
const scope = this ?? builtins;
|
|
28
|
+
const scoped = Scope.treeWithScope(mapped, scope);
|
|
29
|
+
scoped[keySymbol] = "@arrows";
|
|
30
|
+
return scoped;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
arrows.usage = `@arrows <obj>\tInterpret arrow keys in the tree as function calls`;
|
|
34
|
+
arrows.documentation = "https://graphorigami.org/language/@arrows.html";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { FileTree } from "@weborigami/async-tree";
|
|
2
|
+
import { ImportModulesMixin } from "@weborigami/language";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import CommandModulesTransform from "../common/CommandModulesTransform.js";
|
|
6
|
+
|
|
7
|
+
const dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
const commandsFolder = path.resolve(dirname, "../builtins");
|
|
9
|
+
|
|
10
|
+
/** @type {any} */
|
|
11
|
+
const builtins = new (CommandModulesTransform(ImportModulesMixin(FileTree)))(
|
|
12
|
+
commandsFolder
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
builtins.usage = `@builtins\tThe Tree Origami built-in functions`;
|
|
16
|
+
builtins.documentation = "https://graphorigami.org/language/@builtins.html";
|
|
17
|
+
|
|
18
|
+
export default builtins;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { cache, Tree } from "@weborigami/async-tree";
|
|
2
|
+
import { Scope } from "@weborigami/language";
|
|
3
|
+
import assertScopeIsDefined from "../misc/assertScopeIsDefined.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Caches tree values in a storable cache.
|
|
7
|
+
*
|
|
8
|
+
* @typedef {import("@weborigami/types").AsyncTree} AsyncTree
|
|
9
|
+
* @typedef {import("@weborigami/types").AsyncMutableTree} AsyncMutableTree
|
|
10
|
+
* @typedef {import("@weborigami/async-tree").Treelike} Treelike
|
|
11
|
+
* @param {Treelike} sourceTreelike
|
|
12
|
+
* @param {Treelike} [cacheTreelike]
|
|
13
|
+
* @param {Treelike} [filterTreelike]
|
|
14
|
+
* @this {AsyncTree|null}
|
|
15
|
+
*/
|
|
16
|
+
export default async function cacheBuiltin(
|
|
17
|
+
sourceTreelike,
|
|
18
|
+
cacheTreelike,
|
|
19
|
+
filterTreelike
|
|
20
|
+
) {
|
|
21
|
+
assertScopeIsDefined(this);
|
|
22
|
+
|
|
23
|
+
const sourceTree = Tree.from(sourceTreelike);
|
|
24
|
+
/** @type {any} */
|
|
25
|
+
const cacheTree = cacheTreelike ? Tree.from(cacheTreelike) : undefined;
|
|
26
|
+
const filterTree = filterTreelike ? Tree.from(filterTreelike) : undefined;
|
|
27
|
+
|
|
28
|
+
/** @type {AsyncTree} */
|
|
29
|
+
let result = cache(sourceTree, cacheTree, filterTree);
|
|
30
|
+
result = Scope.treeWithScope(result, this);
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
cacheBuiltin.usage = `@cache/tree tree, [cache], [filter]\tCaches tree values`;
|
|
35
|
+
cacheBuiltin.documentation =
|
|
36
|
+
"https://graphorigami.org/cli/builtins.html#@cache";
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import project from "./@project.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Return the configuration for the current project.
|
|
5
|
+
*
|
|
6
|
+
* If the project's root defines an ori.config.js file, the configuration is
|
|
7
|
+
* the default export of that file. Otherwise, the configuration is the set of
|
|
8
|
+
* built-in functions.
|
|
9
|
+
*
|
|
10
|
+
* @typedef {import("@weborigami/types").AsyncTree} AsyncTree
|
|
11
|
+
*
|
|
12
|
+
* @this {AsyncTree|null}
|
|
13
|
+
* @param {any} [key]
|
|
14
|
+
*/
|
|
15
|
+
export default async function config(key) {
|
|
16
|
+
const projectTree = await project.call(this);
|
|
17
|
+
const scope = projectTree?.parent;
|
|
18
|
+
if (!scope) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
return key === undefined ? scope : scope.get(key);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
config.usage = `@config\tThe current project's configuration tree`;
|
|
25
|
+
config.documentation = "https://graphorigami.org/language/@config.html";
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Tree } from "@weborigami/async-tree";
|
|
2
|
+
import process, { stdout } from "node:process";
|
|
3
|
+
import { transformObject } from "../common/utilities.js";
|
|
4
|
+
import assertScopeIsDefined from "../misc/assertScopeIsDefined.js";
|
|
5
|
+
import setDeep from "./@tree/setDeep.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @typedef {import("@weborigami/types").AsyncTree} AsyncTree
|
|
9
|
+
* @typedef {import("@weborigami/async-tree").Treelike} Treelike
|
|
10
|
+
*
|
|
11
|
+
* @this {AsyncTree|null}
|
|
12
|
+
* @param {Treelike} source
|
|
13
|
+
* @param {Treelike} target
|
|
14
|
+
*/
|
|
15
|
+
export default async function copy(source, target) {
|
|
16
|
+
assertScopeIsDefined(this);
|
|
17
|
+
// const start = performance.now();
|
|
18
|
+
const sourceTree = Tree.from(source);
|
|
19
|
+
/** @type {any} */ let targetTree = Tree.from(target);
|
|
20
|
+
|
|
21
|
+
if (stdout.isTTY) {
|
|
22
|
+
targetTree = transformObject(ProgressTransform, targetTree);
|
|
23
|
+
copyRoot = targetTree;
|
|
24
|
+
countFiles = 0;
|
|
25
|
+
countCopied = 0;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
await setDeep(targetTree, sourceTree);
|
|
29
|
+
|
|
30
|
+
if (stdout.isTTY) {
|
|
31
|
+
process.stdout.clearLine(0);
|
|
32
|
+
process.stdout.cursorTo(0);
|
|
33
|
+
copyRoot = null;
|
|
34
|
+
countFiles = null;
|
|
35
|
+
countCopied = null;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// const end = performance.now();
|
|
39
|
+
// console.log(`copy time in ms: ${end - start}`);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
let countFiles;
|
|
43
|
+
let countCopied;
|
|
44
|
+
let copyRoot;
|
|
45
|
+
|
|
46
|
+
function ProgressTransform(Base) {
|
|
47
|
+
return class Progress extends Base {
|
|
48
|
+
async set(...args) {
|
|
49
|
+
countFiles++;
|
|
50
|
+
copyRoot.showProgress();
|
|
51
|
+
let result;
|
|
52
|
+
try {
|
|
53
|
+
result = await super.set(...args);
|
|
54
|
+
countCopied++;
|
|
55
|
+
} catch (e) {
|
|
56
|
+
console.error(e);
|
|
57
|
+
}
|
|
58
|
+
copyRoot.showProgress();
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
showProgress() {
|
|
63
|
+
process.stdout.clearLine(0);
|
|
64
|
+
process.stdout.cursorTo(0);
|
|
65
|
+
process.stdout.write(`Copied ${countCopied} of ${countFiles}`);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
copy.usage = `@copy <source>, <target>\tCopies the source tree to the target`;
|
|
71
|
+
copy.documentation = "https://graphorigami.org/language/@copy.html";
|