This repo contains code to mirror other repos. It also contains the code that is getting mirrored.
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 

106 řádky
2.6 KiB

  1. class app {
  2. constructor(modules, invocation){
  3. languagePluginLoader.then(() => {
  4. // If you don't require for pre-loaded Python packages, remove this promise below.
  5. window.pyodide.runPythonAsync("import setuptools, micropip").then(()=>{
  6. window.pyodide.runPythonAsync("micropip.install('lark-parser')").then(()=>{
  7. this.fetchSources(modules).then(() => {
  8. window.pyodide.runPythonAsync("import " + Object.keys(modules).join("\nimport ") + "\n" + invocation + "\n").then(() => this.initializingComplete());
  9. });
  10. });
  11. });
  12. });
  13. }
  14. loadSources(module, baseURL, files) {
  15. let promises = [];
  16. for (let f in files) {
  17. promises.push(
  18. new Promise((resolve, reject) => {
  19. let file = files[f];
  20. let url = (baseURL ? baseURL + "/" : "") + file;
  21. fetch(url, {}).then((response) => {
  22. if (response.status === 200)
  23. return response.text().then((code) => {
  24. let path = ("/lib/python3.7/site-packages/" + module + "/" + file).split("/");
  25. let lookup = "";
  26. for (let i in path) {
  27. if (!path[i]) {
  28. continue;
  29. }
  30. lookup += (lookup ? "/" : "") + path[i];
  31. if (parseInt(i) === path.length - 1) {
  32. window.pyodide._module.FS.writeFile(lookup, code);
  33. console.debug(`fetched ${lookup}`);
  34. } else {
  35. try {
  36. window.pyodide._module.FS.lookupPath(lookup);
  37. } catch {
  38. window.pyodide._module.FS.mkdir(lookup);
  39. console.debug(`created ${lookup}`);
  40. }
  41. }
  42. }
  43. resolve();
  44. });
  45. else
  46. reject();
  47. });
  48. })
  49. );
  50. }
  51. return Promise.all(promises);
  52. }
  53. fetchSources(modules) {
  54. let promises = [];
  55. for( let module of Object.keys(modules) )
  56. {
  57. promises.push(
  58. new Promise((resolve, reject) => {
  59. fetch(`${modules[module]}/files.json`, {}).then((response) => {
  60. if (response.status === 200) {
  61. response.text().then((list) => {
  62. let files = JSON.parse(list);
  63. this.loadSources(module, modules[module], files).then(() => {
  64. resolve();
  65. })
  66. })
  67. } else {
  68. reject();
  69. }
  70. })
  71. }));
  72. }
  73. return Promise.all(promises).then(() => {
  74. for( let module of Object.keys(modules) ) {
  75. window.pyodide.loadedPackages[module] = "default channel";
  76. }
  77. window.pyodide.runPython(
  78. 'import importlib as _importlib\n' +
  79. '_importlib.invalidate_caches()\n'
  80. );
  81. });
  82. }
  83. initializingComplete() {
  84. document.body.classList.remove("is-loading")
  85. }
  86. }
  87. (function () {
  88. window.top.app = new app({"app": "app"}, "import app.app; app.app.start()");
  89. })();