4 Commits

Author SHA1 Message Date
5e570201bd wip: template
Signed-off-by: Alix von Schirp <github@avonschirp.bootmedia.de>
2025-10-22 05:26:09 +02:00
c5ce1bfbcd feat: add meta packages
Signed-off-by: Alix von Schirp <github@avonschirp.bootmedia.de>
2025-10-22 05:25:11 +02:00
f0b3957536 feat: make ci more robust
Signed-off-by: Alix von Schirp <github@avonschirp.bootmedia.de>
2025-10-22 05:24:33 +02:00
8984a61ec8 refactor: move pushover into sub package, pull config into config package
Signed-off-by: Alix von Schirp <github@avonschirp.bootmedia.de>
2025-10-22 04:46:36 +02:00
36 changed files with 2059 additions and 186 deletions

View File

@@ -2,11 +2,21 @@ on: [push, pull_request]
jobs: jobs:
check: check:
runs-on: ubuntu-latest runs-on: ubuntu-22.04
strategy:
matrix:
node-version: [20, 22]
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v5
- name: Install Deps - name: Install Deps
run: npm install -g pnpm && pnpm install uses: pnpm/action-setup@v4
- name: Setup Node
uses: actions/setup-node@v5
with:
node-version: ${{ matrix.node-version }}
cache: "pnpm"
- name: Install
run: pnpm install
- name: Typecheck & Lint - name: Typecheck & Lint
run: pnpm check run: SKIP_ENV_VALIDATION=true turbo check

2
.gitignore vendored
View File

@@ -1,7 +1,7 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies # dependencies
/node_modules /**/node_modules
/.pnp /.pnp
.pnp.js .pnp.js

18
config/eslint.config.mjs Normal file
View File

@@ -0,0 +1,18 @@
import globals from "globals";
import pluginJs from "@eslint/js";
import tseslint from "typescript-eslint";
import eslintConfigPrettier from "eslint-config-prettier";
import onlyWarn from "eslint-plugin-only-warn";
/** @type {import('eslint').Linter.Config[]} */
export default [
{ languageOptions: { globals: globals.node } },
pluginJs.configs.recommended,
...tseslint.configs.recommended,
eslintConfigPrettier,
{
plugins: {
onlyWarn,
},
},
];

32
config/package.json Normal file
View File

@@ -0,0 +1,32 @@
{
"name": "@repo/configs",
"version": "0.0.0",
"exports": {
"./eslint": "./eslint.config.mjs",
"./jest": "./jest.config.mjs",
"./typedoc": "./typedoc.config.mjs"
},
"devDependencies": {
"@eslint/js": "^9.22.0",
"@shipgirl/typedoc-plugin-versions": "^0.3.0",
"@types/jest": "^29.5.14",
"eslint": "^9.22.0",
"eslint-config-prettier": "^10.1.1",
"eslint-plugin-only-warn": "^1.1.0",
"globals": "^16.4.0",
"jest": "^29.7.0",
"prettier": "3.5.3",
"ts-jest": "^29.2.6",
"typedoc": "^0.27.9",
"typedoc-github-theme": "^0.2.1",
"typedoc-plugin-coverage": "^3.4.1",
"typedoc-plugin-extras": "^4.0.0",
"typedoc-plugin-include-example": "^2.0.2",
"typedoc-plugin-inline-sources": "^1.2.1",
"typedoc-plugin-mdn-links": "^5.0.1",
"typedoc-plugin-zod": "^1.4.0",
"typescript": "^5.5.3",
"typescript-eslint": "^8.26.0"
},
"private": true
}

View File

@@ -1,20 +1,7 @@
import globals from "globals"; import repoConfig from "@repo/configs/eslint";
import pluginJs from "@eslint/js";
import tseslint from "typescript-eslint";
import eslintConfigPrettier from "eslint-config-prettier";
import onlyWarn from "eslint-plugin-only-warn";
/** @type {import('eslint').Linter.Config[]} */
export default [ export default [
{ ignores: ["dist/**", "docs/**", ".*/**", "**/.*", "**/*.config.*"] }, ...repoConfig,
{ files: ["**/*.{js,mjs,cjs,ts}"] }, { ignores: ["dist/**", "docs/**"] },
{ languageOptions: { globals: globals.node } }, { files: ["**/*.{ts}"] },
pluginJs.configs.recommended,
...tseslint.configs.recommended,
eslintConfigPrettier,
{
plugins: {
onlyWarn,
},
},
]; ];

