pxt-core 9.3.9 → 9.3.11

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/built/pxt.js CHANGED
@@ -97781,6 +97781,17 @@ var pxt;
97781
97781
  };
97782
97782
  }
97783
97783
  analytics.enable = enable;
97784
+ function trackPerformanceReport() {
97785
+ if (pxt.perf.perfReportLogged)
97786
+ return;
97787
+ const data = pxt.perf.report();
97788
+ if (data) {
97789
+ const { durations, milestones } = data;
97790
+ pxt.tickEvent("performance.milestones", milestones);
97791
+ pxt.tickEvent("performance.durations", durations);
97792
+ }
97793
+ }
97794
+ analytics.trackPerformanceReport = trackPerformanceReport;
97784
97795
  })(analytics = pxt.analytics || (pxt.analytics = {}));
97785
97796
  })(pxt || (pxt = {}));
97786
97797
  var pxt;
@@ -101171,7 +101182,7 @@ var pxt;
101171
101182
  // Sometimes these aren't initialized, for example in tests. We only care about them
101172
101183
  // doing anything in the browser.
101173
101184
  if (!pxt.perf.report)
101174
- pxt.perf.report = () => { };
101185
+ pxt.perf.report = () => undefined;
101175
101186
  if (!pxt.perf.recordMilestone)
101176
101187
  pxt.perf.recordMilestone = () => { };
101177
101188
  if (!pxt.perf.measureStart)
@@ -101919,26 +101930,26 @@ var pxt;
101919
101930
  },
101920
101931
  'math_number': {
101921
101932
  name: pxt.Util.lf("{id:block}number"),
101922
- url: '/blocks/math/random',
101933
+ url: '/types/number',
101923
101934
  category: 'math',
101924
101935
  tooltip: (pxt.appTarget && pxt.appTarget.compile) ?
101925
101936
  pxt.Util.lf("a decimal number") : pxt.Util.lf("an integer number")
101926
101937
  },
101927
101938
  'math_integer': {
101928
101939
  name: pxt.Util.lf("{id:block}number"),
101929
- url: '/blocks/math/random',
101940
+ url: '/types/number',
101930
101941
  category: 'math',
101931
101942
  tooltip: pxt.Util.lf("an integer number")
101932
101943
  },
101933
101944
  'math_whole_number': {
101934
101945
  name: pxt.Util.lf("{id:block}number"),
101935
- url: '/blocks/math/random',
101946
+ url: '/types/number',
101936
101947
  category: 'math',
101937
101948
  tooltip: pxt.Util.lf("a whole number")
101938
101949
  },
101939
101950
  'math_number_minmax': {
101940
101951
  name: pxt.Util.lf("{id:block}number"),
101941
- url: '/blocks/math/random',
101952
+ url: '/blocks/math',
101942
101953
  category: 'math'
101943
101954
  },
101944
101955
  'math_arithmetic': {
@@ -103240,8 +103251,33 @@ var pxt;
103240
103251
  request.onerror = () => this.errorHandler(request.error, "deleteAll", reject);
103241
103252
  });
103242
103253
  }
103254
+ getObjectStoreWrapper(storeName) {
103255
+ return new IDBObjectStoreWrapper(this, storeName);
103256
+ }
103243
103257
  }
103244
103258
  BrowserUtils.IDBWrapper = IDBWrapper;
