Skip to content

Commit 2a55ae6

Browse files
authored
automate releases & handle redirects (#29)
* use beachball for publishing & version mgmt * pipeline * ts 5.3 * handle ublock origin * Change files * change file * automate releases --------- Co-authored-by: Arun George <aruniverse@users.noreply.github.com>
1 parent 6c13a6c commit 2a55ae6

File tree

13 files changed

+1023
-785
lines changed

13 files changed

+1023
-785
lines changed

.github/workflows/ci.yaml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
name: CI
2+
3+
on:
4+
pull_request:
5+
branches: "master"
6+
7+
jobs:
8+
ci:
9+
runs-on: ubuntu-latest
10+
11+
steps:
12+
- uses: actions/checkout@v3
13+
with:
14+
fetch-depth: 2
15+
16+
- uses: actions/setup-node@v3
17+
with:
18+
node-version: 20
19+
registry-url: https://registry.npmjs.org/
20+
21+
- uses: pnpm/action-setup@v2.2.2
22+
name: Install pnpm
23+
id: pnpm-install
24+
with:
25+
version: 8
26+
run_install: true
27+
28+
- run: pnpm check
29+
30+
- run: pnpm build

.github/workflows/publish.yml

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,32 @@
11
name: Publish Package Pipeline
22

33
on:
4-
release:
5-
types: [created]
4+
push:
5+
branches: "master"
66

77
jobs:
88
publish-npm:
99
runs-on: ubuntu-latest
10-
defaults:
11-
run:
12-
working-directory: ./adblock-detect-react
10+
1311
steps:
1412
- uses: actions/checkout@v3
1513
with:
1614
fetch-depth: 2
1715

1816
- uses: actions/setup-node@v3
1917
with:
20-
node-version: 16
18+
node-version: 20
2119
registry-url: https://registry.npmjs.org/
2220

2321
- uses: pnpm/action-setup@v2.2.2
2422
name: Install pnpm
2523
id: pnpm-install
2624
with:
27-
version: 7
25+
version: 8
2826
run_install: true
2927

3028
- run: pnpm build
3129

32-
- run: npm publish --access public
30+
- run: pnpm release
3331
env:
3432
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}

LICENSE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2020 - 2022 Arun George
3+
Copyright (c) Arun George
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

adblock-detect-react/LICENSE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2020 - 2022 Arun George
3+
Copyright (c) Arun George
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

adblock-detect-react/package.json

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88
"author": "https://github.com/aruniverse",
99
"license": "MIT",
1010
"repository": {
11+
"type": "git",
1112
"url": "https://github.com/aruniverse/adblock-detect-react",
12-
"type": "git"
13+
"directory": "adblock-detect-react"
1314
},
1415
"files": [
1516
"cjs/**/*",
@@ -28,17 +29,15 @@
2829
"build:cjs": "tsc 1>&2 --outDir cjs",
2930
"build:esm": "tsc 1>&2 --module ES2020 --outDir esm",
3031
"clean": "rimraf cjs esm",
31-
"rebuild": "npm run -s clean && npm run -s build",
32-
"publish:local": "npm run -s rebuild && npm run -s pack"
32+
"rebuild": "npm run -s clean && npm run -s build"
3333
},
3434
"devDependencies": {
35-
"@types/react": "^16.9.43",
36-
"@types/react-dom": "^16.9.8",
37-
"concurrently": "^5.2.0",
35+
"@types/react": "^16.14.55",
36+
"@types/react-dom": "^16.9.24",
3837
"react": "16.13.1",
3938
"react-dom": "16.13.1",
4039
"rimraf": "^3.0.2",
41-
"typescript": "^3.7.2"
40+
"typescript": "~5.3.2"
4241
},
4342
"peerDependencies": {
4443
"react": ">=16.8.0",

adblock-detect-react/src/hooks/useDetectAdBlock.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,13 @@ export const useDetectAdBlock = () => {
1010
method: "HEAD",
1111
mode: "no-cors",
1212
cache: "no-store",
13-
}).catch(() => {
14-
setAdBlockDetected(true);
15-
});
13+
})
14+
.then(({ redirected }) => {
15+
if (redirected) setAdBlockDetected(true);
16+
})
17+
.catch(() => {
18+
setAdBlockDetected(true);
19+
});
1620
}, []);
1721

1822
return adBlockDetected;

adblock-detect-react/tsconfig.json

