aronrepo 1.6.0 → 2.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.
- package/README.md +34 -542
- package/dist/index.d.ts +5 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/package.json +46 -1
- package/.github/CODE_OF_CONDUCT.md +0 -124
- package/.github/CONTRIBUTING.md +0 -77
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -47
- package/.github/ISSUE_TEMPLATE/docs_request.yml +0 -24
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -19
- package/.github/workflows/commit-check.yml +0 -30
- package/.github/workflows/lint.yml +0 -27
- package/.github/workflows/pull-request-title-check.yml +0 -23
- package/.github/workflows/release.yml +0 -35
- package/.github/workflows/test.yml +0 -30
- package/.github/workflows/type-check.yml +0 -28
- package/dist/bin/index +0 -26
- package/dist/bin/index.map +0 -7
package/README.md
CHANGED
|
@@ -1,569 +1,61 @@
|
|
|
1
|
-
|
|
2
|
-
<div align="center">
|
|
1
|
+

|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
<a href="https://repo.master.co">
|
|
6
|
-
<picture>
|
|
7
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/33840671/204220749-4536401e-20c4-49b7-bf37-b07fce15f1c2.svg">
|
|
8
|
-
<source media="(prefers-color-scheme: light)" srcset="https://user-images.githubusercontent.com/33840671/204220755-744f6b4f-a90e-442f-bd30-53ce7995a8f8.svg">
|
|
9
|
-
<img alt="aronrepo" src="https://user-images.githubusercontent.com/33840671/204220755-744f6b4f-a90e-442f-bd30-53ce7995a8f8.svg" width="100%">
|
|
10
|
-
</picture>
|
|
11
|
-
</a>
|
|
12
|
-
</p>
|
|
13
|
-
<p align="center">A monorepo ecosystem integrating first-class packages and build systems</p>
|
|
3
|
+
# aronrepo
|
|
14
4
|
|
|
15
|
-
|
|
16
|
-
<a aria-label="overview" href="https://github.com/1aron/aronrepo">
|
|
17
|
-
<picture>
|
|
18
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/badge/%E2%AC%85%20back-%20?color=212022&style=for-the-badge">
|
|
19
|
-
<source media="(prefers-color-scheme: light)" srcset="https://img.shields.io/badge/%E2%AC%85%20back-%20?color=f6f7f8&style=for-the-badge">
|
|
20
|
-
<img alt="NPM Version" src="https://img.shields.io/badge/%E2%AC%85%20back-%20?color=f6f7f8&style=for-the-badge">
|
|
21
|
-
</picture>
|
|
22
|
-
</a>
|
|
23
|
-
<a aria-label="GitHub release (latest by date including pre-releases)" href="https://github.com/1aron/aronrepo/releases">
|
|
24
|
-
<picture>
|
|
25
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/github/v/release/1aron/aronrepo?include_prereleases&color=212022&label=&style=for-the-badge&logo=github&logoColor=fff">
|
|
26
|
-
<source media="(prefers-color-scheme: light)" srcset="https://img.shields.io/github/v/release/1aron/aronrepo?include_prereleases&color=f6f7f8&label=&style=for-the-badge&logo=github&logoColor=%23000">
|
|
27
|
-
<img alt="NPM Version" src="https://img.shields.io/github/v/release/1aron/aronrepo?include_prereleases&color=f6f7f8&label=&style=for-the-badge&logo=github">
|
|
28
|
-
</picture>
|
|
29
|
-
</a>
|
|
30
|
-
<a aria-label="NPM Package" href="https://www.npmjs.com/package/aronrepo">
|
|
31
|
-
<picture>
|
|
32
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/npm/dm/aronrepo?color=212022&label=%20&logo=npm&style=for-the-badge">
|
|
33
|
-
<source media="(prefers-color-scheme: light)" srcset="https://img.shields.io/npm/dm/aronrepo?color=f6f7f8&label=%20&logo=npm&style=for-the-badge">
|
|
34
|
-
<img alt="NPM package ( download / month )" src="https://img.shields.io/npm/dm/aronrepo?color=f6f7f8&label=%20&logo=npm&style=for-the-badge">
|
|
35
|
-
</picture>
|
|
36
|
-
</a>
|
|
37
|
-
<a aria-label="Follow @aron1tw" href="https://twitter.com/aron1tw">
|
|
38
|
-
<picture>
|
|
39
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/static/v1?label=%20&message=twitter&color=212022&logo=twitter&style=for-the-badge">
|
|
40
|
-
<source media="(prefers-color-scheme: light)" srcset="https://img.shields.io/static/v1?label=%20&message=twitter&color=f6f7f8&logo=twitter&style=for-the-badge">
|
|
41
|
-
<img alt="Follow @mastercorg" src="https://img.shields.io/static/v1?label=%20&message=twitter&color=f6f7f8&logo=twitter&style=for-the-badge">
|
|
42
|
-
</picture>
|
|
43
|
-
</a>
|
|
44
|
-
<a aria-label="Github Actions" href="https://github.com/1aron/aronrepo/actions/workflows/release.yml">
|
|
45
|
-
<picture>
|
|
46
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/github/actions/workflow/status/1aron/aronrepo/release.yml?branch=beta&label=%20&message=twitter&color=212022&logo=githubactions&style=for-the-badge">
|
|
47
|
-
<source media="(prefers-color-scheme: light)" srcset="https://img.shields.io/github/actions/workflow/status/1aron/aronrepo/release.yml?branch=beta&label=%20&message=twitter&color=f6f7f8&logo=githubactions&style=for-the-badge&logoColor=%23000">
|
|
48
|
-
<img alt="Github release actions" src="https://img.shields.io/github/actions/workflow/status/1aron/aronrepo/release.yml?branch=beta&label=%20&message=twitter&color=f6f7f8&logo=githubactions&style=for-the-badge&logoColor=%23000">
|
|
49
|
-
</picture>
|
|
50
|
-
</a>
|
|
51
|
-
</p>
|
|
5
|
+
Facade install target for the Aronrepo monorepo toolchain.
|
|
52
6
|
|
|
53
|
-
|
|
7
|
+
Use this package when you want one dependency that brings the published Aronrepo toolchain packages for conventional commits, commitlint configuration, changelog generation, semantic-release configuration, and pnpm workspace publishing. The package also provides a small programmatic entrypoint that names those packages.
|
|
54
8
|
|
|
55
|
-
|
|
9
|
+
The package has no runtime side effects and does not configure commitlint, changelog generation, or semantic-release by itself.
|
|
56
10
|
|
|
57
|
-
|
|
58
|
-
- Using a high-performance build system —— [Turborepo](https://turbo.build/repo)
|
|
59
|
-
- Run the `build`, `dev`, `test`, `lint` commands across all workspaces
|
|
60
|
-
- Remember what you've built and skip the stuff that's already been computed
|
|
61
|
-
- Multiple workspaces work simultaneously, just like one workspace used to.
|
|
11
|
+
## Install
|
|
62
12
|
|
|
63
|
-
|
|
13
|
+
For complete adoption, install the facade package plus the external peer tools used by your repository commands:
|
|
64
14
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
- Output or watch multiple formats in one-linear command
|
|
68
|
-
- Support **ESM**, **CJS**, and **IIFE** JavaScript modules
|
|
69
|
-
- Support **CSS** bundle
|
|
70
|
-
- Generate `.d.ts` type declarations
|
|
71
|
-
- Extract options from `package.json`
|
|
72
|
-
- Prevent bundling `dependencies` and `peerDependencies` by `package.json`
|
|
73
|
-
|
|
74
|
-
**Versioning**
|
|
75
|
-
- Synchronize versions of packages in all workspaces
|
|
76
|
-
- Bump packages to a specific version by the `.workspaces` of `package.json`
|
|
77
|
-
- Bump versions by analyzing `dependencies` and `peerDependencies` of the workspace
|
|
78
|
-
- Prevent bumping versions for `private: true` packages
|
|
79
|
-
|
|
80
|
-
## Getting Started
|
|
81
|
-
|
|
82
|
-
Add `packages/**` to `.workspaces` of the root `./package.json`
|
|
83
|
-
```json
|
|
84
|
-
{
|
|
85
|
-
"workspaces": [
|
|
86
|
-
"packages/**"
|
|
87
|
-
]
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
Install CLI and core packages by `aronrepo`:
|
|
91
|
-
```bash
|
|
92
|
-
npm i aronrepo -D
|
|
93
|
-
```
|
|
94
|
-
- Requires `npm@>=7` when using `npm`
|
|
95
|
-
- Set [`auto-install-peers`](https://pnpm.io/next/npmrc#auto-install-peers) when using `pnpm`
|
|
96
|
-
- You can also manually install [`peerDependencies`](https://github.com/1aron/aronrepo/blob/beta/packages/aronrepo/package.json#L32-L41) for fixed versions
|
|
97
|
-
|
|
98
|
-
To create your first package, you may automate the required steps to define a new workspace using `npm init`.
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
npm init -w ./packages/a
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
When the package is ready, including the dependencies setup, run `npm i` in the project root directory to install all dependencies, including the workspaces.
|
|
105
|
-
|
|
106
|
-
## Pack
|
|
107
|
-
|
|
108
|
-
Bundling your TypeScript and CSS packages with zero configuration.
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
aron pack [entryPaths...]
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
[Check out the available options here for now](https://github.com/1aron/aronrepo/blob/beta/packages/aronrepo/src/commands/pack.ts#L17-L25)
|
|
115
|
-
|
|
116
|
-
`aron pack` analyzes the `package.json` entry point relative to input sources in the `src` directory for builds.
|
|
117
|
-
|
|
118
|
-
### JavaScript packages
|
|
119
|
-
|
|
120
|
-
```diff
|
|
121
|
-
.
|
|
122
|
-
├── package.json
|
|
123
|
-
└── packages
|
|
124
|
-
└─── a
|
|
125
|
-
├─── src
|
|
126
|
-
│ ├─── index.ts
|
|
127
|
-
│ └─── index.browser.ts
|
|
128
|
-
+ ├─── dist
|
|
129
|
-
+ │ ├─── index.cjs
|
|
130
|
-
+ │ ├─── index.mjs
|
|
131
|
-
+ │ ├─── index.d.ts
|
|
132
|
-
+ │ └─── index.browser.ts
|
|
133
|
-
└─── package.json
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
Simultaneously output `cjs`, `esm`, `iife`, `type declarations` respectively according to `main`, `module`, `browser`, `types` of `package.json`
|
|
137
|
-
|
|
138
|
-
```json
|
|
139
|
-
{
|
|
140
|
-
"name": "a",
|
|
141
|
-
"scripts": {
|
|
142
|
-
"build": "aron pack",
|
|
143
|
-
"dev": "npm run build -- --watch"
|
|
144
|
-
},
|
|
145
|
-
"main": "dist/cjs/index.js",
|
|
146
|
-
"browser": "dist/index.browser.js",
|
|
147
|
-
"module": "dist/esm/index.js",
|
|
148
|
-
"types": "dist/index.d.ts",
|
|
149
|
-
"jsnext:main": "dist/esm/index.js",
|
|
150
|
-
"esnext": "dist/esm/index.js",
|
|
151
|
-
"exports": {
|
|
152
|
-
".": {
|
|
153
|
-
"require": "./dist/cjs/index.js",
|
|
154
|
-
"import": "./dist/esm/index.js",
|
|
155
|
-
"types": "./dist/index.d.ts"
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
"files": [
|
|
159
|
-
"dist"
|
|
160
|
-
]
|
|
161
|
-
}
|
|
15
|
+
```sh
|
|
16
|
+
pnpm add -D aronrepo @commitlint/cli semantic-release
|
|
162
17
|
```
|
|
163
|
-
If you only want to pack specific javascript modules, remove the corresponding entry point from `package.json`.
|
|
164
18
|
|
|
165
|
-
|
|
19
|
+
For programmatic package-list usage only:
|
|
166
20
|
|
|
167
|
-
```
|
|
168
|
-
|
|
21
|
+
```sh
|
|
22
|
+
pnpm add -D aronrepo
|
|
169
23
|
```
|
|
170
24
|
|
|
171
|
-
|
|
25
|
+
This package is ESM-only.
|
|
172
26
|
|
|
173
|
-
|
|
27
|
+
## Usage
|
|
174
28
|
|
|
175
29
|
```ts
|
|
176
|
-
import '
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
### CSS packages
|
|
180
|
-
|
|
181
|
-
```diff
|
|
182
|
-
.
|
|
183
|
-
├── package.json
|
|
184
|
-
└── packages
|
|
185
|
-
└─── b
|
|
186
|
-
├─── src
|
|
187
|
-
│ └─── index.css
|
|
188
|
-
+ ├─── dist
|
|
189
|
-
+ │ └─── index.css
|
|
190
|
-
└─── package.json
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
Packaging CSS is more straightforward, configuring `style` and `main` entry points in `package.json`.
|
|
30
|
+
import { packages } from 'aronrepo'
|
|
194
31
|
|
|
195
|
-
|
|
196
|
-
{
|
|
197
|
-
"name": "b",
|
|
198
|
-
"scripts": {
|
|
199
|
-
"build": "aron pack",
|
|
200
|
-
"dev": "npm run build -- --watch"
|
|
201
|
-
},
|
|
202
|
-
"main": "./dist/index.css",
|
|
203
|
-
"style": "./dist/index.css",
|
|
204
|
-
"files": [
|
|
205
|
-
"dist"
|
|
206
|
-
]
|
|
207
|
-
}
|
|
32
|
+
console.log(packages)
|
|
208
33
|
```
|
|
209
34
|
|
|
210
|
-
|
|
35
|
+
`packages` is a readonly list of the Aronrepo toolchain package names:
|
|
211
36
|
|
|
212
|
-
```bash
|
|
213
|
-
npm run build
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
<img width="523" alt="css-pack" src="https://user-images.githubusercontent.com/33840671/204450194-7831c448-2e21-4ce8-8c45-5139febc10e6.png">
|
|
217
|
-
|
|
218
|
-
Now import the above package `b` in your project or publish it.
|
|
219
|
-
|
|
220
|
-
```css
|
|
221
|
-
@import 'b'
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
### Multiple entry points
|
|
225
|
-
|
|
226
|
-
`aron pack <entryPaths...>` supports glob patterns that let you specify multiple entry points at once, including the output of nested directories.
|
|
227
|
-
|
|
228
|
-
Specifying an entry point will cause the JavaScript output `format` to be preset to `cjs,esm`.
|
|
229
|
-
|
|
230
|
-
```
|
|
231
|
-
aron src/**/*.ts
|
|
232
|
-
```
|
|
233
|
-
```diff
|
|
234
|
-
.
|
|
235
|
-
├── package.json
|
|
236
|
-
└── packages
|
|
237
|
-
└─── a
|
|
238
|
-
├─── src
|
|
239
|
-
│ ├─── index.ts
|
|
240
|
-
│ └─── utils
|
|
241
|
-
│ └─── exec.ts
|
|
242
|
-
+ ├─── dist
|
|
243
|
-
+ │ ├─── index.cjs
|
|
244
|
-
+ │ ├─── index.mjs
|
|
245
|
-
+ │ └─── utils
|
|
246
|
-
+ │ ├─── exec.cjs
|
|
247
|
-
+ │ └─── exec.mjs
|
|
248
|
-
└─── package.json
|
|
249
|
-
```
|
|
250
|
-
The same goes for multiple CSS entries:
|
|
251
|
-
```
|
|
252
|
-
aron src/**/*.css
|
|
253
|
-
```
|
|
254
|
-
```diff
|
|
255
|
-
.
|
|
256
|
-
├── package.json
|
|
257
|
-
└── packages
|
|
258
|
-
└─── a
|
|
259
|
-
├─── src
|
|
260
|
-
│ ├─── index.css
|
|
261
|
-
│ └─── components
|
|
262
|
-
│ ├─── card.css
|
|
263
|
-
│ └─── button.css
|
|
264
|
-
+ ├─── dist
|
|
265
|
-
+ │ ├─── index.css
|
|
266
|
-
+ │ └─── components
|
|
267
|
-
+ │ ├─── card.css
|
|
268
|
-
+ │ └─── button.css
|
|
269
|
-
└─── package.json
|
|
270
|
-
```
|
|
271
|
-
Usually, it would be best to bundle CSS packages through a main `index.css` and output other CSS files so developers can import on demand instead of the whole package. For example [@master/keyframes.css](https://www.npmjs.com/package/@master/keyframes.css)
|
|
272
|
-
|
|
273
|
-
### Exclude external dependencies
|
|
274
|
-
`aron pack` automatically excludes external dependencies to be bundled by the `.dependencies` and `peerDependencies` of `package.json`
|
|
275
|
-
|
|
276
|
-
`src/index.ts`
|
|
277
37
|
```ts
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
{
|
|
286
|
-
"name": "externals",
|
|
287
|
-
"main": "dist/cjs/index.js",
|
|
288
|
-
"exports": {
|
|
289
|
-
".": {
|
|
290
|
-
"require": "./dist/cjs/index.js"
|
|
291
|
-
}
|
|
292
|
-
},
|
|
293
|
-
"files": [
|
|
294
|
-
"dist"
|
|
295
|
-
],
|
|
296
|
-
"dependencies": {
|
|
297
|
-
"@master/css": "^2.0.0-beta.55"
|
|
298
|
-
},
|
|
299
|
-
"peerDependencies": {
|
|
300
|
-
"@master/style-element.react": "^1.1.6"
|
|
301
|
-
},
|
|
302
|
-
"devDependencies": {
|
|
303
|
-
"@master/css.webpack": "^2.0.0-beta.55"
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
Run with the above setup:
|
|
309
|
-
|
|
310
|
-
```bash
|
|
311
|
-
aron pack --platform node
|
|
38
|
+
[
|
|
39
|
+
'@aronrepo/commitlint-config',
|
|
40
|
+
'@aronrepo/conventional-commits',
|
|
41
|
+
'@aronrepo/conventional-changelog-config',
|
|
42
|
+
'@aronrepo/semantic-release-config',
|
|
43
|
+
'@aronrepo/semantic-release-pnpm'
|
|
44
|
+
]
|
|
312
45
|
```
|
|
313
46
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
`@master/css.webpack` is bundled into `dist/cjs/index.js`, except for `@master/css` and `@master/style-element.react`.
|
|
317
|
-
|
|
318
|
-
So if there is an external package that needs to be bundled, you just install it to `devDependencies` via `npm i <some-package> --save-dev`, then `aron pack` will not exclude it.
|
|
319
|
-
|
|
320
|
-
### Multiple outputs
|
|
321
|
-
|
|
322
|
-
`aron pack` defaults to pack multiple outputs with different formats and platforms according to `exports` `bin` in `package.json`.
|
|
47
|
+
## Toolchain Packages
|
|
323
48
|
|
|
324
|
-
|
|
325
|
-
.
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
├─── src
|
|
330
|
-
│ ├─── index.ts
|
|
331
|
-
│ └─── utils
|
|
332
|
-
│ └─── exec.ts
|
|
333
|
-
+ ├─── dist
|
|
334
|
-
+ │ ├─── index.cjs
|
|
335
|
-
+ │ ├─── index.mjs
|
|
336
|
-
+ │ └─── utils
|
|
337
|
-
+ │ ├─── exec.cjs
|
|
338
|
-
+ │ └─── exec.mjs
|
|
339
|
-
└─── package.json
|
|
340
|
-
```
|
|
341
|
-
`package.json`
|
|
342
|
-
```json
|
|
343
|
-
{
|
|
344
|
-
"name": "externals",
|
|
345
|
-
"exports": {
|
|
346
|
-
".": {
|
|
347
|
-
"require": "./dist/cjs/index.js",
|
|
348
|
-
"import": "./dist/esm/index.js"
|
|
349
|
-
},
|
|
350
|
-
"./utils/exec": {
|
|
351
|
-
"require": "./dist/utils/exec.cjs",
|
|
352
|
-
"import": "./dist/utils/exec.mjs"
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
```
|
|
357
|
-
Any nested conditions in `exports` like `node`, `browser`, `default`, `require`, and `import` will be mapped to ESBuild’s `format` and `platform` options.
|
|
358
|
-
|
|
359
|
-
## Version
|
|
360
|
-
Smartly bump all workspace-dependent packages to specific versions.
|
|
361
|
-
|
|
362
|
-
```bash
|
|
363
|
-
aron version <version>
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
[Check out the available options here for now](https://github.com/1aron/aronrepo/blob/beta/packages/aronrepo/src/commands/version.ts#L16-L18)
|
|
367
|
-
|
|
368
|
-
The command automatically bumps the version of all packages by scanning all workspaces and analyzing `dependencies` and `peerDependencies` of `package.json`
|
|
369
|
-
|
|
370
|
-
```diff
|
|
371
|
-
.
|
|
372
|
-
├── package.json
|
|
373
|
-
└── packages
|
|
374
|
-
├─── a
|
|
375
|
-
| └─── package.json
|
|
376
|
-
├─── b
|
|
377
|
-
| └─── package.json
|
|
378
|
-
└─── c
|
|
379
|
-
└─── package.json
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
This command scans all workspaces for dependencies with unspecified versions `""` considered a project package, then replaces them with the next version.
|
|
383
|
-
|
|
384
|
-
Now bump all dependent and workspace packages to a specified version:
|
|
385
|
-
|
|
386
|
-
```
|
|
387
|
-
aron version 1.2.0
|
|
388
|
-
```
|
|
389
|
-
|
|
390
|
-
<img width="628" alt="version" src="https://user-images.githubusercontent.com/33840671/204528593-a7a982f1-2e62-4a8e-95c3-122963f2254c.png">
|
|
391
|
-
|
|
392
|
-
`packages/a/package.json`
|
|
393
|
-
|
|
394
|
-
```diff
|
|
395
|
-
{
|
|
396
|
-
"name": "a",
|
|
397
|
-
+ "version": "^1.2.0",
|
|
398
|
-
"dependencies": {
|
|
399
|
-
- "b": "",
|
|
400
|
-
+ "b": "^1.2.0"
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
`packages/b/package.json`
|
|
406
|
-
|
|
407
|
-
```diff
|
|
408
|
-
{
|
|
409
|
-
"name": "b",
|
|
410
|
-
+ "version": "^1.2.0"
|
|
411
|
-
}
|
|
412
|
-
```
|
|
413
|
-
|
|
414
|
-
`packages/c/package.json`
|
|
415
|
-
|
|
416
|
-
```diff
|
|
417
|
-
{
|
|
418
|
-
"name": "c",
|
|
419
|
-
+ "version": "^1.2.0",
|
|
420
|
-
"peerDependencies": {
|
|
421
|
-
- "a": "",
|
|
422
|
-
+ "b": "^1.2.0"
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
```
|
|
426
|
-
|
|
427
|
-
For version range, check out the [semver](https://github.com/npm/node-semver#versions)
|
|
428
|
-
|
|
429
|
-
Typically, you would use [Aron's semantic release](https://github.com/1aron/aronrepo/tree/main/packages/semantic-release-config) with CI to automate the version and release commands.
|
|
430
|
-
|
|
431
|
-
## Build system for monorepo
|
|
432
|
-
|
|
433
|
-
Most workspace packages will pre-set script commands, such as `build`, `test`, and `lint`. Since features depend on each other, builds will be executed sequentially.
|
|
434
|
-
|
|
435
|
-
You can now use [Turborepo](https://turbo.build/repo) to easily build complex systems and run commands in one-linear.
|
|
436
|
-
|
|
437
|
-

|
|
438
|
-
|
|
439
|
-
Set up the `/turbo.json`:
|
|
440
|
-
|
|
441
|
-
```json
|
|
442
|
-
{
|
|
443
|
-
"$schema": "https://turbo.build/schema.json",
|
|
444
|
-
"pipeline": {
|
|
445
|
-
"dev": {
|
|
446
|
-
"cache": false,
|
|
447
|
-
"dependsOn": ["^build"]
|
|
448
|
-
},
|
|
449
|
-
"build": {
|
|
450
|
-
"dependsOn": ["^build"],
|
|
451
|
-
"outputs": ["dist/**"]
|
|
452
|
-
},
|
|
453
|
-
"test": {
|
|
454
|
-
"outputs": [],
|
|
455
|
-
"inputs": [
|
|
456
|
-
"src/**/*.tsx",
|
|
457
|
-
"src/**/*.ts",
|
|
458
|
-
"tests/**/*.ts"
|
|
459
|
-
]
|
|
460
|
-
},
|
|
461
|
-
"lint": {
|
|
462
|
-
"outputs": []
|
|
463
|
-
},
|
|
464
|
-
"type-check": {
|
|
465
|
-
"outputs": ["dist/**"]
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
```
|
|
470
|
-
|
|
471
|
-
Set up the scripts of `/package.json`:
|
|
472
|
-
```json
|
|
473
|
-
{
|
|
474
|
-
"scripts": {
|
|
475
|
-
"dev": "turbo run dev",
|
|
476
|
-
"build": "turbo run build",
|
|
477
|
-
"test": "turbo run test --parallel",
|
|
478
|
-
"lint": "turbo run lint --parallel",
|
|
479
|
-
"type-check": "turbo run type-check --parallel"
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
```
|
|
483
|
-
In most cases, `dev` and `build` cannot add the `--parallel` flag, which breaks their dependencies.
|
|
484
|
-
|
|
485
|
-
Typical workspace scripts for authoring a package:
|
|
486
|
-
|
|
487
|
-
```json
|
|
488
|
-
{
|
|
489
|
-
"scripts": {
|
|
490
|
-
"build": "aron pack",
|
|
491
|
-
"dev": "npm run build -- --watch",
|
|
492
|
-
"test": "jest",
|
|
493
|
-
"type-check": "tsc --noEmit",
|
|
494
|
-
"lint": "eslint src"
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
From now on, you only need to **run the command in the project root** after opening the project.
|
|
500
|
-
|
|
501
|
-
```bash
|
|
502
|
-
npm run dev
|
|
503
|
-
```
|
|
504
|
-
Build your application or package:
|
|
505
|
-
```bash
|
|
506
|
-
npm run build
|
|
507
|
-
```
|
|
508
|
-
Test your business logic or UI by running scripts:
|
|
509
|
-
```bash
|
|
510
|
-
npm run test
|
|
511
|
-
```
|
|
512
|
-
Find and fix problems in JavaScript code before building:
|
|
513
|
-
```bash
|
|
514
|
-
npm run lint
|
|
515
|
-
```
|
|
516
|
-
Improve reliability with TypeScript's type checking:
|
|
517
|
-
```bash
|
|
518
|
-
npm run type-check
|
|
519
|
-
```
|
|
520
|
-
|
|
521
|
-
### Continuous Integration
|
|
522
|
-
|
|
523
|
-
With the well-configured build system, almost all commands can be automated through CI, taking GitHub Actions as an example:
|
|
524
|
-
|
|
525
|
-
Build automated tests on the `beta`, the `main`, and the pull request stream:
|
|
526
|
-
```yml
|
|
527
|
-
name: Test
|
|
528
|
-
on:
|
|
529
|
-
push:
|
|
530
|
-
branches:
|
|
531
|
-
- main
|
|
532
|
-
- beta
|
|
533
|
-
pull_request_target:
|
|
534
|
-
types:
|
|
535
|
-
- opened
|
|
536
|
-
- synchronize
|
|
537
|
-
|
|
538
|
-
jobs:
|
|
539
|
-
version:
|
|
540
|
-
timeout-minutes: 15
|
|
541
|
-
runs-on: ubuntu-20.04
|
|
542
|
-
strategy:
|
|
543
|
-
matrix:
|
|
544
|
-
node-version: [18.12.1]
|
|
545
|
-
steps:
|
|
546
|
-
- uses: actions/checkout@v3
|
|
547
|
-
- uses: actions/setup-node@v3
|
|
548
|
-
with:
|
|
549
|
-
node-version: ${{ matrix.node-version }}
|
|
550
|
-
cache: 'npm'
|
|
551
|
-
- run: npm ci
|
|
552
|
-
- run: npm run build
|
|
553
|
-
- run: npm run test
|
|
554
|
-
```
|
|
555
|
-
The same goes for `lint` and `type-check`.
|
|
49
|
+
- `@aronrepo/conventional-commits`: commit types, release impact rules, changelog groups, and AI agent policy.
|
|
50
|
+
- `@aronrepo/commitlint-config`: commitlint rules for Aronrepo commit and PR title validation.
|
|
51
|
+
- `@aronrepo/conventional-changelog-config`: parser, writer, and recommended bump options for conventional changelog tooling.
|
|
52
|
+
- `@aronrepo/semantic-release-config`: semantic-release defaults and workspace package discovery.
|
|
53
|
+
- `@aronrepo/semantic-release-pnpm`: semantic-release plugin for publishing pnpm workspace packages.
|
|
556
54
|
|
|
557
|
-
|
|
55
|
+
## AI Coding Adoption
|
|
558
56
|
|
|
559
|
-
|
|
57
|
+
For a complete adoption prompt that an AI coding agent can use in another repository, see the root guide:
|
|
560
58
|
|
|
561
|
-
|
|
59
|
+
- [AI Coding Integration](https://github.com/1aron/aronrepo/blob/main/docs/ai-coding.md)
|
|
562
60
|
|
|
563
|
-
|
|
564
|
-
<picture>
|
|
565
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/badge/%E2%AC%85%20back%20to%20contents-%20?color=212022&style=for-the-badge">
|
|
566
|
-
<source media="(prefers-color-scheme: light)" srcset="https://img.shields.io/badge/%E2%AC%85%20back%20to%20contents-%20?color=f6f7f8&style=for-the-badge">
|
|
567
|
-
<img alt="NPM Version" src="https://img.shields.io/badge/%E2%AC%85%20back%20to%20contents-%20?color=f6f7f8&style=for-the-badge">
|
|
568
|
-
</picture>
|
|
569
|
-
</a>
|
|
61
|
+
The prompt tells the agent to inspect the target repository first, install the `aronrepo` facade and required peer tools, configure commitlint and semantic-release, document release behavior, and add agent guidance without unrelated refactors.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
//#region src/index.d.ts
|
|
2
|
+
declare const packages: readonly ["@aronrepo/commitlint-config", "@aronrepo/conventional-commits", "@aronrepo/conventional-changelog-config", "@aronrepo/semantic-release-config", "@aronrepo/semantic-release-pnpm"];
|
|
3
|
+
//#endregion
|
|
4
|
+
export { packages };
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/index.ts
|
|
2
|
+
const packages = [
|
|
3
|
+
"@aronrepo/commitlint-config",
|
|
4
|
+
"@aronrepo/conventional-commits",
|
|
5
|
+
"@aronrepo/conventional-changelog-config",
|
|
6
|
+
"@aronrepo/semantic-release-config",
|
|
7
|
+
"@aronrepo/semantic-release-pnpm"
|
|
8
|
+
];
|
|
9
|
+
//#endregion
|
|
10
|
+
export { packages };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["export const packages = [\n '@aronrepo/commitlint-config',\n '@aronrepo/conventional-commits',\n '@aronrepo/conventional-changelog-config',\n '@aronrepo/semantic-release-config',\n '@aronrepo/semantic-release-pnpm'\n] as const\n"],"mappings":";AAAA,MAAa,WAAW;CACpB;CACA;CACA;CACA;CACA;AACJ"}
|
package/package.json
CHANGED
|
@@ -1 +1,46 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"name": "aronrepo",
|
|
3
|
+
"version": "2.0.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"description": "Facade package for the Aronrepo monorepo toolchain.",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/1aron/aronrepo.git",
|
|
10
|
+
"directory": "packages/aronrepo"
|
|
11
|
+
},
|
|
12
|
+
"sideEffects": false,
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.js",
|
|
17
|
+
"default": "./dist/index.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"files": [
|
|
22
|
+
"dist"
|
|
23
|
+
],
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public",
|
|
26
|
+
"provenance": true
|
|
27
|
+
},
|
|
28
|
+
"peerDependencies": {
|
|
29
|
+
"@commitlint/cli": "*",
|
|
30
|
+
"semantic-release": "*"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@aronrepo/commitlint-config": "^2.0.1",
|
|
34
|
+
"@aronrepo/conventional-changelog-config": "^2.0.1",
|
|
35
|
+
"@aronrepo/semantic-release-config": "^2.0.1",
|
|
36
|
+
"@aronrepo/semantic-release-pnpm": "^2.0.1",
|
|
37
|
+
"@aronrepo/conventional-commits": "^2.0.1"
|
|
38
|
+
},
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "tsdown",
|
|
41
|
+
"dev": "tsdown --watch",
|
|
42
|
+
"test": "vitest",
|
|
43
|
+
"type-check": "tsc --noEmit",
|
|
44
|
+
"lint": "eslint"
|
|
45
|
+
}
|
|
46
|
+
}
|