103259
+ class IDBObjectStoreWrapper {
103260
+ constructor(db, storeName) {
103261
+ this.db = db;
103262
+ this.storeName = storeName;
103263
+ }
103264
+ getAsync(id) {
103265
+ return this.db.getAsync(this.storeName, id);
103266
+ }
103267
+ getAllAsync() {
103268
+ return this.db.getAllAsync(this.storeName);
103269
+ }
103270
+ setAsync(data) {
103271
+ return this.db.setAsync(this.storeName, data);
103272
+ }
103273
+ async deleteAsync(id) {
103274
+ await this.db.deleteAsync(this.storeName, id);
103275
+ }
103276
+ async deleteAllAsync() {
103277
+ await this.db.deleteAllAsync(this.storeName);
103278
+ }
103279
+ }
103280
+ BrowserUtils.IDBObjectStoreWrapper = IDBObjectStoreWrapper;
103245
103281
  class IndexedDbTranslationDb {
103246
103282
  constructor(db) {
103247
103283
  this.db = db;
@@ -155574,6 +155610,7 @@ var pxsim;
155574
155610
  return wrapper;
155575
155611
  }
155576
155612
  preload(aspectRatio, clearRuntime) {
155613
+ this.addEventListeners();
155577
155614
  if (clearRuntime) {
155578
155615
  this._currentRuntime = undefined;
155579
155616
  this.container.textContent = "";
@@ -11522,6 +11522,73 @@ var pxt;
11522
11522
  })(blocks = pxt.blocks || (pxt.blocks = {}));
11523
11523
  })(pxt || (pxt = {}));
11524
11524
  var pxt;
