@devbie/newbie-cli 0.1.0-stage.0

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 (139) hide show
  1. package/dist/assemble/assets.d.ts +9 -0
  2. package/dist/assemble/assets.js +49 -0
  3. package/dist/assemble/assets.js.map +1 -0
  4. package/dist/assemble/dependencies.d.ts +10 -0
  5. package/dist/assemble/dependencies.js +36 -0
  6. package/dist/assemble/dependencies.js.map +1 -0
  7. package/dist/assemble/env.d.ts +15 -0
  8. package/dist/assemble/env.js +79 -0
  9. package/dist/assemble/env.js.map +1 -0
  10. package/dist/assemble/modules-copy.d.ts +13 -0
  11. package/dist/assemble/modules-copy.js +36 -0
  12. package/dist/assemble/modules-copy.js.map +1 -0
  13. package/dist/assemble/modules.d.ts +8 -0
  14. package/dist/assemble/modules.js +86 -0
  15. package/dist/assemble/modules.js.map +1 -0
  16. package/dist/assemble/pipeline.d.ts +17 -0
  17. package/dist/assemble/pipeline.js +143 -0
  18. package/dist/assemble/pipeline.js.map +1 -0
  19. package/dist/assemble/schema.d.ts +10 -0
  20. package/dist/assemble/schema.js +64 -0
  21. package/dist/assemble/schema.js.map +1 -0
  22. package/dist/assemble/types.d.ts +18 -0
  23. package/dist/assemble/types.js +3 -0
  24. package/dist/assemble/types.js.map +1 -0
  25. package/dist/commands/agent.d.ts +1 -0
  26. package/dist/commands/agent.js +16 -0
  27. package/dist/commands/agent.js.map +1 -0
  28. package/dist/commands/apply.d.ts +6 -0
  29. package/dist/commands/apply.js +52 -0
  30. package/dist/commands/apply.js.map +1 -0
  31. package/dist/commands/check.d.ts +2 -0
  32. package/dist/commands/check.js +37 -0
  33. package/dist/commands/check.js.map +1 -0
  34. package/dist/commands/config.d.ts +7 -0
  35. package/dist/commands/config.js +82 -0
  36. package/dist/commands/config.js.map +1 -0
  37. package/dist/commands/create.d.ts +16 -0
  38. package/dist/commands/create.js +89 -0
  39. package/dist/commands/create.js.map +1 -0
  40. package/dist/commands/default.d.ts +2 -0
  41. package/dist/commands/default.js +69 -0
  42. package/dist/commands/default.js.map +1 -0
  43. package/dist/commands/doctor.d.ts +2 -0
  44. package/dist/commands/doctor.js +145 -0
  45. package/dist/commands/doctor.js.map +1 -0
  46. package/dist/commands/env.d.ts +7 -0
  47. package/dist/commands/env.js +324 -0
  48. package/dist/commands/env.js.map +1 -0
  49. package/dist/commands/install.d.ts +4 -0
  50. package/dist/commands/install.js +45 -0
  51. package/dist/commands/install.js.map +1 -0
  52. package/dist/commands/shared.d.ts +19 -0
  53. package/dist/commands/shared.js +54 -0
  54. package/dist/commands/shared.js.map +1 -0
  55. package/dist/commands/status.d.ts +4 -0
  56. package/dist/commands/status.js +62 -0
  57. package/dist/commands/status.js.map +1 -0
  58. package/dist/commands/update-template.d.ts +6 -0
  59. package/dist/commands/update-template.js +83 -0
  60. package/dist/commands/update-template.js.map +1 -0
  61. package/dist/commands/update.d.ts +6 -0
  62. package/dist/commands/update.js +129 -0
  63. package/dist/commands/update.js.map +1 -0
  64. package/dist/constants/paths.d.ts +12 -0
  65. package/dist/constants/paths.js +19 -0
  66. package/dist/constants/paths.js.map +1 -0
  67. package/dist/core/assets.d.ts +8 -0
  68. package/dist/core/assets.js +30 -0
  69. package/dist/core/assets.js.map +1 -0
  70. package/dist/core/dependency-plan.d.ts +12 -0
  71. package/dist/core/dependency-plan.js +42 -0
  72. package/dist/core/dependency-plan.js.map +1 -0
  73. package/dist/core/drift.d.ts +9 -0
  74. package/dist/core/drift.js +34 -0
  75. package/dist/core/drift.js.map +1 -0
  76. package/dist/core/env-file.d.ts +19 -0
  77. package/dist/core/env-file.js +184 -0
  78. package/dist/core/env-file.js.map +1 -0
  79. package/dist/core/module-manifest.d.ts +19 -0
  80. package/dist/core/module-manifest.js +48 -0
  81. package/dist/core/module-manifest.js.map +1 -0
  82. package/dist/core/modules-state.d.ts +24 -0
  83. package/dist/core/modules-state.js +81 -0
  84. package/dist/core/modules-state.js.map +1 -0
  85. package/dist/core/prisma-schema.d.ts +3 -0
  86. package/dist/core/prisma-schema.js +38 -0
  87. package/dist/core/prisma-schema.js.map +1 -0
  88. package/dist/core/semver.d.ts +9 -0
  89. package/dist/core/semver.js +32 -0
  90. package/dist/core/semver.js.map +1 -0
  91. package/dist/core/template-sync.d.ts +19 -0
  92. package/dist/core/template-sync.js +97 -0
  93. package/dist/core/template-sync.js.map +1 -0
  94. package/dist/core/unified-diff.d.ts +1 -0
  95. package/dist/core/unified-diff.js +103 -0
  96. package/dist/core/unified-diff.js.map +1 -0
  97. package/dist/index.d.ts +2 -0
  98. package/dist/index.js +202 -0
  99. package/dist/index.js.map +1 -0
  100. package/dist/lib/check.d.ts +1 -0
  101. package/dist/lib/check.js +31 -0
  102. package/dist/lib/check.js.map +1 -0
  103. package/dist/lib/drift.d.ts +5 -0
  104. package/dist/lib/drift.js +142 -0
  105. package/dist/lib/drift.js.map +1 -0
  106. package/dist/lib/env-tool-config.d.ts +17 -0
  107. package/dist/lib/env-tool-config.js +32 -0
  108. package/dist/lib/env-tool-config.js.map +1 -0
  109. package/dist/lib/errors.d.ts +5 -0
  110. package/dist/lib/errors.js +20 -0
  111. package/dist/lib/errors.js.map +1 -0
  112. package/dist/lib/exec.d.ts +13 -0
  113. package/dist/lib/exec.js +40 -0
  114. package/dist/lib/exec.js.map +1 -0
  115. package/dist/lib/fs-util.d.ts +1 -0
  116. package/dist/lib/fs-util.js +18 -0
  117. package/dist/lib/fs-util.js.map +1 -0
  118. package/dist/lib/issues.d.ts +8 -0
  119. package/dist/lib/issues.js +31 -0
  120. package/dist/lib/issues.js.map +1 -0
  121. package/dist/lib/loading.d.ts +1 -0
  122. package/dist/lib/loading.js +31 -0
  123. package/dist/lib/loading.js.map +1 -0
  124. package/dist/lib/module-install.d.ts +5 -0
  125. package/dist/lib/module-install.js +54 -0
  126. package/dist/lib/module-install.js.map +1 -0
  127. package/dist/lib/modules-state.d.ts +6 -0
  128. package/dist/lib/modules-state.js +51 -0
  129. package/dist/lib/modules-state.js.map +1 -0
  130. package/dist/lib/registry.d.ts +23 -0
  131. package/dist/lib/registry.js +182 -0
  132. package/dist/lib/registry.js.map +1 -0
  133. package/dist/lib/sink.d.ts +10 -0
  134. package/dist/lib/sink.js +56 -0
  135. package/dist/lib/sink.js.map +1 -0
  136. package/dist/lib/version.d.ts +1 -0
  137. package/dist/lib/version.js +19 -0
  138. package/dist/lib/version.js.map +1 -0
  139. package/package.json +39 -0
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.REGISTRY_REF_ENV = exports.REGISTRY_PATH_ENV = exports.REGISTRY_URL = void 0;
7
+ exports.resolveRegistry = resolveRegistry;
8
+ exports.requireRegistry = requireRegistry;
9
+ exports.moduleRootInRegistry = moduleRootInRegistry;
10
+ exports.listRegistryKeys = listRegistryKeys;
11
+ exports.readRegistryModule = readRegistryModule;
12
+ const promises_1 = __importDefault(require("node:fs/promises"));
13
+ const node_os_1 = __importDefault(require("node:os"));
14
+ const node_path_1 = __importDefault(require("node:path"));
15
+ const paths_1 = require("../constants/paths");
16
+ const module_manifest_1 = require("../core/module-manifest");
17
+ const errors_1 = require("./errors");
18
+ const exec_1 = require("./exec");
19
+ exports.REGISTRY_URL = "https://github.com/worldzhy/newbie-modules.git";
20
+ exports.REGISTRY_PATH_ENV = "NEWBIE_MODULES_PATH";
21
+ exports.REGISTRY_REF_ENV = "NEWBIE_MODULES_REF";
22
+ const DEFAULT_LOCAL_REGISTRY = node_path_1.default.join(node_os_1.default.homedir(), "src", "newbie-modules");
23
+ const CACHE_DIR = node_path_1.default.join(node_os_1.default.homedir(), ".newbie", "registry");
24
+ async function pathIsUsable(root) {
25
+ try {
26
+ await promises_1.default.stat(node_path_1.default.join(root, paths_1.REGISTRY_MODULES_DIR));
27
+ return true;
28
+ }
29
+ catch {
30
+ return false;
31
+ }
32
+ }
33
+ async function gitHead(root) {
34
+ try {
35
+ return (0, exec_1.trim)(await (0, exec_1.execCapture)("git", ["-C", root, "rev-parse", "HEAD"]));
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ async function resolveLocalRegistry() {
42
+ const explicit = process.env[exports.REGISTRY_PATH_ENV];
43
+ const candidate = explicit ? node_path_1.default.resolve(explicit) : DEFAULT_LOCAL_REGISTRY;
44
+ return (await pathIsUsable(candidate)) ? candidate : null;
45
+ }
46
+ async function updateCachedClone(ref) {
47
+ let exists = true;
48
+ try {
49
+ await promises_1.default.stat(node_path_1.default.join(CACHE_DIR, ".git"));
50
+ }
51
+ catch {
52
+ exists = false;
53
+ }
54
+ if (!exists) {
55
+ await promises_1.default.mkdir(node_path_1.default.dirname(CACHE_DIR), { recursive: true });
56
+ await (0, exec_1.execCapture)("git", ["clone", exports.REGISTRY_URL, CACHE_DIR]);
57
+ }
58
+ await (0, exec_1.execCapture)("git", [
59
+ "-C",
60
+ CACHE_DIR,
61
+ "fetch",
62
+ "--quiet",
63
+ "origin",
64
+ "--tags",
65
+ ]);
66
+ if (ref) {
67
+ await (0, exec_1.execCapture)("git", [
68
+ "-C",
69
+ CACHE_DIR,
70
+ "checkout",
71
+ "--quiet",
72
+ "--detach",
73
+ ref,
74
+ ]);
75
+ }
76
+ else {
77
+ await (0, exec_1.execCapture)("git", [
78
+ "-C",
79
+ CACHE_DIR,
80
+ "remote",
81
+ "set-head",
82
+ "origin",
83
+ "-a",
84
+ ]);
85
+ const symbolic = (0, exec_1.trim)(await (0, exec_1.execCapture)("git", [
86
+ "-C",
87
+ CACHE_DIR,
88
+ "symbolic-ref",
89
+ "--short",
90
+ "refs/remotes/origin/HEAD",
91
+ ]));
92
+ const branch = symbolic.replace(/^origin\//, "");
93
+ await (0, exec_1.execCapture)("git", [
94
+ "-C",
95
+ CACHE_DIR,
96
+ "checkout",
97
+ "--quiet",
98
+ "-B",
99
+ branch,
100
+ `origin/${branch}`,
101
+ ]);
102
+ }
103
+ return (0, exec_1.trim)(await (0, exec_1.execCapture)("git", ["-C", CACHE_DIR, "rev-parse", "HEAD"]));
104
+ }
105
+ async function resolveRegistry(options) {
106
+ const localRoot = await resolveLocalRegistry();
107
+ if (localRoot) {
108
+ return {
109
+ root: localRoot,
110
+ url: exports.REGISTRY_URL,
111
+ sourceCommit: await gitHead(localRoot),
112
+ local: true,
113
+ };
114
+ }
115
+ const ref = process.env[exports.REGISTRY_REF_ENV];
116
+ if (options?.fetch) {
117
+ const sourceCommit = await updateCachedClone(ref);
118
+ return { root: CACHE_DIR, url: exports.REGISTRY_URL, sourceCommit, local: false };
119
+ }
120
+ const cacheUsable = await pathIsUsable(CACHE_DIR);
121
+ if (!cacheUsable)
122
+ return null;
123
+ return {
124
+ root: CACHE_DIR,
125
+ url: exports.REGISTRY_URL,
126
+ sourceCommit: await gitHead(CACHE_DIR),
127
+ local: false,
128
+ };
129
+ }
130
+ async function requireRegistry(options) {
131
+ const registry = await resolveRegistry(options);
132
+ if (!registry) {
133
+ throw new errors_1.CliError(`The newbie-modules registry is not available. Set ${exports.REGISTRY_PATH_ENV} to a local checkout, or run an online command once to clone ${exports.REGISTRY_URL}.`);
134
+ }
135
+ return registry;
136
+ }
137
+ function moduleRootInRegistry(registryRoot, key) {
138
+ return node_path_1.default.resolve(registryRoot, paths_1.REGISTRY_MODULES_DIR, key);
139
+ }
140
+ async function listRegistryKeys(registryRoot) {
141
+ const dir = node_path_1.default.resolve(registryRoot, paths_1.REGISTRY_MODULES_DIR);
142
+ let dirents;
143
+ try {
144
+ dirents = await promises_1.default.readdir(dir, { withFileTypes: true });
145
+ }
146
+ catch {
147
+ return [];
148
+ }
149
+ const keys = [];
150
+ for (const dirent of dirents) {
151
+ if (!dirent.isDirectory())
152
+ continue;
153
+ if (await promises_1.default
154
+ .stat(node_path_1.default.join(dir, dirent.name, paths_1.MODULE_MANIFEST_FILE))
155
+ .then(() => true)
156
+ .catch(() => false)) {
157
+ keys.push(dirent.name);
158
+ }
159
+ }
160
+ return keys.sort();
161
+ }
162
+ async function readRegistryModule(registryRoot, key) {
163
+ const dir = moduleRootInRegistry(registryRoot, key);
164
+ let raw;
165
+ try {
166
+ raw = await promises_1.default.readFile(node_path_1.default.join(dir, paths_1.MODULE_MANIFEST_FILE), "utf8");
167
+ }
168
+ catch (error) {
169
+ if (error.code === "ENOENT")
170
+ return null;
171
+ throw error;
172
+ }
173
+ let parsed;
174
+ try {
175
+ parsed = JSON.parse(raw);
176
+ }
177
+ catch (error) {
178
+ throw new errors_1.CliError(`Invalid newbie.module.json for registry module '${key}': ${error.message}`);
179
+ }
180
+ return { dir, key, manifest: (0, module_manifest_1.normalizeModuleManifest)(parsed, key) };
181
+ }
182
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface Sink {
2
+ readonly cwd: string;
3
+ readonly dryRun: boolean;
4
+ writeText(file: string, content: string): Promise<void>;
5
+ writeJson(file: string, value: unknown): Promise<void>;
6
+ remove(fileOrDir: string): Promise<void>;
7
+ copy(fromAbsolute: string, toRelative: string): Promise<void>;
8
+ run(command: string, args: string[], label?: string): Promise<void>;
9
+ }
10
+ export declare function createSink(cwd: string, dryRun: boolean): Sink;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createSink = createSink;
7
+ const promises_1 = __importDefault(require("node:fs/promises"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const exec_1 = require("./exec");
10
+ function createSink(cwd, dryRun) {
11
+ const resolve = (file) => node_path_1.default.resolve(cwd, file);
12
+ const plan = (message) => {
13
+ console.info(`[dry-run] ${message}`);
14
+ };
15
+ return {
16
+ cwd,
17
+ dryRun,
18
+ async writeText(file, content) {
19
+ if (dryRun) {
20
+ plan(`write ${file} (${content.length} bytes)`);
21
+ return;
22
+ }
23
+ const target = resolve(file);
24
+ await promises_1.default.mkdir(node_path_1.default.dirname(target), { recursive: true });
25
+ await promises_1.default.writeFile(target, content, "utf8");
26
+ },
27
+ async writeJson(file, value) {
28
+ await this.writeText(file, `${JSON.stringify(value, null, 2)}\n`);
29
+ },
30
+ async remove(fileOrDir) {
31
+ if (dryRun) {
32
+ plan(`remove ${fileOrDir}`);
33
+ return;
34
+ }
35
+ await promises_1.default.rm(resolve(fileOrDir), { recursive: true, force: true });
36
+ },
37
+ async copy(fromAbsolute, toRelative) {
38
+ if (dryRun) {
39
+ plan(`copy ${node_path_1.default.basename(fromAbsolute)} -> ${toRelative}`);
40
+ return;
41
+ }
42
+ const target = resolve(toRelative);
43
+ await promises_1.default.rm(target, { recursive: true, force: true });
44
+ await promises_1.default.mkdir(node_path_1.default.dirname(target), { recursive: true });
45
+ await promises_1.default.cp(fromAbsolute, target, { recursive: true });
46
+ },
47
+ async run(command, args, _label) {
48
+ if (dryRun) {
49
+ plan(`${command} ${args.join(" ")}`.trim());
50
+ return;
51
+ }
52
+ await (0, exec_1.execLive)(command, args, { cwd });
53
+ },
54
+ };
55
+ }
56
+ //# sourceMappingURL=sink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sink.js","sourceRoot":"","sources":["../../src/lib/sink.ts"],"names":[],"mappings":";;;;;AAoBA,gCAoDC;AAxED,gEAAkC;AAClC,0DAA6B;AAE7B,iCAAkC;AAiBlC,SAAgB,UAAU,CAAC,GAAW,EAAE,MAAe;IACrD,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,mBAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAE1D,MAAM,IAAI,GAAG,CAAC,OAAe,EAAQ,EAAE;QACrC,OAAO,CAAC,IAAI,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,OAAO;QACL,GAAG;QACH,MAAM;QAEN,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,OAAe;YAC3C,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,SAAS,IAAI,KAAK,OAAO,CAAC,MAAM,SAAS,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,kBAAE,CAAC,KAAK,CAAC,mBAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,MAAM,kBAAE,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9C,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,KAAc;YAC1C,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACpE,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,SAAiB;YAC5B,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,MAAM,kBAAE,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,YAAoB,EAAE,UAAkB;YACjD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,QAAQ,mBAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,UAAU,EAAE,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YACnC,MAAM,kBAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,MAAM,kBAAE,CAAC,KAAK,CAAC,mBAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,MAAM,kBAAE,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,OAAe,EAAE,IAAc,EAAE,MAAe;YACxD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;YACD,MAAM,IAAA,eAAQ,EAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function readCliVersion(): string;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.readCliVersion = readCliVersion;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ function readCliVersion() {
10
+ try {
11
+ const pkgPath = node_path_1.default.join(__dirname, "..", "..", "package.json");
12
+ const pkg = JSON.parse(node_fs_1.default.readFileSync(pkgPath, "utf8"));
13
+ return typeof pkg.version === "string" ? pkg.version : "0.0.0";
14
+ }
15
+ catch {
16
+ return "0.0.0";
17
+ }
18
+ }
19
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":";;;;;AAUA,wCAUC;AApBD,sDAAyB;AACzB,0DAA6B;AAS7B,SAAgB,cAAc;IAC5B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAEtD,CAAC;QACF,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@devbie/newbie-cli",
3
+ "version": "0.1.0-stage.0",
4
+ "description": "newbie backend framework CLI",
5
+ "license": "MIT",
6
+ "author": "worldzhy",
7
+ "bin": {
8
+ "newbie": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "publishConfig": {
14
+ "access": "public"
15
+ },
16
+ "scripts": {
17
+ "build": "tsc -p tsconfig.json && chmod +x dist/index.js",
18
+ "clean": "rimraf dist",
19
+ "test": "node --import tsx --test test/*.test.ts",
20
+ "prepublishOnly": "npm run build"
21
+ },
22
+ "dependencies": {
23
+ "@aws-sdk/client-secrets-manager": "^3.0.0",
24
+ "@inquirer/prompts": "^7.0.0",
25
+ "colorette": "^2.0.20",
26
+ "commander": "^12.1.0",
27
+ "figlet": "^1.7.0"
28
+ },
29
+ "devDependencies": {
30
+ "@types/figlet": "^1.5.8",
31
+ "@types/node": "^22.0.0",
32
+ "rimraf": "^6.1.3",
33
+ "tsx": "^4.19.0",
34
+ "typescript": "^5.9.3"
35
+ },
36
+ "engines": {
37
+ "node": ">=20"
38
+ }
39
+ }