rangutopia 0.0.1

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.
Files changed (105) hide show
  1. package/.editorconfig +10 -0
  2. package/.gitattributes +4 -0
  3. package/.npmrc +2 -0
  4. package/README.md +4 -0
  5. package/dist/commands/library/build/action.d.ts +4 -0
  6. package/dist/commands/library/build/action.d.ts.map +1 -0
  7. package/dist/commands/library/build/action.js +29 -0
  8. package/dist/commands/library/build/action.js.map +1 -0
  9. package/dist/commands/library/build/mod.d.ts +2 -0
  10. package/dist/commands/library/build/mod.d.ts.map +1 -0
  11. package/dist/commands/library/build/mod.js +2 -0
  12. package/dist/commands/library/build/mod.js.map +1 -0
  13. package/dist/commands/library/build/options.d.ts +23 -0
  14. package/dist/commands/library/build/options.d.ts.map +1 -0
  15. package/dist/commands/library/build/options.js +98 -0
  16. package/dist/commands/library/build/options.js.map +1 -0
  17. package/dist/commands/library/check/action.d.ts +2 -0
  18. package/dist/commands/library/check/action.d.ts.map +1 -0
  19. package/dist/commands/library/check/action.js +24 -0
  20. package/dist/commands/library/check/action.js.map +1 -0
  21. package/dist/commands/library/check/mod.d.ts +2 -0
  22. package/dist/commands/library/check/mod.d.ts.map +1 -0
  23. package/dist/commands/library/check/mod.js +2 -0
  24. package/dist/commands/library/check/mod.js.map +1 -0
  25. package/dist/commands/library/mod.d.ts +4 -0
  26. package/dist/commands/library/mod.d.ts.map +1 -0
  27. package/dist/commands/library/mod.js +25 -0
  28. package/dist/commands/library/mod.js.map +1 -0
  29. package/dist/commands/tools/husky/init/action.d.ts +4 -0
  30. package/dist/commands/tools/husky/init/action.d.ts.map +1 -0
  31. package/dist/commands/tools/husky/init/action.js +82 -0
  32. package/dist/commands/tools/husky/init/action.js.map +1 -0
  33. package/dist/commands/tools/husky/init/mod.d.ts +2 -0
  34. package/dist/commands/tools/husky/init/mod.d.ts.map +1 -0
  35. package/dist/commands/tools/husky/init/mod.js +2 -0
  36. package/dist/commands/tools/husky/init/mod.js.map +1 -0
  37. package/dist/commands/tools/husky/init/options.d.ts +10 -0
  38. package/dist/commands/tools/husky/init/options.d.ts.map +1 -0
  39. package/dist/commands/tools/husky/init/options.js +10 -0
  40. package/dist/commands/tools/husky/init/options.js.map +1 -0
  41. package/dist/commands/tools/husky/mod.d.ts +4 -0
  42. package/dist/commands/tools/husky/mod.d.ts.map +1 -0
  43. package/dist/commands/tools/husky/mod.js +12 -0
  44. package/dist/commands/tools/husky/mod.js.map +1 -0
  45. package/dist/commands/tools/lint/init/action.d.ts +2 -0
  46. package/dist/commands/tools/lint/init/action.d.ts.map +1 -0
  47. package/dist/commands/tools/lint/init/action.js +19 -0
  48. package/dist/commands/tools/lint/init/action.js.map +1 -0
  49. package/dist/commands/tools/lint/init/mod.d.ts +2 -0
  50. package/dist/commands/tools/lint/init/mod.d.ts.map +1 -0
  51. package/dist/commands/tools/lint/init/mod.js +2 -0
  52. package/dist/commands/tools/lint/init/mod.js.map +1 -0
  53. package/dist/commands/tools/lint/mod.d.ts +4 -0
  54. package/dist/commands/tools/lint/mod.d.ts.map +1 -0
  55. package/dist/commands/tools/lint/mod.js +11 -0
  56. package/dist/commands/tools/lint/mod.js.map +1 -0
  57. package/dist/commands/tools/mod.d.ts +4 -0
  58. package/dist/commands/tools/mod.d.ts.map +1 -0
  59. package/dist/commands/tools/mod.js +10 -0
  60. package/dist/commands/tools/mod.js.map +1 -0
  61. package/dist/constants.d.ts +6 -0
  62. package/dist/constants.d.ts.map +1 -0
  63. package/dist/constants.js +7 -0
  64. package/dist/constants.js.map +1 -0
  65. package/dist/main.d.ts +3 -0
  66. package/dist/main.d.ts.map +1 -0
  67. package/dist/main.js +11 -0
  68. package/dist/main.js.map +1 -0
  69. package/dist/utils/cli.d.ts +2 -0
  70. package/dist/utils/cli.d.ts.map +1 -0
  71. package/dist/utils/cli.js +18 -0
  72. package/dist/utils/cli.js.map +1 -0
  73. package/dist/utils/fs.d.ts +4 -0
  74. package/dist/utils/fs.d.ts.map +1 -0
  75. package/dist/utils/fs.js +29 -0
  76. package/dist/utils/fs.js.map +1 -0
  77. package/dist/utils/log.d.ts +15 -0
  78. package/dist/utils/log.d.ts.map +1 -0
  79. package/dist/utils/log.js +38 -0
  80. package/dist/utils/log.js.map +1 -0
  81. package/dist/utils/packageJson.d.ts +22 -0
  82. package/dist/utils/packageJson.d.ts.map +1 -0
  83. package/dist/utils/packageJson.js +108 -0
  84. package/dist/utils/packageJson.js.map +1 -0
  85. package/dist/utils/parse.d.ts +3 -0
  86. package/dist/utils/parse.d.ts.map +1 -0
  87. package/dist/utils/parse.js +15 -0
  88. package/dist/utils/parse.js.map +1 -0
  89. package/dist/utils/ps.d.ts +4 -0
  90. package/dist/utils/ps.d.ts.map +1 -0
  91. package/dist/utils/ps.js +21 -0
  92. package/dist/utils/ps.js.map +1 -0
  93. package/dist/utils/yarn.d.ts +2 -0
  94. package/dist/utils/yarn.d.ts.map +1 -0
  95. package/dist/utils/yarn.js +11 -0
  96. package/dist/utils/yarn.js.map +1 -0
  97. package/package.json +25 -0
  98. package/templates/format/.prettierrc.json +6 -0
  99. package/templates/husky/commit-msg +4 -0
  100. package/templates/husky/post-commit +9 -0
  101. package/templates/husky/pre-commit +4 -0
  102. package/templates/lint/.lintstagedrc.mjs +14 -0
  103. package/templates/lint/commitlint.config.js +5 -0
  104. package/templates/lint/eslint.config.mjs +3 -0
  105. package/tsconfig.json +12 -0
