@quark-hq/quark-scripts 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 (86) hide show
  1. package/LICENSE +21 -0
  2. package/dist/app/base-application.js +67 -0
  3. package/dist/app/buildApplication.js +20 -0
  4. package/dist/app/copyStaticApplication.js +34 -0
  5. package/dist/app/devApplication.js +59 -0
  6. package/dist/app/prod-publish-application.js +124 -0
  7. package/dist/app/publish-dev-application.js +104 -0
  8. package/dist/app/publishDevApplication.js +16 -0
  9. package/dist/app/release-application.js +85 -0
  10. package/dist/app/releaseApplication.js +154 -0
  11. package/dist/app/unfreeze-application.js +75 -0
  12. package/dist/app/watchStaticApplication.js +34 -0
  13. package/dist/cli/cli-containers.js +70 -0
  14. package/dist/cli/cliCommand.js +2 -0
  15. package/dist/cli/cliContainers.js +62 -0
  16. package/dist/cli/commands/buildCommands.js +17 -0
  17. package/dist/cli/commands/copyStaticCommands.js +17 -0
  18. package/dist/cli/commands/devCommands.js +17 -0
  19. package/dist/cli/commands/prod-publish-commands.js +18 -0
  20. package/dist/cli/commands/publish-dev-commands.js +17 -0
  21. package/dist/cli/commands/publishDevCommands.js +17 -0
  22. package/dist/cli/commands/release-commands.js +17 -0
  23. package/dist/cli/commands/releaseCommands.js +17 -0
  24. package/dist/cli/commands/relesaeCommand.js +15 -0
  25. package/dist/cli/commands/unfreeze-commands.js +17 -0
  26. package/dist/cli/commands/watchStaticCommands.js +17 -0
  27. package/dist/cli/program.js +16 -0
  28. package/dist/commands/index.d.ts +8 -0
  29. package/dist/commands/index.js +132 -0
  30. package/dist/commands/index.js.map +1 -0
  31. package/dist/domain/graph.js +2 -0
  32. package/dist/domain/new-package-freeze-from-map.js +21 -0
  33. package/dist/domain/resolve-workspace-dependency-specifier-for-freeze-map.js +33 -0
  34. package/dist/domain/reverse-dependents.js +45 -0
  35. package/dist/domain/topological-sorting.js +43 -0
  36. package/dist/domain/transitive-dependents.js +25 -0
  37. package/dist/domain/workspace-transitive-dependencies.js +25 -0
  38. package/dist/errors/unfreeze-blocked-error.js +44 -0
  39. package/dist/index.d.ts +2 -0
  40. package/dist/index.js +32 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/infrastructure/adapters/base-release-adapter.js +281 -0
  43. package/dist/infrastructure/adapters/maven-prod-publish-adapter.js +48 -0
  44. package/dist/infrastructure/adapters/maven-release-adapter.js +58 -0
  45. package/dist/infrastructure/adapters/node-prod-publish-adapter.js +111 -0
  46. package/dist/infrastructure/adapters/node-release-adapter/node-file-update.js +1 -0
  47. package/dist/infrastructure/adapters/node-release-adapter/node-release-adapter.js +289 -0
  48. package/dist/infrastructure/adapters/node-release-adapter.js +202 -0
  49. package/dist/infrastructure/config/loadDotEnv.js +38 -0
  50. package/dist/infrastructure/config/nodeRegistryEnv.js +41 -0
  51. package/dist/infrastructure/config/quarkConfigProvider.js +50 -0
  52. package/dist/infrastructure/git/gitService.js +179 -0
  53. package/dist/infrastructure/graph/nxGraphProvide.js +84 -0
  54. package/dist/infrastructure/logging/consoleLogger.js +25 -0
  55. package/dist/infrastructure/process/nodeProcessRunner.js +14 -0
  56. package/dist/infrastructure/release/git-release-map-store.js +64 -0
  57. package/dist/ports/config.js +2 -0
  58. package/dist/ports/git.js +2 -0
  59. package/dist/ports/graph.js +2 -0
  60. package/dist/ports/logger.js +2 -0
  61. package/dist/ports/map.js +2 -0
  62. package/dist/ports/platform-dev-publish-adapter.js +2 -0
  63. package/dist/ports/platform-prod-publish-adapter.js +2 -0
  64. package/dist/ports/platform-release-adapter.js +2 -0
  65. package/dist/ports/processRunner.js +2 -0
  66. package/dist/ports/prompts.js +2 -0
  67. package/dist/ports/release-map-store.js +2 -0
  68. package/dist/scripts/dev.d.ts +20 -0
  69. package/dist/scripts/dev.js +204 -0
  70. package/dist/scripts/dev.js.map +1 -0
  71. package/dist/scripts/map.json +1616 -0
  72. package/dist/scripts/prod.d.ts +1 -0
  73. package/dist/scripts/prod.js +143 -0
  74. package/dist/scripts/prod.js.map +1 -0
  75. package/dist/scripts/release.d.ts +51 -0
  76. package/dist/scripts/release.js +833 -0
  77. package/dist/scripts/release.js.map +1 -0
  78. package/dist/tests/index.test.js +13 -0
  79. package/dist/tests/mocks/release.js +8 -0
  80. package/dist/tests/unit/release/index.test.js +32 -0
  81. package/dist/utils/checkIfFreeze.js +1 -0
  82. package/dist/utils/commit.js +39 -0
  83. package/dist/utils/drawRepoStatus.js +66 -0
  84. package/dist/utils/file.js +14 -0
  85. package/dist/utils/metrics.js +22 -0
  86. package/package.json +64 -0
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NodeGitService = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const util_1 = require("util");
6
+ const quark_security_1 = require("@quark-hq/quark-security");
7
+ const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
8
+ const GIT_OPTIONS = {
9
+ encoding: "utf8",
10
+ maxBuffer: 50 * 1024 * 1024,
11
+ };
12
+ async function gitExec(args) {
13
+ const { stdout } = await execFileAsync("git", args, GIT_OPTIONS);
14
+ return stdout.trim();
15
+ }
16
+ class NodeGitService {
17
+ constructor() {
18
+ this.hasCommits = null;
19
+ }
20
+ /* ---------------------------------- */
21
+ /* Repository Info */
22
+ /* ---------------------------------- */
23
+ async getRepositoryRoot() {
24
+ return gitExec(["rev-parse", "--show-toplevel"]);
25
+ }
26
+ async getCurrentBranch() {
27
+ if (!(await this.repoHasCommits())) {
28
+ return gitExec(["symbolic-ref", "--short", "HEAD"]);
29
+ }
30
+ return gitExec(["rev-parse", "--abbrev-ref", "HEAD"]);
31
+ }
32
+ /* ---------------------------------- */
33
+ /* Remote Operations */
34
+ /* ---------------------------------- */
35
+ async fetch(branch) {
36
+ (0, quark_security_1.assertSafeGitBranch)(branch, "branch");
37
+ try {
38
+ await execFileAsync("git", ["fetch", "origin", branch], GIT_OPTIONS);
39
+ }
40
+ catch {
41
+ // ignore if remote/branch missing
42
+ }
43
+ }
44
+ async commitsBehind(branch) {
45
+ (0, quark_security_1.assertSafeGitBranch)(branch, "branch");
46
+ if (!(await this.repoHasCommits()))
47
+ return 0;
48
+ try {
49
+ const stdout = await gitExec([
50
+ "rev-list",
51
+ "--count",
52
+ `HEAD..origin/${branch}`,
53
+ ]);
54
+ return parseInt(stdout.trim(), 10) || 0;
55
+ }
56
+ catch {
57
+ return 0;
58
+ }
59
+ }
60
+ /* ---------------------------------- */
61
+ /* Change Detection */
62
+ /* ---------------------------------- */
63
+ async getChangedFiles(baseBranch) {
64
+ (0, quark_security_1.assertSafeGitBranch)(baseBranch, "baseBranch");
65
+ if (!(await this.repoHasCommits())) {
66
+ return this.listAllTrackedAndUntracked();
67
+ }
68
+ try {
69
+ const [trackedResult, untrackedResult] = await Promise.allSettled([
70
+ execFileAsync("git", ["diff", "--name-only", `origin/${baseBranch}`], GIT_OPTIONS),
71
+ execFileAsync("git", ["ls-files", "--others", "--exclude-standard"], GIT_OPTIONS),
72
+ ]);
73
+ // If base branch doesn't exist, fall back to listing ALL tracked files
74
+ let trackedFiles = [];
75
+ if (trackedResult.status === "fulfilled") {
76
+ trackedFiles = trackedResult.value.stdout
77
+ .split("\n")
78
+ .map(f => f.trim())
79
+ .filter(Boolean);
80
+ }
81
+ else {
82
+ // origin/baseBranch doesn't exist โ€” treat every tracked file as changed
83
+ const allTrackedResult = await execFileAsync("git", ["ls-files"], GIT_OPTIONS).catch(() => ({ stdout: "" }));
84
+ trackedFiles = allTrackedResult.stdout
85
+ .split("\n")
86
+ .map(f => f.trim())
87
+ .filter(Boolean);
88
+ }
89
+ const untrackedFiles = untrackedResult.status === "fulfilled"
90
+ ? untrackedResult.value.stdout
91
+ .split("\n")
92
+ .map(f => f.trim())
93
+ .filter(Boolean)
94
+ : [];
95
+ return [...new Set([...trackedFiles, ...untrackedFiles])];
96
+ }
97
+ catch {
98
+ return [];
99
+ }
100
+ }
101
+ /* ---------------------------------- */
102
+ /* Helpers */
103
+ /* ---------------------------------- */
104
+ async repoHasCommits() {
105
+ if (this.hasCommits !== null) {
106
+ return this.hasCommits;
107
+ }
108
+ try {
109
+ await execFileAsync("git", ["rev-parse", "HEAD"], GIT_OPTIONS);
110
+ this.hasCommits = true;
111
+ }
112
+ catch {
113
+ this.hasCommits = false;
114
+ }
115
+ return this.hasCommits;
116
+ }
117
+ async listAllTrackedAndUntracked() {
118
+ try {
119
+ const stdout = await gitExec([
120
+ "ls-files",
121
+ "--others",
122
+ "--exclude-standard",
123
+ ]);
124
+ return stdout
125
+ .split("\n")
126
+ .map(f => f.trim())
127
+ .filter(Boolean);
128
+ }
129
+ catch {
130
+ return [];
131
+ }
132
+ }
133
+ /* ---------------------------------- */
134
+ /* File Reading */
135
+ /* ---------------------------------- */
136
+ async readFile(path, branch) {
137
+ (0, quark_security_1.assertSafeGitBranch)(branch, "branch");
138
+ (0, quark_security_1.assertSafeRepoRelativePathForGitShow)(path, "path");
139
+ const spec = `origin/${branch}:${path}`;
140
+ return gitExec(["show", spec]);
141
+ }
142
+ async readFileFromRef(filePath, ref) {
143
+ (0, quark_security_1.assertSafeGitRef)(ref, "ref");
144
+ (0, quark_security_1.assertSafeRepoRelativePathForGitShow)(filePath, "filePath");
145
+ const spec = `${ref}:${filePath}`;
146
+ return gitExec(["show", spec]);
147
+ }
148
+ /* ---------------------------------- */
149
+ /* Tag Operations */
150
+ /* ---------------------------------- */
151
+ async getTags(targetTag) {
152
+ const stdout = await gitExec(["tag", "--sort=-creatordate"]);
153
+ const tags = stdout.trim().split("\n").filter(Boolean);
154
+ if (tags.length === 0) {
155
+ throw new Error("No git tags found.");
156
+ }
157
+ if (targetTag) {
158
+ (0, quark_security_1.assertSafeGitRef)(targetTag, "targetTag");
159
+ const targetIndex = tags.indexOf(targetTag);
160
+ if (targetIndex === -1) {
161
+ throw new Error(`Tag "${targetTag}" not found.`);
162
+ }
163
+ const previousTag = tags[targetIndex + 1];
164
+ if (!previousTag) {
165
+ return [null, targetTag];
166
+ }
167
+ (0, quark_security_1.assertSafeGitRef)(previousTag, "previousTag");
168
+ return [previousTag, targetTag];
169
+ }
170
+ if (tags.length === 1) {
171
+ (0, quark_security_1.assertSafeGitRef)(tags[0], "latestTag");
172
+ return [null, tags[0]];
173
+ }
174
+ (0, quark_security_1.assertSafeGitRef)(tags[1], "previousTag");
175
+ (0, quark_security_1.assertSafeGitRef)(tags[0], "latestTag");
176
+ return [tags[1], tags[0]];
177
+ }
178
+ }
179
+ exports.NodeGitService = NodeGitService;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NxGraphProvider = void 0;
4
+ const path_1 = require("path");
5
+ const fs_1 = require("fs");
6
+ const os_1 = require("os");
7
+ const quark_security_1 = require("@quark-hq/quark-security");
8
+ class NxGraphProvider {
9
+ constructor(workspaceRoot = process.cwd()) {
10
+ this.workspaceRoot = workspaceRoot;
11
+ this.graph = {};
12
+ }
13
+ async build() {
14
+ const raw = this.runNxGraph();
15
+ const nx = JSON.parse(raw);
16
+ this.graph = nx.graph;
17
+ const adjacency = {};
18
+ const metadata = {};
19
+ for (const [source, deps] of Object.entries(nx.graph.dependencies)) {
20
+ adjacency[source] = deps.map(d => d.target);
21
+ }
22
+ for (const [name, node] of Object.entries(nx.graph.nodes)) {
23
+ // bearer:disable javascript_lang_path_traversal
24
+ const rootDir = (0, quark_security_1.resolveUnderWorkspaceRoot)(this.workspaceRoot, node.data.root);
25
+ const platform = node.data.packageMetadata?.platform ??
26
+ this.inferPlatformFromTags(node.data.tags) ??
27
+ "unknown";
28
+ metadata[name] = { rootDir, platform };
29
+ }
30
+ return { adjacency, metadata };
31
+ }
32
+ runNxGraph() {
33
+ const tmpFile = (0, path_1.join)((0, os_1.tmpdir)(), `nx-graph-${Date.now()}.json`);
34
+ try {
35
+ const r = (0, quark_security_1.spawnSyncSafe)("npx", ["--yes", "nx", "graph", "--file", tmpFile], {
36
+ cwd: this.workspaceRoot || process.cwd(),
37
+ stdio: "pipe",
38
+ maxBuffer: 50 * 1024 * 1024,
39
+ });
40
+ (0, quark_security_1.assertSpawnOk)(r, "npx nx graph");
41
+ return (0, fs_1.readFileSync)(tmpFile, "utf-8");
42
+ }
43
+ finally {
44
+ try {
45
+ (0, fs_1.unlinkSync)(tmpFile);
46
+ }
47
+ catch { /* already cleaned up */ }
48
+ }
49
+ }
50
+ inferPlatformFromTags(tags) {
51
+ if (!tags)
52
+ return null;
53
+ if (tags.some(t => t.includes("npm")))
54
+ return "node";
55
+ if (tags.some(t => t.includes("maven")))
56
+ return "maven";
57
+ return null;
58
+ }
59
+ async getInvertedAdjacencyList(adjacency) {
60
+ const inverted = {};
61
+ // Initialize all keys
62
+ for (const node of Object.keys(adjacency)) {
63
+ inverted[node] = [];
64
+ }
65
+ // Reverse edges
66
+ for (const [node, deps] of Object.entries(adjacency)) {
67
+ for (const dep of deps) {
68
+ if (!inverted[dep]) {
69
+ inverted[dep] = [];
70
+ }
71
+ inverted[dep].push(node);
72
+ }
73
+ }
74
+ return inverted;
75
+ }
76
+ async getPackageJson(pkg) {
77
+ const node = this.graph.nodes[pkg];
78
+ if (!node) {
79
+ throw new Error(`Package "${pkg}" not found in graph`);
80
+ }
81
+ return node.data.root;
82
+ }
83
+ }
84
+ exports.NxGraphProvider = NxGraphProvider;
@@ -0,0 +1,25 @@
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.ConsoleLogger = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ class ConsoleLogger {
9
+ info(message) {
10
+ console.log(chalk_1.default.cyan(message));
11
+ }
12
+ success(message) {
13
+ console.log(chalk_1.default.green(message));
14
+ }
15
+ warn(message) {
16
+ console.log(chalk_1.default.yellow(message));
17
+ }
18
+ error(message) {
19
+ console.error(chalk_1.default.red(message));
20
+ }
21
+ debug(message) {
22
+ console.log(chalk_1.default.gray(message));
23
+ }
24
+ }
25
+ exports.ConsoleLogger = ConsoleLogger;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NodeProcessRunner = void 0;
4
+ const quark_security_1 = require("@quark-hq/quark-security");
5
+ class NodeProcessRunner {
6
+ run(file, args, options) {
7
+ const result = (0, quark_security_1.spawnSyncSafe)(file, [...args], {
8
+ cwd: options?.cwd,
9
+ stdio: "inherit",
10
+ });
11
+ (0, quark_security_1.assertSpawnOk)(result, `${file} ${args.join(" ")}`);
12
+ }
13
+ }
14
+ exports.NodeProcessRunner = NodeProcessRunner;
@@ -0,0 +1,64 @@
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.GitReleaseMapStore = void 0;
7
+ exports.mergeReleaseMaps = mergeReleaseMaps;
8
+ const path_1 = __importDefault(require("path"));
9
+ const promises_1 = __importDefault(require("fs/promises"));
10
+ const quark_security_1 = require("@quark-hq/quark-security");
11
+ /** Shallow-merge per package: local fields override main (same key set as unfreeze + release). */
12
+ function mergeReleaseMaps(main, local) {
13
+ const keys = new Set([
14
+ ...Object.keys(main),
15
+ ...Object.keys(local),
16
+ ]);
17
+ const merged = {};
18
+ for (const pkg of keys) {
19
+ merged[pkg] = {
20
+ ...(main[pkg] ?? {}),
21
+ ...(local[pkg] ?? {}),
22
+ };
23
+ }
24
+ return merged;
25
+ }
26
+ class GitReleaseMapStore {
27
+ constructor(git) {
28
+ this.git = git;
29
+ }
30
+ async read(masterBranch) {
31
+ try {
32
+ const raw = await this.git.readFile(".release/map.json", masterBranch);
33
+ return JSON.parse(raw);
34
+ }
35
+ catch {
36
+ return {};
37
+ }
38
+ }
39
+ async readLocal() {
40
+ try {
41
+ const cwd = process.cwd();
42
+ const mapPath = (0, quark_security_1.assertPathInsideRoot)(cwd, path_1.default.resolve(cwd, ".release", "map.json"));
43
+ const raw = await promises_1.default.readFile(mapPath, "utf8");
44
+ return JSON.parse(raw);
45
+ }
46
+ catch {
47
+ return {};
48
+ }
49
+ }
50
+ async readMergedWithLocal(masterBranch) {
51
+ const [main, local] = await Promise.all([
52
+ this.read(masterBranch),
53
+ this.readLocal(),
54
+ ]);
55
+ return mergeReleaseMaps(main, local);
56
+ }
57
+ async write(map) {
58
+ const cwd = process.cwd();
59
+ const releaseDir = (0, quark_security_1.assertPathInsideRoot)(cwd, path_1.default.resolve(cwd, ".release"));
60
+ await promises_1.default.mkdir(releaseDir, { recursive: true });
61
+ await promises_1.default.writeFile(path_1.default.join(releaseDir, "map.json"), JSON.stringify(map, null, 2), "utf8");
62
+ }
63
+ }
64
+ exports.GitReleaseMapStore = GitReleaseMapStore;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,20 @@
1
+ declare class DevRelease {
2
+ constructor();
3
+ /**
4
+ * Check if a package has changed compared to origin/main
5
+ */
6
+ private hasPackageChanged;
7
+ /**
8
+ * Check if a specific package has changed
9
+ */
10
+ private checkPackageChanged;
11
+ /**
12
+ * Validate required environment variables
13
+ */
14
+ private validateEnvironment;
15
+ /**
16
+ * Main execution method
17
+ */
18
+ run(): Promise<void>;
19
+ }
20
+ export default DevRelease;
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const child_process_1 = require("child_process");
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const prompts_1 = __importDefault(require("prompts"));
43
+ const semver = __importStar(require("semver"));
44
+ const dotenv_1 = __importDefault(require("dotenv"));
45
+ dotenv_1.default.config();
46
+ class DevRelease {
47
+ constructor() { }
48
+ /**
49
+ * Check if a package has changed compared to origin/main
50
+ */
51
+ async hasPackageChanged(packageRootPath) {
52
+ try {
53
+ const repoRoot = (0, child_process_1.execSync)('git rev-parse --show-toplevel', {
54
+ encoding: 'utf-8'
55
+ }).trim();
56
+ const relPath = path.relative(repoRoot, packageRootPath);
57
+ // Check for tracked changes compared to origin/main
58
+ const diff = (0, child_process_1.execSync)(`git diff --name-only origin/main -- ${relPath}`, {
59
+ encoding: 'utf-8',
60
+ }).trim();
61
+ // Check for untracked files inside package folder
62
+ const untracked = (0, child_process_1.execSync)(`git ls-files --others --exclude-standard ${relPath}`, {
63
+ encoding: 'utf-8',
64
+ }).trim();
65
+ return diff.length > 0 || untracked.length > 0;
66
+ }
67
+ catch (err) {
68
+ const errorMessage = err instanceof Error ? err.message : String(err);
69
+ console.error(`โŒ Failed to check diff for ${packageRootPath}:`, errorMessage);
70
+ return false;
71
+ }
72
+ }
73
+ /**
74
+ * Check if a specific package has changed
75
+ */
76
+ async checkPackageChanged(packageName) {
77
+ const depProjectInfo = (0, child_process_1.execSync)(`npx nx show project ${packageName}`, {
78
+ encoding: "utf-8"
79
+ }).trim();
80
+ const parsed = JSON.parse(depProjectInfo);
81
+ const repoRoot = (0, child_process_1.execSync)('git rev-parse --show-toplevel', {
82
+ encoding: 'utf-8'
83
+ }).trim();
84
+ const absRoot = path.resolve(repoRoot, parsed.root);
85
+ const hasChanged = await this.hasPackageChanged(absRoot);
86
+ return hasChanged;
87
+ }
88
+ /**
89
+ * Validate required environment variables
90
+ */
91
+ validateEnvironment() {
92
+ const env = process.env;
93
+ const required = ['SCOPE', 'DEV_REGISTRY_URL', 'DEV_AUTH_TOKEN', 'DEV_NPM_ALWAYS_AUTH'];
94
+ const missing = required.filter(key => !env[key]);
95
+ if (missing.length > 0) {
96
+ throw new Error(`Missing required environment variables: ${missing.join(', ')}`);
97
+ }
98
+ }
99
+ /**
100
+ * Main execution method
101
+ */
102
+ async run() {
103
+ try {
104
+ // Validate environment variables
105
+ this.validateEnvironment();
106
+ const res = await (0, prompts_1.default)({
107
+ type: "text",
108
+ name: "packageName",
109
+ message: "Enter the package name you want to release as alpha version:",
110
+ });
111
+ if (!res.packageName) {
112
+ console.log("No package name provided, exiting.");
113
+ return;
114
+ }
115
+ const hasChanged = await this.checkPackageChanged(res.packageName);
116
+ if (!hasChanged) {
117
+ console.log(`The package ${res.packageName} has not changed since the last release.`);
118
+ return;
119
+ }
120
+ console.log(`The package ${res.packageName} has changed since the last release.`);
121
+ const depProjectInfo = (0, child_process_1.execSync)(`npx nx show project ${res.packageName}`, {
122
+ encoding: "utf-8"
123
+ }).trim();
124
+ const parsed = JSON.parse(depProjectInfo);
125
+ const repoRoot = (0, child_process_1.execSync)('git rev-parse --show-toplevel', {
126
+ encoding: 'utf-8'
127
+ }).trim();
128
+ const packageDir = path.resolve(repoRoot, parsed.root);
129
+ const packageJsonPath = path.join(packageDir, "package.json");
130
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
131
+ const parsedVersion = semver.parse(packageJson.version);
132
+ if (!parsedVersion) {
133
+ console.error("Invalid semver version in package.json:", packageJson.version);
134
+ return;
135
+ }
136
+ const baseVersion = `${parsedVersion.major}.${parsedVersion.minor}.${parsedVersion.patch}`;
137
+ const timestamp = Date.now();
138
+ const newVersion = `${baseVersion}-alpha.${timestamp}`;
139
+ packageJson.version = newVersion;
140
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
141
+ console.log(`๐Ÿ”– Updated version to ${newVersion}`);
142
+ // ๐Ÿ“ฆ Replace project root .npmrc
143
+ const rootNpmrcPath = path.join(repoRoot, '.npmrc');
144
+ let originalNpmrc = null;
145
+ if (fs.existsSync(rootNpmrcPath)) {
146
+ originalNpmrc = fs.readFileSync(rootNpmrcPath, 'utf-8');
147
+ console.log(originalNpmrc);
148
+ }
149
+ const env = process.env;
150
+ const registryUrlWithoutProtocol = env.DEV_REGISTRY_URL.split('//')[1];
151
+ const devNpmrcContent = [
152
+ `${env.SCOPE}:registry=${env.DEV_REGISTRY_URL}`,
153
+ `//${registryUrlWithoutProtocol}:_auth=${env.DEV_AUTH_TOKEN}`,
154
+ `//${registryUrlWithoutProtocol}:always-auth=${env.DEV_NPM_ALWAYS_AUTH}`,
155
+ ].join('\n') + '\n';
156
+ try {
157
+ fs.writeFileSync(rootNpmrcPath, devNpmrcContent, 'utf-8');
158
+ console.log('๐Ÿ“ Overwrote project .npmrc with dev registry', rootNpmrcPath, devNpmrcContent);
159
+ console.log(`๐Ÿ”ง Building package: ${res.packageName}`);
160
+ (0, child_process_1.execSync)(`pnpm run build`, {
161
+ cwd: packageDir,
162
+ stdio: 'inherit',
163
+ });
164
+ (0, child_process_1.execSync)(`pnpm publish ${packageDir} --no-git-check --access public --registry ${env.DEV_REGISTRY_URL}`, {
165
+ stdio: "inherit",
166
+ });
167
+ console.log(`๐Ÿš€ Published ${res.packageName}@${newVersion} to dev registry.`);
168
+ }
169
+ catch (err) {
170
+ const errorMessage = err instanceof Error ? err.message : String(err);
171
+ console.error(`โŒ Failed to publish ${res.packageName}:`, errorMessage);
172
+ throw err; // Re-throw to ensure cleanup happens
173
+ }
174
+ finally {
175
+ // Restore original .npmrc
176
+ if (originalNpmrc !== null) {
177
+ fs.writeFileSync(rootNpmrcPath, originalNpmrc, 'utf-8');
178
+ console.log('๐Ÿ”„ Restored original project .npmrc');
179
+ }
180
+ else {
181
+ if (fs.existsSync(rootNpmrcPath)) {
182
+ fs.unlinkSync(rootNpmrcPath);
183
+ console.log('๐Ÿงน Removed temporary project .npmrc');
184
+ }
185
+ }
186
+ }
187
+ }
188
+ catch (error) {
189
+ const errorMessage = error instanceof Error ? error.message : String(error);
190
+ console.error('โŒ DevRelease failed:', errorMessage);
191
+ if (process.env.DEBUG && error instanceof Error) {
192
+ console.error(error.stack);
193
+ }
194
+ process.exit(1);
195
+ }
196
+ }
197
+ }
198
+ // Execute if run directly
199
+ if (require.main === module) {
200
+ const devRelease = new DevRelease();
201
+ console.log('Environment variables:', process.env);
202
+ devRelease.run();
203
+ }
204
+ exports.default = DevRelease;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/scripts/dev.ts"],"names":[],"mappings":"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"}