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.
@@ -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, visit) {
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 = buildExpression(ast);
103
+ me.expr = null;
133
104
  return _this;
134
105
  }
135
- PathExpression.prototype.get = function (operationContext, parentExpr) {
106
+ PathExpression.prototype.prepare = function (visit) {
136
107
  return __awaiter(this, void 0, void 0, function () {
137
- var me, evaluate, resultExpr, context, value_1, value, callable, _a;
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 = _b.sent();
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 = _b.sent();
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*/, _b.sent()];
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 = _b.sent();
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 = _b.sent();
294
- _a = typer_1.cast;
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*/, _a.apply(void 0, [_b.sent()])];
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
- _b.label = 13;
355
+ _c.label = 13;
302
356
  case 13: return [2 /*return*/, value];
303
357
  case 14: return [2 /*return*/, resultExpr];
304
358
  }
@@ -10,7 +10,7 @@ export interface InterpreterOptions {
10
10
  }
11
11
  export default class Interpreter {
12
12
  target: string;
13
- code: string;
13
+ code: string | null;
14
14
  api: Map<string, any>;
15
15
  params: any[];
16
16
  resourceHandler: ResourceHandler;
@@ -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 = me.resourceHandler.get(options.target);
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
- var me = this;
32
- var parser = new greybel_core_1.Parser(me.code);
33
- var chunk = parser.parseChunk();
34
- var cps = new cps_1.default({
35
- target: me.target,
36
- resourceHandler: me.resourceHandler
37
- });
38
- var mainContext = new context_1.OperationContext({
39
- isProtected: true,
40
- debugger: me.debugger,
41
- cps: cps
42
- });
43
- var topOperation = new top_1.default(null, {
44
- body: cps.visit(chunk)
45
- });
46
- mainContext.extend(me.api);
47
- mainContext.scope.refs.set('params', (0, typer_1.cast)(me.params));
48
- me.context = mainContext;
49
- return topOperation.run(mainContext)
50
- .catch(function (err) {
51
- console.error(err);
52
- throw err;
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 () {
@@ -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
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "greybel-interpreter",
3
- "version": "0.1.6",
3
+ "version": "0.2.0",
4
4
  "description": "Interpreter",
5
5
  "main": "dist/index",
6
6
  "typings": "dist/index",