@aexol/axolotl-scripts 2.0.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/.eslintrc +3 -0
- package/Readme.md +16 -0
- package/package.json +7 -0
- package/src/packages.ts +83 -0
- package/tsconfig.json +31 -0
package/.eslintrc
ADDED
package/Readme.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# @aexol/axolotl-scripts
|
|
2
|
+
|
|
3
|
+
Internal maintenance scripts for the monorepo. The current tool synchronizes package versions across workspaces and updates internal dependency ranges to the root version.
|
|
4
|
+
|
|
5
|
+
## What’s here
|
|
6
|
+
|
|
7
|
+
- `src/packages.ts` – bumps each package.json version to the root version and rewrites internal deps to `^<rootVersion>` for packages found in `packages/`, `adapters/`, and `examples/`.
|
|
8
|
+
|
|
9
|
+
## Run
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
cd packages/scripts
|
|
13
|
+
node lib/packages.js
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Note: build first if needed: `npm run build --ws --if-present`.
|
package/package.json
ADDED
package/src/packages.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
const updateDeps = ({
|
|
4
|
+
dependencies,
|
|
5
|
+
depsList,
|
|
6
|
+
version,
|
|
7
|
+
}: {
|
|
8
|
+
dependencies: PackageJSON['dependencies'];
|
|
9
|
+
depsList: string[];
|
|
10
|
+
version: string;
|
|
11
|
+
}) => {
|
|
12
|
+
return Object.fromEntries(
|
|
13
|
+
Object.entries(dependencies || {}).map(([depName, depVersion]) => {
|
|
14
|
+
if (!depsList.includes(depName)) return [depName, depVersion];
|
|
15
|
+
return [depName, `^${version}`];
|
|
16
|
+
}),
|
|
17
|
+
);
|
|
18
|
+
};
|
|
19
|
+
const changePackageVersion = (version: string, depsList: string[]) => (packageJSON: PackageJSON) => {
|
|
20
|
+
return {
|
|
21
|
+
...packageJSON,
|
|
22
|
+
version,
|
|
23
|
+
dependencies: updateDeps({ dependencies: packageJSON.dependencies, depsList, version }),
|
|
24
|
+
devDependencies: updateDeps({ dependencies: packageJSON.devDependencies, depsList, version }),
|
|
25
|
+
peerDependencies: updateDeps({ dependencies: packageJSON.peerDependencies, depsList, version }),
|
|
26
|
+
} satisfies PackageJSON;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const remapPackages = async () => {
|
|
30
|
+
const mainVersion = await fs.readFile(path.join(process.cwd(), 'package.json'), 'utf-8');
|
|
31
|
+
const mainVersionJSON = JSON.parse(mainVersion) as PackageJSON;
|
|
32
|
+
const roots = ['packages', 'adapters', 'examples'] as const;
|
|
33
|
+
const dirs = await Promise.all(
|
|
34
|
+
roots.map(async (relative) => {
|
|
35
|
+
const root = path.join(process.cwd(), relative);
|
|
36
|
+
try {
|
|
37
|
+
const dir = await fs.readdir(root);
|
|
38
|
+
return { root, dir };
|
|
39
|
+
} catch (error) {
|
|
40
|
+
const err = error as NodeJS.ErrnoException;
|
|
41
|
+
if (err.code === 'ENOENT') {
|
|
42
|
+
return { root, dir: [] };
|
|
43
|
+
}
|
|
44
|
+
throw err;
|
|
45
|
+
}
|
|
46
|
+
}),
|
|
47
|
+
);
|
|
48
|
+
const allJsons = await Promise.all(
|
|
49
|
+
dirs.map(async ({ dir, root }) => {
|
|
50
|
+
const all = await Promise.all(
|
|
51
|
+
dir.map(async (p) => {
|
|
52
|
+
const packagePath = path.join(root, p, 'package.json');
|
|
53
|
+
const packageJSONString = await fs.readFile(packagePath, 'utf-8');
|
|
54
|
+
const packageJSON = JSON.parse(packageJSONString) as PackageJSON;
|
|
55
|
+
return { packageJSON, packagePath };
|
|
56
|
+
}),
|
|
57
|
+
);
|
|
58
|
+
return all;
|
|
59
|
+
}),
|
|
60
|
+
);
|
|
61
|
+
const allPackageJsons = allJsons.reduce((a, b) => {
|
|
62
|
+
return [...a, ...b];
|
|
63
|
+
}, []);
|
|
64
|
+
|
|
65
|
+
const depsList = allPackageJsons.map((p) => p.packageJSON.name);
|
|
66
|
+
const changeVersion = changePackageVersion(mainVersionJSON.version, depsList);
|
|
67
|
+
for (const { packagePath, packageJSON } of allPackageJsons) {
|
|
68
|
+
await fs.writeFile(packagePath, JSON.stringify(changeVersion(packageJSON), null, 2));
|
|
69
|
+
console.log(
|
|
70
|
+
`Updated "${packageJSON.name}" from "${packageJSON.version}" to "${mainVersionJSON.version}" and it's internal dependencies`,
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
remapPackages();
|
|
76
|
+
|
|
77
|
+
type PackageJSON = {
|
|
78
|
+
name: string;
|
|
79
|
+
version: string;
|
|
80
|
+
dependencies?: Record<string, string>;
|
|
81
|
+
devDependencies?: Record<string, string>;
|
|
82
|
+
peerDependencies?: Record<string, string>;
|
|
83
|
+
};
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"sourceMap": true,
|
|
4
|
+
"target": "ES6",
|
|
5
|
+
"module": "CommonJS",
|
|
6
|
+
"moduleResolution": "node",
|
|
7
|
+
"experimentalDecorators": true,
|
|
8
|
+
"declaration": true,
|
|
9
|
+
"incremental": true,
|
|
10
|
+
"removeComments": true,
|
|
11
|
+
"noUnusedLocals": true,
|
|
12
|
+
"strictNullChecks": true,
|
|
13
|
+
"esModuleInterop": true,
|
|
14
|
+
"skipLibCheck": true,
|
|
15
|
+
"strict": true,
|
|
16
|
+
"outDir": "./lib",
|
|
17
|
+
"lib": [
|
|
18
|
+
"ESNext",
|
|
19
|
+
"DOM",
|
|
20
|
+
"DOM.Iterable"
|
|
21
|
+
],
|
|
22
|
+
"rootDir": "./src",
|
|
23
|
+
"baseUrl": "./",
|
|
24
|
+
"composite": true,
|
|
25
|
+
},
|
|
26
|
+
"exclude": [
|
|
27
|
+
"lib",
|
|
28
|
+
"node_modules",
|
|
29
|
+
"jest.config.js"
|
|
30
|
+
]
|
|
31
|
+
}
|