publish_npm.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. const { exec } = require("child_process");
  2. const fs = require("fs");
  3. const path = require("path");
  4. // TODO if someone is brave enough to make all of this readable please do
  5. function addBuffer(dir) {
  6. fs.readdirSync(dir).forEach((file) => {
  7. let fullPath = path.join(dir, file);
  8. if (fs.lstatSync(fullPath).isDirectory()) {
  9. addBuffer(fullPath);
  10. } else {
  11. if (
  12. (fullPath.endsWith(".ts") || fullPath.endsWith(".js")) &&
  13. (!fullPath.endsWith(".d.ts") || fullPath.endsWith("api.d.ts"))
  14. ) {
  15. const tsFile = fs.readFileSync(fullPath, "utf8");
  16. if (tsFile.includes("Buffer")) {
  17. const newTsFile = 'import { Buffer } from "buffer/";\n' + tsFile;
  18. fs.writeFileSync(fullPath, newTsFile, "utf8");
  19. }
  20. }
  21. }
  22. });
  23. }
  24. function renameFiles(dir, action) {
  25. fs.readdirSync(dir).forEach((file) => {
  26. let fullPath = path.join(dir, file);
  27. if (fs.lstatSync(fullPath).isDirectory()) {
  28. renameFiles(fullPath, action);
  29. } else {
  30. if (fullPath.includes("example")) {
  31. fs.unlinkSync(fullPath);
  32. }
  33. if (fullPath.includes("-BROWSER")) {
  34. console.log(action, fullPath);
  35. if (action === "rename") {
  36. fs.renameSync(fullPath, fullPath.replace("-BROWSER", ""));
  37. } else if (action === "delete") {
  38. fs.unlinkSync(fullPath);
  39. }
  40. }
  41. }
  42. });
  43. }
  44. function copyFolderSync(from, to) {
  45. fs.mkdirSync(to);
  46. fs.readdirSync(from).forEach((element) => {
  47. if (fs.lstatSync(path.join(from, element)).isFile()) {
  48. fs.copyFileSync(path.join(from, element), path.join(to, element));
  49. } else {
  50. copyFolderSync(path.join(from, element), path.join(to, element));
  51. }
  52. });
  53. }
  54. fs.rmSync("browser", { recursive: true, force: true });
  55. fs.rmSync("tempBrowser", { recursive: true, force: true });
  56. copyFolderSync("gramjs", "tempBrowser");
  57. addBuffer("tempBrowser");
  58. // easier that writing two files smh
  59. const tsconfig = fs.readFileSync("tsconfig.json", "utf8");
  60. let newTsconfig = tsconfig.replace(/\.\/dist/g, "./browser");
  61. newTsconfig = newTsconfig.replace(/gramjs/g, "tempBrowser");
  62. fs.writeFileSync("tsconfig.json", newTsconfig, "utf8");
  63. const packageJSON = JSON.parse(fs.readFileSync("package.json", "utf8"));
  64. const oldValueStorage = packageJSON.dependencies["node-localstorage"];
  65. const oldValueSocks = packageJSON.dependencies["socks"];
  66. delete packageJSON.dependencies["node-localstorage"];
  67. delete packageJSON.dependencies["socks"];
  68. const oldVersion = packageJSON.version.split(".");
  69. +oldVersion[2]++;
  70. packageJSON.version = oldVersion.join(".");
  71. fs.writeFileSync(
  72. "package.json",
  73. JSON.stringify(packageJSON, null, " "),
  74. "utf8"
  75. );
  76. const npmi = exec("npm i");
  77. npmi.on("close", (code) => {
  78. if (code !== 0) {
  79. throw new Error("Error happened " + code);
  80. }
  81. const tsc = exec("tsc");
  82. tsc.on("close", (code) => {
  83. if (code !== 0) {
  84. throw new Error("Error happened " + code);
  85. }
  86. fs.copyFileSync("package.json", "browser/package.json");
  87. fs.copyFileSync("README.md", "browser/README.md");
  88. fs.copyFileSync("LICENSE", "browser/LICENSE");
  89. fs.copyFileSync("gramjs/tl/api.d.ts", "browser/tl/api.d.ts");
  90. fs.copyFileSync("gramjs/define.d.ts", "browser/define.d.ts");
  91. renameFiles("browser", "rename");
  92. const npm_publish = exec("npm publish --tag browser", { cwd: "browser" });
  93. npm_publish.stdout.on("data", function (data) {
  94. console.log(data.toString());
  95. });
  96. npm_publish.stderr.on("data", function (data) {
  97. console.error(data.toString());
  98. });
  99. npm_publish.on("close", (code) => {
  100. if (code === 0) {
  101. console.log("=====================================");
  102. console.log("FINISHED UPLOADING BROWSER VERSION");
  103. console.log("=====================================");
  104. } else {
  105. throw new Error("something went wrong");
  106. }
  107. });
  108. fs.rmSync("tempBrowser", { recursive: true, force: true });
  109. fs.rmSync("dist", { recursive: true, force: true });
  110. // easier that writing two files smh
  111. const tsconfig = fs.readFileSync("tsconfig.json", "utf8");
  112. let newTsconfig = tsconfig.replace(/\.\/browser/g, "./dist");
  113. newTsconfig = newTsconfig.replace(/tempBrowser/g, "gramjs");
  114. fs.writeFileSync("tsconfig.json", newTsconfig, "utf8");
  115. const packageJSON = JSON.parse(fs.readFileSync("package.json", "utf8"));
  116. packageJSON.dependencies["node-localstorage"] = oldValueStorage;
  117. packageJSON.dependencies["socks"] = oldValueSocks;
  118. const oldVersion = packageJSON.version.split(".");
  119. +oldVersion[2]++;
  120. packageJSON.version = oldVersion.join(".");
  121. fs.writeFileSync(
  122. "package.json",
  123. JSON.stringify(packageJSON, null, " "),
  124. "utf8"
  125. );
  126. const tsc = exec("tsc");
  127. tsc.on("close", (code) => {
  128. if (code === 0) {
  129. fs.copyFileSync("package.json", "dist/package.json");
  130. fs.copyFileSync("README.md", "dist/README.md");
  131. fs.copyFileSync("LICENSE", "dist/LICENSE");
  132. fs.copyFileSync("gramjs/tl/api.d.ts", "dist/tl/api.d.ts");
  133. fs.copyFileSync("gramjs/define.d.ts", "dist/define.d.ts");
  134. renameFiles("dist", "delete");
  135. /*const npm_publish = exec("npm publish", { cwd: "dist" });
  136. npm_publish.stdout.on("data", function (data) {
  137. console.log(data.toString());
  138. });
  139. npm_publish.stderr.on("data", function (data) {
  140. console.error(data.toString());
  141. });
  142. npm_publish.on("close", (code) => {
  143. if (code === 0) {
  144. console.log("=====================================");
  145. console.log("FINISHED UPLOADING NODE VERSION");
  146. console.log("=====================================");
  147. } else {
  148. throw new Error("something went wrong");
  149. }
  150. });*/
  151. } else {
  152. console.log(code);
  153. throw new Error("Error happened");
  154. }
  155. });
  156. });
  157. });