greybel-interpreter 0.1.6 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/context.js +9 -7
- package/dist/cps.d.ts +1 -1
- package/dist/cps.js +665 -287
- package/dist/custom-types/list.js +2 -2
- package/dist/custom-types/map.js +2 -2
- package/dist/custom-types/string.js +1 -1
- package/dist/expressions/assign.d.ts +2 -1
- package/dist/expressions/assign.js +23 -5
- package/dist/expressions/binary-negated-expression.d.ts +2 -1
- package/dist/expressions/binary-negated-expression.js +21 -5
- package/dist/expressions/call.d.ts +2 -1
- package/dist/expressions/call.js +67 -36
- package/dist/expressions/list.d.ts +2 -1
- package/dist/expressions/list.js +22 -7
- package/dist/expressions/logical-and-binary.d.ts +2 -1
- package/dist/expressions/logical-and-binary.js +25 -5
- package/dist/expressions/map.d.ts +2 -1
- package/dist/expressions/map.js +35 -10
- package/dist/expressions/path.d.ts +2 -1
- package/dist/expressions/path.js +95 -41
- package/dist/interpreter.d.ts +1 -1
- package/dist/interpreter.js +80 -23
- package/dist/resource.d.ts +4 -4
- package/dist/resource.js +4 -4
- package/package.json +1 -1
package/dist/expressions/path.js
CHANGED
|
@@ -96,47 +96,100 @@ var ExpressionSegment = /** @class */ (function () {
|
|
|
96
96
|
exports.ExpressionSegment = ExpressionSegment;
|
|
97
97
|
var PathExpression = /** @class */ (function (_super) {
|
|
98
98
|
__extends(PathExpression, _super);
|
|
99
|
-
function PathExpression(ast
|
|
99
|
+
function PathExpression(ast) {
|
|
100
100
|
var _this = _super.call(this) || this;
|
|
101
101
|
var me = _this;
|
|
102
|
-
var buildExpression = function (node) {
|
|
103
|
-
var _a;
|
|
104
|
-
var expression = new ExpressionSegment();
|
|
105
|
-
switch (node.type) {
|
|
106
|
-
case greyscript_core_1.ASTType.MemberExpression:
|
|
107
|
-
var memberExpression = node;
|
|
108
|
-
expression.append(buildExpression(memberExpression.base));
|
|
109
|
-
expression.append(buildExpression(memberExpression.identifier));
|
|
110
|
-
break;
|
|
111
|
-
case greyscript_core_1.ASTType.IndexExpression:
|
|
112
|
-
var indexExpression = node;
|
|
113
|
-
expression.append(buildExpression(indexExpression.base));
|
|
114
|
-
if (((_a = indexExpression.index) === null || _a === void 0 ? void 0 : _a.type) === 'SliceExpression') {
|
|
115
|
-
var sliceExpression = indexExpression.index;
|
|
116
|
-
expression.append(new SliceSegment(visit(sliceExpression.left), visit(sliceExpression.right)));
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
expression.append(new IndexSegment(visit(indexExpression.index)));
|
|
120
|
-
}
|
|
121
|
-
break;
|
|
122
|
-
case greyscript_core_1.ASTType.Identifier:
|
|
123
|
-
var identifier = node;
|
|
124
|
-
expression.append(new PathSegment(identifier.name));
|
|
125
|
-
break;
|
|
126
|
-
default:
|
|
127
|
-
expression.append(visit(node));
|
|
128
|
-
}
|
|
129
|
-
return expression;
|
|
130
|
-
};
|
|
131
102
|
me.ast = ast;
|
|
132
|
-
me.expr =
|
|
103
|
+
me.expr = null;
|
|
133
104
|
return _this;
|
|
134
105
|
}
|
|
135
|
-
PathExpression.prototype.
|
|
106
|
+
PathExpression.prototype.prepare = function (visit) {
|
|
136
107
|
return __awaiter(this, void 0, void 0, function () {
|
|
137
|
-
var me,
|
|
108
|
+
var me, buildExpression, _a;
|
|
138
109
|
return __generator(this, function (_b) {
|
|
139
110
|
switch (_b.label) {
|
|
111
|
+
case 0:
|
|
112
|
+
me = this;
|
|
113
|
+
buildExpression = function (node) {
|
|
114
|
+
var _a;
|
|
115
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
116
|
+
var expression, _b, memberExpression, _c, _d, _e, _f, indexExpression, _g, _h, sliceExpression, _j, _k, _l, _m, _o, _p, _q, identifier, _r, _s;
|
|
117
|
+
return __generator(this, function (_t) {
|
|
118
|
+
switch (_t.label) {
|
|
119
|
+
case 0:
|
|
120
|
+
expression = new ExpressionSegment();
|
|
121
|
+
_b = node.type;
|
|
122
|
+
switch (_b) {
|
|
123
|
+
case greyscript_core_1.ASTType.MemberExpression: return [3 /*break*/, 1];
|
|
124
|
+
case greyscript_core_1.ASTType.IndexExpression: return [3 /*break*/, 4];
|
|
125
|
+
case greyscript_core_1.ASTType.Identifier: return [3 /*break*/, 11];
|
|
126
|
+
}
|
|
127
|
+
return [3 /*break*/, 12];
|
|
128
|
+
case 1:
|
|
129
|
+
memberExpression = node;
|
|
130
|
+
_d = (_c = expression).append;
|
|
131
|
+
return [4 /*yield*/, buildExpression(memberExpression.base)];
|
|
132
|
+
case 2:
|
|
133
|
+
_d.apply(_c, [_t.sent()]);
|
|
134
|
+
_f = (_e = expression).append;
|
|
135
|
+
return [4 /*yield*/, buildExpression(memberExpression.identifier)];
|
|
136
|
+
case 3:
|
|
137
|
+
_f.apply(_e, [_t.sent()]);
|
|
138
|
+
return [3 /*break*/, 14];
|
|
139
|
+
case 4:
|
|
140
|
+
indexExpression = node;
|
|
141
|
+
_h = (_g = expression).append;
|
|
142
|
+
return [4 /*yield*/, buildExpression(indexExpression.base)];
|
|
143
|
+
case 5:
|
|
144
|
+
_h.apply(_g, [_t.sent()]);
|
|
145
|
+
if (!(((_a = indexExpression.index) === null || _a === void 0 ? void 0 : _a.type) === 'SliceExpression')) return [3 /*break*/, 8];
|
|
146
|
+
sliceExpression = indexExpression.index;
|
|
147
|
+
_k = (_j = expression).append;
|
|
148
|
+
_l = SliceSegment.bind;
|
|
149
|
+
return [4 /*yield*/, visit(sliceExpression.left)];
|
|
150
|
+
case 6:
|
|
151
|
+
_m = [void 0, _t.sent()];
|
|
152
|
+
return [4 /*yield*/, visit(sliceExpression.right)];
|
|
153
|
+
case 7:
|
|
154
|
+
_k.apply(_j, [new (_l.apply(SliceSegment, _m.concat([_t.sent()])))()]);
|
|
155
|
+
return [3 /*break*/, 10];
|
|
156
|
+
case 8:
|
|
157
|
+
_p = (_o = expression).append;
|
|
158
|
+
_q = IndexSegment.bind;
|
|
159
|
+
return [4 /*yield*/, visit(indexExpression.index)];
|
|
160
|
+
case 9:
|
|
161
|
+
_p.apply(_o, [new (_q.apply(IndexSegment, [void 0, _t.sent()]))()]);
|
|
162
|
+
_t.label = 10;
|
|
163
|
+
case 10: return [3 /*break*/, 14];
|
|
164
|
+
case 11:
|
|
165
|
+
identifier = node;
|
|
166
|
+
expression.append(new PathSegment(identifier.name));
|
|
167
|
+
return [3 /*break*/, 14];
|
|
168
|
+
case 12:
|
|
169
|
+
_s = (_r = expression).append;
|
|
170
|
+
return [4 /*yield*/, visit(node)];
|
|
171
|
+
case 13:
|
|
172
|
+
_s.apply(_r, [_t.sent()]);
|
|
173
|
+
_t.label = 14;
|
|
174
|
+
case 14: return [2 /*return*/, expression];
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
};
|
|
179
|
+
_a = me;
|
|
180
|
+
return [4 /*yield*/, buildExpression(me.ast)];
|
|
181
|
+
case 1:
|
|
182
|
+
_a.expr = _b.sent();
|
|
183
|
+
return [2 /*return*/, me];
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
};
|
|
188
|
+
PathExpression.prototype.get = function (operationContext, parentExpr) {
|
|
189
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
190
|
+
var me, evaluate, resultExpr, context, value_1, _a, value, callable, _b;
|
|
191
|
+
return __generator(this, function (_c) {
|
|
192
|
+
switch (_c.label) {
|
|
140
193
|
case 0:
|
|
141
194
|
me = this;
|
|
142
195
|
evaluate = function (node) {
|
|
@@ -265,7 +318,7 @@ var PathExpression = /** @class */ (function (_super) {
|
|
|
265
318
|
operationContext.debugger.debug('PathExpression', 'get', 'expr', me.expr);
|
|
266
319
|
return [4 /*yield*/, evaluate(me.expr)];
|
|
267
320
|
case 1:
|
|
268
|
-
resultExpr =
|
|
321
|
+
resultExpr = _c.sent();
|
|
269
322
|
if (!!parentExpr) return [3 /*break*/, 14];
|
|
270
323
|
if (!resultExpr.handle) return [3 /*break*/, 8];
|
|
271
324
|
if (!(resultExpr.path.length === 0)) return [3 /*break*/, 2];
|
|
@@ -275,30 +328,31 @@ var PathExpression = /** @class */ (function (_super) {
|
|
|
275
328
|
context = resultExpr.handle;
|
|
276
329
|
return [4 /*yield*/, context.get(resultExpr.path)];
|
|
277
330
|
case 3:
|
|
278
|
-
value_1 =
|
|
331
|
+
value_1 = _c.sent();
|
|
279
332
|
if (!(value_1 instanceof operation_1.Operation)) return [3 /*break*/, 4];
|
|
280
333
|
return [2 /*return*/, value_1.run(operationContext)];
|
|
281
334
|
case 4:
|
|
282
335
|
if (!(value_1 instanceof Function)) return [3 /*break*/, 6];
|
|
336
|
+
_a = typer_1.cast;
|
|
283
337
|
return [4 /*yield*/, value_1.call(context)];
|
|
284
|
-
case 5: return [2 /*return*/,
|
|
338
|
+
case 5: return [2 /*return*/, _a.apply(void 0, [_c.sent()])];
|
|
285
339
|
case 6: return [2 /*return*/, value_1];
|
|
286
340
|
case 7: return [2 /*return*/, (0, typer_1.cast)(resultExpr.handle.callMethod(resultExpr.path))];
|
|
287
341
|
case 8: return [4 /*yield*/, operationContext.get(resultExpr.path)];
|
|
288
342
|
case 9:
|
|
289
|
-
value =
|
|
343
|
+
value = _c.sent();
|
|
290
344
|
if (!(value instanceof Function)) return [3 /*break*/, 12];
|
|
291
345
|
return [4 /*yield*/, operationContext.getCallable(resultExpr.path)];
|
|
292
346
|
case 10:
|
|
293
|
-
callable =
|
|
294
|
-
|
|
347
|
+
callable = _c.sent();
|
|
348
|
+
_b = typer_1.cast;
|
|
295
349
|
return [4 /*yield*/, callable.origin.call(callable.context)];
|
|
296
|
-
case 11: return [2 /*return*/,
|
|
350
|
+
case 11: return [2 /*return*/, _b.apply(void 0, [_c.sent()])];
|
|
297
351
|
case 12:
|
|
298
352
|
if (value instanceof operation_1.Operation) {
|
|
299
353
|
return [2 /*return*/, value.run(operationContext)];
|
|
300
354
|
}
|
|
301
|
-
|
|
355
|
+
_c.label = 13;
|
|
302
356
|
case 13: return [2 /*return*/, value];
|
|
303
357
|
case 14: return [2 /*return*/, resultExpr];
|
|
304
358
|
}
|
package/dist/interpreter.d.ts
CHANGED
package/dist/interpreter.js
CHANGED
|
@@ -1,4 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
2
38
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
39
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
40
|
};
|
|
@@ -20,7 +56,7 @@ var Interpreter = /** @class */ (function () {
|
|
|
20
56
|
me.context = null;
|
|
21
57
|
if (options.target) {
|
|
22
58
|
me.target = options.target;
|
|
23
|
-
me.code =
|
|
59
|
+
me.code = null;
|
|
24
60
|
}
|
|
25
61
|
else {
|
|
26
62
|
me.target = 'unknown';
|
|
@@ -28,28 +64,49 @@ var Interpreter = /** @class */ (function () {
|
|
|
28
64
|
}
|
|
29
65
|
}
|
|
30
66
|
Interpreter.prototype.digest = function () {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
67
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
68
|
+
var me, code, _a, parser, chunk, cps, mainContext, topOperation, _b, _c;
|
|
69
|
+
var _d;
|
|
70
|
+
return __generator(this, function (_e) {
|
|
71
|
+
switch (_e.label) {
|
|
72
|
+
case 0:
|
|
73
|
+
me = this;
|
|
74
|
+
_a = me.code;
|
|
75
|
+
if (_a) return [3 /*break*/, 2];
|
|
76
|
+
return [4 /*yield*/, me.resourceHandler.get(me.target)];
|
|
77
|
+
case 1:
|
|
78
|
+
_a = (_e.sent());
|
|
79
|
+
_e.label = 2;
|
|
80
|
+
case 2:
|
|
81
|
+
code = _a;
|
|
82
|
+
parser = new greybel_core_1.Parser(code);
|
|
83
|
+
chunk = parser.parseChunk();
|
|
84
|
+
cps = new cps_1.default({
|
|
85
|
+
target: me.target,
|
|
86
|
+
resourceHandler: me.resourceHandler
|
|
87
|
+
});
|
|
88
|
+
mainContext = new context_1.OperationContext({
|
|
89
|
+
isProtected: true,
|
|
90
|
+
debugger: me.debugger,
|
|
91
|
+
cps: cps
|
|
92
|
+
});
|
|
93
|
+
_b = top_1.default.bind;
|
|
94
|
+
_c = [void 0, null];
|
|
95
|
+
_d = {};
|
|
96
|
+
return [4 /*yield*/, cps.visit(chunk)];
|
|
97
|
+
case 3:
|
|
98
|
+
topOperation = new (_b.apply(top_1.default, _c.concat([(_d.body = _e.sent(),
|
|
99
|
+
_d)])))();
|
|
100
|
+
mainContext.extend(me.api);
|
|
101
|
+
mainContext.scope.refs.set('params', (0, typer_1.cast)(me.params));
|
|
102
|
+
me.context = mainContext;
|
|
103
|
+
return [2 /*return*/, topOperation.run(mainContext)
|
|
104
|
+
.catch(function (err) {
|
|
105
|
+
console.error(err);
|
|
106
|
+
throw err;
|
|
107
|
+
})];
|
|
108
|
+
}
|
|
109
|
+
});
|
|
53
110
|
});
|
|
54
111
|
};
|
|
55
112
|
Interpreter.prototype.exit = function () {
|
package/dist/resource.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export interface ResourceHandler {
|
|
2
|
-
getTargetRelativeTo(source: string, target: string): string
|
|
3
|
-
has(target: string): boolean
|
|
4
|
-
get(target: string): string
|
|
5
|
-
resolve(target: string): string
|
|
2
|
+
getTargetRelativeTo(source: string, target: string): Promise<string>;
|
|
3
|
+
has(target: string): Promise<boolean>;
|
|
4
|
+
get(target: string): Promise<string>;
|
|
5
|
+
resolve(target: string): Promise<string>;
|
|
6
6
|
}
|
|
7
7
|
export declare class ResourceProvider {
|
|
8
8
|
getHandler(): ResourceHandler;
|
package/dist/resource.js
CHANGED
|
@@ -11,16 +11,16 @@ var ResourceProvider = /** @class */ (function () {
|
|
|
11
11
|
getTargetRelativeTo: function (source, target) {
|
|
12
12
|
var base = path.resolve(source, '..');
|
|
13
13
|
var result = path.resolve(base, target);
|
|
14
|
-
return fs.existsSync(result) ? result : result + '.src';
|
|
14
|
+
return Promise.resolve(fs.existsSync(result) ? result : result + '.src');
|
|
15
15
|
},
|
|
16
16
|
has: function (target) {
|
|
17
|
-
return fs.existsSync(target);
|
|
17
|
+
return Promise.resolve(fs.existsSync(target));
|
|
18
18
|
},
|
|
19
19
|
get: function (target) {
|
|
20
|
-
return fs.readFileSync(target, 'utf8');
|
|
20
|
+
return Promise.resolve(fs.readFileSync(target, 'utf8'));
|
|
21
21
|
},
|
|
22
22
|
resolve: function (target) {
|
|
23
|
-
return path.resolve(target);
|
|
23
|
+
return Promise.resolve(path.resolve(target));
|
|
24
24
|
}
|
|
25
25
|
};
|
|
26
26
|
};
|