Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 1d058b3

Browse files
author
Christopher J Baker
committedJul 12, 2024·
migrate scripts into workspace
1 parent 8d76372 commit 1d058b3

20 files changed

+480
-205
lines changed
 

‎.depcheckrc

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ ignore-dirs:
33
ignores:
44
- "@types/*"
55
- "@testing-library/jest-dom"
6+
- jsdom
7+
- typescript
68
- vite
79
- vite-plugin-dts
810
- vitest

‎.nvmrc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
18
1+
20

‎package-lock.json

+294-87
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
{
22
"private": true,
3+
"type": "module",
34
"homepage": "https://www.bitovi.com/open-source/react-to-web-component",
45
"namespace": "r2wc",
56
"workspaces": [
67
"packages/*"
78
],
89
"scripts": {
9-
"check-packages": "ts-node ./scripts/check-packages",
10-
"typecheck": "tsc --noEmit ; nx run-many -t typecheck",
11-
"eslint": "eslint . ; nx run-many -t eslint",
12-
"prettier": "prettier --check . ; nx run-many -t prettier",
13-
"depcheck": "depcheck . ; nx run-many -t depcheck",
10+
"check-packages": "nx run scripts:check-packages",
11+
"typecheck": "nx run-many -t typecheck",
12+
"eslint": "nx run-many -t eslint",
13+
"prettier": "nx run-many -t prettier",
14+
"depcheck": "nx run-many -t depcheck",
1415
"clean": "nx run-many -t clean",
1516
"build": "nx run-many -t build",
1617
"reset": "nx run-many -t clean && nx reset"
@@ -23,8 +24,6 @@
2324
"jsdom": "^22.0.0",
2425
"nx": "19.4.2",
2526
"prettier": "^3.3.2",
26-
"semver": "^7.5.0",
27-
"ts-node": "^10.9.1",
2827
"typescript": "^5.5.3",
2928
"vite": "^5.3.3",
3029
"vite-plugin-dts": "^3.9.1",

‎packages/core/package.json

+4
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,9 @@
3939
"test:coverage": "vitest run --coverage",
4040
"clean": "rm -rf tsconfig.tsbuildinfo dist",
4141
"build": "vite build"
42+
},
43+
"devDependencies": {
44+
"@types/react": "^18.0.0",
45+
"@types/react-dom": "^18.0.0"
4246
}
4347
}

‎packages/core/tsconfig.json

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
{
2-
"extends": "../../tsconfig.json",
3-
"compilerOptions": {
4-
"jsx": "react-jsx"
5-
},
2+
"extends": "../../tsconfig.react.json",
63
"include": ["src"]
74
}

‎packages/legacy/package.json

