@capytale/activity.js 3.1.25 → 3.1.26

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.
@@ -1,3 +1,14 @@
1
+ type IframeUrlMap = {
2
+ create: string;
3
+ review: string;
4
+ assignment: string;
5
+ view: string;
6
+ };
7
+ type ContractParameters = {
8
+ variant?: string;
9
+ backend?: 'db' | 'fs';
10
+ [p: string]: number | boolean | string | undefined;
11
+ };
1
12
  export type ActivityType = {
2
13
  id: string;
3
14
  name: string;
@@ -27,6 +38,11 @@ export type ActivityType = {
27
38
  exportable: boolean;
28
39
  /** Si ce type d'activité est compatible lti. (`null` signifie ne sera jamais compatible) */
29
40
  lti: boolean | null;
41
+ /** L'url de l'iFrame */
42
+ iframe_url: null | string | IframeUrlMap;
43
+ contracts: null | {
44
+ [contract: string]: ContractParameters;
45
+ };
30
46
  };
31
47
  export type ActivityGroup = {
32
48
  title: string;
@@ -50,3 +66,4 @@ export type ActivityWeights = {
50
66
  };
51
67
  groups: ActivityGroups;
52
68
  };
69
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"activityType.js","sourceRoot":"","sources":["../../src/activity/activityType/activityType.ts"],"names":[],"mappings":"","sourcesContent":["export type ActivityType = {\n id: string;\n name: string;\n status?: { beta?: boolean };\n icon: {\n path: string;\n style?: { [s: string]: string };\n };\n helpUrl: string;\n summary: string;\n description: string;\n tags?: string;\n bundle: string;\n /** Si ce type d'activité est disponible pour l'utilisateur courant. */\n available: boolean;\n /** Indique que ce type d'activité est remplacé. */\n replacedBy?: string | null;\n /** Ce type d'activité devrait être filtré en même temps que celui indiqué. */\n filterWith?: string | null;\n /** Si ce type d'activité produit des évaluations détaillées. */\n detailedEvaluation: boolean;\n /** Si ce type d'activité est exportable. */\n exportable: boolean;\n /** Si ce type d'activité est compatible lti. (`null` signifie ne sera jamais compatible) */\n lti: boolean | null;\n}\n\nexport type ActivityGroup = {\n title: string;\n tooltip?: string;\n activities: string[];\n};\n\nexport type ActivityGroups = {\n [key: string]: ActivityGroup;\n};\n\nexport type ActivityWeights = {\n all: { [key: string]: number };\n niveaux: {\n [key: string]: {\n title: string;\n activities: { [key: string]: number }\n }\n };\n groups: ActivityGroups;\n};\n"]}
1
+ {"version":3,"file":"activityType.js","sourceRoot":"","sources":["../../src/activity/activityType/activityType.ts"],"names":[],"mappings":"","sourcesContent":["import type { ActivityMode } from \"~/activitySession\";\n\ntype IframeUrlMap = {\n create: string;\n review: string;\n assignment: string;\n view: string;\n}\n\ntype ContractParameters = {\n variant?: string;\n backend?: 'db' | 'fs';\n [p: string] : number | boolean | string | undefined;\n}\n\nexport type ActivityType = {\n id: string;\n name: string;\n status?: { beta?: boolean };\n icon: {\n path: string;\n style?: { [s: string]: string };\n };\n helpUrl: string;\n summary: string;\n description: string;\n tags?: string;\n bundle: string;\n /** Si ce type d'activité est disponible pour l'utilisateur courant. */\n available: boolean;\n /** Indique que ce type d'activité est remplacé. */\n replacedBy?: string | null;\n /** Ce type d'activité devrait être filtré en même temps que celui indiqué. */\n filterWith?: string | null;\n /** Si ce type d'activité produit des évaluations détaillées. */\n detailedEvaluation: boolean;\n /** Si ce type d'activité est exportable. */\n exportable: boolean;\n /** Si ce type d'activité est compatible lti. (`null` signifie ne sera jamais compatible) */\n lti: boolean | null;\n /** L'url de l'iFrame */\n \n iframe_url: null | string | IframeUrlMap;\n contracts: null | {\n [contract: string]: ContractParameters;\n }\n}\n\nexport type ActivityGroup = {\n title: string;\n tooltip?: string;\n activities: string[];\n};\n\nexport type ActivityGroups = {\n [key: string]: ActivityGroup;\n};\n\nexport type ActivityWeights = {\n all: { [key: string]: number };\n niveaux: {\n [key: string]: {\n title: string;\n activities: { [key: string]: number }\n }\n };\n groups: ActivityGroups;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capytale/activity.js",
3
- "version": "3.1.25",
3
+ "version": "3.1.26",
4
4
  "author": "Capytale.fr",
5
5
  "license": "GPL-3.0-or-later",
6
6
  "bin": {
package/util/iterator.js CHANGED
@@ -22,27 +22,43 @@ export default function (params, fetcher) {
22
22
  more = false;
23
23
  return;
24
24
  }
25
+ nextParam = value;
25
26
  try {
26
- nextParam = value;
27
- nextPromise = fetcher(nextParam);
27
+ const np = fetcher(nextParam);
28
+ if (np instanceof Promise) {
29
+ nextPromise = np;
30
+ }
31
+ else {
32
+ nextPromise = Promise.resolve(np);
33
+ }
28
34
  }
29
35
  catch (e) {
30
36
  nextPromise = Promise.reject(e);
31
- // on ajoute un catch pour éviter UnhandledPromiseRejection
32
- nextPromise.catch(noop);
33
37
  }
38
+ // on ajoute un catch pour éviter UnhandledPromiseRejection
39
+ nextPromise.catch(noop);
34
40
  more = true;
35
41
  }
36
42
  prepareNext();
37
43
  while (more) {
38
- if (nextPromise == null)
39
- throw new Error('Problème d\'itération: la boucle doit attendre une promesse avant de réclamer la suivante.');
44
+ more = false;
40
45
  const paramToYield = nextParam;
41
- const promiseToYield = nextPromise.then(v => { prepareNext(); return v; }, r => { prepareNext(); throw r; });
46
+ nextParam = null;
47
+ let prepared = false;
48
+ const promiseToYield = nextPromise.finally(() => {
49
+ if (!prepared) {
50
+ prepared = true;
51
+ prepareNext();
52
+ }
53
+ });
54
+ nextPromise = null;
42
55
  // on ajoute un catch pour éviter UnhandledPromiseRejection
43
56
  promiseToYield.catch(noop);
44
- nextPromise = null;
45
57
  yield [paramToYield, promiseToYield];
58
+ if (!prepared) {
59
+ prepared = true;
60
+ prepareNext();
61
+ }
46
62
  }
47
63
  })();