View File

@@ -0,0 +1,7 @@
import repoConfig from "@repo/configs/eslint";
export default [
...repoConfig,
{ ignores: ["dist/**", "docs/**"] },
{ files: ["**/*.{ts}"] },
];

View File

@@ -0,0 +1,3 @@
import repoCofig from "@repo/configs/jest";
export default [...repoCofig];

View File

@@ -0,0 +1,90 @@
{
"name": "@cis-oss/notify-push",
"description": "Send push notifications to your users. Meta package wrapping several @cis-oss packages. See README.md for more information.",
"homepage": "https://cis-oss.github.io/notify",
"version": "0.0.1",
"main": "src/index.ts",
"author": {
"email": "hi@b00tload.space",
"name": "Alix von Schirp",
"url": "https://b00tload.space"
},
"repository": {
"type": "git",
"url": "git+https://github.com/cis-oss/pushover.git"
},
"bugs": {
"url": "https://github.com/cis-oss/pushover/issues"
},
"keywords": [
"mobile",
"notification",
"notifications",
"push",
"pushover"
],
"dependencies": {
"@cis-oss/pushover": "workspace:"
},
"devDependencies": {
"@eslint/js": "^9.22.0",
"@repo/configs": "workspace:",
"@shipgirl/typedoc-plugin-versions": "^0.3.0",
"@types/jest": "^29.5.14",
"@types/node": "^22.13.10",
"eslint": "^9.22.0",
"eslint-config-prettier": "^10.1.1",
"eslint-plugin-only-warn": "^1.1.0",
"globals": "^16.0.0",
"jest": "^29.7.0",
"shx": "^0.4.0",
"ts-jest": "^29.2.6",
"tsx": "^4.19.3",
"typedoc": "^0.27.9",
"typedoc-github-theme": "^0.2.1",
"typedoc-plugin-coverage": "^3.4.1",
"typedoc-plugin-extras": "^4.0.0",
"typedoc-plugin-include-example": "^2.0.2",
"typedoc-plugin-inline-sources": "^1.2.1",
"typedoc-plugin-mdn-links": "^5.0.1",
"typedoc-plugin-zod": "^1.4.0",
"typescript": "^5.5.3",
"typescript-eslint": "^8.26.0"
},
"files": [
"dist/**/*.{js,ts,map}"
],
"scripts": {
"build": "tsc",
"build:watch": "tsc --watch",
"check": "pnpm run lint:ci && pnpm run typecheck",
"clean": "shx rm -rf dist/",
"docs:generate": "typedoc",
"format:check": "prettier --check .",
"lint": "eslint .",
"lint:ci": "eslint --max-warnings 0",
"prepublishOnly": "pnpm run clean && pnpm run build",
"test": "jest",
"typecheck": "tsc --noEmit"
},
"private": true,
"license": "MIT",
"maintainers": [
{
"name": "Alix von Schirp",
"email": "hi@b00tload.space",
"url": "https://b00tload.space"
},
{
"name": "Ole",
"email": "jateute123@gmail.com",
"url": "https://github.com/jateute"
}
],
"packageManager": "pnpm@10.6.5",
"publishConfig": {
"main": "dist/index.js",
"types": "dist/index.d.ts"
},
"type": "module"
}

View File

@@ -0,0 +1,3 @@
import { Pushover } from "@cis-oss/pushover";
export { Pushover };

View File

@@ -0,0 +1,12 @@
{
"extends": "@repo/configs/tsconfig.json",
"compilerOptions": {
/* Path Aliases */
"baseUrl": "./src",
"paths": {
"~/*": ["./src/*"]
}
},
"include": ["src/**/*.ts", "src/**/*.tsx"],
"exclude": ["node_modules/**/*", "docs/**/*", "dist/**/*"]
}