-4
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,6 @@
4444
"dependencies": {
4545
"@r2wc/core": "^1.0.0"
4646
},
47-
"devDependencies": {
48-
"@types/react": "^16.0.0",
49-
"@types/react-dom": "^16.0.0"
50-
},
5147
"peerDependencies": {
5248
"react": "^16.0.0 || ^17.0.0 || ^18.0.0",
5349
"react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0"

‎packages/legacy/tsconfig.json

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
{
2-
"extends": "../../tsconfig.json",
3-
"compilerOptions": {
4-
"jsx": "react-jsx"
5-
},
2+
"extends": "../../tsconfig.react.json",
63
"include": ["src"]
74
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
{
2-
"extends": "../../tsconfig.json",
3-
"compilerOptions": {
4-
"jsx": "react-jsx"
5-
},
2+
"extends": "../../tsconfig.react.json",
63
"include": ["src"]
74
}

‎packages/scripts/package.json

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"name": "scripts",
3+
"private": "true",
4+
"version": "0.0.0",
5+
"type": "module",
6+
"scripts": {
7+
"script": "NODE_OPTIONS=\"--no-warnings --import ./register.js\" node",
8+
"check-packages": "npm run script -- ./src/check-packages.ts",
9+
"typecheck": "tsc --noEmit",
10+
"eslint": "eslint .",
11+
"prettier": "prettier --check .",
12+
"depcheck": "depcheck .",
13+
"clean": "rm -rf tsconfig.tsbuildinfo dist"
14+
},
15+
"dependencies": {
16+
"glob": "^11.0.0",
17+
"semver": "^7.6.2",
18+
"ts-node": "^10.9.2"
19+
}
20+
}

‎packages/scripts/register.js

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { register } from "node:module"
2+
import { pathToFileURL } from "node:url"
3+
4+
register("ts-node/esm/transpile-only", pathToFileURL("./"))
+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import semver from "semver"
2+
3+
import project from "./lib/project.js"
4+
import workspaces, { Package } from "./lib/workspaces.js"
5+
6+
for (const workspace of Object.values(workspaces)) {
7+
log(workspace, "Processing.")
8+
9+
if ("private" in workspace) {
10+
if (workspace.private === false) {
11+
error(workspace, `Remove "private: false".`)
12+
} else {
13+
warn(workspace, `Private.`)
14+
}
15+
}
16+
17+
if (!workspace.private && workspace.directory !== "legacy") {
18+
const nameSplit = workspace.name.match(/(?:@([^/]+)\/)?([^/]+)/)
19+
20+
if (!nameSplit) {
21+
error(
22+
workspace,
23+
`Package name must be in the format @<namespace>/<package>.`,
24+
)
25+
} else {
26+
if (nameSplit[1] !== project.namespace) {
27+
error(
28+
workspace,
29+
`Package must be in the "${project.namespace}" namespace.`,
30+
)
31+
}
32+
33+
if (nameSplit[2] !== workspace.directory) {
34+
error(workspace, `Package name and directory must match.`)
35+
}
36+
}
37+
}
38+
39+
if (!semver.valid(workspace.version)) {
40+
error(workspace, `Invalid version: ${workspace.version}`)
41+
}
42+
43+
if (workspace.dependencies) {
44+
for (const [name, range] of Object.entries(workspace.dependencies)) {
45+
if (workspaces[name]) {
46+
if (!semver.satisfies(workspaces[name].version, range)) {
47+
error(workspace, `Unsatisfiable package: ${name}@${range}`)
48+
}
49+
}
50+
}
51+
}
52+
}
53+
54+
/* eslint-disable no-console */
55+
function log({ directory }: Package, message: string) {
56+
console.log(`${directory} - ${message}`)
57+
}
58+
59+
function warn({ directory }: Package, message: string) {
60+
console.warn(`${directory} - ${message}`)
61+
}
62+
63+
function error({ directory }: Package, message: string) {
64+
console.error(`${directory} - ${message}`)
65+
process.exitCode = 1
66+
}

‎packages/scripts/src/lib/project.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import fs from "node:fs"
2+
import path from "node:path"
3+
4+
export const dirname = path.join(import.meta.dirname, "..", "..", "..", "..")
5+
6+
const packagePath = path.join(dirname, "package.json")
7+
const packageContents = fs.readFileSync(packagePath, "utf-8")
8+
const packageData = JSON.parse(packageContents)
9+
10+
export default packageData
+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import fs from "node:fs"
2+
import path from "node:path"
3+
4+
import { globSync } from "glob"
5+
6+
import project, { dirname } from "./project.js"
7+
8+
interface BarePackage {
9+
name: string
10+
private?: boolean
11+
version: string
12+
dependencies?: Record<string, string>
13+
devDependencies?: Record<string, string>
14+
}
15+
16+
export interface Package extends BarePackage {
17+
dirname: string
18+
directory: string
19+
}
20+
21+
const list = globSync(project.workspaces, { cwd: dirname })
22+
.map((workspace) => {
23+
const split = workspace.split("/")
24+
const directory = split[split.length - 1]
25+
26+
return {
27+
dirname: workspace,
28+
directory,
29+
pkgPath: path.join(dirname, workspace, "package.json"),
30+
}
31+
})
32+
.filter(({ pkgPath }) => fs.existsSync(pkgPath))
33+
.map(({ dirname, directory, pkgPath }) => ({
34+
dirname,
35+
directory,
36+
...(JSON.parse(fs.readFileSync(pkgPath, "utf-8")) as BarePackage),
37+
}))
38+
39+
const workspaces: Record<string, Package> = {}
40+
export default workspaces
41+
42+
for (const pkg of list) {
43+
workspaces[pkg.name] = pkg
44+
}

‎packages/scripts/tsconfig.json

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"extends": "../../tsconfig.node.json",
3+
"include": ["src"]
4+
}

‎scripts/check-packages.ts

-54
This file was deleted.

‎scripts/lib/packages.ts

-35
This file was deleted.

‎tsconfig.json ‎tsconfig.base.json

-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
{
22
"compilerOptions": {
3-
"module": "ESNext",
4-
"moduleResolution": "bundler",
5-
"target": "ES2020",
6-
"lib": ["DOM", "DOM.Iterable", "ESNext"],
7-
83
"declaration": true,
94
"composite": true,
105
"incremental": true,

‎tsconfig.node.json

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"extends": "./tsconfig.base.json",
3+
"compilerOptions": {
4+
"module": "NodeNext",
5+
"moduleResolution": "NodeNext",
6+
"target": "ES2022",
7+
"lib": ["ES2022"]
8+
},
9+
"ts-node": {
10+
"esm": true
11+
}
12+
}

‎tsconfig.react.json

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"extends": "./tsconfig.base.json",
3+
"compilerOptions": {
4+
"module": "ESNext",
5+
"moduleResolution": "bundler",
6+
"target": "ES2020",
7+
"lib": ["DOM", "DOM.Iterable", "ESNext"],
8+
"jsx": "react-jsx"
9+
}
10+
}

0 commit comments

Comments
 (0)
Please sign in to comment.