11525
+ (function (pxt) {
11526
+ var blocks;
11527
+ (function (blocks) {
11528
+ class Rubric {
11529
+ constructor(criteria) {
11530
+ this.criteria = criteria;
11531
+ }
11532
+ }
11533
+ blocks.Rubric = Rubric;
11534
+ function parseRubric(rubric) {
11535
+ let rubricObj;
11536
+ try {
11537
+ rubricObj = JSON.parse(rubric);
11538
+ }
11539
+ catch (e) {
11540
+ console.error(`Error parsing rubric! ${e}`);
11541
+ return null;
11542
+ }
11543
+ if (!rubricObj.criteria) {
11544
+ console.error(`No criteria found in rubric`);
11545
+ return null;
11546
+ }
11547
+ const criteria = rubricObj.criteria.map((c) => {
11548
+ return blocks.getCriteria(c);
11549
+ }).filter((r) => !!r);
11550
+ return new Rubric(criteria);
11551
+ }
11552
+ blocks.parseRubric = parseRubric;
11553
+ })(blocks = pxt.blocks || (pxt.blocks = {}));
11554
+ })(pxt || (pxt = {}));
11555
+ var pxt;
11556
+ (function (pxt) {
11557
+ var blocks;
11558
+ (function (blocks) {
11559
+ function getCriteria(data) {
11560
+ switch (data.criteriaId) {
11561
+ case "blockCheck":
11562
+ return new BlockCheckCriteria(data.displayText, data.blockRequirements);
11563
+ case "comment":
11564
+ return new CommentCriteria(data.displayText, data.count);
11565
+ default:
11566
+ console.error(`Unrecognized criteriaId: ${data.criteriaId}`);
11567
+ return null;
11568
+ }
11569
+ }
11570
+ blocks.getCriteria = getCriteria;
11571
+ class RubricCriteria {
11572
+ constructor(displayText) {
11573
+ this.displayText = displayText;
11574
+ }
11575
+ }
11576
+ blocks.RubricCriteria = RubricCriteria;
11577
+ class BlockCheckCriteria extends RubricCriteria {
11578
+ constructor(displayText, blockRequirements) {
11579
+ super(displayText);
11580
+ this.blockRequirements = blockRequirements;
11581
+ }
11582
+ }
11583
+ class CommentCriteria extends RubricCriteria {
11584
+ constructor(displayText, count) {
11585
+ super(displayText);
11586
+ this.count = count;
11587
+ }
11588
+ }
11589
+ })(blocks = pxt.blocks || (pxt.blocks = {}));
11590
+ })(pxt || (pxt = {}));
11591
+ var pxt;
11525
11592
  (function (pxt) {
11526
11593
  var blocks;
11527
11594
  (function (blocks) {
@@ -392,6 +392,32 @@ declare namespace pxt.blocks {
392
392
  declare namespace pxt.blocks {
393
393
  function initMathRoundBlock(): void;
394
394
  }
395
+ declare namespace pxt.blocks {
396
+ class Rubric {
397
+ criteria: RubricCriteria[];
398
+ constructor(criteria: RubricCriteria[]);
399
+ }
400
+ function parseRubric(rubric: string): Rubric;
401
+ }
402
+ declare namespace pxt.blocks {
403
+ interface BlockSet {
404
+ blocks: string[];
405
+ count: number;
406
+ }
407
+ export interface CriteriaData {
408
+ criteriaId: string;
409
+ displayText: string;
410
+ blockRequirements?: BlockSet[];
411
+ count?: number;
412
+ }
413
+ export function getCriteria(data: CriteriaData): RubricCriteria;
414
+ export abstract class RubricCriteria {
415
+ displayText: string;
416
+ abstract criteriaId: string;
417
+ constructor(displayText: string);
418
+ }
419
+ export {};
420
+ }
395
421
  declare namespace pxt.blocks {
396
422
  function validateBlocksExist({ usedBlocks, requiredBlockCounts }: {
397
423
  usedBlocks: Blockly.Block[];
@@ -7960,6 +7960,73 @@ var pxt;
7960
7960
  })(blocks = pxt.blocks || (pxt.blocks = {}));
7961
7961
  })(pxt || (pxt = {}));
7962
7962
  var pxt;
7963
+ (function (pxt) {
7964
+ var blocks;
7965
+ (function (blocks) {
7966
+ class Rubric {
7967
+ constructor(criteria) {
7968
+ this.criteria = criteria;
7969
+ }
7970
+ }
7971
+ blocks.Rubric = Rubric;
7972
+ function parseRubric(rubric) {
7973
+ let rubricObj;
7974
+ try {
7975
+ rubricObj = JSON.parse(rubric);
7976
+ }
7977
+ catch (e) {
7978
+ console.error(`Error parsing rubric! ${e}`);
7979
+ return null;
7980
+ }
7981
+ if (!rubricObj.criteria) {
7982
+ console.error(`No criteria found in rubric`);
7983
+ return null;
7984
+ }
7985
+ const criteria = rubricObj.criteria.map((c) => {
7986
+ return blocks.getCriteria(c);
7987
+ }).filter((r) => !!r);
7988
+ return new Rubric(criteria);
7989
+ }
7990
+ blocks.parseRubric = parseRubric;
7991
+ })(blocks = pxt.blocks || (pxt.blocks = {}));
7992
+ })(pxt || (pxt = {}));
7993
+ var pxt;
7994
+ (function (pxt) {
7995
+ var blocks;
7996
+ (function (blocks) {
7997
+ function getCriteria(data) {
7998
+ switch (data.criteriaId) {
7999
+ case "blockCheck":
8000
+ return new BlockCheckCriteria(data.displayText, data.blockRequirements);
8001
+ case "comment":
8002
+ return new CommentCriteria(data.displayText, data.count);
8003
+ default:
8004
+ console.error(`Unrecognized criteriaId: ${data.criteriaId}`);
8005
+ return null;
8006
+ }
8007
+ }
8008
+ blocks.getCriteria = getCriteria;
8009
+ class RubricCriteria {
8010
+ constructor(displayText) {
8011
+ this.displayText = displayText;
8012
+ }
8013
+ }
8014
+ blocks.RubricCriteria = RubricCriteria;
8015
+ class BlockCheckCriteria extends RubricCriteria {
8016
+ constructor(displayText, blockRequirements) {
8017
+ super(displayText);
8018
+ this.blockRequirements = blockRequirements;
8019
+ }
8020
+ }
8021
+ class CommentCriteria extends RubricCriteria {
8022
+ constructor(displayText, count) {
8023
+ super(displayText);
8024
+ this.count = count;
8025
+ }
8026
+ }
8027
+ })(blocks = pxt.blocks || (pxt.blocks = {}));
8028
+ })(pxt || (pxt = {}));
8029
+ var pxt;
7963
8030
  (function (pxt) {
7964
8031
  var blocks;
7965
8032
  (function (blocks) {
@@ -613,10 +613,10 @@ var pxt;
613
613
  (function (pxt) {
614
614
  var workspace;
615
615
  (function (workspace) {
616
- // 5 minutes
617
- const DIFF_HISTORY_INTERVAL = 1000 * 60 * 5;
618
- // 15 minutes
619
- const SNAPSHOT_HISTORY_INTERVAL = 1000 * 60 * 15;
616
+ // 5 minutes. This is overridden in pxtarget.json
617
+ const DEFAULT_DIFF_HISTORY_INTERVAL = 1000 * 60 * 5;
618
+ // 15 minutes. This is overridden in pxtarget.json
619
+ const DEFAULT_SNAPSHOT_HISTORY_INTERVAL = 1000 * 60 * 15;
620
620
  const ONE_DAY = 1000 * 60 * 60 * 24;
621
621
  function collapseHistory(history, text, options, diff, patch) {
622
622
  var _a, _b;
@@ -863,7 +863,7 @@ var pxt;
863
863
  if (history.entries.length > 1) {
864
864
  const topTime = history.entries[history.entries.length - 1].timestamp;
865
865
  const prevTime = history.entries[history.entries.length - 2].timestamp;
866
- if (currentTime - topTime < DIFF_HISTORY_INTERVAL && topTime - prevTime < DIFF_HISTORY_INTERVAL) {
866
+ if (currentTime - topTime < diffInterval() && topTime - prevTime < diffInterval()) {
867
867
  shouldCombine = true;
868
868
  }
869
869
  }
@@ -887,7 +887,7 @@ var pxt;
887
887
  if (history.snapshots.length == 0) {
888
888
  history.snapshots.push(takeSnapshot(previousText, currentTime - 1));
889
889
  }
890
- else if (currentTime - history.snapshots[history.snapshots.length - 1].timestamp >= SNAPSHOT_HISTORY_INTERVAL) {
890
+ else if (currentTime - history.snapshots[history.snapshots.length - 1].timestamp >= snapshotInterval()) {
891
891
  history.snapshots.push(takeSnapshot(previousText, currentTime));
892
892
  const trimmed = [];
893
893
  let currentDay = Math.floor(currentTime / ONE_DAY) * ONE_DAY;
@@ -965,6 +965,20 @@ var pxt;
965
965
  }
966
966
  return true;
967
967
  }
968
+ function diffInterval() {
969
+ var _a, _b;
970
+ if (((_b = (_a = pxt.appTarget) === null || _a === void 0 ? void 0 : _a.appTheme) === null || _b === void 0 ? void 0 : _b.timeMachineDiffInterval) != undefined) {
971
+ return pxt.appTarget.appTheme.timeMachineDiffInterval;
972
+ }
973
+ return DEFAULT_DIFF_HISTORY_INTERVAL;
974
+ }
975
+ function snapshotInterval() {
976
+ var _a, _b;
977
+ if (((_b = (_a = pxt.appTarget) === null || _a === void 0 ? void 0 : _a.appTheme) === null || _b === void 0 ? void 0 : _b.timeMachineSnapshotInterval) != undefined) {
978
+ return pxt.appTarget.appTheme.timeMachineSnapshotInterval;
979
+ }
980
+ return DEFAULT_SNAPSHOT_HISTORY_INTERVAL;
981
+ }
968
982
  })(workspace = pxt.workspace || (pxt.workspace = {}));
969
983
  })(pxt || (pxt = {}));
970
984
  /// <reference path="../localtypings/monaco.d.ts" />
package/built/pxtlib.d.ts CHANGED
@@ -22,6 +22,7 @@ declare namespace pxt.analytics {
22
22
  let consoleTicks: ConsoleTickOptions;
23
23
  function addDefaultProperties(props: Map<string | number>): void;
24
24
  function enable(lang: string): void;
25
+ function trackPerformanceReport(): void;
25
26
  }
26
27
  declare namespace pxt {
27
28
  let appTarget: TargetBundle;
@@ -484,7 +485,14 @@ declare namespace ts.pxtc.jsonPatch.tests {
484
485
  }
485
486
  declare namespace pxt.perf {
486
487
  let perfReportLogged: boolean;
487
- function report(): void;
488
+ function report(): {
489
+ milestones: {
490
+ [index: string]: number;
491
+ };
492
+ durations: {
493
+ [index: string]: number;
494
+ };
495
+ } | undefined;
488
496
  function recordMilestone(msg: string, time?: number): void;
489
497
  function measureStart(name: string): void;
490
498
  function measureEnd(name: string): void;
@@ -816,6 +824,17 @@ declare namespace pxt.BrowserUtils {
816
824
  setAsync(storeName: string, data: any): Promise<void>;
817
825
  deleteAsync(storeName: string, id: string): Promise<void>;
818
826
  deleteAllAsync(storeName: string): Promise<void>;
827
+ getObjectStoreWrapper<T>(storeName: string): IDBObjectStoreWrapper<T>;
828
+ }
829
+ export class IDBObjectStoreWrapper<T> {
830
+ protected db: IDBWrapper;
831
+ protected storeName: string;
832
+ constructor(db: IDBWrapper, storeName: string);
833
+ getAsync(id: string): Promise<T>;
834
+ getAllAsync(): Promise<T[]>;
835
+ setAsync(data: T): Promise<void>;
836
+ deleteAsync(id: string): Promise<void>;
837
+ deleteAllAsync(): Promise<void>;
819
838
  }
820
839
  export function translationDbAsync(): Promise<ITranslationDb>;
821
840
  export function clearTranslationDbAsync(): Promise<void>;
@@ -3689,6 +3708,17 @@ declare namespace pxt.Cloud {
3689
3708
  thumb?: boolean;
3690
3709
  persistId?: string;
3691
3710
  }
3711
+ interface JsonText {
3712
+ "Readme.md"?: string;
3713
+ "assets.json"?: string;
3714
+ "images.g.jres"?: string;
3715
+ "images.g.ts"?: string;
3716
+ "main.blocks"?: string;
3717
+ "main.ts"?: string;
3718
+ "pxt.json"?: string;
3719
+ "tilemap.g.jres"?: string;
3720
+ "tilemap.g.ts"?: string;
3721
+ }
3692
3722
  }
3693
3723
  declare namespace ts.pxtc {
3694
3724
  function f4EncodeImg(w: number, h: number, bpp: number, getPix: (x: number, y: number) => number): string;
package/built/pxtlib.js CHANGED
@@ -95,6 +95,17 @@ var pxt;
95
95
  };
96
96
  }
97
97
  analytics.enable = enable;
98
+ function trackPerformanceReport() {
99
+ if (pxt.perf.perfReportLogged)
100
+ return;
101
+ const data = pxt.perf.report();
102
+ if (data) {
103
+ const { durations, milestones } = data;
104
+ pxt.tickEvent("performance.milestones", milestones);
105
+ pxt.tickEvent("performance.durations", durations);
106
+ }
107
+ }
108
+ analytics.trackPerformanceReport = trackPerformanceReport;
98
109
  })(analytics = pxt.analytics || (pxt.analytics = {}));
99
110
  })(pxt || (pxt = {}));
100
111
  var pxt;
@@ -3485,7 +3496,7 @@ var pxt;
3485
3496
  // Sometimes these aren't initialized, for example in tests. We only care about them
3486
3497
  // doing anything in the browser.
3487
3498
  if (!pxt.perf.report)
3488
- pxt.perf.report = () => { };
3499
+ pxt.perf.report = () => undefined;
3489
3500
  if (!pxt.perf.recordMilestone)
3490
3501
  pxt.perf.recordMilestone = () => { };
3491
3502
  if (!pxt.perf.measureStart)
@@ -4233,26 +4244,26 @@ var pxt;
4233
4244
  },
4234
4245
  'math_number': {
4235
4246
  name: pxt.Util.lf("{id:block}number"),
4236
- url: '/blocks/math/random',
4247
+ url: '/types/number',
4237
4248
  category: 'math',
4238
4249
  tooltip: (pxt.appTarget && pxt.appTarget.compile) ?
4239
4250
  pxt.Util.lf("a decimal number") : pxt.Util.lf("an integer number")
4240
4251
  },
4241
4252
  'math_integer': {
4242
4253
  name: pxt.Util.lf("{id:block}number"),
4243
- url: '/blocks/math/random',
4254
+ url: '/types/number',
4244
4255
  category: 'math',
4245
4256
  tooltip: pxt.Util.lf("an integer number")
4246
4257
  },
4247
4258
  'math_whole_number': {
4248
4259
  name: pxt.Util.lf("{id:block}number"),
4249
- url: '/blocks/math/random',
4260
+ url: '/types/number',
4250
4261
  category: 'math',
4251
4262
  tooltip: pxt.Util.lf("a whole number")
4252
4263
  },
4253
4264
  'math_number_minmax': {
4254
4265
  name: pxt.Util.lf("{id:block}number"),
4255
- url: '/blocks/math/random',
4266
+ url: '/blocks/math',
4256
4267
  category: 'math'
4257
4268
  },
4258
4269
  'math_arithmetic': {
@@ -5554,8 +5565,33 @@ var pxt;
5554
5565
  request.onerror = () => this.errorHandler(request.error, "deleteAll", reject);
5555
5566
  });
5556
5567
  }
5568
+ getObjectStoreWrapper(storeName) {
5569
+ return new IDBObjectStoreWrapper(this, storeName);
5570
+ }
5557
5571
  }
5558
5572
  BrowserUtils.IDBWrapper = IDBWrapper;
5573
+ class IDBObjectStoreWrapper {
5574
+ constructor(db, storeName) {
5575
+ this.db = db;
5576
+ this.storeName = storeName;
5577
+ }
5578
+ getAsync(id) {
5579
+ return this.db.getAsync(this.storeName, id);
5580
+ }
5581
+ getAllAsync() {
5582
+ return this.db.getAllAsync(this.storeName);
5583
+ }
5584
+ setAsync(data) {
5585
+ return this.db.setAsync(this.storeName, data);
5586
+ }
5587
+ async deleteAsync(id) {
5588
+ await this.db.deleteAsync(this.storeName, id);
5589
+ }
5590
+ async deleteAllAsync() {
5591
+ await this.db.deleteAllAsync(this.storeName);
5592
+ }
5593
+ }
5594
+ BrowserUtils.IDBObjectStoreWrapper = IDBObjectStoreWrapper;
5559
5595
  class IndexedDbTranslationDb {
5560
5596
  constructor(db) {
5561
5597
  this.db = db;
package/built/pxtsim.js CHANGED
@@ -6426,6 +6426,7 @@ var pxsim;
6426
6426
  return wrapper;
6427
6427
  }
6428
6428
  preload(aspectRatio, clearRuntime) {
6429
+ this.addEventListeners();
6429
6430
  if (clearRuntime) {
6430
6431
  this._currentRuntime = undefined;
6431
6432
  this.container.textContent = "";
package/built/server.js CHANGED
@@ -25,7 +25,7 @@ let serveOptions;
25
25
  const webappNames = [
26
26
  "kiosk",
27
27
  "multiplayer",
28
- "teachertool"
28
+ "eval"
29
29
  // TODO: Add other webapp names here: "skillmap", "authcode"
30
30
  ];
31
31
  function setupDocfilesdirs() {