View File

@@ -0,0 +1,7 @@
import repoConfig from "@repo/configs/eslint";
export default [
...repoConfig,
{ ignores: ["dist/**", "docs/**"] },
{ files: ["**/*.{ts}"] },
];

View File

@@ -0,0 +1,3 @@
import repoCofig from "@repo/configs/jest";
export default [...repoCofig];

90
meta/notify/package.json Normal file
View File

@@ -0,0 +1,90 @@
{
"name": "@cis-oss/notify",
"description": "Send push notifications to your users. Meta package wrapping several @cis-oss packages. See README.md for more information.",
"homepage": "https://cis-oss.github.io/notify",
"version": "0.0.1",
"main": "src/index.ts",
"author": {
"email": "hi@b00tload.space",
"name": "Alix von Schirp",
"url": "https://b00tload.space"
},
"repository": {
"type": "git",
"url": "git+https://github.com/cis-oss/pushover.git"
},
"bugs": {
"url": "https://github.com/cis-oss/pushover/issues"
},
"keywords": [
"mobile",
"notification",
"notifications",
"push",
"pushover"
],
"dependencies": {
"@cis-oss/pushover": "workspace:"
},
"devDependencies": {
"@repo/configs": "workspace:",
"@eslint/js": "^9.22.0",
"@shipgirl/typedoc-plugin-versions": "^0.3.0",
"@types/jest": "^29.5.14",
"@types/node": "^22.13.10",
"eslint": "^9.22.0",
"eslint-config-prettier": "^10.1.1",
"eslint-plugin-only-warn": "^1.1.0",
"globals": "^16.0.0",
"jest": "^29.7.0",
"shx": "^0.4.0",
"ts-jest": "^29.2.6",
"tsx": "^4.19.3",
"typedoc": "^0.27.9",
"typedoc-github-theme": "^0.2.1",
"typedoc-plugin-coverage": "^3.4.1",
"typedoc-plugin-extras": "^4.0.0",
"typedoc-plugin-include-example": "^2.0.2",
"typedoc-plugin-inline-sources": "^1.2.1",
"typedoc-plugin-mdn-links": "^5.0.1",
"typedoc-plugin-zod": "^1.4.0",
"typescript": "^5.5.3",
"typescript-eslint": "^8.26.0"
},
"files": [
"dist/**/*.{js,ts,map}"
],
"scripts": {
"build": "tsc",
"build:watch": "tsc --watch",
"check": "pnpm run lint:ci && pnpm run typecheck",
"clean": "shx rm -rf dist/",
"docs:generate": "typedoc",
"format:check": "prettier --check .",
"lint": "eslint .",
"lint:ci": "eslint --max-warnings 0",
"prepublishOnly": "pnpm run clean && pnpm run build",
"test": "jest",
"typecheck": "tsc --noEmit"
},
"private": true,
"license": "MIT",
"maintainers": [
{
"name": "Alix von Schirp",
"email": "hi@b00tload.space",
"url": "https://b00tload.space"
},
{
"name": "Ole",
"email": "jateute123@gmail.com",
"url": "https://github.com/jateute"
}
],
"packageManager": "pnpm@10.6.5",
"publishConfig": {
"main": "dist/index.js",
"types": "dist/index.d.ts"
},
"type": "module"
}

3
meta/notify/src/index.ts Normal file
View File

@@ -0,0 +1,3 @@
import { Pushover } from "@cis-oss/pushover";
export { Pushover };

12
meta/notify/tsconfig.json Normal file
View File

@@ -0,0 +1,12 @@
{
"extends": "@repo/configs/tsconfig.json",
"compilerOptions": {
/* Path Aliases */
"baseUrl": "./src",
"paths": {
"~/*": ["./src/*"]
}
},
"include": ["src/**/*.ts", "src/**/*.tsx"],
"exclude": ["node_modules/**/*", "docs/**/*", "dist/**/*"]
}

View File