@@ -0,0 +1,7 @@
1
+ import path from "node:path";
2
+ export const ROOT_PATH = process.cwd();
3
+ export const TEMPLATES_PATH = path.join(process.cwd(), "templates");
4
+ export const HUSKY_TEMPLATES_PATH = path.join(TEMPLATES_PATH, 'husky');
5
+ export const LINT_TEMPLATES_PATH = path.join(TEMPLATES_PATH, 'lint');
6
+ export const FORMAT_TEMPLATES_PATH = path.join(TEMPLATES_PATH, 'format');
7
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AACvC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}
package/dist/main.js ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { libraryCommand } from "./commands/library/mod.js";
4
+ import { toolsCommand } from "./commands/tools/mod.js";
5
+ const program = new Command();
6
+ program.name("Rangutopia").description("Scripts across rango organization.");
7
+ // Attach sub-commands
8
+ libraryCommand(program);
9
+ toolsCommand(program);
10
+ program.parse(process.argv);
11
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC;AAE7E,sBAAsB;AACtB,cAAc,CAAC,OAAO,CAAC,CAAA;AACvB,YAAY,CAAC,OAAO,CAAC,CAAA;AAGrB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function objectToCliParams(object: Record<string, unknown>): string[];
2
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/utils/cli.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAe3E"}
@@ -0,0 +1,18 @@
1
+ export function objectToCliParams(object) {
2
+ const iterable = Object.entries(object);
3
+ const params = [];
4
+ iterable.forEach(([key, value]) => {
5
+ if (typeof value === "boolean") {
6
+ params.push(`--${key}`);
7
+ }
8
+ else if (typeof value === "string") {
9
+ params.push(`--${key}`);
10
+ params.push(value);
11
+ }
12
+ else {
13
+ throw new Error("Unhandled type. if you're maintainer, you should add the type to this function.");
14
+ }
15
+ });
16
+ return params;
17
+ }
18
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/utils/cli.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,MAA+B;IACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC1B,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACA,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAA;QAC1G,CAAC;IACT,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAA;AACrB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function findBinaryPath(binary: string): Promise<string | undefined>;
2
+ export declare function copy(src: string, dest: string): void;
3
+ export declare function copyDir(srcDir: string, destDir: string): void;
4
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAIA,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAShF;AAID,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAO7C;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAOtD"}
@@ -0,0 +1,29 @@
1
+ import { findUp, pathExists } from "find-up";
2
+ import path from "node:path";
3
+ import fs from "node:fs";
4
+ export async function findBinaryPath(binary) {
5
+ const localBinPath = (directory) => path.join(directory, "node_modules", '.bin', binary);
6
+ const result = await findUp(async (directory) => {
7
+ const hasBinary = await pathExists(localBinPath(directory));
8
+ return hasBinary && directory;
9
+ }, { type: "directory" });
10
+ return result ? localBinPath(result) : undefined;
11
+ }
12
+ export function copy(src, dest) {
13
+ const stat = fs.statSync(src);
14
+ if (stat.isDirectory()) {
15
+ copyDir(src, dest);
16
+ }
17
+ else {
18
+ fs.copyFileSync(src, dest);
19
+ }
20
+ }
21
+ export function copyDir(srcDir, destDir) {
22
+ fs.mkdirSync(destDir, { recursive: true });
23
+ for (const file of fs.readdirSync(srcDir)) {
24
+ const srcFile = path.resolve(srcDir, file);
25
+ const destFile = path.resolve(destDir, file);
26
+ copy(srcFile, destFile);
27
+ }
28
+ }
29
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjG,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;QACxC,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5D,OAAO,SAAS,IAAI,SAAS,CAAC;IACtC,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;IAEzB,OAAO,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC;AAID,MAAM,UAAU,IAAI,CAAC,GAAW,EAAE,IAAY;IACtC,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAC1B,CAAC;SAAM,CAAC;QACA,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAClC,CAAC;AACT,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,OAAe;IAC/C,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAC5C,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC/B,CAAC;AACT,CAAC"}
@@ -0,0 +1,15 @@
1
+ export declare enum Level {
2
+ Trace = 0,
3
+ Debug = 1,
4
+ Info = 2,
5
+ Warn = 3,
6
+ Error = 4
7
+ }
8
+ export declare function log(level: Level, message: string): void;
9
+ export declare function logErrorAndExit(message: string): never;
10
+ interface MessageContext {
11
+ task: "tsc" | "esbuild";
12
+ }
13
+ export declare function message(context: MessageContext, message: string): string;
14
+ export {};
15
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/utils/log.ts"],"names":[],"mappings":"AAGA,oBAAY,KAAK;IACT,KAAK,IAAI;IACT,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CAChB;AAGD,wBAAgB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,QAkBhD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAGtD;AAGD,UAAU,cAAc;IAChB,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;CAC/B;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,UAE/D"}
@@ -0,0 +1,38 @@
1
+ import logSymbols from 'log-symbols';
2
+ /* eslint-disable @typescript-eslint/no-magic-numbers */
3
+ export var Level;
4
+ (function (Level) {
5
+ Level[Level["Trace"] = 0] = "Trace";
6
+ Level[Level["Debug"] = 1] = "Debug";
7
+ Level[Level["Info"] = 2] = "Info";
8
+ Level[Level["Warn"] = 3] = "Warn";
9
+ Level[Level["Error"] = 4] = "Error";
10
+ })(Level || (Level = {}));
11
+ export function log(level, message) {
12
+ if (level === Level.Trace) {
13
+ console.log("[trace]", message);
14
+ }
15
+ else if (level === Level.Debug) {
16
+ console.log("[debug]", message);
17
+ }
18
+ else if (level === Level.Info) {
19
+ console.log(logSymbols.info, message);
20
+ }
21
+ else if (level === Level.Warn) {
22
+ console.log(logSymbols.warning, message);
23
+ }
24
+ else if (level === Level.Error) {
25
+ console.log(logSymbols.error, message);
26
+ }
27
+ else {
28
+ throw new Error("not implemented");
29
+ }
30
+ }
31
+ export function logErrorAndExit(message) {
32
+ log(Level.Error, message);
33
+ process.exit(1);
34
+ }
35
+ export function message(context, message) {
36
+ return `[${context.task}] ${message}`;
37
+ }
38
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/utils/log.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,aAAa,CAAC;AAErC,wDAAwD;AACxD,MAAM,CAAN,IAAY,KAMX;AAND,WAAY,KAAK;IACT,mCAAS,CAAA;IACT,mCAAS,CAAA;IACT,iCAAQ,CAAA;IACR,iCAAQ,CAAA;IACR,mCAAS,CAAA;AACjB,CAAC,EANW,KAAK,KAAL,KAAK,QAMhB;AAGD,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,OAAe;IACzC,IAAI,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACvC,CAAC;SACI,IAAI,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACvC,CAAC;SACI,IAAI,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC7C,CAAC;SACI,IAAI,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC;SACI,IAAI,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC9C,CAAC;SAAM,CAAC;QACA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC3C,CAAC;AACT,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IACvC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC;AAOD,MAAM,UAAU,OAAO,CAAC,OAAuB,EAAE,OAAe;IACxD,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,22 @@
1
+ export declare function nearestPackageJsonPath(): Promise<string | undefined>;
2
+ export declare function lookupPackageJsonFilesToFindDependency(name: string, options?: {
3
+ checkDevDependency?: boolean;
4
+ }): Promise<string | undefined>;
5
+ /**
6
+ * Getting a package json and deserialize it to JS object.
7
+ *
8
+ * @param location it appends `package.json` if not exits in `location` string.
9
+ */
10
+ export declare function readPackageJson(location: string): Record<string, unknown>;
11
+ export declare function updatePackageJson(location: string, data: Record<string, unknown>): void;
12
+ export declare function readAndValidatePacakgeJson(path: string): {
13
+ [x: string]: unknown;
14
+ name: string;
15
+ version?: string;
16
+ type?: "module";
17
+ dependencies?: Record<string, string>;
18
+ devDependencies?: Record<string, string>;
19
+ scripts?: Record<string, string>;
20
+ };
21
+ export declare function findMissingDependencies(requiredDependencies: string[]): Promise<any[]>;
22
+ //# sourceMappingURL=packageJson.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageJson.d.ts","sourceRoot":"","sources":["../../src/utils/packageJson.ts"],"names":[],"mappings":"AASA,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAS1E;AAGD,wBAAsB,sCAAsC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA6BlJ;AAGD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyBzE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAYvF;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM;;;;;;;;EAkBtD;AAGD,wBAAsB,uBAAuB,CAAC,oBAAoB,EAAE,MAAM,EAAE,kBAW3E"}
@@ -0,0 +1,108 @@
1
+ import { findUp, findUpMultiple } from "find-up";
2
+ import { closeSync, openSync, readFileSync, writeSync } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ import { z } from "zod/v4";
5
+ import { validatedSchemaOrThrow } from "./parse.js";
6
+ import { log } from "node:console";
7
+ import { Level } from "./log.js";
8
+ export async function nearestPackageJsonPath() {
9
+ const firstPackageJson = await findUp("package.json");
10
+ if (!firstPackageJson) {
11
+ return undefined;
12
+ }
13
+ const path = dirname(firstPackageJson);
14
+ return path;
15
+ }
16
+ export async function lookupPackageJsonFilesToFindDependency(name, options) {
17
+ const { checkDevDependency = true } = options || {};
18
+ const list = await findUpMultiple("package.json");
19
+ const pathIncludingThePackage = list.find(path => {
20
+ let json;
21
+ try {
22
+ json = readPackageJson(path);
23
+ }
24
+ catch (e) {
25
+ console.log({ e });
26
+ log(Level.Warn, `Seems ${path} is not a valid json. this file will be skipped.`);
27
+ // Skiping this iterate
28
+ return false;
29
+ }
30
+ const isExistInDependencies = json.dependencies?.[name];
31
+ if (checkDevDependency) {
32
+ const isExistInDevDependencies = json.devDependencies?.[name];
33
+ return isExistInDependencies || isExistInDevDependencies;
34
+ }
35
+ return isExistInDependencies;
36
+ });
37
+ return pathIncludingThePackage;
38
+ }
39
+ /**
40
+ * Getting a package json and deserialize it to JS object.
41
+ *
42
+ * @param location it appends `package.json` if not exits in `location` string.
43
+ */
44
+ export function readPackageJson(location) {
45
+ let fullPath;
46
+ if (location.endsWith("package.json")) {
47
+ fullPath = location;
48
+ }
49
+ else {
50
+ fullPath = join(location, 'package.json');
51
+ }
52
+ let content;
53
+ try {
54
+ content = readFileSync(fullPath, {
55
+ encoding: "utf8"
56
+ });
57
+ }
58
+ catch (e) {
59
+ throw new Error(`An error occured during reading contents of ${fullPath}.`, { cause: e });
60
+ }
61
+ try {
62
+ return JSON.parse(content);
63
+ }
64
+ catch (e) {
65
+ throw new Error(`An error occured during paring ${location} file. maybe it's not a valid JSON `, {
66
+ cause: e
67
+ });
68
+ }
69
+ }
70
+ export function updatePackageJson(location, data) {
71
+ let jsonData;
72
+ try {
73
+ jsonData = JSON.stringify(data);
74
+ }
75
+ catch {
76
+ throw new Error("updating package json failed. your data may not be valid.", { cause: data });
77
+ }
78
+ const fd = openSync(location, "w");
79
+ writeSync(fd, jsonData);
80
+ closeSync(fd);
81
+ }
82
+ export function readAndValidatePacakgeJson(path) {
83
+ let packageJsonContent;
84
+ packageJsonContent = readPackageJson(path);
85
+ // @see https://nodejs.org/api/packages.html#nodejs-packagejson-field-definitions
86
+ // @see https://docs.npmjs.com/cli/v11/configuring-npm/package-json
87
+ const PackageJsonSchema = z.looseObject({
88
+ name: z.string(),
89
+ version: z.string().optional(),
90
+ type: z.literal(["module"]).optional(),
91
+ dependencies: z.record(z.string(), z.string()).optional(),
92
+ devDependencies: z.record(z.string(), z.string()).optional(),
93
+ scripts: z.record(z.string(), z.string()).optional(),
94
+ });
95
+ const output = validatedSchemaOrThrow(PackageJsonSchema, packageJsonContent);
96
+ return output;
97
+ }
98
+ export async function findMissingDependencies(requiredDependencies) {
99
+ const listRequiredPackages = await Promise.all(requiredDependencies.map(name => lookupPackageJsonFilesToFindDependency(name)));
100
+ const missingPackages = [];
101
+ listRequiredPackages.forEach((result, index) => {
102
+ if (!result) {
103
+ missingPackages.push(requiredDependencies[index]);
104
+ }
105
+ });
106
+ return missingPackages;
107
+ }
108
+ //# sourceMappingURL=packageJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageJson.js","sourceRoot":"","sources":["../../src/utils/packageJson.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { z } from "zod/v4";
2
+ export declare function validatedSchemaOrThrow<T extends z.ZodTypeAny>(schema: T, data: unknown): z.output<T>;
3
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/utils/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAY,MAAM,QAAQ,CAAA;AAEpC,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAapG"}
@@ -0,0 +1,15 @@
1
+ import { z, ZodError } from "zod/v4";
2
+ export function validatedSchemaOrThrow(schema, data) {
3
+ try {
4
+ const output = schema.parse(data);
5
+ return output;
6
+ }
7
+ catch (e) {
8
+ if (e instanceof ZodError) {
9
+ const message = e.issues.map(issue => `${issue.message} in ${issue.path.join(",")}`).join("\n");
10
+ throw Error(message, { cause: e });
11
+ }
12
+ throw e;
13
+ }
14
+ }
15
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/utils/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEpC,MAAM,UAAU,sBAAsB,CAAyB,MAAS,EAAE,IAAa;IAC/E,IAAI,CAAC;QACG,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC;IACtB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAEL,IAAI,CAAC,YAAY,QAAQ,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChG,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;QAC1C,CAAC;QAED,MAAM,CAAC,CAAA;IACf,CAAC;AACT,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type SpawnOptions } from "node:child_process";
2
+ import type { Readable } from "node:stream";
3
+ export declare function spawnAsync(command: string, args?: string[], options?: SpawnOptions): Promise<Readable>;
4
+ //# sourceMappingURL=ps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ps.d.ts","sourceRoot":"","sources":["../../src/utils/ps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAqB9G"}
@@ -0,0 +1,21 @@
1
+ import { spawn } from "node:child_process";
2
+ export function spawnAsync(command, args = [], options = {}) {
3
+ return new Promise((resolve, reject) => {
4
+ const child = spawn(command, args, {
5
+ stdio: 'inherit',
6
+ ...options,
7
+ });
8
+ child.on("exit", (code) => {
9
+ if (code !== 0) {
10
+ reject(new Error(`Process exited with code ${code}`));
11
+ }
12
+ else {
13
+ resolve(child.stdout);
14
+ }
15
+ });
16
+ child.on("error", (error) => {
17
+ reject(error);
18
+ });
19
+ });
20
+ }
21
+ //# sourceMappingURL=ps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ps.js","sourceRoot":"","sources":["../../src/utils/ps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAG9D,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,OAAiB,EAAE,EAAE,UAAwB,EAAE;IAEnF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YAC3B,KAAK,EAAE,SAAS;YAChB,GAAG,OAAO;SACjB,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAClB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACT,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC,CAAA;YAC7D,CAAC;iBAAM,CAAC;gBACA,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAC7B,CAAC;QACT,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACpB,MAAM,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAA;IAEV,CAAC,CAAC,CAAA;AACV,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function add(packages: string[], type?: "dev" | undefined): Promise<void>;
2
+ //# sourceMappingURL=yarn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yarn.d.ts","sourceRoot":"","sources":["../../src/utils/yarn.ts"],"names":[],"mappings":"AAGA,wBAAsB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,SAAS,iBASrE"}
@@ -0,0 +1,11 @@
1
+ import { spawnAsync } from "./ps.js";
2
+ // TODO: This fails when trying to add package to root of monorepo.
3
+ export async function add(packages, type) {
4
+ let args = ["add"];
5
+ if (type === 'dev') {
6
+ args.push('-D');
7
+ }
8
+ args = args.concat(packages);
9
+ await spawnAsync("yarn", args);
10
+ }
11
+ //# sourceMappingURL=yarn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yarn.js","sourceRoot":"","sources":["../../src/utils/yarn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AAEnC,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,QAAkB,EAAE,IAAwB;IAC9D,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;IAClB,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;IACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAG5B,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "rangutopia",
3
+ "type": "module",
4
+ "version": "0.0.1",
5
+ "packageManager": "yarn@4.4.1",
6
+ "bin": "./dist/main.js",
7
+ "dependencies": {
8
+ "commander": "^14.0.0",
9
+ "find-up": "^7.0.0",
10
+ "log-symbols": "^7.0.1",
11
+ "ora": "^8.2.0",
12
+ "zod": "^3.25.71"
13
+ },
14
+ "devDependencies": {
15
+ "@types/node": "^22.15.21",
16
+ "esbuild": "^0.25.4",
17
+ "esbuild-plugins-node-modules-polyfill": "^1.7.1",
18
+ "typescript": "^5.8.3"
19
+ },
20
+ "scripts": {
21
+ "build": "tsc",
22
+ "dev": "yarn build && node dist/main.js",
23
+ "publish-from-cli": "YARN_NPM_AUTH_TOKEN=$(pass rng/npm-dev | head -n1) yarn npm publish"
24
+ }
25
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "semi": true,
3
+ "tabWidth": 2,
4
+ "singleQuote": true,
5
+ "jsxBracketSameLine": true
6
+ }
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env sh
2
+ . "$(dirname "$0")/_/husky.sh"
3
+
4
+ yarn commitlint $1
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env sh
2
+ . "$(dirname -- "$0")/_/husky.sh"
3
+
4
+ if [ -z "${GIT_COMMITTER_DATE:-}" ]; then
5
+ DATE="$(date -u +%Y-%m-%dT%H:%M:%S%z)";
6
+ export GIT_AUTHOR_DATE="$DATE";
7
+ export GIT_COMMITTER_DATE="$DATE"
8
+ git commit --amend --date "$DATE" --no-edit
9
+ fi
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env sh
2
+ . "$(dirname "$0")/_/husky.sh"
3
+
4
+ npx lint-staged
@@ -0,0 +1,14 @@
1
+ import micromatch from 'micromatch';
2
+
3
+ const eslintIgnoredFiles = ['**/global-wallets-env.d.ts'];
4
+
5
+ export default {
6
+ '*.{ts,tsx}': (files) => {
7
+ const match = micromatch.not(files, eslintIgnoredFiles);
8
+ return `eslint --fix --quiet ${match.join(' ')}`;
9
+ },
10
+
11
+ '*.{ts,tsx,json}': (files) => {
12
+ return `prettier --write ${files.join(' ')}`;
13
+ },
14
+ };
@@ -0,0 +1,5 @@
1
+ const Configuration = {
2
+ extends: ['@commitlint/config-conventional'],
3
+ };
4
+
5
+ module.exports = Configuration;
@@ -0,0 +1,3 @@
1
+ import rangoRules from 'eslint-config-rango';
2
+
3
+ export default [...rangoRules];
package/tsconfig.json ADDED
@@ -0,0 +1,12 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
4
+ "module": "node16", /* Specify what module code is generated. */
5
+ "verbatimModuleSyntax": true,
6
+ "declaration": true,
7
+ "sourceMap": true,
8
+ "declarationMap": true,
9
+
10
+ "outDir": "dist"
11
+ }
12
+ }