@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,18 @@
1
+ import { ModuleManifest } from "../core/module-manifest";
2
+ import { IssueBag } from "../lib/issues";
3
+ import { RegistryLocation } from "../lib/registry";
4
+ import { Sink } from "../lib/sink";
5
+ import { ModulesState } from "../core/modules-state";
6
+ export interface PipelineContext {
7
+ cwd: string;
8
+ sink: Sink;
9
+ issues: IssueBag;
10
+ state: ModulesState;
11
+ registry: RegistryLocation;
12
+ skipPrismaGenerate?: boolean;
13
+ }
14
+ export interface ResolvedModule {
15
+ key: string;
16
+ srcPath: string;
17
+ manifest: ModuleManifest;
18
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/assemble/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare function runAgent(): Promise<void>;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runAgent = runAgent;
4
+ const colorette_1 = require("colorette");
5
+ const ENDPOINT_ENV = "NIGHTWATCH_REPORT_ENDPOINT";
6
+ const TOKEN_ENV = "NIGHTWATCH_APPLICATION_TOKEN";
7
+ async function runAgent() {
8
+ const endpoint = process.env[ENDPOINT_ENV];
9
+ const token = process.env[TOKEN_ENV];
10
+ if (!endpoint || !token) {
11
+ console.info((0, colorette_1.yellow)(`Agent protocol is not available yet. Set ${ENDPOINT_ENV} and ${TOKEN_ENV} once the server side ships.`));
12
+ return;
13
+ }
14
+ console.info((0, colorette_1.cyan)(`Agent endpoint configured (${endpoint}); polling will be enabled in a later release.`));
15
+ }
16
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":";;AAaA,4BAkBC;AA/BD,yCAAyC;AAUzC,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAClD,MAAM,SAAS,GAAG,8BAA8B,CAAC;AAE1C,KAAK,UAAU,QAAQ;IAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAErC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CACV,IAAA,kBAAM,EACJ,4CAA4C,YAAY,QAAQ,SAAS,8BAA8B,CACxG,CACF,CAAC;QACF,OAAO;IACT,CAAC;IAED,OAAO,CAAC,IAAI,CACV,IAAA,gBAAI,EACF,8BAA8B,QAAQ,gDAAgD,CACvF,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { GlobalOptions } from "./shared";
2
+ export interface ApplyOptions extends GlobalOptions {
3
+ config: string;
4
+ ci?: boolean;
5
+ }
6
+ export declare function runApply(options: ApplyOptions): Promise<void>;
@@ -0,0 +1,52 @@
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.runApply = runApply;
7
+ const promises_1 = __importDefault(require("node:fs/promises"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const colorette_1 = require("colorette");
10
+ const pipeline_1 = require("../assemble/pipeline");
11
+ const errors_1 = require("../lib/errors");
12
+ const registry_1 = require("../lib/registry");
13
+ const shared_1 = require("./shared");
14
+ async function readSpec(file) {
15
+ const absolute = node_path_1.default.resolve(file);
16
+ let raw;
17
+ try {
18
+ raw = await promises_1.default.readFile(absolute, "utf8");
19
+ }
20
+ catch (error) {
21
+ throw new errors_1.CliError(`Cannot read apply spec ${file}: ${error.message}`);
22
+ }
23
+ let spec;
24
+ try {
25
+ spec = JSON.parse(raw);
26
+ }
27
+ catch (error) {
28
+ throw new errors_1.CliError(`Invalid JSON in apply spec ${file}: ${error.message}`);
29
+ }
30
+ if (!Array.isArray(spec.modules) || !spec.modules.every((key) => typeof key === "string")) {
31
+ throw new errors_1.CliError(`Apply spec ${file} must contain a string array "modules".`);
32
+ }
33
+ return spec.modules;
34
+ }
35
+ async function runApply(options) {
36
+ const wanted = await readSpec(options.config);
37
+ const { ctx } = await (0, shared_1.createContext)(options, {
38
+ ensureConfig: true,
39
+ fetch: true,
40
+ });
41
+ const known = new Set(await (0, registry_1.listRegistryKeys)(ctx.registry.root));
42
+ const deduped = new Set(wanted);
43
+ const unknown = [...deduped].filter((key) => !known.has(key));
44
+ if (unknown.length > 0) {
45
+ throw new errors_1.CliError(`Unknown module(s) in ${options.config}: ${unknown.join(", ")}. Available modules: ${[...known].join(", ")}`);
46
+ }
47
+ const nextKeys = [...deduped];
48
+ await (0, pipeline_1.applyModuleKeys)(ctx, nextKeys);
49
+ ctx.issues.assertEmpty();
50
+ console.info((0, colorette_1.bold)((0, colorette_1.green)("\n🍺 A P P L I E D\n")));
51
+ }
52
+ //# sourceMappingURL=apply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":";;;;;AAoDA,4BAoBC;AAxED,gEAAkC;AAClC,0DAA6B;AAC7B,yCAAwC;AAExC,mDAAuD;AACvD,0CAAyC;AACzC,8CAAmD;AAEnD,qCAAwD;AAgBxD,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,MAAM,QAAQ,GAAG,mBAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,iBAAQ,CAChB,0BAA0B,IAAI,KAAM,KAAe,CAAC,OAAO,EAAE,CAC9D,CAAC;IACJ,CAAC;IAED,IAAI,IAAe,CAAC;IACpB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,iBAAQ,CAChB,8BAA8B,IAAI,KAAM,KAAe,CAAC,OAAO,EAAE,CAClE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,EAAE,CAAC;QAC1F,MAAM,IAAI,iBAAQ,CAChB,cAAc,IAAI,yCAAyC,CAC5D,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,OAAmB,CAAC;AAClC,CAAC;AAEM,KAAK,UAAU,QAAQ,CAAC,OAAqB;IAClD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,IAAA,sBAAa,EAAC,OAAO,EAAE;QAC3C,YAAY,EAAE,IAAI;QAClB,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,IAAA,2BAAgB,EAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,iBAAQ,CAChB,wBAAwB,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7G,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAE9B,MAAM,IAAA,0BAAe,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACrC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,IAAA,gBAAI,EAAC,IAAA,iBAAK,EAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { GlobalOptions } from "./shared";
2
+ export declare function runCheck(options: GlobalOptions): Promise<void>;
@@ -0,0 +1,37 @@
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.runCheck = runCheck;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const figlet_1 = __importDefault(require("figlet"));
9
+ const colorette_1 = require("colorette");
10
+ const check_1 = require("../lib/check");
11
+ const errors_1 = require("../lib/errors");
12
+ const modules_state_1 = require("../lib/modules-state");
13
+ const modules_state_2 = require("../core/modules-state");
14
+ async function runCheck(options) {
15
+ console.info(figlet_1.default.textSync("Newbie", {
16
+ font: "Epic",
17
+ width: 80,
18
+ whitespaceBreak: true,
19
+ }));
20
+ console.info("Checking environment variables...\n");
21
+ const cwd = node_path_1.default.resolve(options.cwd);
22
+ const state = await (0, modules_state_1.readModulesState)(cwd);
23
+ const missing = await (0, check_1.collectMissingEnv)(cwd, (0, modules_state_2.moduleKeys)(state));
24
+ const groups = Object.keys(missing);
25
+ if (groups.length === 0) {
26
+ console.info((0, colorette_1.green)("[info] All environment variables are set."));
27
+ return;
28
+ }
29
+ for (const moduleName of groups) {
30
+ console.info((0, colorette_1.yellow)(`Module ${moduleName} missing:`));
31
+ for (const key of missing[moduleName])
32
+ console.info((0, colorette_1.red)(` ${key}`));
33
+ console.info("");
34
+ }
35
+ throw new errors_1.CliError(`${groups.length} module(s) have missing environment variables.`);
36
+ }
37
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":";;;;;AAWA,4BA6BC;AAxCD,0DAA6B;AAC7B,oDAA4B;AAC5B,yCAA+C;AAE/C,wCAAiD;AACjD,0CAAyC;AACzC,wDAAwD;AACxD,yDAAmD;AAI5C,KAAK,UAAU,QAAQ,CAAC,OAAsB;IACnD,OAAO,CAAC,IAAI,CACV,gBAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE;QACxB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,EAAE;QACT,eAAe,EAAE,IAAI;KACtB,CAAC,CACH,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAEpD,MAAM,GAAG,GAAG,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,IAAA,gCAAgB,EAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,IAAA,yBAAiB,EAAC,GAAG,EAAE,IAAA,0BAAU,EAAC,KAAK,CAAC,CAAC,CAAC;IAEhE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,IAAA,iBAAK,EAAC,2CAA2C,CAAC,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,IAAA,kBAAM,EAAC,UAAU,UAAU,WAAW,CAAC,CAAC,CAAC;QACtD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,IAAA,eAAG,EAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,iBAAQ,CAChB,GAAG,MAAM,CAAC,MAAM,gDAAgD,CACjE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { GlobalOptions } from "./shared";
2
+ export interface ConfigOptions extends GlobalOptions {
3
+ add?: string[];
4
+ remove?: string[];
5
+ list?: boolean;
6
+ }
7
+ export declare function runConfig(options: ConfigOptions): Promise<void>;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runConfig = runConfig;
4
+ const prompts_1 = require("@inquirer/prompts");
5
+ const colorette_1 = require("colorette");
6
+ const modules_state_1 = require("../core/modules-state");
7
+ const registry_1 = require("../lib/registry");
8
+ const modules_state_2 = require("../lib/modules-state");
9
+ const errors_1 = require("../lib/errors");
10
+ const shared_1 = require("./shared");
11
+ function parseModuleList(values) {
12
+ return (values ?? [])
13
+ .flatMap((value) => value.split(","))
14
+ .map((value) => value.trim())
15
+ .filter(Boolean);
16
+ }
17
+ function assertKnown(names, known) {
18
+ const knownSet = new Set(known);
19
+ const unknown = names.filter((name) => !knownSet.has(name));
20
+ if (unknown.length > 0) {
21
+ throw new errors_1.CliError(`Unknown module(s): ${unknown.join(", ")}. Available modules: ${known.join(", ")}`);
22
+ }
23
+ }
24
+ async function runConfig(options) {
25
+ const { ctx } = await (0, shared_1.createContext)(options, {
26
+ ensureConfig: true,
27
+ fetch: false,
28
+ });
29
+ const { cwd, sink } = ctx;
30
+ const known = await (0, registry_1.listRegistryKeys)(ctx.registry.root);
31
+ if (options.list) {
32
+ console.info((0, colorette_1.green)("enabled modules:"));
33
+ for (const record of ctx.state.modules) {
34
+ const version = record.version ?? (record.sourceCommit ? record.sourceCommit.slice(0, 7) : "(not installed)");
35
+ console.info(` - ${record.key} (${version})`);
36
+ }
37
+ return;
38
+ }
39
+ const addNames = parseModuleList(options.add);
40
+ const removeNames = parseModuleList(options.remove);
41
+ if (addNames.length > 0 || removeNames.length > 0) {
42
+ assertKnown(addNames, known);
43
+ assertKnown(removeNames, known);
44
+ const next = [...(0, modules_state_1.moduleKeys)(ctx.state)];
45
+ for (const name of addNames)
46
+ if (!next.includes(name))
47
+ next.push(name);
48
+ for (const name of removeNames) {
49
+ const index = next.indexOf(name);
50
+ if (index !== -1)
51
+ next.splice(index, 1);
52
+ }
53
+ await (0, modules_state_2.writeModulesState)(cwd, sink, (0, modules_state_1.withModuleKeys)(ctx.state, next));
54
+ console.info((0, colorette_1.green)(`[info] enabled modules: ${next.join(", ") || "(none)"}`));
55
+ return;
56
+ }
57
+ const current = (0, modules_state_1.moduleKeys)(ctx.state).filter((key) => known.includes(key));
58
+ const chosen = await (0, prompts_1.checkbox)({
59
+ message: "Config modules:",
60
+ choices: known.map((name) => {
61
+ const checked = current.includes(name);
62
+ return {
63
+ value: name,
64
+ name: `${name}${checked ? " (enabled)" : ""}`,
65
+ checked,
66
+ };
67
+ }),
68
+ pageSize: 100,
69
+ loop: true,
70
+ });
71
+ if (chosen.length === current.length &&
72
+ chosen.every((name) => current.includes(name))) {
73
+ console.info("\n[info] You did not make any changes to the configuration.\n");
74
+ return;
75
+ }
76
+ await (0, modules_state_2.writeModulesState)(cwd, sink, (0, modules_state_1.withModuleKeys)(ctx.state, chosen));
77
+ for (const name of chosen.filter((n) => !current.includes(n)))
78
+ console.info((0, colorette_1.cyan)(`+ ${name}`));
79
+ for (const name of current.filter((n) => !chosen.includes(n)))
80
+ console.info((0, colorette_1.cyan)(`- ${name}`));
81
+ }
82
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface TemplateReference {
2
+ templatePath?: string;
3
+ templateRef?: string;
4
+ }
5
+ export interface CreateOptions extends TemplateReference {
6
+ name: string;
7
+ cwd?: string;
8
+ gitInit?: boolean;
9
+ dryRun?: boolean;
10
+ }
11
+ export interface ResolvedTemplate {
12
+ root: string;
13
+ source: string;
14
+ }
15
+ export declare function resolveTemplate(options: TemplateReference): Promise<ResolvedTemplate>;
16
+ export declare function runCreate(options: CreateOptions): Promise<void>;
@@ -0,0 +1,89 @@
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.resolveTemplate = resolveTemplate;
7
+ exports.runCreate = runCreate;
8
+ const promises_1 = __importDefault(require("node:fs/promises"));
9
+ const node_os_1 = __importDefault(require("node:os"));
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ const colorette_1 = require("colorette");
12
+ const errors_1 = require("../lib/errors");
13
+ const exec_1 = require("../lib/exec");
14
+ const TEMPLATE_REPOSITORY_URL = "https://github.com/worldzhy/newbie.git";
15
+ const TEMPLATE_SUBDIR = "templates/basic";
16
+ const TEMPLATE_PATH_ENV = "NEWBIE_TEMPLATE_PATH";
17
+ const PACKAGE_NAME_RE = /^(?:@[a-z0-9][a-z0-9-._]*\/)?[a-z0-9][a-z0-9-._]*$/;
18
+ const COPY_IGNORE = new Set([
19
+ "node_modules",
20
+ "dist",
21
+ "generated",
22
+ ".git",
23
+ ".env",
24
+ ]);
25
+ async function resolveTemplate(options) {
26
+ const explicit = options.templatePath ?? process.env[TEMPLATE_PATH_ENV];
27
+ if (explicit) {
28
+ const root = node_path_1.default.resolve(explicit);
29
+ await promises_1.default.access(node_path_1.default.join(root, "package.json"));
30
+ return { root, source: root };
31
+ }
32
+ const localDev = node_path_1.default.resolve(__dirname, "..", "..", "..", "..", TEMPLATE_SUBDIR);
33
+ if (await promises_1.default
34
+ .access(node_path_1.default.join(localDev, "package.json"))
35
+ .then(() => true)
36
+ .catch(() => false)) {
37
+ return { root: localDev, source: `monorepo checkout (${localDev})` };
38
+ }
39
+ const ref = options.templateRef;
40
+ const temp = await promises_1.default.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), "newbie-template-"));
41
+ const cloneArgs = ["clone", "--quiet"];
42
+ if (!ref)
43
+ cloneArgs.push("--depth", "1");
44
+ if (ref)
45
+ cloneArgs.push("--branch", ref);
46
+ cloneArgs.push(TEMPLATE_REPOSITORY_URL, temp);
47
+ await (0, exec_1.execCapture)("git", cloneArgs);
48
+ return {
49
+ root: node_path_1.default.join(temp, TEMPLATE_SUBDIR),
50
+ source: `${TEMPLATE_REPOSITORY_URL}#${ref ?? "HEAD"}`,
51
+ };
52
+ }
53
+ async function copyTemplate(from, to) {
54
+ await promises_1.default.cp(from, to, {
55
+ recursive: true,
56
+ filter: (src) => !COPY_IGNORE.has(node_path_1.default.basename(src)) || src === from,
57
+ });
58
+ }
59
+ async function runCreate(options) {
60
+ const { name } = options;
61
+ if (!PACKAGE_NAME_RE.test(name) || name.length > 214) {
62
+ throw new errors_1.CliError(`Invalid project name '${name}'. Use a lowercase npm package name, e.g. my-project or @scope/my-project.`);
63
+ }
64
+ const targetDir = node_path_1.default.resolve(options.cwd ?? process.cwd(), name);
65
+ const existing = await promises_1.default.readdir(targetDir).catch(() => null);
66
+ if (existing && existing.length > 0) {
67
+ throw new errors_1.CliError(`Target directory ${targetDir} is not empty.`);
68
+ }
69
+ console.info((0, colorette_1.cyan)(`Creating project '${name}' from the basic template...`));
70
+ const templateRoot = (await resolveTemplate(options)).root;
71
+ if (options.dryRun) {
72
+ console.info(`[dry-run] copy ${templateRoot} -> ${targetDir}`);
73
+ console.info(`[dry-run] set package.json name to '${name}'`);
74
+ if (options.gitInit !== false)
75
+ console.info("[dry-run] git init");
76
+ return;
77
+ }
78
+ await copyTemplate(templateRoot, targetDir);
79
+ const packageJsonPath = node_path_1.default.join(targetDir, "package.json");
80
+ const packageJson = JSON.parse(await promises_1.default.readFile(packageJsonPath, "utf8"));
81
+ packageJson.name = name;
82
+ await promises_1.default.writeFile(packageJsonPath, `${JSON.stringify(packageJson, null, 2)}\n`);
83
+ if (options.gitInit !== false) {
84
+ await (0, exec_1.execCapture)("git", ["init", "--quiet"], { cwd: targetDir });
85
+ }
86
+ console.info((0, colorette_1.green)((0, colorette_1.bold)("\n✓ Project created.\n")));
87
+ console.info(`Next steps:\n cd ${name}\n npm install\n newbie config\n`);
88
+ }
89
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { GlobalOptions } from "./shared";
2
+ export declare function runInteractive(options: GlobalOptions): Promise<void>;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runInteractive = runInteractive;
4
+ const prompts_1 = require("@inquirer/prompts");
5
+ const colorette_1 = require("colorette");
6
+ const pipeline_1 = require("../assemble/pipeline");
7
+ const modules_state_1 = require("../core/modules-state");
8
+ const registry_1 = require("../lib/registry");
9
+ const shared_1 = require("./shared");
10
+ async function runInteractive(options) {
11
+ const { ctx } = await (0, shared_1.createContext)(options, {
12
+ ensureConfig: true,
13
+ fetch: true,
14
+ });
15
+ (0, shared_1.printBanner)();
16
+ console.info("What is Newbie?");
17
+ console.info(" -----------------------------------------------------------");
18
+ console.info("| Newbie is a backend development framework based on NestJS.|");
19
+ console.info("| Reuse ready-made modules (account, workflow, ...) and |");
20
+ console.info("| flexibly add or remove them in your project. |");
21
+ console.info(" -----------------------------------------------------------\n");
22
+ const available = await (0, registry_1.listRegistryKeys)(ctx.registry.root);
23
+ const enabled = (0, modules_state_1.moduleKeys)(ctx.state).filter((key) => available.includes(key));
24
+ const chosen = await (0, prompts_1.checkbox)({
25
+ message: "Which modules do you want to enable for your project:",
26
+ choices: available.map((name) => {
27
+ const checked = enabled.includes(name);
28
+ return {
29
+ value: name,
30
+ name: `${name}${checked ? " (enabled)" : ""}`,
31
+ checked,
32
+ };
33
+ }),
34
+ pageSize: 100,
35
+ loop: true,
36
+ });
37
+ if (chosen.length === enabled.length &&
38
+ chosen.every((name) => enabled.includes(name))) {
39
+ console.info("\n[info] You did not make any changes to the modules.\n");
40
+ return;
41
+ }
42
+ const added = chosen.filter((name) => !enabled.includes(name));
43
+ const removed = enabled.filter((name) => !chosen.includes(name));
44
+ let message;
45
+ if (!removed.length && added.length) {
46
+ message = `Do you want to ENABLE ${(0, colorette_1.cyan)(added.join(", "))}?`;
47
+ }
48
+ else if (removed.length && !added.length) {
49
+ message = `Do you want to DISABLE ${(0, colorette_1.inverse)(removed.join(", "))}?`;
50
+ }
51
+ else {
52
+ message = `Do you want to DISABLE ${(0, colorette_1.inverse)(removed.join(", "))} and ENABLE ${(0, colorette_1.cyan)(added.join(", "))}?`;
53
+ }
54
+ const confirmed = await (0, prompts_1.select)({
55
+ message,
56
+ choices: [
57
+ { name: "Yes", value: "yes" },
58
+ { name: "No", value: "no" },
59
+ ],
60
+ });
61
+ if (confirmed !== "yes") {
62
+ console.info("\n[info] No changes applied.\n");
63
+ return;
64
+ }
65
+ await (0, pipeline_1.applyModuleKeys)(ctx, chosen);
66
+ ctx.issues.assertEmpty();
67
+ console.info((0, colorette_1.bold)((0, colorette_1.green)("\n🍺 C O M P L E T E\n")));
68
+ }
69
+ //# sourceMappingURL=default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/commands/default.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { GlobalOptions } from "./shared";
2
+ export declare function runDoctor(options: GlobalOptions): Promise<void>;
@@ -0,0 +1,145 @@
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.runDoctor = runDoctor;
7
+ const promises_1 = __importDefault(require("node:fs/promises"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const figlet_1 = __importDefault(require("figlet"));
10
+ const colorette_1 = require("colorette");
11
+ const paths_1 = require("../constants/paths");
12
+ const drift_1 = require("../core/drift");
13
+ const modules_state_1 = require("../core/modules-state");
14
+ const prisma_schema_1 = require("../core/prisma-schema");
15
+ const check_1 = require("../lib/check");
16
+ const errors_1 = require("../lib/errors");
17
+ const drift_2 = require("../lib/drift");
18
+ const fs_util_1 = require("../lib/fs-util");
19
+ const registry_1 = require("../lib/registry");
20
+ const module_install_1 = require("../lib/module-install");
21
+ const modules_state_2 = require("../lib/modules-state");
22
+ async function runDoctor(options) {
23
+ console.info(figlet_1.default.textSync("Newbie", {
24
+ font: "Epic",
25
+ width: 80,
26
+ whitespaceBreak: true,
27
+ }));
28
+ const cwd = node_path_1.default.resolve(options.cwd);
29
+ const findings = [];
30
+ const error = (message) => {
31
+ findings.push({ level: "error", message });
32
+ };
33
+ const notice = (message) => {
34
+ findings.push({ level: "notice", message });
35
+ };
36
+ if (!(await (0, modules_state_2.stateExists)(cwd))) {
37
+ throw new errors_1.CliError(`${paths_1.MODULES_JSON} not found. Run 'newbie config' to declare modules first.`);
38
+ }
39
+ const state = await (0, modules_state_2.readModulesState)(cwd);
40
+ const keys = (0, modules_state_1.moduleKeys)(state);
41
+ const registry = await (0, registry_1.resolveRegistry)({ fetch: false });
42
+ if (registry) {
43
+ console.info(`Registry: ${registry.local ? "local " : "cached "}${registry.root} @ ${registry.sourceCommit?.slice(0, 7) ?? "unknown"}\n`);
44
+ }
45
+ else {
46
+ notice("Registry unavailable offline; drift checks skipped (set NEWBIE_MODULES_PATH or run an online command).");
47
+ }
48
+ const known = new Set(registry ? await (0, registry_1.listRegistryKeys)(registry.root) : []);
49
+ for (const key of keys) {
50
+ if (!known.has(key))
51
+ error(`Module '${key}' is not present in the registry.`);
52
+ }
53
+ if (!(await (0, fs_util_1.fileExists)(cwd, paths_1.MODULES_MODULE_TS))) {
54
+ error(`Generated ${paths_1.MODULES_MODULE_TS} is missing; run 'newbie install'.`);
55
+ }
56
+ if (!(await (0, fs_util_1.fileExists)(cwd, paths_1.MODULES_CONFIG_TS))) {
57
+ error(`Generated ${paths_1.MODULES_CONFIG_TS} is missing; run 'newbie install'.`);
58
+ }
59
+ const missingEnv = await (0, check_1.collectMissingEnv)(cwd, keys);
60
+ const datasourceContent = await promises_1.default
61
+ .readFile(node_path_1.default.resolve(cwd, paths_1.PRISMA_SCHEMA_MAIN), "utf8")
62
+ .catch(() => null);
63
+ const datasourceSchemas = datasourceContent
64
+ ? (0, prisma_schema_1.readDatasourceSchemas)(datasourceContent)
65
+ : null;
66
+ if (datasourceContent && datasourceSchemas === null) {
67
+ notice(`Cannot parse schemas array in ${paths_1.PRISMA_SCHEMA_MAIN}.`);
68
+ }
69
+ for (const key of keys) {
70
+ const label = (0, colorette_1.bold)(key);
71
+ if (!(await (0, fs_util_1.fileExists)(cwd, `${paths_1.MODULES_DIR}/${key}`))) {
72
+ error(`${label}: module directory missing; run 'newbie install'.`);
73
+ continue;
74
+ }
75
+ const manifest = await (0, module_install_1.readInstalledManifest)(cwd, key);
76
+ if (!manifest) {
77
+ error(`${label}: newbie.module.json missing or unreadable.`);
78
+ continue;
79
+ }
80
+ if (manifest.schema) {
81
+ if (!(await (0, fs_util_1.fileExists)(cwd, node_path_1.default.posix.join(paths_1.PRISMA_SCHEMA_MODELS_DIR, `${key}.prisma`)))) {
82
+ error(`${label}: ${paths_1.PRISMA_SCHEMA_MODELS_DIR}/${key}.prisma missing; run 'newbie install'.`);
83
+ }
84
+ if (datasourceSchemas &&
85
+ !datasourceSchemas.includes((0, prisma_schema_1.moduleSchemaNamespace)(key))) {
86
+ error(`${label}: datasource schemas lacks '${(0, prisma_schema_1.moduleSchemaNamespace)(key)}'.`);
87
+ }
88
+ }
89
+ if (missingEnv[key]) {
90
+ error(`${label}: missing env ${missingEnv[key].join(", ")}`);
91
+ }
92
+ const record = state.modules.find((entry) => entry.key === key);
93
+ if (registry?.sourceCommit &&
94
+ record?.sourceCommit &&
95
+ record.sourceCommit !== registry.sourceCommit) {
96
+ notice(`${label}: update available (${record.sourceCommit.slice(0, 7)} -> ${registry.sourceCommit.slice(0, 7)}); run 'newbie update'.`);
97
+ }
98
+ if (registry && record?.sourceCommit) {
99
+ const pristine = await (0, drift_2.snapshotPristineModule)(registry, key, record.sourceCommit);
100
+ if (pristine) {
101
+ const drift = (0, drift_1.diffSnapshots)(await (0, drift_2.snapshotInstalledModule)(cwd, key), pristine);
102
+ if (!drift.clean) {
103
+ const details = [
104
+ ...drift.changed.map((file) => `changed: ${file}`),
105
+ ...drift.added.map((file) => `added: ${file}`),
106
+ ...drift.removed.map((file) => `removed: ${file}`),
107
+ ].join("; ");
108
+ error(`${label}: local drift detected (${details})`);
109
+ }
110
+ }
111
+ }
112
+ }
113
+ const copied = new Set((await promises_1.default
114
+ .readdir(node_path_1.default.resolve(cwd, paths_1.MODULES_DIR), { withFileTypes: true })
115
+ .catch(() => []))
116
+ .filter((dirent) => dirent.isDirectory())
117
+ .map((dirent) => dirent.name));
118
+ for (const dir of copied) {
119
+ if (!keys.includes(dir)) {
120
+ const isRegistryModule = registry
121
+ ? (await (0, registry_1.readRegistryModule)(registry.root, dir)) !== null
122
+ : false;
123
+ if (isRegistryModule) {
124
+ notice(`Extra module directory '${dir}' not declared in ${paths_1.MODULES_JSON}; run 'newbie install' to remove it.`);
125
+ }
126
+ }
127
+ }
128
+ const errors = findings.filter((finding) => finding.level === "error");
129
+ const notices = findings.filter((finding) => finding.level === "notice");
130
+ for (const finding of errors)
131
+ console.info((0, colorette_1.red)(` ✗ ${finding.message}`));
132
+ for (const finding of notices)
133
+ console.info((0, colorette_1.yellow)(` ! ${finding.message}`));
134
+ if (findings.length === 0) {
135
+ console.info((0, colorette_1.green)("\n✓ Everything looks good.\n"));
136
+ }
137
+ else {
138
+ console.info((0, colorette_1.gray)(`\n${errors.length} error(s), ${notices.length} notice(es).\n`));
139
+ console.info((0, colorette_1.cyan)("(notices are informational; errors make the command fail)"));
140
+ }
141
+ if (errors.length > 0) {
142
+ throw new errors_1.CliError(`Doctor found ${errors.length} problem(s).`);
143
+ }
144
+ }
145
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { GlobalOptions } from "./shared";
2
+ export interface EnvCommandOptions extends GlobalOptions {
3
+ environment?: string;
4
+ yes?: boolean;
5
+ }
6
+ export declare function runEnvPull(options: EnvCommandOptions): Promise<void>;
7
+ export declare function runEnvPush(options: EnvCommandOptions): Promise<void>;