publish_npm.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  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. fs.writeFileSync(
  74. "package.json",
  75. JSON.stringify(packageJSON, null, " "),
  76. "utf8"
  77. );
  78. renameFiles("tempBrowser", "rename");
  79. const npmi = exec("npm i");
  80. npmi.on("close", (code) => {
  81. if (code !== 0) {
  82. throw new Error("Error happened " + code);
  83. }
  84. const tsc = exec("tsc");
  85. tsc.stdout.on("data", function (data) {
  86. console.log("stdout: " + data.toString());
  87. });
  88. tsc.stderr.on("data", function (data) {
  89. console.error("stderr: " + data.toString());
  90. });
  91. tsc.on("close", (code) => {
  92. if (code !== 0) {
  93. throw new Error("Error happened " + code);
  94. }
  95. fs.copyFileSync("package.json", "browser/package.json");
  96. fs.copyFileSync("README.md", "browser/README.md");
  97. fs.copyFileSync("LICENSE", "browser/LICENSE");
  98. fs.copyFileSync("gramjs/tl/api.d.ts", "browser/tl/api.d.ts");
  99. fs.copyFileSync("gramjs/define.d.ts", "browser/define.d.ts");
  100. const npm_publish = exec("npm publish --tag browser", { cwd: "browser" });
  101. npm_publish.stdout.on("data", function (data) {
  102. console.log(data.toString());
  103. });
  104. npm_publish.stderr.on("data", function (data) {
  105. console.error(data.toString());
  106. });
  107. npm_publish.on("close", (code) => {
  108. if (code === 0) {
  109. console.log("=====================================");
  110. console.log("FINISHED UPLOADING BROWSER VERSION");
  111. console.log("=====================================");
  112. } else {
  113. throw new Error("something went wrong");
  114. }
  115. });
  116. fs.rmSync("tempBrowser", { recursive: true, force: true });
  117. fs.rmSync("dist", { recursive: true, force: true });
  118. // easier that writing two files smh
  119. const tsconfig = fs.readFileSync("tsconfig.json", "utf8");
  120. let newTsconfig = tsconfig.replace(/\.\/browser/g, "./dist");
  121. newTsconfig = newTsconfig.replace(/tempBrowser/g, "gramjs");
  122. fs.writeFileSync("tsconfig.json", newTsconfig, "utf8");
  123. const packageJSON = JSON.parse(fs.readFileSync("package.json", "utf8"));
  124. packageJSON.dependencies["node-localstorage"] = oldValueStorage;
  125. packageJSON.dependencies["socks"] = oldValueSocks;
  126. const oldVersion = packageJSON.version.split(".");
  127. +oldVersion[2]++;
  128. packageJSON.version = oldVersion.join(".");
  129. fs.writeFileSync(
  130. "package.json",
  131. JSON.stringify(packageJSON, null, " "),
  132. "utf8"
  133. );
  134. const npmi = exec("npm i");
  135. npmi.on("close", (code) => {
  136. if (code !== 0) {
  137. throw new Error("Error happened " + code);
  138. }
  139. const tsc = exec("tsc");
  140. tsc.on("close", (code) => {
  141. if (code === 0) {
  142. fs.copyFileSync("package.json", "dist/package.json");
  143. fs.copyFileSync("README.md", "dist/README.md");
  144. fs.copyFileSync("LICENSE", "dist/LICENSE");
  145. fs.copyFileSync("gramjs/tl/api.d.ts", "dist/tl/api.d.ts");
  146. fs.copyFileSync("gramjs/define.d.ts", "dist/define.d.ts");
  147. renameFiles("dist", "delete");
  148. const npm_publish = exec("npm publish", { cwd: "dist" });
  149. npm_publish.stdout.on("data", function (data) {
  150. console.log(data.toString());
  151. });
  152. npm_publish.stderr.on("data", function (data) {
  153. console.error(data.toString());
  154. });
  155. npm_publish.on("close", (code) => {
  156. if (code === 0) {
  157. console.log("=====================================");
  158. console.log("FINISHED UPLOADING NODE VERSION");
  159. console.log("=====================================");
  160. } else {
  161. throw new Error("something went wrong");
  162. }
  163. });
  164. } else {
  165. console.log(code);
  166. throw new Error("Error happened");
  167. }
  168. });
  169. });
  170. });
  171. });