Basic setup of the project.
This commit is contained in:
11
.eslintignore
Normal file
11
.eslintignore
Normal file
@@ -0,0 +1,11 @@
|
||||
node_modules/
|
||||
|
||||
main.js
|
||||
|
||||
**/*.js
|
||||
*.js
|
||||
|
||||
**/*.mjs
|
||||
*.mjs
|
||||
|
||||
dist/*
|
299
.eslintrc
Normal file
299
.eslintrc
Normal file
@@ -0,0 +1,299 @@
|
||||
{
|
||||
"root": true,
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"env": {
|
||||
"node": true
|
||||
},
|
||||
"plugins": [
|
||||
"@typescript-eslint",
|
||||
"deprecation",
|
||||
"prettier",
|
||||
"import",
|
||||
"jsdoc",
|
||||
"override"
|
||||
],
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
"plugin:@typescript-eslint/eslint-recommended",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"plugin:jsdoc/recommended-typescript"
|
||||
],
|
||||
"parserOptions": {
|
||||
"sourceType": "module",
|
||||
"project": "./tsconfig.json"
|
||||
},
|
||||
"rules": {
|
||||
"override/require-override": "error",
|
||||
"override/require-static-override": "off",
|
||||
"prettier/prettier": "warn",
|
||||
"array-callback-return": [
|
||||
"error"
|
||||
],
|
||||
"@typescript-eslint/no-unused-vars": [
|
||||
"error",
|
||||
{
|
||||
"argsIgnorePattern": "^_",
|
||||
"varsIgnorePattern": "^_",
|
||||
"caughtErrorsIgnorePattern": "^_",
|
||||
"args": "none"
|
||||
}
|
||||
],
|
||||
"no-warning-comments": [
|
||||
"warn",
|
||||
{
|
||||
"terms": [
|
||||
"@todo"
|
||||
],
|
||||
"location": "anywhere"
|
||||
}
|
||||
],
|
||||
"no-unused-vars": "off",
|
||||
"@typescript-eslint/ban-ts-comment": "off",
|
||||
"no-prototype-builtins": "off",
|
||||
"@typescript-eslint/no-empty-function": "off",
|
||||
"deprecation/deprecation": "warn",
|
||||
"no-console": "error",
|
||||
"@typescript-eslint/naming-convention": [
|
||||
"warn",
|
||||
{
|
||||
"selector": "classProperty",
|
||||
"modifiers": [
|
||||
"private"
|
||||
],
|
||||
"format": [],
|
||||
"custom": {
|
||||
"regex": "^(_{1,2}I[A-Z][a-zA-Z0-9]*_?|_{1,2}[a-z][a-zA-Z0-9]*)$",
|
||||
"match": true,
|
||||
"message": "Private class properties should be prefixed with an underscore. Exceptions are private class properties that are interfaces. These should be prefixed with '_I'."
|
||||
}
|
||||
},
|
||||
{
|
||||
"selector": "classProperty",
|
||||
"modifiers": [
|
||||
"protected"
|
||||
],
|
||||
"format": [],
|
||||
"custom": {
|
||||
"regex": "^(_{1,2}I[A-Z][a-zA-Z0-9]*_?|_{1,2}[a-z][a-zA-Z0-9]*)$",
|
||||
"match": true,
|
||||
"message": "Protected class properties should be prefixed with an underscore. Exceptions are protected class properties that are interfaces. These should be prefixed with '_I'."
|
||||
}
|
||||
},
|
||||
{
|
||||
"selector": [
|
||||
"typeProperty",
|
||||
"classProperty"
|
||||
],
|
||||
"types": [
|
||||
"boolean"
|
||||
],
|
||||
"format": [
|
||||
"PascalCase"
|
||||
],
|
||||
"prefix": [
|
||||
"is",
|
||||
"has",
|
||||
"can",
|
||||
"did",
|
||||
"will",
|
||||
"should"
|
||||
],
|
||||
"leadingUnderscore": "allow"
|
||||
},
|
||||
{
|
||||
"selector": "memberLike",
|
||||
"modifiers": [
|
||||
"public"
|
||||
],
|
||||
"format": [
|
||||
"camelCase"
|
||||
],
|
||||
"leadingUnderscore": "forbid",
|
||||
"filter": {
|
||||
"regex": "^(Events|Styles|Classes|Then)$",
|
||||
"match": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"selector": "typeProperty",
|
||||
"modifiers": [
|
||||
"public"
|
||||
],
|
||||
"format": null,
|
||||
"filter": {
|
||||
"regex": ".*-event$",
|
||||
"match": true
|
||||
},
|
||||
"custom": {
|
||||
"regex": "^[a-z]+(-[a-z]+)*-event$",
|
||||
"match": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"selector": "typeProperty",
|
||||
"modifiers": [
|
||||
"public"
|
||||
],
|
||||
"format": [
|
||||
"camelCase"
|
||||
],
|
||||
"filter": {
|
||||
"regex": ".*-event$|^(Events|Styles|Classes|Then)$",
|
||||
"match": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"@typescript-eslint/padding-line-between-statements": [
|
||||
"warn",
|
||||
{
|
||||
"blankLine": "always",
|
||||
"prev": "*",
|
||||
"next": [
|
||||
"return",
|
||||
"if",
|
||||
"multiline-const",
|
||||
"function",
|
||||
"multiline-expression",
|
||||
"multiline-let",
|
||||
"block-like"
|
||||
]
|
||||
},
|
||||
{
|
||||
"blankLine": "always",
|
||||
"prev": [
|
||||
"function"
|
||||
],
|
||||
"next": "*"
|
||||
}
|
||||
],
|
||||
"import/order": [
|
||||
"warn",
|
||||
{
|
||||
"groups": [
|
||||
[
|
||||
"builtin",
|
||||
"external"
|
||||
],
|
||||
[
|
||||
"internal"
|
||||
],
|
||||
[
|
||||
"parent",
|
||||
"sibling"
|
||||
]
|
||||
],
|
||||
"newlines-between": "never",
|
||||
"alphabetize": {
|
||||
"order": "asc",
|
||||
"caseInsensitive": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"jsdoc/no-undefined-types": [
|
||||
"warn",
|
||||
{
|
||||
"disableReporting": true,
|
||||
"markVariablesAsUsed": true
|
||||
}
|
||||
],
|
||||
"jsdoc/require-jsdoc": [
|
||||
"warn",
|
||||
{
|
||||
"require": {
|
||||
"FunctionDeclaration": true,
|
||||
"MethodDefinition": true,
|
||||
"ClassDeclaration": true,
|
||||
"ArrowFunctionExpression": false,
|
||||
"FunctionExpression": false
|
||||
},
|
||||
"minLineCount": 10
|
||||
}
|
||||
],
|
||||
"jsdoc/require-param": [
|
||||
"warn",
|
||||
{
|
||||
"exemptedBy": [
|
||||
"deprecated",
|
||||
"inheritdoc"
|
||||
]
|
||||
}
|
||||
],
|
||||
"jsdoc/require-description": [
|
||||
"warn",
|
||||
{
|
||||
"contexts": [
|
||||
"FunctionDeclaration",
|
||||
"MethodDefinition",
|
||||
"ClassDeclaration",
|
||||
"ClassExpression"
|
||||
],
|
||||
"descriptionStyle": "body",
|
||||
"exemptedBy": [
|
||||
"deprecated",
|
||||
"inheritdoc"
|
||||
]
|
||||
}
|
||||
],
|
||||
"jsdoc/require-returns": [
|
||||
"warn",
|
||||
{
|
||||
"checkGetters": false,
|
||||
"exemptedBy": [
|
||||
"deprecated",
|
||||
"inheritdoc"
|
||||
]
|
||||
}
|
||||
],
|
||||
"jsdoc/check-tag-names": [
|
||||
"warn",
|
||||
{
|
||||
"definedTags": [
|
||||
"remarks",
|
||||
"jest-environment",
|
||||
"singleton"
|
||||
]
|
||||
}
|
||||
],
|
||||
"jsdoc/check-alignment": "warn",
|
||||
"jsdoc/check-indentation": "warn",
|
||||
"jsdoc/no-restricted-syntax": [
|
||||
"error",
|
||||
{
|
||||
"contexts": [
|
||||
{
|
||||
"context": "MethodDefinition[kind='get']",
|
||||
"comment": "JsdocBlock:has(JsdocTag[tag='returns'])",
|
||||
"message": "JSDoc @returns comments are not allowed in getters."
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"@typescript-eslint/prefer-readonly": "warn",
|
||||
"@typescript-eslint/explicit-function-return-type": [
|
||||
"warn",
|
||||
{
|
||||
"allowExpressions": true,
|
||||
"allowTypedFunctionExpressions": true,
|
||||
"allowHigherOrderFunctions": true
|
||||
}
|
||||
],
|
||||
"@typescript-eslint/prefer-string-starts-ends-with": "warn",
|
||||
"@typescript-eslint/no-misused-promises": "warn",
|
||||
"@typescript-eslint/prefer-optional-chain": "warn"
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"files": [
|
||||
"*.test.ts",
|
||||
"*.spec.ts"
|
||||
],
|
||||
"rules": {
|
||||
"jsdoc/require-jsdoc": "off",
|
||||
"jsdoc/require-param": "off",
|
||||
"jsdoc/require-description": "off",
|
||||
"jsdoc/require-returns": "off",
|
||||
"@typescript-eslint/explicit-function-return-type": "off"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
12
.github/dependabot.yml
vendored
Normal file
12
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
# To get started with Dependabot version updates, you'll need to specify which
|
||||
# package ecosystems to update and where the package manifests are located.
|
||||
# Please see the documentation for all configuration options:
|
||||
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "npm" # See documentation for possible values
|
||||
directory: "/" # Location of package manifests
|
||||
open-pull-requests-limit: 10
|
||||
schedule:
|
||||
interval: "weekly"
|
30
.github/workflows/PullRequestTest.yml
vendored
Normal file
30
.github/workflows/PullRequestTest.yml
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
name: Run Build and Tests on Pull Request
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build-and-test:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20.8.0'
|
||||
|
||||
- name: Install Dependencies
|
||||
run: npm install
|
||||
|
||||
- name: Run Tests
|
||||
run: npm run test:verbose
|
||||
|
||||
- name: Build the Project
|
||||
run: npm run build:tsc
|
23
.github/workflows/ValidateBranchName.yml
vendored
Normal file
23
.github/workflows/ValidateBranchName.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
name: Validate Branch Name on Pull Request
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
validate-branch-name-on-pull-request:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Validate Branch Name on Pull Request
|
||||
run: |
|
||||
BRANCH_NAME=${GITHUB_HEAD_REF}
|
||||
if [[ ! "$BRANCH_NAME" =~ ^(feature\/|fix\/|refactoring\/|testing\/|dependabot\/|gh-pages) ]]; then
|
||||
echo "Invalid branch name: $BRANCH_NAME"
|
||||
echo "Branch name must start with 'feature/', 'fix/', 'refactoring/', 'testing/', dependabot/" or "gh-pages"
|
||||
exit 1
|
||||
fi
|
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
# Internal
|
||||
.vscode
|
||||
.locale
|
||||
.VSCodeCounter
|
||||
|
||||
*.ignore.*
|
||||
|
||||
dist/*
|
||||
node_modules/*
|
20
.prettierrc.json
Normal file
20
.prettierrc.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"printWidth": 80,
|
||||
"semi": true,
|
||||
"singleQuote": true,
|
||||
"bracketSpacing": true,
|
||||
"useTabs": false,
|
||||
"tabWidth": 4,
|
||||
"endOfLine": "auto",
|
||||
"overrides": [
|
||||
{
|
||||
"files": [
|
||||
".prettierrc",
|
||||
".eslintrc"
|
||||
],
|
||||
"options": {
|
||||
"parser": "json"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
22
jest.config.js
Normal file
22
jest.config.js
Normal file
@@ -0,0 +1,22 @@
|
||||
module.exports = {
|
||||
setupFilesAfterEnv: ['./scripts/jest.setup.js'],
|
||||
preset: 'ts-jest',
|
||||
testEnvironment: 'node',
|
||||
testMatch: ['**/__tests__/**/*.test.ts', '**/?(*.)+(test).ts'],
|
||||
testPathIgnorePatterns: ['\\.spec\\.ts$', '\\.performance\\.test\\.ts$'],
|
||||
moduleDirectories: ['node_modules', 'src'],
|
||||
moduleNameMapper: {
|
||||
'^src/(.*)$': '<rootDir>/src/$1',
|
||||
},
|
||||
collectCoverage: true,
|
||||
coverageDirectory: '.locale/coverage',
|
||||
coverageReporters: ['text', 'lcov'],
|
||||
coverageThreshold: {
|
||||
global: {
|
||||
branches: 80,
|
||||
functions: 80,
|
||||
lines: 80,
|
||||
statements: 80,
|
||||
},
|
||||
},
|
||||
};
|
6894
package-lock.json
generated
Normal file
6894
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
37
package.json
Normal file
37
package.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"name": "ts-injex",
|
||||
"version": "0.0.1",
|
||||
"description": "",
|
||||
"main": "dist/index.js",
|
||||
"scripts": {
|
||||
"build:tsc": "tsc",
|
||||
"lint": "eslint --ext .ts .",
|
||||
"lint:fix": "eslint --fix --ext .ts .",
|
||||
"test:file": "jest --watch --onlyChanged --coverage=true --verbose",
|
||||
"test:verbose": "jest --verbose"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PxaMMaxP/TSinjex.git"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "Max P. (@Github: PxaMMaxP)",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"typescript": "^5.5.4",
|
||||
"@types/jest": "^29.5.12",
|
||||
"@types/node": "^20.14.11",
|
||||
"@typescript-eslint/eslint-plugin": "^5.29.0",
|
||||
"@typescript-eslint/parser": "^5.29.0",
|
||||
"eslint-plugin-deprecation": "^3.0.0",
|
||||
"eslint-plugin-import": "^2.29.1",
|
||||
"eslint-plugin-jsdoc": "^48.8.3",
|
||||
"eslint-plugin-override": "https://github.com/PxaMMaxP/eslint-plugin-override",
|
||||
"jest": "^29.7.0",
|
||||
"ts-jest": "^29.2.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"eslint-plugin-prettier": "^5.2.1",
|
||||
"jest-environment-jsdom": "^29.7.0"
|
||||
}
|
||||
}
|
17
scripts/jest.setup.js
Normal file
17
scripts/jest.setup.js
Normal file
@@ -0,0 +1,17 @@
|
||||
// jest.setup.js
|
||||
const getCircularReplacer = () => {
|
||||
const seen = new WeakSet();
|
||||
return (key, value) => {
|
||||
if (typeof value === 'object' && value !== null) {
|
||||
if (seen.has(value)) {
|
||||
return;
|
||||
}
|
||||
seen.add(value);
|
||||
}
|
||||
return value;
|
||||
};
|
||||
};
|
||||
|
||||
global.customJSONStringify = (object) => {
|
||||
return JSON.stringify(object, getCircularReplacer());
|
||||
};
|
43
tsconfig.json
Normal file
43
tsconfig.json
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"baseUrl": ".",
|
||||
"inlineSourceMap": false,
|
||||
"sourceMap": true,
|
||||
"inlineSources": true,
|
||||
"declaration": true,
|
||||
"declarationMap": true,
|
||||
"outDir": "./dist",
|
||||
"module": "ESNext",
|
||||
"target": "ES6",
|
||||
"allowJs": true,
|
||||
"noUnusedLocals": false,
|
||||
"noUnusedParameters": false,
|
||||
"noImplicitAny": true,
|
||||
"moduleResolution": "node",
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"importHelpers": true,
|
||||
"isolatedModules": true,
|
||||
"resolveJsonModule": true,
|
||||
"experimentalDecorators": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"strictNullChecks": true,
|
||||
"strictPropertyInitialization": true,
|
||||
"lib": [
|
||||
"DOM",
|
||||
"ES5",
|
||||
"ES6",
|
||||
"ES7",
|
||||
"ES2021.WeakRef"
|
||||
],
|
||||
"esModuleInterop": true,
|
||||
"skipLibCheck": true,
|
||||
"forceConsistentCasingInFileNames": true
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"**/*.spec.ts"
|
||||
]
|
||||
}
|
Reference in New Issue
Block a user