🎉 Initial commit

This commit is contained in:
2026-02-02 13:38:42 +01:00
parent 15c8ef7616
commit cac1349c95
11 changed files with 7572 additions and 122 deletions
+21 -21
View File
@@ -1,21 +1,21 @@
// .eslintrc.cjs // .eslintrc.cjs
module.exports = { module.exports = {
root: true, root: true,
parser: '@typescript-eslint/parser', parser: "@typescript-eslint/parser",
plugins: [ plugins: [
'@typescript-eslint', "@typescript-eslint",
'import', "import",
'unused-imports', "unused-imports",
'simple-import-sort', "simple-import-sort",
], ],
extends: [ extends: [
'eslint:recommended', "eslint:recommended",
'plugin:@typescript-eslint/recommended', "plugin:@typescript-eslint/recommended",
'plugin:@typescript-eslint/strict-type-checked', "plugin:@typescript-eslint/strict-type-checked",
'plugin:@typescript-eslint/stylistic-type-checked', "plugin:@typescript-eslint/stylistic-type-checked",
'plugin:import/recommended', "plugin:import/recommended",
'plugin:import/typescript', "plugin:import/typescript",
'plugin:prettier/recommended', "plugin:prettier/recommended",
], ],
env: { env: {
es2022: true, es2022: true,
@@ -23,15 +23,15 @@ module.exports = {
browser: true, browser: true,
}, },
rules: { rules: {
'prettier/prettier': 'error', "prettier/prettier": "error",
'import/order': 'off', "import/order": "off",
'simple-import-sort/imports': 'error', "simple-import-sort/imports": "error",
'simple-import-sort/exports': 'error', "simple-import-sort/exports": "error",
'unused-imports/no-unused-imports': 'error', "unused-imports/no-unused-imports": "error",
'@typescript-eslint/no-unused-vars': [ "@typescript-eslint/no-unused-vars": [
'error', "error",
{ argsIgnorePattern: '^_', varsIgnorePattern: '^_' }, { argsIgnorePattern: "^_", varsIgnorePattern: "^_" },
], ],
}, },
ignorePatterns: ['dist', 'node_modules', 'public'], ignorePatterns: ["dist", "node_modules", "public"],
}; };
+43 -43
View File
@@ -1,49 +1,49 @@
name: CI name: CI
on: on:
push: push:
branches: [main] branches: [main]
pull_request: pull_request:
branches: [main] branches: [main]
workflow_dispatch: workflow_dispatch:
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: actions/setup-node@v4 - uses: actions/setup-node@v4
with: with:
node-version: 20 node-version: 20
cache: 'npm' cache: "npm"
- run: npm ci - run: npm ci
- run: npm run build - run: npm run build
- run: npm run check - run: npm run check
- run: npm run test:ci - run: npm run test:ci
- run: npm run check:outdated - run: npm run check:outdated
- run: npm run check:cspell - run: npm run check:cspell
- run: npm run check:tsc - run: npm run check:tsc
- run: npm run check:eslint - run: npm run check:eslint
- run: npm run check:prettier - run: npm run check:prettier
- run: npm run check:package - run: npm run check:package
- name: Upload coverage - name: Upload coverage
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: coverage name: coverage
path: coverage path: coverage
publish: publish:
if: startsWith(github.ref, 'refs/tags/') if: startsWith(github.ref, 'refs/tags/')
needs: build needs: build
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: actions/setup-node@v4 - uses: actions/setup-node@v4
with: with:
node-version: 20 node-version: 20
registry-url: 'https://registry.npmjs.org/' registry-url: "https://registry.npmjs.org/"
- run: npm ci - run: npm ci
- run: npm run build - run: npm run build
- run: npm publish --access public - run: npm publish --access public
env: env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
Vendored
+2
View File
@@ -15,6 +15,8 @@ dist-ssr
# Editor directories and files # Editor directories and files
.vscode/* .vscode/*
!.vscode/extensions.json !.vscode/extensions.json
!.vscode/settings.json
!.vscode/tasks.json
.idea .idea
.DS_Store .DS_Store
*.suo *.suo
+9
View File
@@ -0,0 +1,9 @@
{
"semi": true,
"singleQuote": false,
"trailingComma": "all",
"printWidth": 80,
"tabWidth": 4,
"endOfLine": "lf",
"arrowParens": "always"
}
+14 -8
View File
@@ -1,17 +1,23 @@
# If applied, this commit will... (Max 50 char) # If applied, this commit will... (Max 50 char)
# Explain why this change is being made (Max 72 Char) [WHAT and WHY vs HOW] # Explain why this change is being made (Max 72 Char) [WHAT and WHY vs HOW]
# Provide links or keys to any relevant tickets, articles or other resources # Provide links or keys to any relevant tickets, articles or other resources
Resolves #... Resolves #...
# --- COMMIT END --- # --- COMMIT END ---
# Remember to # Remember to
# Use the imperative mood in the subject line
# Capitalize the subject line # Use the imperative mood in the subject line
# Do not end the subject line with a period
# Separate subject from body with a blank line # Capitalize the subject line
# Use the body to explain what and why vs. how
# Can use multiple lines with "-" for bullet points in body # Do not end the subject line with a period
# Separate subject from body with a blank line
# Use the body to explain what and why vs. how
# Can use multiple lines with "-" for bullet points in body
+7 -7
View File
@@ -40,16 +40,16 @@
# #
# - script: "hello.go" # - script: "hello.go"
# runner: go run # runner: go run
commands: commands:
typecheck: typecheck:
run: npm run check:tsc run: npm run check:tsc
spell: spell:
run: npm run check:cspell run: npm run check:cspell
sort: sort:
run: npm run check:package run: npm run check:package
lint: lint:
run: npm run check:eslint run: npm run check:eslint
format: format:
run: npm run check:prettier run: npm run check:prettier
outdated: outdated:
run: npm run check:outdated run: npm run check:outdated
+7355
View File
File diff suppressed because it is too large Load Diff
+68 -13
View File
@@ -1,15 +1,70 @@
{ {
"name": "tiny-pattern-ts", "name": "tiny-pattern-ts",
"private": true, "private": true,
"version": "0.0.0", "version": "0.0.0",
"type": "module", "description": "Pattern matching for TypeScript/ESM environments (F#-style, not regex)",
"scripts": { "keywords": [
"dev": "vite", "pattern-matching",
"build": "tsc && vite build", "pattern",
"preview": "vite preview" "match",
}, "algebraic-data-types",
"devDependencies": { "adt",
"typescript": "~5.7.2", "typescript"
"vite": "^6.3.1" ],
} "license": "MIT",
"type": "module",
"sideEffects": false,
"publishConfig": {
"access": "public"
},
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"files": [
"dist"
],
"repository": {
"type": "git",
"url": "https://github.com/tmueller/tiny-pattern-ts.git"
},
"scripts": {
"dev": "vite",
"build": "vite build && tsc --emitDeclarationOnly",
"clean": "rimraf dist",
"clean:build": "rimraf dist",
"test": "npm run check:tsc && npm run test:unit",
"test:unit": "vitest run",
"test:ci": "vitest run --coverage --reporter=dot --reporter=lcov --run",
"check": "npm run check:eslint && npm run check:prettier && npm run check:cspell && npm run check:tsc && npm run check:package && npm run check:outdated",
"check:eslint": "eslint . --ext .ts,.tsx,.js,.jsx",
"check:prettier": "prettier --check .",
"check:cspell": "cspell .",
"check:tsc": "tsc --noEmit",
"check:package": "sort-package-json --check",
"check:outdated": "check-outdated",
"fix": "npm run fix:eslint && npm run fix:prettier && npm run fix:package",
"fix:eslint": "eslint . --ext .ts,.tsx,.js,.jsx --fix",
"fix:prettier": "prettier --write .",
"fix:package": "sort-package-json --write",
"use:git-commit-message": "cp commit-message-template .git/COMMIT_EDITMSG || true"
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^8.31.1",
"@typescript-eslint/parser": "^8.31.1",
"changesets": "^1.0.2",
"check-outdated": "^2.13.0",
"cspell": "^8.19.3",
"eslint": "^9.25.1",
"eslint-config-prettier": "^10.1.2",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-simple-import-sort": "^12.1.1",
"eslint-plugin-unused-imports": "^4.1.4",
"lefthook": "^1.11.12",
"prettier": "^3.5.3",
"sort-package-json": "^3.1.0",
"tslib": "^2.8.1",
"type-fest": "^4.40.1",
"typescript": "~5.7.2",
"vite": "^6.3.1",
"vitest": "^2.1.9"
}
} }
+44 -22
View File
@@ -1,24 +1,46 @@
{ {
"compilerOptions": { "compilerOptions": {
"target": "ES2020", "target": "ES2022",
"useDefineForClassFields": true, "useDefineForClassFields": true,
"module": "ESNext", "module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"], "lib": [
"skipLibCheck": true, "ES2022",
"DOM"
/* Bundler mode */ ],
"moduleResolution": "bundler", "skipLibCheck": true,
"allowImportingTsExtensions": true, /* Bundler mode */
"isolatedModules": true, "moduleResolution": "Node",
"moduleDetection": "force", "allowImportingTsExtensions": true,
"noEmit": true, "isolatedModules": true,
"moduleDetection": "force",
/* Linting */ "noEmit": false,
"strict": true, /* Linting */
"noUnusedLocals": true, "strict": true,
"noUnusedParameters": true, "noImplicitAny": true,
"noFallthroughCasesInSwitch": true, "noImplicitThis": true,
"noUncheckedSideEffectImports": true "alwaysStrict": true,
}, "strictNullChecks": true,
"include": ["src"] "strictFunctionTypes": true,
"strictBindCallApply": true,
"strictPropertyInitialization": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"forceConsistentCasingInFileNames": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noUncheckedSideEffectImports": true,
"declaration": true,
"declarationMap": true,
"outDir": "dist",
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"resolveJsonModule": true,
"composite": false,
"types": [
"vitest"
]
},
"include": [
"src"
]
} }
+8 -7
View File
@@ -1,10 +1,11 @@
import { defineConfig } from 'vitest/config'; import { defineConfig } from "vitest/config";
export default defineConfig({ export default defineConfig({
test: { test: {
coverage: { coverage: {
reporter: ['text', 'html', 'lcov'], reporter: ["text", "html", "lcov"],
include: ['src/**/*.ts'], include: ["src/**/*.ts"],
exclude: ['src/**/*.test.ts', 'test/**'], exclude: ["src/**/*.test.ts", "test/**"],
},
}, },
},
}); });