@spyglassmc/mcfunction 0.1.1 → 0.2.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/lib/colorizer/index.js +2 -25
- package/lib/completer/index.d.ts +3 -3
- package/lib/completer/index.js +11 -35
- package/lib/index.d.ts +6 -6
- package/lib/index.js +8 -34
- package/lib/node/command.js +7 -29
- package/lib/node/entry.d.ts +1 -1
- package/lib/node/entry.js +2 -5
- package/lib/node/index.d.ts +2 -2
- package/lib/node/index.js +2 -14
- package/lib/parser/argument.d.ts +1 -1
- package/lib/parser/argument.js +1 -5
- package/lib/parser/command.d.ts +3 -3
- package/lib/parser/command.js +20 -46
- package/lib/parser/common.js +4 -27
- package/lib/parser/entry.d.ts +2 -2
- package/lib/parser/entry.js +5 -28
- package/lib/parser/index.d.ts +5 -5
- package/lib/parser/index.js +5 -17
- package/lib/parser/literal.d.ts +1 -1
- package/lib/parser/literal.js +4 -27
- package/lib/tree/index.d.ts +3 -3
- package/lib/tree/index.js +3 -15
- package/lib/tree/registry.d.ts +1 -1
- package/lib/tree/registry.js +11 -29
- package/lib/tree/type.js +1 -2
- package/lib/tree/util.d.ts +1 -1
- package/lib/tree/util.js +3 -9
- package/package.json +4 -3
package/lib/colorizer/index.js
CHANGED
|
@@ -1,29 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.register = void 0;
|
|
23
|
-
const core = __importStar(require("@spyglassmc/core"));
|
|
24
|
-
function register(meta) {
|
|
1
|
+
import * as core from '@spyglassmc/core';
|
|
2
|
+
export function register(meta) {
|
|
25
3
|
meta.registerColorizer('mcfunction:command_child/literal', core.colorizer.literal);
|
|
26
4
|
meta.registerColorizer('mcfunction:command_child/trailing', core.colorizer.error);
|
|
27
5
|
}
|
|
28
|
-
exports.register = register;
|
|
29
6
|
//# sourceMappingURL=index.js.map
|
package/lib/completer/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as core from '@spyglassmc/core';
|
|
2
|
-
import type { McfunctionNode } from '../node';
|
|
3
|
-
import { CommandNode } from '../node';
|
|
4
|
-
import type { ArgumentTreeNode, RootTreeNode } from '../tree';
|
|
2
|
+
import type { McfunctionNode } from '../node/index.js';
|
|
3
|
+
import { CommandNode } from '../node/index.js';
|
|
4
|
+
import type { ArgumentTreeNode, RootTreeNode } from '../tree/index.js';
|
|
5
5
|
export declare type MockNodesGetter = (treeNode: ArgumentTreeNode, range: core.RangeLike) => core.Arrayable<core.AstNode>;
|
|
6
6
|
/**
|
|
7
7
|
* @param getMockNodes A function that returns a mock AST Node from given {@link ArgumentTreeNode}. These mock nodes
|
package/lib/completer/index.js
CHANGED
|
@@ -1,46 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.command = exports.entry = void 0;
|
|
23
|
-
const core = __importStar(require("@spyglassmc/core"));
|
|
24
|
-
const node_1 = require("../node");
|
|
25
|
-
const tree_1 = require("../tree");
|
|
1
|
+
import * as core from '@spyglassmc/core';
|
|
2
|
+
import { CommandNode } from '../node/index.js';
|
|
3
|
+
import { categorizeTreeChildren, CommandTreeRegistry, redirect, resolveParentTreeNode } from '../tree/index.js';
|
|
26
4
|
/**
|
|
27
5
|
* @param getMockNodes A function that returns a mock AST Node from given {@link ArgumentTreeNode}. These mock nodes
|
|
28
6
|
* will be used for completing the argument.
|
|
29
7
|
*/
|
|
30
|
-
function entry(commandTreeName, getMockNodes) {
|
|
8
|
+
export function entry(commandTreeName, getMockNodes) {
|
|
31
9
|
return (node, ctx) => {
|
|
32
|
-
const tree =
|
|
10
|
+
const tree = CommandTreeRegistry.instance.get(commandTreeName);
|
|
33
11
|
const childNode = core.AstNode.findChild(node, ctx.offset, true);
|
|
34
12
|
if (core.CommentNode.is(childNode)) {
|
|
35
13
|
return [];
|
|
36
14
|
}
|
|
37
15
|
else {
|
|
38
|
-
return command(tree, getMockNodes)(childNode ??
|
|
16
|
+
return command(tree, getMockNodes)(childNode ?? CommandNode.mock(ctx.offset), ctx);
|
|
39
17
|
}
|
|
40
18
|
};
|
|
41
19
|
}
|
|
42
|
-
|
|
43
|
-
function command(tree, getMockNodes) {
|
|
20
|
+
export function command(tree, getMockNodes) {
|
|
44
21
|
return (node, ctx) => {
|
|
45
22
|
const index = core.AstNode.findChildIndex(node, ctx.offset, true);
|
|
46
23
|
const selectedChildNode = node.children[index]?.children[0];
|
|
@@ -51,20 +28,19 @@ function command(tree, getMockNodes) {
|
|
|
51
28
|
if (!lastChildNode) {
|
|
52
29
|
return Object
|
|
53
30
|
.keys(tree.children ?? {})
|
|
54
|
-
.map(v => core.CompletionItem.create(v, ctx.offset, { kind: 14 /* Keyword */ }));
|
|
31
|
+
.map(v => core.CompletionItem.create(v, ctx.offset, { kind: 14 /* core.CompletionKind.Keyword */ }));
|
|
55
32
|
}
|
|
56
33
|
const treePath = lastChildNode.path;
|
|
57
|
-
const { treeNode: parentTreeNode } =
|
|
34
|
+
const { treeNode: parentTreeNode } = resolveParentTreeNode(redirect(tree, treePath), tree);
|
|
58
35
|
if (!parentTreeNode?.children) {
|
|
59
36
|
return [];
|
|
60
37
|
}
|
|
61
|
-
const { literalTreeNodes, argumentTreeNodes } =
|
|
38
|
+
const { literalTreeNodes, argumentTreeNodes } = categorizeTreeChildren(parentTreeNode.children);
|
|
62
39
|
return [
|
|
63
|
-
...literalTreeNodes.map(([name]) => core.CompletionItem.create(name, ctx.offset, { kind: 14 /* Keyword */ })),
|
|
40
|
+
...literalTreeNodes.map(([name]) => core.CompletionItem.create(name, ctx.offset, { kind: 14 /* core.CompletionKind.Keyword */ })),
|
|
64
41
|
...argumentTreeNodes.flatMap(([_name, treeNode]) => core.Arrayable.toArray(getMockNodes(treeNode, ctx.offset))
|
|
65
42
|
.flatMap(n => core.completer.dispatch(n, ctx))),
|
|
66
43
|
];
|
|
67
44
|
};
|
|
68
45
|
}
|
|
69
|
-
exports.command = command;
|
|
70
46
|
//# sourceMappingURL=index.js.map
|
package/lib/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as core from '@spyglassmc/core';
|
|
2
|
-
export * as colorizer from './colorizer';
|
|
3
|
-
export * as completer from './completer';
|
|
4
|
-
export * from './node';
|
|
5
|
-
export * from './parser';
|
|
6
|
-
export * from './tree';
|
|
7
|
-
export declare const initialize: core.
|
|
2
|
+
export * as colorizer from './colorizer/index.js';
|
|
3
|
+
export * as completer from './completer/index.js';
|
|
4
|
+
export * from './node/index.js';
|
|
5
|
+
export * from './parser/index.js';
|
|
6
|
+
export * from './tree/index.js';
|
|
7
|
+
export declare const initialize: core.SyncProjectInitializer;
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.js
CHANGED
|
@@ -1,39 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
22
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
23
|
-
};
|
|
24
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.initialize = exports.completer = exports.colorizer = void 0;
|
|
26
|
-
const core = __importStar(require("@spyglassmc/core"));
|
|
27
|
-
const colorizer = __importStar(require("./colorizer"));
|
|
28
|
-
exports.colorizer = __importStar(require("./colorizer"));
|
|
29
|
-
exports.completer = __importStar(require("./completer"));
|
|
30
|
-
__exportStar(require("./node"), exports);
|
|
31
|
-
__exportStar(require("./parser"), exports);
|
|
32
|
-
__exportStar(require("./tree"), exports);
|
|
1
|
+
import * as core from '@spyglassmc/core';
|
|
2
|
+
import * as colorizer from './colorizer/index.js';
|
|
3
|
+
export * as colorizer from './colorizer/index.js';
|
|
4
|
+
export * as completer from './completer/index.js';
|
|
5
|
+
export * from './node/index.js';
|
|
6
|
+
export * from './parser/index.js';
|
|
7
|
+
export * from './tree/index.js';
|
|
33
8
|
/* istanbul ignore next */
|
|
34
|
-
const initialize = ({ meta }) => {
|
|
9
|
+
export const initialize = ({ meta }) => {
|
|
35
10
|
colorizer.register(meta);
|
|
36
11
|
meta.registerCompleter('mcfunction:command_child/literal', core.completer.literal);
|
|
37
12
|
};
|
|
38
|
-
exports.initialize = initialize;
|
|
39
13
|
//# sourceMappingURL=index.js.map
|
package/lib/node/command.js
CHANGED
|
@@ -1,27 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
var
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.LiteralCommandChildNode = exports.CommandChildNode = exports.CommandNode = void 0;
|
|
23
|
-
const core = __importStar(require("@spyglassmc/core"));
|
|
24
|
-
var CommandNode;
|
|
1
|
+
import * as core from '@spyglassmc/core';
|
|
2
|
+
export var CommandNode;
|
|
25
3
|
(function (CommandNode) {
|
|
26
4
|
/* istanbul ignore next */
|
|
27
5
|
function is(node) {
|
|
@@ -36,19 +14,19 @@ var CommandNode;
|
|
|
36
14
|
};
|
|
37
15
|
}
|
|
38
16
|
CommandNode.mock = mock;
|
|
39
|
-
})(CommandNode
|
|
40
|
-
var CommandChildNode;
|
|
17
|
+
})(CommandNode || (CommandNode = {}));
|
|
18
|
+
export var CommandChildNode;
|
|
41
19
|
(function (CommandChildNode) {
|
|
42
20
|
function is(node) {
|
|
43
21
|
return node.type === 'mcfunction:command_child';
|
|
44
22
|
}
|
|
45
23
|
CommandChildNode.is = is;
|
|
46
|
-
})(CommandChildNode
|
|
47
|
-
var LiteralCommandChildNode;
|
|
24
|
+
})(CommandChildNode || (CommandChildNode = {}));
|
|
25
|
+
export var LiteralCommandChildNode;
|
|
48
26
|
(function (LiteralCommandChildNode) {
|
|
49
27
|
function is(node) {
|
|
50
28
|
return node?.type === 'mcfunction:command_child/literal';
|
|
51
29
|
}
|
|
52
30
|
LiteralCommandChildNode.is = is;
|
|
53
|
-
})(LiteralCommandChildNode
|
|
31
|
+
})(LiteralCommandChildNode || (LiteralCommandChildNode = {}));
|
|
54
32
|
//# sourceMappingURL=command.js.map
|
package/lib/node/entry.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type * as core from '@spyglassmc/core';
|
|
2
|
-
import type { CommandNode } from './command';
|
|
2
|
+
import type { CommandNode } from './command.js';
|
|
3
3
|
export interface McfunctionNode extends core.SequenceNode<CommandNode | core.CommentNode> {
|
|
4
4
|
type: 'mcfunction:entry';
|
|
5
5
|
}
|
package/lib/node/entry.js
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.McfunctionNode = void 0;
|
|
4
|
-
var McfunctionNode;
|
|
1
|
+
export var McfunctionNode;
|
|
5
2
|
(function (McfunctionNode) {
|
|
6
3
|
/* istanbul ignore next */
|
|
7
4
|
function is(node) {
|
|
8
5
|
return node?.type === 'mcfunction:entry';
|
|
9
6
|
}
|
|
10
7
|
McfunctionNode.is = is;
|
|
11
|
-
})(McfunctionNode
|
|
8
|
+
})(McfunctionNode || (McfunctionNode = {}));
|
|
12
9
|
//# sourceMappingURL=entry.js.map
|
package/lib/node/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from './command';
|
|
2
|
-
export * from './entry';
|
|
1
|
+
export * from './command.js';
|
|
2
|
+
export * from './entry.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/node/index.js
CHANGED
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
-
};
|
|
12
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
__exportStar(require("./command"), exports);
|
|
14
|
-
__exportStar(require("./entry"), exports);
|
|
1
|
+
export * from './command.js';
|
|
2
|
+
export * from './entry.js';
|
|
15
3
|
//# sourceMappingURL=index.js.map
|
package/lib/parser/argument.d.ts
CHANGED
package/lib/parser/argument.js
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.argumentTreeNodeToString = void 0;
|
|
4
|
-
function argumentTreeNodeToString(name, treeNode) {
|
|
1
|
+
export function argumentTreeNodeToString(name, treeNode) {
|
|
5
2
|
const parserName = treeNode.parser.slice(treeNode.parser.indexOf(':') + 1);
|
|
6
3
|
return `<${name}: ${parserName}>`;
|
|
7
4
|
}
|
|
8
|
-
exports.argumentTreeNodeToString = argumentTreeNodeToString;
|
|
9
5
|
//# sourceMappingURL=argument.js.map
|
package/lib/parser/command.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as core from '@spyglassmc/core';
|
|
2
|
-
import type { CommandNode } from '../node';
|
|
3
|
-
import type { RootTreeNode, TreeNode } from '../tree/type';
|
|
4
|
-
import type { ArgumentParserGetter } from './argument';
|
|
2
|
+
import type { CommandNode } from '../node/index.js';
|
|
3
|
+
import type { RootTreeNode, TreeNode } from '../tree/type.js';
|
|
4
|
+
import type { ArgumentParserGetter } from './argument.js';
|
|
5
5
|
/**
|
|
6
6
|
* @returns A parser that always takes a whole line (excluding line turn characters) and tries to parse it as a command.
|
|
7
7
|
*/
|
package/lib/parser/command.js
CHANGED
|
@@ -1,35 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.treeNodeToString = exports.treeNodeChildrenToString = exports.treeNodeChildrenToStringArray = exports.command = void 0;
|
|
23
|
-
const core = __importStar(require("@spyglassmc/core"));
|
|
24
|
-
const locales_1 = require("@spyglassmc/locales");
|
|
25
|
-
const tree_1 = require("../tree");
|
|
26
|
-
const argument_1 = require("./argument");
|
|
27
|
-
const common_1 = require("./common");
|
|
28
|
-
const literal_1 = require("./literal");
|
|
1
|
+
import * as core from '@spyglassmc/core';
|
|
2
|
+
import { localeQuote, localize } from '@spyglassmc/locales';
|
|
3
|
+
import { categorizeTreeChildren, resolveParentTreeNode } from '../tree/index.js';
|
|
4
|
+
import { argumentTreeNodeToString } from './argument.js';
|
|
5
|
+
import { sep } from './common.js';
|
|
6
|
+
import { literal } from './literal.js';
|
|
29
7
|
/**
|
|
30
8
|
* @returns A parser that always takes a whole line (excluding line turn characters) and tries to parse it as a command.
|
|
31
9
|
*/
|
|
32
|
-
function command(tree, argument) {
|
|
10
|
+
export function command(tree, argument) {
|
|
33
11
|
return (src, ctx) => {
|
|
34
12
|
const ans = {
|
|
35
13
|
type: 'mcfunction:command',
|
|
@@ -55,7 +33,6 @@ function command(tree, argument) {
|
|
|
55
33
|
return ans;
|
|
56
34
|
};
|
|
57
35
|
}
|
|
58
|
-
exports.command = command;
|
|
59
36
|
/**
|
|
60
37
|
* Dispatch and parse based on the specified command tree node's children.
|
|
61
38
|
*
|
|
@@ -64,19 +41,19 @@ exports.command = command;
|
|
|
64
41
|
function dispatch(ans, src, ctx, path, rootTreeNode, parentTreeNode, argument) {
|
|
65
42
|
// Convention: suffix `Node` is for AST nodes; `TreeNode` is for command tree nodes.
|
|
66
43
|
function _dispatch(path, parentTreeNode) {
|
|
67
|
-
const { treeNode: parent, path: resolvedPath } =
|
|
44
|
+
const { treeNode: parent, path: resolvedPath } = resolveParentTreeNode(parentTreeNode, rootTreeNode, path);
|
|
68
45
|
path = resolvedPath;
|
|
69
46
|
const children = parent?.children;
|
|
70
47
|
if (!children) {
|
|
71
48
|
return false;
|
|
72
49
|
}
|
|
73
|
-
const { literalTreeNodes, argumentTreeNodes } =
|
|
50
|
+
const { literalTreeNodes, argumentTreeNodes } = categorizeTreeChildren(children);
|
|
74
51
|
const argumentParsers = argumentTreeNodes.map(([name, treeNode]) => ({
|
|
75
52
|
name,
|
|
76
53
|
parser: argument(treeNode) ?? unknown(treeNode),
|
|
77
54
|
}));
|
|
78
55
|
const literalParser = literalTreeNodes.length
|
|
79
|
-
?
|
|
56
|
+
? literal(literalTreeNodes.map(([name, _treeNode]) => name), parent.type === 'root')
|
|
80
57
|
: undefined;
|
|
81
58
|
const parsers = [
|
|
82
59
|
...literalParser ? [literalParser] : [],
|
|
@@ -100,7 +77,7 @@ function dispatch(ans, src, ctx, path, rootTreeNode, parentTreeNode, argument) {
|
|
|
100
77
|
}
|
|
101
78
|
const requiredPermissionLevel = childTreeNode.permission ?? 2;
|
|
102
79
|
if (ctx.config.env.permissionLevel < requiredPermissionLevel) {
|
|
103
|
-
ctx.err.report(
|
|
80
|
+
ctx.err.report(localize('mcfunction.parser.no-permission', requiredPermissionLevel, ctx.config.env.permissionLevel), result);
|
|
104
81
|
}
|
|
105
82
|
if (result.type === 'mcfunction:command_child/unknown') {
|
|
106
83
|
// Encountered an unsupported parser. Stop parsing this command.
|
|
@@ -108,19 +85,19 @@ function dispatch(ans, src, ctx, path, rootTreeNode, parentTreeNode, argument) {
|
|
|
108
85
|
}
|
|
109
86
|
if (src.canReadInLine()) {
|
|
110
87
|
// Skip command argument separation (a space).
|
|
111
|
-
|
|
88
|
+
sep(src, ctx);
|
|
112
89
|
return { childPath, childTreeNode };
|
|
113
90
|
}
|
|
114
91
|
else {
|
|
115
92
|
// End-of-command.
|
|
116
93
|
if (!childTreeNode.executable) {
|
|
117
|
-
ctx.err.report(
|
|
94
|
+
ctx.err.report(localize('mcfunction.parser.eoc-unexpected'), src);
|
|
118
95
|
}
|
|
119
96
|
}
|
|
120
97
|
}
|
|
121
98
|
else {
|
|
122
99
|
// Failed to parse as any arguments.
|
|
123
|
-
ctx.err.report(
|
|
100
|
+
ctx.err.report(localize('expected', treeNodeChildrenToString(children)), core.Range.create(src));
|
|
124
101
|
}
|
|
125
102
|
return false;
|
|
126
103
|
}
|
|
@@ -134,7 +111,7 @@ function unknown(treeNode) {
|
|
|
134
111
|
const start = src.cursor;
|
|
135
112
|
const value = src.readUntilLineEnd();
|
|
136
113
|
const range = core.Range.create(start, src);
|
|
137
|
-
ctx.err.report(
|
|
114
|
+
ctx.err.report(localize('mcfunction.parser.unknown-parser', localeQuote(treeNode.parser)), range, 0 /* core.ErrorSeverity.Hint */);
|
|
138
115
|
return {
|
|
139
116
|
type: 'mcfunction:command_child/unknown',
|
|
140
117
|
range,
|
|
@@ -146,7 +123,7 @@ const trailing = (src, ctx) => {
|
|
|
146
123
|
const start = src.cursor;
|
|
147
124
|
const value = src.readUntilLineEnd();
|
|
148
125
|
const range = core.Range.create(start, src);
|
|
149
|
-
ctx.err.report(
|
|
126
|
+
ctx.err.report(localize('mcfunction.parser.trailing', localeQuote(value)), range);
|
|
150
127
|
return {
|
|
151
128
|
type: 'mcfunction:command_child/trailing',
|
|
152
129
|
range,
|
|
@@ -156,26 +133,23 @@ const trailing = (src, ctx) => {
|
|
|
156
133
|
function wrapWithBrackets(syntax, executable) {
|
|
157
134
|
return executable ? `[${syntax}]` : syntax;
|
|
158
135
|
}
|
|
159
|
-
function treeNodeChildrenToStringArray(children, executable = false) {
|
|
136
|
+
export function treeNodeChildrenToStringArray(children, executable = false) {
|
|
160
137
|
const entries = Object.entries(children)
|
|
161
138
|
.map(([name, treeNode]) => wrapWithBrackets(treeNodeToString(name, treeNode), executable));
|
|
162
139
|
return entries;
|
|
163
140
|
}
|
|
164
|
-
|
|
165
|
-
function treeNodeChildrenToString(children) {
|
|
141
|
+
export function treeNodeChildrenToString(children) {
|
|
166
142
|
const entries = treeNodeChildrenToStringArray(children);
|
|
167
143
|
return entries.length > 5
|
|
168
144
|
? `${entries.slice(0, 3).join('|')}|...|${entries.slice(-2).join('|')}`
|
|
169
145
|
: entries.join('|');
|
|
170
146
|
}
|
|
171
|
-
|
|
172
|
-
function treeNodeToString(name, treeNode) {
|
|
147
|
+
export function treeNodeToString(name, treeNode) {
|
|
173
148
|
if (treeNode.type === 'argument') {
|
|
174
|
-
return
|
|
149
|
+
return argumentTreeNodeToString(name, treeNode);
|
|
175
150
|
}
|
|
176
151
|
else {
|
|
177
152
|
return name;
|
|
178
153
|
}
|
|
179
154
|
}
|
|
180
|
-
exports.treeNodeToString = treeNodeToString;
|
|
181
155
|
//# sourceMappingURL=command.js.map
|
package/lib/parser/common.js
CHANGED
|
@@ -1,39 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.sep = void 0;
|
|
23
|
-
const core = __importStar(require("@spyglassmc/core"));
|
|
24
|
-
const locales_1 = require("@spyglassmc/locales");
|
|
1
|
+
import * as core from '@spyglassmc/core';
|
|
2
|
+
import { localeQuote, localize } from '@spyglassmc/locales';
|
|
25
3
|
/**
|
|
26
4
|
* A parser that takes a continuous sequence of spaces and tabs, and marks an error if it is not a single space.
|
|
27
5
|
*
|
|
28
6
|
* @returns The accepted spaces and tabs.
|
|
29
7
|
*/
|
|
30
|
-
const sep = (src, ctx) => {
|
|
8
|
+
export const sep = (src, ctx) => {
|
|
31
9
|
const start = src.cursor;
|
|
32
10
|
const ans = src.readSpace();
|
|
33
11
|
if (ans !== ' ') {
|
|
34
|
-
ctx.err.report(
|
|
12
|
+
ctx.err.report(localize('expected', localize('mcfunction.parser.sep', localeQuote(' '))), core.Range.create(start, src));
|
|
35
13
|
}
|
|
36
14
|
return ans;
|
|
37
15
|
};
|
|
38
|
-
exports.sep = sep;
|
|
39
16
|
//# sourceMappingURL=common.js.map
|
package/lib/parser/entry.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as core from '@spyglassmc/core';
|
|
2
|
-
import type { McfunctionNode } from '../node';
|
|
3
|
-
import type { ArgumentParserGetter } from './argument';
|
|
2
|
+
import type { McfunctionNode } from '../node/index.js';
|
|
3
|
+
import type { ArgumentParserGetter } from './argument.js';
|
|
4
4
|
/**
|
|
5
5
|
* @throws When there's no command tree associated with `commandTreeName`.
|
|
6
6
|
*/
|
package/lib/parser/entry.js
CHANGED
|
@@ -1,32 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.entry = void 0;
|
|
23
|
-
const core = __importStar(require("@spyglassmc/core"));
|
|
24
|
-
const tree_1 = require("../tree");
|
|
25
|
-
const command_1 = require("./command");
|
|
1
|
+
import * as core from '@spyglassmc/core';
|
|
2
|
+
import { CommandTreeRegistry } from '../tree/index.js';
|
|
3
|
+
import { command } from './command.js';
|
|
26
4
|
/**
|
|
27
5
|
* @throws When there's no command tree associated with `commandTreeName`.
|
|
28
6
|
*/
|
|
29
|
-
function entry(commandTreeName, argument) {
|
|
7
|
+
export function entry(commandTreeName, argument) {
|
|
30
8
|
return (src, ctx) => {
|
|
31
9
|
const ans = {
|
|
32
10
|
type: 'mcfunction:entry',
|
|
@@ -39,7 +17,7 @@ function entry(commandTreeName, argument) {
|
|
|
39
17
|
result = comment(src, ctx);
|
|
40
18
|
}
|
|
41
19
|
else {
|
|
42
|
-
result =
|
|
20
|
+
result = command(CommandTreeRegistry.instance.get(commandTreeName), argument)(src, ctx);
|
|
43
21
|
}
|
|
44
22
|
ans.children.push(result);
|
|
45
23
|
src.nextLine();
|
|
@@ -48,7 +26,6 @@ function entry(commandTreeName, argument) {
|
|
|
48
26
|
return ans;
|
|
49
27
|
};
|
|
50
28
|
}
|
|
51
|
-
exports.entry = entry;
|
|
52
29
|
const comment = core.comment({
|
|
53
30
|
singleLinePrefixes: new Set(['#']),
|
|
54
31
|
});
|
package/lib/parser/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from './argument';
|
|
2
|
-
export * from './command';
|
|
3
|
-
export * from './common';
|
|
4
|
-
export * from './entry';
|
|
5
|
-
export * from './literal';
|
|
1
|
+
export * from './argument.js';
|
|
2
|
+
export * from './command.js';
|
|
3
|
+
export * from './common.js';
|
|
4
|
+
export * from './entry.js';
|
|
5
|
+
export * from './literal.js';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/parser/index.js
CHANGED
|
@@ -1,18 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
-
};
|
|
12
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
__exportStar(require("./argument"), exports);
|
|
14
|
-
__exportStar(require("./command"), exports);
|
|
15
|
-
__exportStar(require("./common"), exports);
|
|
16
|
-
__exportStar(require("./entry"), exports);
|
|
17
|
-
__exportStar(require("./literal"), exports);
|
|
1
|
+
export * from './argument.js';
|
|
2
|
+
export * from './command.js';
|
|
3
|
+
export * from './common.js';
|
|
4
|
+
export * from './entry.js';
|
|
5
|
+
export * from './literal.js';
|
|
18
6
|
//# sourceMappingURL=index.js.map
|
package/lib/parser/literal.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import * as core from '@spyglassmc/core';
|
|
2
|
-
import type { LiteralCommandChildNode } from '../node';
|
|
2
|
+
import type { LiteralCommandChildNode } from '../node/index.js';
|
|
3
3
|
export declare function literal(names: string[], isRoot?: boolean): core.Parser<LiteralCommandChildNode>;
|
|
4
4
|
//# sourceMappingURL=literal.d.ts.map
|
package/lib/parser/literal.js
CHANGED
|
@@ -1,28 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.literal = void 0;
|
|
23
|
-
const core = __importStar(require("@spyglassmc/core"));
|
|
24
|
-
const locales_1 = require("@spyglassmc/locales");
|
|
25
|
-
function literal(names, isRoot = false) {
|
|
1
|
+
import * as core from '@spyglassmc/core';
|
|
2
|
+
import { localize } from '@spyglassmc/locales';
|
|
3
|
+
export function literal(names, isRoot = false) {
|
|
26
4
|
const options = {
|
|
27
5
|
pool: names,
|
|
28
6
|
colorTokenType: isRoot ? 'keyword' : 'literal',
|
|
@@ -40,10 +18,9 @@ function literal(names, isRoot = false) {
|
|
|
40
18
|
value,
|
|
41
19
|
};
|
|
42
20
|
if (!names.includes(value)) {
|
|
43
|
-
ctx.err.report(
|
|
21
|
+
ctx.err.report(localize('expected', names), ans);
|
|
44
22
|
}
|
|
45
23
|
return ans;
|
|
46
24
|
};
|
|
47
25
|
}
|
|
48
|
-
exports.literal = literal;
|
|
49
26
|
//# sourceMappingURL=literal.js.map
|
package/lib/tree/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from './registry';
|
|
2
|
-
export * from './type';
|
|
3
|
-
export * from './util';
|
|
1
|
+
export * from './registry.js';
|
|
2
|
+
export * from './type.js';
|
|
3
|
+
export * from './util.js';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/tree/index.js
CHANGED
|
@@ -1,16 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
-
};
|
|
12
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
__exportStar(require("./registry"), exports);
|
|
14
|
-
__exportStar(require("./type"), exports);
|
|
15
|
-
__exportStar(require("./util"), exports);
|
|
1
|
+
export * from './registry.js';
|
|
2
|
+
export * from './type.js';
|
|
3
|
+
export * from './util.js';
|
|
16
4
|
//# sourceMappingURL=index.js.map
|
package/lib/tree/registry.d.ts
CHANGED
package/lib/tree/registry.js
CHANGED
|
@@ -1,33 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
-
};
|
|
7
|
-
var _CommandTreeRegistry_trees;
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.CommandTreeRegistry = void 0;
|
|
10
|
-
const core_1 = require("@spyglassmc/core");
|
|
1
|
+
import { merge } from '@spyglassmc/core';
|
|
11
2
|
/* istanbul ignore next */
|
|
12
3
|
/**
|
|
13
4
|
* The registry for mcfunction command trees.
|
|
14
5
|
* This is a singleton; use the `instance` static property to get an instance.
|
|
15
6
|
*/
|
|
16
|
-
class CommandTreeRegistry {
|
|
17
|
-
|
|
18
|
-
_CommandTreeRegistry_trees.set(this, new Map()
|
|
19
|
-
/**
|
|
20
|
-
* Register command tree for an arbitrary version.
|
|
21
|
-
*
|
|
22
|
-
* @param version The game version. e.g. `1.15-tdn`.
|
|
23
|
-
* @param tree The command tree for this version.
|
|
24
|
-
* @param treePatch A custom command tree patch that will be merged onto `tree`.
|
|
25
|
-
*/
|
|
26
|
-
);
|
|
27
|
-
if (CommandTreeRegistry._instance) {
|
|
28
|
-
throw new Error('Use the `instance` static property to get an instance.');
|
|
29
|
-
}
|
|
30
|
-
}
|
|
7
|
+
export class CommandTreeRegistry {
|
|
8
|
+
#trees = new Map();
|
|
31
9
|
/**
|
|
32
10
|
* Register command tree for an arbitrary version.
|
|
33
11
|
*
|
|
@@ -36,13 +14,13 @@ class CommandTreeRegistry {
|
|
|
36
14
|
* @param treePatch A custom command tree patch that will be merged onto `tree`.
|
|
37
15
|
*/
|
|
38
16
|
register(version, tree, treePatch) {
|
|
39
|
-
|
|
17
|
+
this.#trees.set(version, treePatch ? merge(tree, treePatch) : tree);
|
|
40
18
|
}
|
|
41
19
|
/**
|
|
42
20
|
* @throws When there's no command tree associated with the version.
|
|
43
21
|
*/
|
|
44
22
|
get(version) {
|
|
45
|
-
const ans =
|
|
23
|
+
const ans = this.#trees.get(version);
|
|
46
24
|
if (!ans) {
|
|
47
25
|
throw new Error(`No command tree exist for version “${version}”`);
|
|
48
26
|
}
|
|
@@ -54,7 +32,11 @@ class CommandTreeRegistry {
|
|
|
54
32
|
static get instance() {
|
|
55
33
|
return this._instance ?? (this._instance = new CommandTreeRegistry());
|
|
56
34
|
}
|
|
35
|
+
constructor() {
|
|
36
|
+
if (CommandTreeRegistry._instance) {
|
|
37
|
+
throw new Error('Use the `instance` static property to get an instance.');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
static _instance;
|
|
57
41
|
}
|
|
58
|
-
exports.CommandTreeRegistry = CommandTreeRegistry;
|
|
59
|
-
_CommandTreeRegistry_trees = new WeakMap();
|
|
60
42
|
//# sourceMappingURL=registry.js.map
|
package/lib/tree/type.js
CHANGED
package/lib/tree/util.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ArgumentTreeNode, LiteralTreeNode, RootTreeNode, TreeNode } from './type';
|
|
1
|
+
import type { ArgumentTreeNode, LiteralTreeNode, RootTreeNode, TreeNode } from './type.js';
|
|
2
2
|
export declare function redirect(rootTreeNode: TreeNode, path: readonly string[]): TreeNode | undefined;
|
|
3
3
|
/**
|
|
4
4
|
* @returns A `TreeNode` whose `children` property, if exists, contains its subsequent `TreeNode`s.
|
package/lib/tree/util.js
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.categorizeTreeChildren = exports.resolveParentTreeNode = exports.redirect = void 0;
|
|
4
|
-
function redirect(rootTreeNode, path) {
|
|
1
|
+
export function redirect(rootTreeNode, path) {
|
|
5
2
|
return path.reduce((p, c) => p?.children?.[c], rootTreeNode);
|
|
6
3
|
}
|
|
7
|
-
|
|
8
|
-
function resolveParentTreeNode(parentTreeNode, rootTreeNode, parentPath) {
|
|
4
|
+
export function resolveParentTreeNode(parentTreeNode, rootTreeNode, parentPath) {
|
|
9
5
|
if (parentTreeNode?.redirect) {
|
|
10
6
|
return { treeNode: redirect(rootTreeNode, parentTreeNode.redirect), path: [...parentTreeNode.redirect] };
|
|
11
7
|
}
|
|
@@ -18,11 +14,10 @@ function resolveParentTreeNode(parentTreeNode, rootTreeNode, parentPath) {
|
|
|
18
14
|
return { treeNode: parentTreeNode, path: parentPath };
|
|
19
15
|
}
|
|
20
16
|
}
|
|
21
|
-
exports.resolveParentTreeNode = resolveParentTreeNode;
|
|
22
17
|
/**
|
|
23
18
|
* Categorize command tree children to literal entries and argument entries.
|
|
24
19
|
*/
|
|
25
|
-
function categorizeTreeChildren(children) {
|
|
20
|
+
export function categorizeTreeChildren(children) {
|
|
26
21
|
const ans = {
|
|
27
22
|
literalTreeNodes: [],
|
|
28
23
|
argumentTreeNodes: [],
|
|
@@ -38,5 +33,4 @@ function categorizeTreeChildren(children) {
|
|
|
38
33
|
}
|
|
39
34
|
return ans;
|
|
40
35
|
}
|
|
41
|
-
exports.categorizeTreeChildren = categorizeTreeChildren;
|
|
42
36
|
//# sourceMappingURL=util.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spyglassmc/mcfunction",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"main": "lib/index.js",
|
|
5
6
|
"types": "lib/index.d.ts",
|
|
6
7
|
"author": "SPGoding",
|
|
@@ -24,7 +25,7 @@
|
|
|
24
25
|
"url": "https://github.com/SpyglassMC/Spyglass/issues"
|
|
25
26
|
},
|
|
26
27
|
"dependencies": {
|
|
27
|
-
"@spyglassmc/core": "0.
|
|
28
|
-
"@spyglassmc/locales": "0.
|
|
28
|
+
"@spyglassmc/core": "0.3.0",
|
|
29
|
+
"@spyglassmc/locales": "0.3.0"
|
|
29
30
|
}
|
|
30
31
|
}
|