48
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"iterator.js","sourceRoot":"","sources":["../src/util/iterator.ts"],"names":[],"mappings":"AAAA,SAAS,IAAI,KAAK,CAAC;AAEnB;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,WACV,MAAmB,EAAE,OAAiC;IACtD,OAAO,CAAC,QAAQ,CAAC;QACb,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,IAAI,SAAS,GAAa,IAAI,CAAC;QAC/B,IAAI,WAAW,GAAsB,IAAI,CAAC;QAC1C,IAAI,IAAI,GAAY,KAAK,CAAC;QAC1B,SAAS,WAAW;YAChB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,IAAI,EAAE,CAAC;gBACP,SAAS,GAAG,IAAI,CAAC;gBACjB,WAAW,GAAG,IAAI,CAAC;gBACnB,IAAI,GAAG,KAAK,CAAC;gBACb,OAAO;YACX,CAAC;YACD,IAAI,CAAC;gBACD,SAAS,GAAG,KAAK,CAAC;gBAClB,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAChC,2DAA2D;gBAC3D,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YACD,IAAI,GAAG,IAAI,CAAC;QAChB,CAAC;QACD,WAAW,EAAE,CAAC;QACd,OAAO,IAAI,EAAE,CAAC;YACV,IAAI,WAAW,IAAI,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAC;YACvI,MAAM,YAAY,GAAG,SAAc,CAAC;YACpC,MAAM,cAAc,GAAI,WAA0B,CAAC,IAAI,CACnD,CAAC,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EACjC,CAAC,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CACnC,CAAC;YACF,2DAA2D;YAC3D,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,WAAW,GAAG,IAAI,CAAC;YACnB,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QACzC,CAAC;IACL,CAAC,CAAC,EAAE,CAAC;AACT,CAAC","sourcesContent":["function noop() { }\n\n/**\n * Fournit un itérateur qui produit des promesses d'objets de type `T`\n * Les promesses sont produites par la fonction `fetcher` qui prend un paramètre de type `P`\n * Chaque nouvelle promesse est demandée à `fetcher` dès que précédente est résolue.\n * \n * @param params un iterable des paramètres à passer à `fetcher`\n * @param fetcher une fonction qui prend un paramètre et retourne une promesse d'objet de type `T`\n * @returns un iterable de tuples (param, promesse)\n */\nexport default function <P, T>(\n params: Iterable<P>, fetcher: (param: P) => Promise<T>): Iterable<[P, Promise<T>]> {\n return (function* () {\n const iterator = params[Symbol.iterator]();\n let nextParam: P | null = null;\n let nextPromise: Promise<T> | null = null;\n let more: boolean = false;\n function prepareNext(): void {\n const { done, value } = iterator.next();\n if (done) {\n nextParam = null;\n nextPromise = null;\n more = false;\n return;\n }\n try {\n nextParam = value;\n nextPromise = fetcher(nextParam);\n } catch (e) {\n nextPromise = Promise.reject(e);\n // on ajoute un catch pour éviter UnhandledPromiseRejection\n nextPromise.catch(noop);\n }\n more = true;\n }\n prepareNext();\n while (more) {\n if (nextPromise == null) throw new Error('Problème d\\'itération: la boucle doit attendre une promesse avant de réclamer la suivante.');\n const paramToYield = nextParam as P;\n const promiseToYield = (nextPromise as Promise<T>).then(\n v => { prepareNext(); return v; },\n r => { prepareNext(); throw r; }\n );\n // on ajoute un catch pour éviter UnhandledPromiseRejection\n promiseToYield.catch(noop);\n nextPromise = null;\n yield [paramToYield, promiseToYield];\n }\n })();\n}\n\n"]}
1
+ {"version":3,"file":"iterator.js","sourceRoot":"","sources":["../src/util/iterator.ts"],"names":[],"mappings":"AAAA,SAAS,IAAI,KAAK,CAAC;AAEnB;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,WACV,MAAmB,EAAE,OAAiC;IACtD,OAAO,CAAC,QAAQ,CAAC;QACb,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,IAAI,SAAS,GAAa,IAAI,CAAC;QAC/B,IAAI,WAAW,GAAsB,IAAI,CAAC;QAC1C,IAAI,IAAI,GAAY,KAAK,CAAC;QAC1B,SAAS,WAAW;YAChB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,IAAI,EAAE,CAAC;gBACP,SAAS,GAAG,IAAI,CAAC;gBACjB,WAAW,GAAG,IAAI,CAAC;gBACnB,IAAI,GAAG,KAAK,CAAC;gBACb,OAAO;YACX,CAAC;YACD,SAAS,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC;gBACD,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC9B,IAAI,EAAE,YAAY,OAAO,EAAE,CAAC;oBACxB,WAAW,GAAG,EAAE,CAAC;gBACrB,CAAC;qBAAM,CAAC;oBACJ,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACtC,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpC,CAAC;YACD,2DAA2D;YAC3D,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,GAAG,IAAI,CAAC;QAChB,CAAC;QACD,WAAW,EAAE,CAAC;QACd,OAAO,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,KAAK,CAAC;YACb,MAAM,YAAY,GAAG,SAAc,CAAC;YACpC,SAAS,GAAG,IAAI,CAAC;YACjB,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,MAAM,cAAc,GAAI,WAA2B,CAAC,OAAO,CACvD,GAAG,EAAE;gBACD,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACZ,QAAQ,GAAG,IAAI,CAAC;oBAChB,WAAW,EAAE,CAAC;gBAClB,CAAC;YACL,CAAC,CACJ,CAAC;YACF,WAAW,GAAG,IAAI,CAAC;YACnB,2DAA2D;YAC3D,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,QAAQ,GAAG,IAAI,CAAC;gBAChB,WAAW,EAAE,CAAC;YAClB,CAAC;QACL,CAAC;IACL,CAAC,CAAC,EAAE,CAAC;AACT,CAAC","sourcesContent":["function noop() { }\n\n/**\n * Fournit un itérateur qui produit des promesses d'objets de type `T`\n * Les promesses sont produites par la fonction `fetcher` qui prend un paramètre de type `P`\n * Chaque nouvelle promesse est demandée à `fetcher` dès que précédente est résolue.\n * \n * @param params un iterable des paramètres à passer à `fetcher`\n * @param fetcher une fonction qui prend un paramètre et retourne une promesse d'objet de type `T`\n * @returns un iterable de tuples (param, promesse)\n */\nexport default function <P, T>(\n params: Iterable<P>, fetcher: (param: P) => Promise<T>): Iterable<[P, Promise<T>]> {\n return (function* () {\n const iterator = params[Symbol.iterator]();\n let nextParam: P | null = null;\n let nextPromise: Promise<T> | null = null;\n let more: boolean = false;\n function prepareNext(): void {\n const { done, value } = iterator.next();\n if (done) {\n nextParam = null;\n nextPromise = null;\n more = false;\n return;\n }\n nextParam = value;\n try {\n const np = fetcher(nextParam);\n if (np instanceof Promise) {\n nextPromise = np;\n } else {\n nextPromise = Promise.resolve(np);\n }\n } catch (e) {\n nextPromise = Promise.reject(e);\n }\n // on ajoute un catch pour éviter UnhandledPromiseRejection\n nextPromise.catch(noop);\n more = true;\n }\n prepareNext();\n while (more) {\n more = false;\n const paramToYield = nextParam as P;\n nextParam = null;\n let prepared = false;\n const promiseToYield = (nextPromise! as Promise<T>).finally(\n () => {\n if (!prepared) {\n prepared = true;\n prepareNext();\n }\n }\n );\n nextPromise = null;\n // on ajoute un catch pour éviter UnhandledPromiseRejection\n promiseToYield.catch(noop);\n yield [paramToYield, promiseToYield];\n if (!prepared) {\n prepared = true;\n prepareNext();\n }\n }\n })();\n}\n\n"]}