@@ -1,100 +1,34 @@
{ {
"name": "@cis-oss/pushover", "name": "@repo/root",
"description": "A client for Pushover, a service for sending notifications. Written in TypeScript. Supports sending to multiple users.", "description": "",
"homepage": "https://cis-oss.github.io/pushover", "files": [],
"version": "0.1.0", "private": true,
"main": "src/index.ts", "license": "MIT",
"author": { "author": {
"email": "hi@b00tload.space", "email": "hi@b00tload.space",
"name": "Alix von Schirp", "name": "Alix von Schirp",
"url": "https://b00tload.space" "url": "https://b00tload.space"
}, },
"repository": {
"type": "git",
"url": "git+https://github.com/cis-oss/pushover.git"
},
"bugs": {
"url": "https://github.com/cis-oss/pushover/issues"
},
"keywords": [
"mobile",
"notification",
"notifications",
"push",
"pushover"
],
"dependencies": {
"zod": "^3.24.2"
},
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.22.0", "@repo/configs": "workspace:",
"@shipgirl/typedoc-plugin-versions": "^0.3.0", "@turbo/gen": "^2.5.6",
"@types/jest": "^29.5.14",
"@types/node": "^22.13.10",
"eslint": "^9.22.0", "eslint": "^9.22.0",
"eslint-config-prettier": "^10.1.1",
"eslint-plugin-only-warn": "^1.1.0",
"finepack": "^2.12.7", "finepack": "^2.12.7",
"globals": "^16.0.0",
"husky": "^9.1.7", "husky": "^9.1.7",
"jest": "^29.7.0",
"lint-staged": "^15.4.3", "lint-staged": "^15.4.3",
"prettier": "3.5.3", "prettier": "3.5.3",
"shx": "^0.4.0", "turbo": "^2.5.6"
"ts-jest": "^29.2.6",
"tsx": "^4.19.3",
"typedoc": "^0.27.9",
"typedoc-github-theme": "^0.2.1",
"typedoc-plugin-coverage": "^3.4.1",
"typedoc-plugin-extras": "^4.0.0",
"typedoc-plugin-include-example": "^2.0.2",
"typedoc-plugin-inline-sources": "^1.2.1",
"typedoc-plugin-mdn-links": "^5.0.1",
"typedoc-plugin-zod": "^1.4.0",
"typescript": "^5.5.3",
"typescript-eslint": "^8.26.0"
}, },
"files": [
"dist/**/*.{js,ts,map}"
],
"scripts": { "scripts": {
"build": "tsc", "prepare": "husky"
"build:watch": "tsc --watch",
"check": "pnpm run lint && pnpm run typecheck",
"clean": "shx rm -rf dist/",
"docs:generate": "typedoc",
"format:check": "prettier --check .",
"lint": "eslint --cache .",
"prepare": "husky",
"prepublishOnly": "pnpm run clean && pnpm run build",
"test": "jest",
"typecheck": "tsc --noEmit"
}, },
"license": "MIT",
"husky": { "husky": {
"shell": "bash" "shell": "bash"
}, },
"lint-staged": { "lint-staged": {
"package.json": "finepack", "package.json": "finepack",
"*.{js,ts,jsx,tsx}": "eslint --cache --fix .", "*.{js,ts,jsx,tsx}": "eslint --fix .",
"*.{js,ts,jsx,tsx,json,css,md}": "prettier --write" "*.{js,ts,jsx,tsx,json,css,md}": "prettier --write"
}, },
"maintainers": [ "version": "0.0.0"
{
"name": "Alix von Schirp",
"email": "hi@b00tload.space",
"url": "https://b00tload.space"
},
{
"name": "Ole",
"email": "jateute123@gmail.com",
"url": "https://github.com/jateute"
}
],
"packageManager": "pnpm@10.6.5",
"publishConfig": {
"main": "dist/index.js",
"types": "dist/index.d.ts"
},
"type": "module"
} }

View File

@@ -0,0 +1,7 @@
import repoConfig from "@repo/configs/eslint";
export default [
...repoConfig,
{ ignores: ["dist/**", "docs/**"] },
{ files: ["**/*.{ts}"] },
];

