publish_npm.js 6.7 KB

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