sval 0.6.0 → 0.6.2

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/sval.es6.js CHANGED
@@ -129,6 +129,16 @@
129
129
  }
130
130
  });
131
131
  }
132
+ function callSuper(target, superClass, args = []) {
133
+ let supportReflect = false;
134
+ try {
135
+ supportReflect = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () { }));
136
+ }
137
+ catch (err) { }
138
+ return supportReflect
139
+ ? Reflect.construct(superClass, args, getProto(target).constructor)
140
+ : superClass.apply(target, args);
141
+ }
132
142
  function _assign(target) {
133
143
  for (let i = 1; i < arguments.length; ++i) {
134
144
  const source = arguments[i];
@@ -143,267 +153,278 @@
143
153
  const assign = Object.assign || _assign;
144
154
  let names = [];
145
155
  let globalObj = create(null);
146
- try {
147
- if (!window.Object)
156
+ const setGlobalObj = (g) => {
157
+ if (!g.Object)
148
158
  throw 0;
149
- names = getOwnNames(globalObj = window).filter(n => n !== 'webkitStorageInfo');
159
+ names = getOwnNames(globalObj = g).filter(n => ['webkitStorageInfo', 'GLOBAL', 'root'].indexOf(n) === -1);
160
+ };
161
+ try {
162
+ setGlobalObj(window);
150
163
  }
151
164
  catch (err) {
152
165
  try {
153
- if (!global.Object)
154
- throw 0;
155
- names = getOwnNames(globalObj = global).filter(n => n !== 'GLOBAL' && n !== 'root');
166
+ setGlobalObj(self);
156
167
  }
157
168
  catch (err) {
158
169
  try {
159
- globalObj.Object = Object;
160
- }
161
- catch (err) { }
162
- try {
163
- globalObj.Function = Function;
164
- }
165
- catch (err) { }
166
- try {
167
- globalObj.Array = Array;
168
- }
169
- catch (err) { }
170
- try {
171
- globalObj.Number = Number;
172
- }
173
- catch (err) { }
174
- try {
175
- globalObj.parseFloat = parseFloat;
176
- }
177
- catch (err) { }
178
- try {
179
- globalObj.parseInt = parseInt;
180
- }
181
- catch (err) { }
182
- try {
183
- globalObj.Infinity = Infinity;
184
- }
185
- catch (err) { }
186
- try {
187
- globalObj.NaN = NaN;
188
- }
189
- catch (err) { }
190
- try {
191
- globalObj.undefined = undefined;
192
- }
193
- catch (err) { }
194
- try {
195
- globalObj.Boolean = Boolean;
196
- }
197
- catch (err) { }
198
- try {
199
- globalObj.String = String;
200
- }
201
- catch (err) { }
202
- try {
203
- globalObj.Symbol = Symbol;
204
- }
205
- catch (err) { }
206
- try {
207
- globalObj.Date = Date;
208
- }
209
- catch (err) { }
210
- try {
211
- globalObj.Promise = Promise;
212
- }
213
- catch (err) { }
214
- try {
215
- globalObj.RegExp = RegExp;
216
- }
217
- catch (err) { }
218
- try {
219
- globalObj.Error = Error;
220
- }
221
- catch (err) { }
222
- try {
223
- globalObj.EvalError = EvalError;
224
- }
225
- catch (err) { }
226
- try {
227
- globalObj.RangeError = RangeError;
228
- }
229
- catch (err) { }
230
- try {
231
- globalObj.ReferenceError = ReferenceError;
232
- }
233
- catch (err) { }
234
- try {
235
- globalObj.SyntaxError = SyntaxError;
236
- }
237
- catch (err) { }
238
- try {
239
- globalObj.TypeError = TypeError;
240
- }
241
- catch (err) { }
242
- try {
243
- globalObj.URIError = URIError;
244
- }
245
- catch (err) { }
246
- try {
247
- globalObj.JSON = JSON;
248
- }
249
- catch (err) { }
250
- try {
251
- globalObj.Math = Math;
252
- }
253
- catch (err) { }
254
- try {
255
- globalObj.console = console;
256
- }
257
- catch (err) { }
258
- try {
259
- globalObj.Intl = Intl;
260
- }
261
- catch (err) { }
262
- try {
263
- globalObj.ArrayBuffer = ArrayBuffer;
264
- }
265
- catch (err) { }
266
- try {
267
- globalObj.Uint8Array = Uint8Array;
268
- }
269
- catch (err) { }
270
- try {
271
- globalObj.Int8Array = Int8Array;
272
- }
273
- catch (err) { }
274
- try {
275
- globalObj.Uint16Array = Uint16Array;
276
- }
277
- catch (err) { }
278
- try {
279
- globalObj.Int16Array = Int16Array;
280
- }
281
- catch (err) { }
282
- try {
283
- globalObj.Uint32Array = Uint32Array;
170
+ setGlobalObj(global);
284
171
  }
285
- catch (err) { }
286
- try {
287
- globalObj.Int32Array = Int32Array;
288
- }
289
- catch (err) { }
290
- try {
291
- globalObj.Float32Array = Float32Array;
292
- }
293
- catch (err) { }
294
- try {
295
- globalObj.Float64Array = Float64Array;
296
- }
297
- catch (err) { }
298
- try {
299
- globalObj.Uint8ClampedArray = Uint8ClampedArray;
300
- }
301
- catch (err) { }
302
- try {
303
- globalObj.DataView = DataView;
304
- }
305
- catch (err) { }
306
- try {
307
- globalObj.Map = Map;
308
- }
309
- catch (err) { }
310
- try {
311
- globalObj.Set = Set;
312
- }
313
- catch (err) { }
314
- try {
315
- globalObj.WeakMap = WeakMap;
316
- }
317
- catch (err) { }
318
- try {
319
- globalObj.WeakSet = WeakSet;
320
- }
321
- catch (err) { }
322
- try {
323
- globalObj.Proxy = Proxy;
324
- }
325
- catch (err) { }
326
- try {
327
- globalObj.Reflect = Reflect;
328
- }
329
- catch (err) { }
330
- try {
331
- globalObj.BigInt = BigInt;
332
- }
333
- catch (err) { }
334
- try {
335
- globalObj.decodeURI = decodeURI;
336
- }
337
- catch (err) { }
338
- try {
339
- globalObj.decodeURIComponent = decodeURIComponent;
340
- }
341
- catch (err) { }
342
- try {
343
- globalObj.encodeURI = encodeURI;
344
- }
345
- catch (err) { }
346
- try {
347
- globalObj.encodeURIComponent = encodeURIComponent;
348
- }
349
- catch (err) { }
350
- try {
351
- globalObj.escape = escape;
352
- }
353
- catch (err) { }
354
- try {
355
- globalObj.unescape = unescape;
356
- }
357
- catch (err) { }
358
- try {
359
- globalObj.eval = eval;
360
- }
361
- catch (err) { }
362
- try {
363
- globalObj.isFinite = isFinite;
364
- }
365
- catch (err) { }
366
- try {
367
- globalObj.isNaN = isNaN;
368
- }
369
- catch (err) { }
370
- try {
371
- globalObj.SharedArrayBuffer = SharedArrayBuffer;
372
- }
373
- catch (err) { }
374
- try {
375
- globalObj.Atomics = Atomics;
376
- }
377
- catch (err) { }
378
- try {
379
- globalObj.WebAssembly = WebAssembly;
380
- }
381
- catch (err) { }
382
- try {
383
- globalObj.clearInterval = clearInterval;
384
- }
385
- catch (err) { }
386
- try {
387
- globalObj.clearTimeout = clearTimeout;
388
- }
389
- catch (err) { }
390
- try {
391
- globalObj.setInterval = setInterval;
392
- }
393
- catch (err) { }
394
- try {
395
- globalObj.setTimeout = setTimeout;
396
- }
397
- catch (err) { }
398
- try {
399
- globalObj.crypto = crypto;
400
- }
401
- catch (err) { }
402
- try {
403
- globalObj.URL = URL;
172
+ catch (err) {
173
+ try {
174
+ setGlobalObj(globalThis);
175
+ }
176
+ catch (err) {
177
+ try {
178
+ globalObj.Object = Object;
179
+ }
180
+ catch (err) { }
181
+ try {
182
+ globalObj.Function = Function;
183
+ }
184
+ catch (err) { }
185
+ try {
186
+ globalObj.Array = Array;
187
+ }
188
+ catch (err) { }
189
+ try {
190
+ globalObj.Number = Number;
191
+ }
192
+ catch (err) { }
193
+ try {
194
+ globalObj.parseFloat = parseFloat;
195
+ }
196
+ catch (err) { }
197
+ try {
198
+ globalObj.parseInt = parseInt;
199
+ }
200
+ catch (err) { }
201
+ try {
202
+ globalObj.Infinity = Infinity;
203
+ }
204
+ catch (err) { }
205
+ try {
206
+ globalObj.NaN = NaN;
207
+ }
208
+ catch (err) { }
209
+ try {
210
+ globalObj.undefined = undefined;
211
+ }
212
+ catch (err) { }
213
+ try {
214
+ globalObj.Boolean = Boolean;
215
+ }
216
+ catch (err) { }
217
+ try {
218
+ globalObj.String = String;
219
+ }
220
+ catch (err) { }
221
+ try {
222
+ globalObj.Symbol = Symbol;
223
+ }
224
+ catch (err) { }
225
+ try {
226
+ globalObj.Date = Date;
227
+ }
228
+ catch (err) { }
229
+ try {
230
+ globalObj.Promise = Promise;
231
+ }
232
+ catch (err) { }
233
+ try {
234
+ globalObj.RegExp = RegExp;
235
+ }
236
+ catch (err) { }
237
+ try {
238
+ globalObj.Error = Error;
239
+ }
240
+ catch (err) { }
241
+ try {
242
+ globalObj.EvalError = EvalError;
243
+ }
244
+ catch (err) { }
245
+ try {
246
+ globalObj.RangeError = RangeError;
247
+ }
248
+ catch (err) { }
249
+ try {
250
+ globalObj.ReferenceError = ReferenceError;
251
+ }
252
+ catch (err) { }
253
+ try {
254
+ globalObj.SyntaxError = SyntaxError;
255
+ }
256
+ catch (err) { }
257
+ try {
258
+ globalObj.TypeError = TypeError;
259
+ }
260
+ catch (err) { }
261
+ try {
262
+ globalObj.URIError = URIError;
263
+ }
264
+ catch (err) { }
265
+ try {
266
+ globalObj.JSON = JSON;
267
+ }
268
+ catch (err) { }
269
+ try {
270
+ globalObj.Math = Math;
271
+ }
272
+ catch (err) { }
273
+ try {
274
+ globalObj.console = console;
275
+ }
276
+ catch (err) { }
277
+ try {
278
+ globalObj.Intl = Intl;
279
+ }
280
+ catch (err) { }
281
+ try {
282
+ globalObj.ArrayBuffer = ArrayBuffer;
283
+ }
284
+ catch (err) { }
285
+ try {
286
+ globalObj.Uint8Array = Uint8Array;
287
+ }
288
+ catch (err) { }
289
+ try {
290
+ globalObj.Int8Array = Int8Array;
291
+ }
292
+ catch (err) { }
293
+ try {
294
+ globalObj.Uint16Array = Uint16Array;
295
+ }
296
+ catch (err) { }
297
+ try {
298
+ globalObj.Int16Array = Int16Array;
299
+ }
300
+ catch (err) { }
301
+ try {
302
+ globalObj.Uint32Array = Uint32Array;
303
+ }
304
+ catch (err) { }
305
+ try {
306
+ globalObj.Int32Array = Int32Array;
307
+ }
308
+ catch (err) { }
309
+ try {
310
+ globalObj.Float32Array = Float32Array;
311
+ }
312
+ catch (err) { }
313
+ try {
314
+ globalObj.Float64Array = Float64Array;
315
+ }
316
+ catch (err) { }
317
+ try {
318
+ globalObj.Uint8ClampedArray = Uint8ClampedArray;
319
+ }
320
+ catch (err) { }
321
+ try {
322
+ globalObj.DataView = DataView;
323
+ }
324
+ catch (err) { }
325
+ try {
326
+ globalObj.Map = Map;
327
+ }
328
+ catch (err) { }
329
+ try {
330
+ globalObj.Set = Set;
331
+ }
332
+ catch (err) { }
333
+ try {
334
+ globalObj.WeakMap = WeakMap;
335
+ }
336
+ catch (err) { }
337
+ try {
338
+ globalObj.WeakSet = WeakSet;
339
+ }
340
+ catch (err) { }
341
+ try {
342
+ globalObj.Proxy = Proxy;
343
+ }
344
+ catch (err) { }
345
+ try {
346
+ globalObj.Reflect = Reflect;
347
+ }
348
+ catch (err) { }
349
+ try {
350
+ globalObj.BigInt = BigInt;
351
+ }
352
+ catch (err) { }
353
+ try {
354
+ globalObj.decodeURI = decodeURI;
355
+ }
356
+ catch (err) { }
357
+ try {
358
+ globalObj.decodeURIComponent = decodeURIComponent;
359
+ }
360
+ catch (err) { }
361
+ try {
362
+ globalObj.encodeURI = encodeURI;
363
+ }
364
+ catch (err) { }
365
+ try {
366
+ globalObj.encodeURIComponent = encodeURIComponent;
367
+ }
368
+ catch (err) { }
369
+ try {
370
+ globalObj.escape = escape;
371
+ }
372
+ catch (err) { }
373
+ try {
374
+ globalObj.unescape = unescape;
375
+ }
376
+ catch (err) { }
377
+ try {
378
+ globalObj.eval = eval;
379
+ }
380
+ catch (err) { }
381
+ try {
382
+ globalObj.isFinite = isFinite;
383
+ }
384
+ catch (err) { }
385
+ try {
386
+ globalObj.isNaN = isNaN;
387
+ }
388
+ catch (err) { }
389
+ try {
390
+ globalObj.SharedArrayBuffer = SharedArrayBuffer;
391
+ }
392
+ catch (err) { }
393
+ try {
394
+ globalObj.Atomics = Atomics;
395
+ }
396
+ catch (err) { }
397
+ try {
398
+ globalObj.WebAssembly = WebAssembly;
399
+ }
400
+ catch (err) { }
401
+ try {
402
+ globalObj.clearInterval = clearInterval;
403
+ }
404
+ catch (err) { }
405
+ try {
406
+ globalObj.clearTimeout = clearTimeout;
407
+ }
408
+ catch (err) { }
409
+ try {
410
+ globalObj.setInterval = setInterval;
411
+ }
412
+ catch (err) { }
413
+ try {
414
+ globalObj.setTimeout = setTimeout;
415
+ }
416
+ catch (err) { }
417
+ try {
418
+ globalObj.crypto = crypto;
419
+ }
420
+ catch (err) { }
421
+ try {
422
+ globalObj.URL = URL;
423
+ }
424
+ catch (err) { }
425
+ names = getOwnNames(globalObj);
426
+ }
404
427
  }
405
- catch (err) { }
406
- names = getOwnNames(globalObj);
407
428
  }
408
429
  }
409
430
  if (globalObj.Symbol) {
@@ -464,7 +485,7 @@
464
485
  const IMPORT = createSymbol('import');
465
486
  const EXPORTS = createSymbol('exports');
466
487
 
467
- var version = "0.6.0";
488
+ var version = "0.6.1";
468
489
 
469
490
  class Var {
470
491
  constructor(kind, value) {
@@ -684,7 +705,7 @@
684
705
 
685
706
  function* ThisExpression$1(node, scope) {
686
707
  const superCall = scope.find(SUPERCALL);
687
- if (superCall && !superCall.get()) {
708
+ if (superCall && superCall.get() !== true) {
688
709
  throw new ReferenceError('Must call super constructor in derived class '
689
710
  + 'before accessing \'this\' or returning from derived constructor');
690
711
  }
@@ -1081,12 +1102,15 @@
1081
1102
  }
1082
1103
  if (node.callee.type === 'Super') {
1083
1104
  const superCall = scope.find(SUPERCALL);
1084
- if (superCall.get()) {
1105
+ const construct = superCall.get();
1106
+ if (construct === true) {
1085
1107
  throw new ReferenceError('Super constructor may only be called once');
1086
1108
  }
1087
- else {
1088
- scope.find(SUPERCALL).set(true);
1089
- }
1109
+ const inst = callSuper(object, func, args);
1110
+ yield* construct(inst);
1111
+ scope.find('this').set(inst);
1112
+ scope.find(SUPERCALL).set(true);
1113
+ return inst;
1090
1114
  }
1091
1115
  try {
1092
1116
  return func.apply(object, args);
@@ -2114,7 +2138,7 @@
2114
2138
 
2115
2139
  function ThisExpression(node, scope) {
2116
2140
  const superCall = scope.find(SUPERCALL);
2117
- if (superCall && !superCall.get()) {
2141
+ if (superCall && superCall.get() !== true) {
2118
2142
  throw new ReferenceError('Must call super constructor in derived class '
2119
2143
  + 'before accessing \'this\' or returning from derived constructor');
2120
2144
  }
@@ -2511,12 +2535,15 @@
2511
2535
  }
2512
2536
  if (node.callee.type === 'Super') {
2513
2537
  const superCall = scope.find(SUPERCALL);
2514
- if (superCall.get()) {
2538
+ const construct = superCall.get();
2539
+ if (construct === true) {
2515
2540
  throw new ReferenceError('Super constructor may only be called once');
2516
2541
  }
2517
- else {
2518
- scope.find(SUPERCALL).set(true);
2519
- }
2542
+ const inst = callSuper(object, func, args);
2543
+ construct(inst);
2544
+ scope.find('this').set(inst);
2545
+ scope.find(SUPERCALL).set(true);
2546
+ return inst;
2520
2547
  }
2521
2548
  try {
2522
2549
  return func.apply(object, args);
@@ -3572,16 +3599,16 @@
3572
3599
  const tmpFunc = function (...args) {
3573
3600
  const subScope = new Scope(scope, true);
3574
3601
  if (node.type !== 'ArrowFunctionExpression') {
3575
- subScope.const('this', this);
3602
+ subScope.let('this', this);
3576
3603
  subScope.let('arguments', arguments);
3577
3604
  subScope.const(NEWTARGET, new.target);
3578
- if (construct) {
3579
- construct(this);
3580
- }
3581
3605
  if (superClass) {
3582
3606
  subScope.const(SUPER, superClass);
3583
3607
  if (construct)
3584
- subScope.let(SUPERCALL, false);
3608
+ subScope.let(SUPERCALL, construct);
3609
+ }
3610
+ else if (construct) {
3611
+ construct(this);
3585
3612
  }
3586
3613
  }
3587
3614
  for (let i = 0; i < params.length; i++) {
@@ -3614,6 +3641,9 @@
3614
3641
  if (result === RETURN) {
3615
3642
  return result.RES;
3616
3643
  }
3644
+ else if (new.target) {
3645
+ return subScope.find('this').get();
3646
+ }
3617
3647
  };
3618
3648
  let func = tmpFunc;
3619
3649
  if (node.type === 'ArrowFunctionExpression') {
@@ -3650,10 +3680,9 @@
3650
3680
  }
3651
3681
  };
3652
3682
  let klass = function () {
3653
- construct(this);
3654
- if (superClass) {
3655
- superClass.apply(this);
3656
- }
3683
+ const inst = superClass ? callSuper(this, superClass) : this;
3684
+ construct(inst);
3685
+ return inst;
3657
3686
  };
3658
3687
  for (let i = 0; i < methodBody.length; i++) {
3659
3688
  const method = methodBody[i];
@@ -3803,16 +3832,16 @@
3803
3832
  const tmpFunc = function* (...args) {
3804
3833
  const subScope = new Scope(scope, true);
3805
3834
  if (node.type !== 'ArrowFunctionExpression') {
3806
- subScope.const('this', this);
3835
+ subScope.let('this', this);
3807
3836
  subScope.let('arguments', arguments);
3808
3837
  subScope.const(NEWTARGET, new.target);
3809
- if (construct) {
3810
- yield* construct(this);
3811
- }
3812
3838
  if (superClass) {
3813
3839
  subScope.const(SUPER, superClass);
3814
3840
  if (construct)
3815
- subScope.let(SUPERCALL, false);
3841
+ subScope.let(SUPERCALL, construct);
3842
+ }
3843
+ else if (construct) {
3844
+ yield* construct(this);
3816
3845
  }
3817
3846
  }
3818
3847
  for (let i = 0; i < params.length; i++) {
@@ -3845,6 +3874,9 @@
3845
3874
  if (result === RETURN) {
3846
3875
  return result.RES;
3847
3876
  }
3877
+ else if (new.target) {
3878
+ return subScope.find('this').get();
3879
+ }
3848
3880
  };
3849
3881
  let func;
3850
3882
  if (node.async && node.generator) {
@@ -3909,10 +3941,9 @@
3909
3941
  }
3910
3942
  };
3911
3943
  let klass = function* () {
3912
- yield* construct(this);
3913
- if (superClass) {
3914
- superClass.apply(this);
3915
- }
3944
+ const inst = superClass ? callSuper(this, superClass) : this;
3945
+ yield* construct(inst);
3946
+ return inst;
3916
3947
  };
3917
3948
  for (let i = 0; i < methodBody.length; i++) {
3918
3949
  const method = methodBody[i];
@@ -3975,11 +4006,13 @@
3975
4006
  const win = createSandBox();
3976
4007
  this.scope.let('globalThis', win);
3977
4008
  this.scope.let('window', win);
4009
+ this.scope.let('self', win);
3978
4010
  this.scope.let('this', win);
3979
4011
  }
3980
4012
  else {
3981
4013
  this.scope.let('globalThis', globalObj);
3982
4014
  this.scope.let('window', globalObj);
4015
+ this.scope.let('self', globalObj);
3983
4016
  this.scope.let('this', globalObj);
3984
4017
  }
3985
4018
  this.scope.const(sourceType === 'module' ? EXPORTS : 'exports', this.exports = {});