Skip to content

Commit 3eb0ffd

Browse files
authored
Merge pull request #601 from dzcode-io/robot-text
fix: robots.txt
2 parents b1b5fe9 + 9ec7775 commit 3eb0ffd

File tree

6 files changed

+51
-21
lines changed

6 files changed

+51
-21
lines changed

api/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
"drizzle-orm": "^0.33.0",
2323
"express": "^4.21.0",
2424
"express-rate-limit": "^7.4.0",
25-
"express-robots-txt": "^1.0.0",
2625
"fs-extra": "^11.2.0",
2726
"helmet": "^7.1.0",
2827
"lodash": "^4.17.21",

api/src/app/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import Container from "typedi";
2020

2121
import { ErrorMiddleware } from "./middlewares/error";
2222
import { LoggerMiddleware } from "./middlewares/logger";
23-
import { RobotsMiddleware } from "./middlewares/robots";
23+
import { RobotsController } from "./middlewares/robots";
2424
import { SecurityMiddleware } from "./middlewares/security";
2525

2626
// Use typedi container
@@ -43,8 +43,9 @@ const routingControllersOptions: RoutingControllersOptions = {
4343
MilestoneController,
4444
ProjectController,
4545
ContributorController,
46+
RobotsController,
4647
],
47-
middlewares: [SecurityMiddleware, ErrorMiddleware, LoggerMiddleware, RobotsMiddleware],
48+
middlewares: [SecurityMiddleware, ErrorMiddleware, LoggerMiddleware],
4849
defaultErrorHandler: false,
4950
cors: Container.get(SecurityMiddleware).cors(),
5051
};

api/src/app/middlewares/robots.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,22 @@
1-
import { RequestHandler } from "express";
2-
import { ExpressMiddlewareInterface, Middleware } from "routing-controllers";
1+
import { ConfigService } from "src/config/service";
32
import { Service } from "typedi";
4-
const robots = require("express-robots-txt"); // eslint-disable-line @typescript-eslint/no-require-imports
3+
import { Response } from "express";
4+
import { Controller, Res, Get } from "routing-controllers";
55

66
@Service()
7-
@Middleware({ type: "before", priority: 0 })
8-
export class RobotsMiddleware implements ExpressMiddlewareInterface {
9-
use: RequestHandler = robots({ UserAgent: "*", Disallow: "/docs" });
7+
@Controller("/robots.txt")
8+
export class RobotsController {
9+
private readonly stage = this.configService.env().NODE_ENV;
10+
11+
constructor(private readonly configService: ConfigService) {}
12+
13+
@Get("/")
14+
public async robotsTxt(@Res() response: Response): Promise<Response> {
15+
response.set("Content-Type", "text/plain");
16+
if (this.stage === "production") {
17+
return response.send("User-agent: *\nAllow: /");
18+
} else {
19+
return response.send("User-agent: *\nDisallow: /");
20+
}
21+
}
1022
}

package-lock.json

Lines changed: 0 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

web/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,12 @@
6161
"bundle:alone": "rsbuild build",
6262
"clean": "lerna run clean:alone [email protected]/web --include-dependencies --stream",
6363
"clean:alone": "rimraf dist coverage bundle node_modules/.cache && rimraf ./cloudflare/public",
64-
"deploy": "npm run generate:htmls && npm run generate:sitemap && rimraf ./cloudflare/public && cpy \"./bundle/**/*\" ./cloudflare/public && cd ./cloudflare && npm install && npm run deploy:prd ",
65-
"deploy:stg": "npm run generate:htmls && npm run generate:sitemap && rimraf ./cloudflare/public && cpy \"./bundle/**/*\" ./cloudflare/public && cd ./cloudflare && npm install && npm run deploy:stg",
64+
"deploy": "npm run generate:htmls && npm run generate:robots-txt && npm run generate:sitemap && rimraf ./cloudflare/public && cpy \"./bundle/**/*\" ./cloudflare/public && cd ./cloudflare && npm install && npm run deploy:prd ",
65+
"deploy:stg": "npm run generate:htmls && npm run generate:robots-txt && npm run generate:sitemap && rimraf ./cloudflare/public && cpy \"./bundle/**/*\" ./cloudflare/public && cd ./cloudflare && npm install && npm run deploy:stg",
6666
"e2e:dev": "npx wait-on http://localhost:8080/ && npx cypress open",
6767
"generate:bundle-info": "ts-node ../packages/tooling/bundle-info.ts",
6868
"generate:htmls": "cross-env TS_NODE_SKIP_PROJECT=true ts-node --compilerOptions \"{\\\"baseUrl\\\": \\\".\\\"}\" src/_build/gen-multiple-htmls.ts",
69+
"generate:robots-txt": "cross-env TS_NODE_SKIP_PROJECT=true ts-node --compilerOptions \"{\\\"baseUrl\\\": \\\".\\\"}\" src/_build/gen-robots-txt.ts",
6970
"generate:sentry-release": "ts-node ../packages/tooling/sentry-release.ts web bundle",
7071
"generate:sitemap": "cross-env TS_NODE_SKIP_PROJECT=true ts-node --compilerOptions \"{\\\"baseUrl\\\": \\\".\\\"}\" src/_build/sitemap.ts",
7172
"lint": "npm run build && npm run lint:alone",

web/src/_build/gen-robots-txt.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// for dev, run:
2+
// npm run clean && npm run bundle && npm run generate:robots-txt
3+
// npm run rsbuild preview
4+
5+
import { join } from "path";
6+
import { writeFileSync } from "fs";
7+
import { Environment, environments } from "@dzcode.io/utils/dist/config/environment";
8+
9+
let stage = process.env.STAGE as Environment;
10+
if (!environments.includes(stage)) {
11+
console.log(`⚠️ No STAGE provided, falling back to "development"`);
12+
stage = "development";
13+
}
14+
15+
const distFolder = "./bundle";
16+
17+
const robotsTxtPath = join(distFolder, "robots.txt");
18+
19+
console.log(`generating $robot.txt ...`);
20+
21+
const robotsTxt = `User-agent: *
22+
${stage === "production" ? "Allow: /" : "Disallow: /"}
23+
`;
24+
25+
writeFileSync(robotsTxtPath, robotsTxt);
26+
27+
console.log("done");

0 commit comments

Comments
 (0)