Lines changed: 105 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,110 @@
11
{
22
"compilerOptions": {
3-
"target": "es2017",
4-
"module": "commonjs",
5-
"skipLibCheck": true,
6-
"esModuleInterop": true,
7-
"allowSyntheticDefaultImports": true,
8-
"strict": true,
9-
"forceConsistentCasingInFileNames": true,
10-
"moduleResolution": "node",
11-
"jsx": "react",
12-
"declaration": true,
13-
"sourceMap": true,
14-
"inlineSources": true,
15-
"removeComments": true,
3+
/* Visit https://aka.ms/tsconfig to read more about this file */
4+
5+
/* Projects */
6+
"incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
7+
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
8+
// "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
9+
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
10+
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
11+
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
12+
13+
/* Language and Environment */
14+
"target": "ES2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
15+
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
16+
"jsx": "preserve", /* Specify what JSX code is generated. */
17+
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
18+
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
19+
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
20+
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
21+
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
22+
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
23+
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
24+
"useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
25+
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
26+
27+
/* Modules */
28+
"module": "commonjs", /* Specify what module code is generated. */
29+
// "rootDir": "./", /* Specify the root folder within your source files. */
30+
"moduleResolution": "Node10", /* Specify how TypeScript looks up a file from a given module specifier. */
31+
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
32+
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
33+
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
34+
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
35+
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
36+
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
37+
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
38+
// "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
39+
// "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
40+
// "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
41+
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
42+
// "resolveJsonModule": true, /* Enable importing .json files. */
43+
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
44+
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
45+
46+
/* JavaScript Support */
47+
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
48+
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
49+
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
50+
51+
/* Emit */
52+
"declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
53+
"declarationMap": true, /* Create sourcemaps for d.ts files. */
54+
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
55+
"sourceMap": true, /* Create source map files for emitted JavaScript files. */
56+
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
57+
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
58+
// "outDir": "./", /* Specify an output folder for all emitted files. */
59+
"removeComments": true, /* Disable emitting comments. */
60+
// "noEmit": true, /* Disable emitting files from a compilation. */
61+
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
62+
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
63+
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
64+
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
65+
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
66+
"inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
67+
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
68+
// "newLine": "crlf", /* Set the newline character for emitting files. */
69+
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
70+
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
71+
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
72+
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
73+
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
74+
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
75+
76+
/* Interop Constraints */
77+
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
78+
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
79+
"allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
80+
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
81+
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
82+
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
83+
84+
/* Type Checking */
85+
"strict": true, /* Enable all strict type-checking options. */
86+
"noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
87+
"strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
88+
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
89+
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
90+
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
91+
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
92+
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
93+
"alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
94+
"noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
95+
"noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
96+
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
97+
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
98+
"noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
99+
"noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
100+
"noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
101+
"noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
102+
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
103+
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
104+
105+
/* Completeness */
106+
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
107+
"skipLibCheck": true /* Skip type checking all .d.ts files. */
16108
},
17109
"include": ["./src/**/*.ts*"],
18110
"exclude": ["cjs", "esm", "node_modules"]

beachball.config.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/** @type {import("beachball").BeachballConfig } */
2+
module.exports = {
3+
bumpDeps: false,
4+
access: "public",
5+
tag: "latest",
6+
scope: ["adblock-detect-react"],
7+
ignorePatterns: [
8+
".*ignore",
9+
".github/**",
10+
".vscode/**",
11+
"**/test/**",
12+
"pnpm-lock.yaml",
13+
],
14+
changehint: "Run 'pnpm change' to generate a change file",
15+
publish: true,
16+
};
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "minor",
3+
"comment": "Correctly handle ad blockers that return a HTTP307 redirect",
4+
"packageName": "adblock-detect-react",
5+
"email": "aruniverse@users.noreply.github.com",
6+
"dependentChangeType": "patch"
7+
}

package.json

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,22 @@
22
"name": "adblock-monorepo",
33
"version": "0.0.0",
44
"private": true,
5+
"repository": {
6+
"type": "git",
7+
"url": "https://github.com/aruniverse/adblock-detect-react.git"
8+
},
9+
"packageManager": "pnpm@8.13.1",
510
"scripts": {
611
"preinstall": "npx only-allow pnpm",
7-
"build": "turbo run build",
8-
"clean": "turbo run clean",
9-
"clean:all": "turbo run clean && rimraf node_modules"
12+
"build": "pnpm -r build",
13+
"clean": "pnpm -r clean",
14+
"clean:all": "pnpm clean && rimraf node_modules",
15+
"change": "beachball change",
16+
"check": "beachball check",
17+
"release": "beachball publish"
1018
},
1119
"devDependencies": {
12-
"turbo": "latest",
20+
"beachball": "^2.39.0",
1321
"rimraf": "3.0.2"
14-
},
15-
"resolutions": {
16-
"immer": "^8.0.1"
1722
}
1823
}

0 commit comments

Comments
 (0)