@stack-spot/build-tools 1.1.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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,8 @@
1
+ # Changelog
2
+
3
+ ## [1.1.0](https://github.com/stack-spot/portal-commons/compare/build-tools@v1.0.0...build-tools@v1.1.0) (2026-01-13)
4
+
5
+
6
+ ### Features
7
+
8
+ * build tools ([#1987](https://github.com/stack-spot/portal-commons/issues/1987)) ([a4d63d6](https://github.com/stack-spot/portal-commons/commit/a4d63d6fbf9967d8d76a669565ca0177b5498fd5))
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=package-override.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-override.d.ts","sourceRoot":"","sources":["../src/package-override.ts"],"names":[],"mappings":""}
@@ -0,0 +1,107 @@
1
+ /* eslint-disable no-console */
2
+ import { exec } from 'child_process';
3
+ import { access, constants, readFile, writeFile } from 'fs/promises';
4
+ const variables = {
5
+ timestamp: () => new Date().getTime(),
6
+ };
7
+ function merge(a, b) {
8
+ if (a === null || typeof a !== 'object')
9
+ return b;
10
+ if (Array.isArray(a) && Array.isArray(b))
11
+ return [...a, ...b];
12
+ const result = { ...a };
13
+ for (const key in b) {
14
+ if (typeof b === 'object')
15
+ result[key] = merge(result[key], b[key]);
16
+ else
17
+ result[key] = b[key];
18
+ }
19
+ return result;
20
+ }
21
+ function replaceVariables(data) {
22
+ if (typeof data === 'string') {
23
+ return data.replace(/\{([\w_]+)\}/g, (match, varname) => varname in variables ? `${variables[varname]()}` : match);
24
+ }
25
+ if (Array.isArray(data)) {
26
+ return data.map(replaceVariables);
27
+ }
28
+ if (data && typeof data === 'object') {
29
+ const result = {};
30
+ for (const key in data) {
31
+ result[key] = replaceVariables(data[key]);
32
+ }
33
+ return result;
34
+ }
35
+ return data;
36
+ }
37
+ async function isEnvValid(env) {
38
+ if (!env)
39
+ return false;
40
+ try {
41
+ await access(`package.${env}.json`, constants.F_OK);
42
+ return true;
43
+ }
44
+ catch {
45
+ return false;
46
+ }
47
+ }
48
+ async function readPackage(suffix) {
49
+ const packageString = await readFile(`package${suffix ? `.${suffix}` : ''}.json`, { encoding: 'utf-8' });
50
+ return [JSON.parse(packageString), packageString];
51
+ }
52
+ async function getEnv() {
53
+ const fromCmd = process.argv.join(' ').match(/--env=(\w+)/)?.[1];
54
+ if (fromCmd)
55
+ return fromCmd.trim();
56
+ try {
57
+ const fromBranchName = await asyncExec('git rev-parse --abbrev-ref HEAD');
58
+ return fromBranchName.trim();
59
+ }
60
+ catch {
61
+ return undefined;
62
+ }
63
+ }
64
+ function getShouldRevert() {
65
+ return !/--revert=false/.test(process.argv.join(' '));
66
+ }
67
+ async function prepare(env) {
68
+ const [pckg, originalPckg] = await readPackage();
69
+ const [envPckg] = await readPackage(env);
70
+ const resultingPackage = replaceVariables(merge(pckg, envPckg));
71
+ await writeFile('package.json', JSON.stringify(resultingPackage, null, 2), { encoding: 'utf-8' });
72
+ return [originalPckg, resultingPackage];
73
+ }
74
+ function asyncExec(cmd, cwd) {
75
+ return new Promise((resolve, reject) => {
76
+ exec(cmd, { cwd }, (error, stdout, stderr) => {
77
+ if (error)
78
+ reject(`${error.message}\n\n${stdout}\n\n${stderr}`);
79
+ else
80
+ resolve(stdout);
81
+ });
82
+ });
83
+ }
84
+ async function revert(packageBackup) {
85
+ await writeFile('package.json', packageBackup, { encoding: 'utf-8' });
86
+ }
87
+ async function start() {
88
+ const env = await getEnv();
89
+ if (!(await isEnvValid(env))) {
90
+ console.log('No overrides set for environment:', env);
91
+ return;
92
+ }
93
+ const shouldRevert = getShouldRevert();
94
+ console.log(`Overriding dependencies for ${env}...`);
95
+ const [packageBackup] = await prepare(env ?? '');
96
+ try {
97
+ console.log('Installing overridden dependencies...');
98
+ await asyncExec('pnpm i');
99
+ console.log('Done.');
100
+ }
101
+ finally {
102
+ if (shouldRevert)
103
+ await revert(packageBackup);
104
+ }
105
+ }
106
+ start();
107
+ //# sourceMappingURL=package-override.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-override.js","sourceRoot":"","sources":["../src/package-override.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@stack-spot/build-tools",
3
+ "version": "1.1.0",
4
+ "type": "module",
5
+ "bin": {
6
+ "package-override": "./dist/package-override.js"
7
+ },
8
+ "devDependencies": {
9
+ "@types/node": "^22.14.1",
10
+ "eslint": "^8.53.0",
11
+ "eslint-plugin-filenames": "^1.3.2",
12
+ "eslint-plugin-import": "^2.29.0",
13
+ "eslint-plugin-lodash": "^7.4.0",
14
+ "eslint-plugin-promise": "^6.1.1",
15
+ "eslint-plugin-react": "^7.33.2",
16
+ "eslint-plugin-react-hooks": "^4.6.0",
17
+ "eslint-plugin-react-refresh": "^0.4.4",
18
+ "rimraf": "^5.0.7",
19
+ "tsx": "^4.15.1",
20
+ "typescript": "^5.2.2"
21
+ },
22
+ "scripts": {
23
+ "build": "rimraf dist && tsc",
24
+ "check-branch": "pnpm build",
25
+ "lint": "echo nothing to lint"
26
+ }
27
+ }
@@ -0,0 +1,106 @@
1
+ /* eslint-disable no-console */
2
+ import { exec } from 'child_process'
3
+ import { access, constants, readFile, writeFile } from 'fs/promises'
4
+
5
+ const variables = {
6
+ timestamp: () => new Date().getTime(),
7
+ }
8
+
9
+ function merge(a: any, b: any) {
10
+ if (a === null || typeof a !== 'object') return b
11
+ if (Array.isArray(a) && Array.isArray(b)) return [...a, ...b]
12
+ const result = { ...a }
13
+ for (const key in b) {
14
+ if (typeof b === 'object') result[key] = merge(result[key], b[key])
15
+ else result[key] = b[key]
16
+ }
17
+ return result
18
+ }
19
+
20
+ function replaceVariables<T>(data: T): T {
21
+ if (typeof data === 'string') {
22
+ return data.replace(/\{([\w_]+)\}/g, (match, varname) => varname in variables ? `${(variables as any)[varname]()}` : match) as T
23
+ }
24
+ if (Array.isArray(data)) {
25
+ return data.map(replaceVariables) as T
26
+ }
27
+ if (data && typeof data === 'object') {
28
+ const result: Record<string, any> = {}
29
+ for (const key in data) {
30
+ result[key] = replaceVariables(data[key])
31
+ }
32
+ return result as T
33
+ }
34
+ return data
35
+ }
36
+
37
+ async function isEnvValid(env: string | undefined): Promise<boolean> {
38
+ if (!env) return false
39
+ try {
40
+ await access(`package.${env}.json`, constants.F_OK)
41
+ return true
42
+ } catch {
43
+ return false
44
+ }
45
+ }
46
+
47
+ async function readPackage(suffix?: string) {
48
+ const packageString = await readFile(`package${suffix ? `.${suffix}` : ''}.json`, { encoding: 'utf-8' })
49
+ return [JSON.parse(packageString), packageString]
50
+ }
51
+
52
+ async function getEnv(): Promise<string | undefined> {
53
+ const fromCmd = process.argv.join(' ').match(/--env=(\w+)/)?.[1]
54
+ if (fromCmd) return fromCmd.trim()
55
+ try {
56
+ const fromBranchName = await asyncExec('git rev-parse --abbrev-ref HEAD')
57
+ return fromBranchName.trim()
58
+ } catch {
59
+ return undefined
60
+ }
61
+ }
62
+
63
+ function getShouldRevert() {
64
+ return !/--revert=false/.test(process.argv.join(' '))
65
+ }
66
+
67
+ async function prepare(env: string) {
68
+ const [pckg, originalPckg] = await readPackage()
69
+ const [envPckg] = await readPackage(env)
70
+ const resultingPackage = replaceVariables(merge(pckg, envPckg))
71
+ await writeFile('package.json', JSON.stringify(resultingPackage, null, 2), { encoding: 'utf-8' })
72
+ return [originalPckg, resultingPackage]
73
+ }
74
+
75
+ function asyncExec(cmd: string, cwd?: string): Promise<string> {
76
+ return new Promise((resolve, reject) => {
77
+ exec(cmd, { cwd }, (error, stdout, stderr) => {
78
+ if (error) reject(`${error.message}\n\n${stdout}\n\n${stderr}`)
79
+ else resolve(stdout)
80
+ })
81
+ })
82
+ }
83
+
84
+ async function revert(packageBackup: string) {
85
+ await writeFile('package.json', packageBackup, { encoding: 'utf-8' })
86
+ }
87
+
88
+ async function start() {
89
+ const env = await getEnv()
90
+ if (!(await isEnvValid(env))) {
91
+ console.log('No overrides set for environment:', env)
92
+ return
93
+ }
94
+ const shouldRevert = getShouldRevert()
95
+ console.log(`Overriding dependencies for ${env}...`)
96
+ const [packageBackup] = await prepare(env ?? '')
97
+ try {
98
+ console.log('Installing overridden dependencies...')
99
+ await asyncExec('pnpm i')
100
+ console.log('Done.')
101
+ } finally {
102
+ if (shouldRevert) await revert(packageBackup)
103
+ }
104
+ }
105
+
106
+ start()
package/tsconfig.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "../../tsconfig",
3
+ "compilerOptions": {
4
+ "module": "ES2022",
5
+ "moduleResolution": "Bundler",
6
+ "outDir": "dist"
7
+ },
8
+ "include": ["src"]
9
+ }