View File

@@ -0,0 +1,3 @@
import repoCofig from "@repo/configs/jest";
export default [...repoCofig];

View File

@@ -0,0 +1,90 @@
{
"name": "@cis-oss/pushover",
"description": "A client for Pushover, a service for sending notifications. Written in TypeScript. Supports sending to multiple users.",
"homepage": "https://cis-oss.github.io/pushover",
"version": "0.0.10",
"main": "src/index.ts",
"author": {
"email": "hi@b00tload.space",
"name": "Alix von Schirp",
"url": "https://b00tload.space"
},
"repository": {
"type": "git",
"url": "git+https://github.com/cis-oss/pushover.git"
},
"bugs": {
"url": "https://github.com/cis-oss/pushover/issues"
},
"keywords": [
"mobile",
"notification",
"notifications",
"push",
"pushover"
],
"dependencies": {
"zod": "^3.24.2"
},
"devDependencies": {
"@repo/configs": "workspace:",
"@eslint/js": "^9.22.0",
"@shipgirl/typedoc-plugin-versions": "^0.3.0",
"@types/jest": "^29.5.14",
"@types/node": "^22.13.10",
"eslint": "^9.22.0",
"eslint-config-prettier": "^10.1.1",
"eslint-plugin-only-warn": "^1.1.0",
"globals": "^16.0.0",
"jest": "^29.7.0",
"shx": "^0.4.0",
"ts-jest": "^29.2.6",
"tsx": "^4.19.3",
"typedoc": "^0.27.9",
"typedoc-github-theme": "^0.2.1",
"typedoc-plugin-coverage": "^3.4.1",
"typedoc-plugin-extras": "^4.0.0",
"typedoc-plugin-include-example": "^2.0.2",
"typedoc-plugin-inline-sources": "^1.2.1",
"typedoc-plugin-mdn-links": "^5.0.1",
"typedoc-plugin-zod": "^1.4.0",
"typescript": "^5.5.3",
"typescript-eslint": "^8.26.0"
},
"files": [
"dist/**/*.{js,ts,map}"
],
"scripts": {
"build": "tsc",
"build:watch": "tsc --watch",
"check": "pnpm run lint:ci && pnpm run typecheck",
"clean": "shx rm -rf dist/",
"docs:generate": "typedoc",
"format:check": "prettier --check .",
"lint": "eslint .",
"lint:ci": "eslint --max-warnings 0",
"prepublishOnly": "pnpm run clean && pnpm run build",
"test": "jest",
"typecheck": "tsc --noEmit"
},
"private": true,
"license": "MIT",
"maintainers": [
{
"name": "Alix von Schirp",
"email": "hi@b00tload.space",
"url": "https://b00tload.space"
},
{
"name": "Ole",
"email": "jateute123@gmail.com",
"url": "https://github.com/jateute"
}
],
"packageManager": "pnpm@10.6.5",
"publishConfig": {
"main": "dist/index.js",
"types": "dist/index.d.ts"
},
"type": "module"
}

View File

@@ -12,6 +12,7 @@ import type {
} from "./Pushover"; } from "./Pushover";
export default Pushover; export default Pushover;
export { Pushover };
export type { export type {
PushoverRecipient, PushoverRecipient,

View File

@@ -0,0 +1,12 @@
{
"extends": "@repo/configs/tsconfig.json",
"compilerOptions": {
/* Path Aliases */
"baseUrl": "./src",
"paths": {
"~/*": ["./src/*"]
}
},
"include": ["src/**/*.ts", "src/**/*.tsx"],
"exclude": ["node_modules/**/*", "docs/**/*", "dist/**/*"]
}

1463
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

7
pnpm-workspace.yaml Normal file
View File

@@ -0,0 +1,7 @@
packages:
- meta/*
- packages/*
- config
catalogMode: prefer

View File

View File

@@ -0,0 +1,7 @@
import repoConfig from "@repo/configs/eslint";
export default [
...repoConfig,
{ ignores: ["dist/**", "docs/**"] },
{ files: ["**/*.{ts}"] },
];

View File

@@ -0,0 +1,3 @@
import repoCofig from "@repo/configs/jest";
export default [...repoCofig];

View File

@@ -0,0 +1,87 @@
{
"name": "{{name}}",
"description": "{{description}}",
"homepage": "https://cis-oss.github.io/notify",
"version": "0.0.10",
"main": "src/index.ts",
"author": {
"email": "hi@b00tload.space",
"name": "Alix von Schirp",
"url": "https://b00tload.space"
},
"repository": {
"type": "git",
"url": "git+https://github.com/cis-oss/pushover.git"
},
"bugs": {
"url": "https://github.com/cis-oss/pushover/issues"
},
"keywords": [
"notification",
"notify"
],
"dependencies": {
"zod": "^3.24.2"
},
"devDependencies": {
"@eslint/js": "^9.22.0",
"@repo/configs": "workspace:",
"@shipgirl/typedoc-plugin-versions": "^0.3.0",
"@types/jest": "^29.5.14",
"@types/node": "^22.13.10",
"eslint": "^9.22.0",
"eslint-config-prettier": "^10.1.1",
"eslint-plugin-only-warn": "^1.1.0",
"globals": "^16.0.0",
"jest": "^29.7.0",
"shx": "^0.4.0",
"ts-jest": "^29.2.6",
"tsx": "^4.19.3",
"typedoc": "^0.27.9",
"typedoc-github-theme": "^0.2.1",
"typedoc-plugin-coverage": "^3.4.1",
"typedoc-plugin-extras": "^4.0.0",
"typedoc-plugin-include-example": "^2.0.2",
"typedoc-plugin-inline-sources": "^1.2.1",
"typedoc-plugin-mdn-links": "^5.0.1",
"typedoc-plugin-zod": "^1.4.0",
"typescript": "^5.5.3",
"typescript-eslint": "^8.26.0"
},
"files": [
"dist/**/*.{js,ts,map}"
],
"scripts": {
"build": "tsc",
"build:watch": "tsc --watch",
"check": "pnpm run lint:ci && pnpm run typecheck",
"clean": "shx rm -rf dist/",
"docs:generate": "typedoc",
"format:check": "prettier --check .",
"lint": "eslint .",
"lint:ci": "eslint --max-warnings 0",
"prepublishOnly": "pnpm run clean && pnpm run build",
"test": "jest",
"typecheck": "tsc --noEmit"
},
"private": true,
"license": "MIT",
"maintainers": [
{
"name": "Alix von Schirp",
"email": "hi@b00tload.space",
"url": "https://b00tload.space"
},
{
"name": "Ole",
"email": "jateute123@gmail.com",
"url": "https://github.com/jateute"
}
],
"packageManager": "pnpm@10.6.5",
"publishConfig": {
"main": "dist/index.js",
"types": "dist/index.d.ts"
},
"type": "module"
}

View File

View File

@@ -0,0 +1,12 @@
{
"extends": "@repo/configs/tsconfig.json",
"compilerOptions": {
/* Path Aliases */
"baseUrl": "./src",
"paths": {
"~/*": ["./src/*"]
}
},
"include": ["src/**/*.ts", "src/**/*.tsx"],
"exclude": ["node_modules/**/*", "docs/**/*", "dist/**/*"]
}

View File

@@ -0,0 +1,46 @@
import type { PlopTypes } from "@turbo/gen";
export default function generator(plop: PlopTypes.NodePlopAPI): void {
// create a generator
plop.setGenerator("package", {
description: "Generator description",
// gather information from the user
prompts: [
{
type: "input",
name: "name",
message: "Package name",
},
{
type: "input",
name: "description",
message: "Package description",
},
{
type: "input",
name: "author.name",
message: "Author name",
},
{
type: "input",
name: "author.email",
message: "Author email",
},
{
type: "input",
name: "author.url",
message: "Author URL",
},
],
// perform actions based on the prompts
actions: [
{
type: "addMany",
destination: "packages/{{name}}",
base: "templates/package",
templateFiles: "templates/package/**/*",
abortOnFail: true,
},
],
});
}