meocord 3.1.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +138 -15
  2. package/dist/cjs/core/index.cjs +41 -18
  3. package/dist/cjs/decorator/index.cjs +1 -1
  4. package/dist/esm/bin/app-template/README.md.template +61 -0
  5. package/dist/esm/bin/app-template/_env.example.template +2 -0
  6. package/dist/esm/bin/app-template/_gitignore.template +22 -0
  7. package/dist/esm/bin/app-template/_prettierrc.mjs.template +10 -0
  8. package/dist/esm/bin/app-template/eslint.config.ts.template +25 -0
  9. package/dist/esm/bin/app-template/meocord.config.ts.template +25 -0
  10. package/dist/esm/bin/app-template/package.json.template +38 -0
  11. package/dist/esm/bin/app-template/src/app.ts.template +44 -0
  12. package/dist/esm/bin/app-template/src/controllers/button/sample.button.controller.spec.ts.template +17 -0
  13. package/dist/esm/bin/app-template/src/controllers/button/sample.button.controller.ts.template +19 -0
  14. package/dist/esm/bin/app-template/src/controllers/context-menu/builders/sample.builder.ts.template +10 -0
  15. package/dist/esm/bin/app-template/src/controllers/context-menu/sample.context-menu.controller.spec.ts.template +17 -0
  16. package/dist/esm/bin/app-template/src/controllers/context-menu/sample.context-menu.controller.ts.template +13 -0
  17. package/dist/esm/bin/app-template/src/controllers/message/sample.message.controller.spec.ts.template +17 -0
  18. package/dist/esm/bin/app-template/src/controllers/message/sample.message.controller.ts.template +28 -0
  19. package/dist/esm/bin/app-template/src/controllers/modal-submit/sample.modal-submit.controller.spec.ts.template +17 -0
  20. package/dist/esm/bin/app-template/src/controllers/modal-submit/sample.modal-submit.controller.ts.template +13 -0
  21. package/dist/esm/bin/app-template/src/controllers/reaction/sample.reaction.controller.spec.ts.template +17 -0
  22. package/dist/esm/bin/app-template/src/controllers/reaction/sample.reaction.controller.ts.template +29 -0
  23. package/dist/esm/bin/app-template/src/controllers/select-menu/sample.select-menu.controller.spec.ts.template +17 -0
  24. package/dist/esm/bin/app-template/src/controllers/select-menu/sample.select-menu.controller.ts.template +11 -0
  25. package/dist/esm/bin/app-template/src/controllers/slash/builders/sample.builder.ts.template +10 -0
  26. package/dist/esm/bin/app-template/src/controllers/slash/sample.slash.controller.spec.ts.template +17 -0
  27. package/dist/esm/bin/app-template/src/controllers/slash/sample.slash.controller.ts.template +19 -0
  28. package/dist/esm/bin/app-template/src/guards/rate-limit.guard.spec.ts.template +13 -0
  29. package/dist/esm/bin/app-template/src/guards/rate-limit.guard.ts.template +52 -0
  30. package/dist/esm/bin/app-template/src/main.ts.template +14 -0
  31. package/dist/esm/bin/app-template/src/services/sample.service.spec.ts.template +17 -0
  32. package/dist/esm/bin/app-template/src/services/sample.service.ts.template +9 -0
  33. package/dist/esm/bin/app-template/tsconfig.eslint.json.template +5 -0
  34. package/dist/esm/bin/app-template/tsconfig.json.template +30 -0
  35. package/dist/esm/bin/app-template/tsconfig.test.json.template +8 -0
  36. package/dist/esm/bin/app-template/vitest.config.ts.template +35 -0
  37. package/dist/esm/bin/builder-template/controller/button.controller.template +1 -1
  38. package/dist/esm/bin/helper/app-generator.helper.js +78 -0
  39. package/dist/esm/bin/meocord.js +156 -75
  40. package/dist/esm/core/meocord.app.js +42 -19
  41. package/dist/esm/decorator/guard.decorator.js +1 -1
  42. package/dist/esm/util/common.util.js +11 -3
  43. package/dist/esm/util/generator-cli.util.js +21 -4
  44. package/dist/esm/util/package-manager.util.js +9 -2
  45. package/dist/esm/util/package-version.util.js +32 -0
  46. package/dist/esm/util/runtime.util.js +72 -0
  47. package/dist/types/core/index.d.ts +2 -2
  48. package/dist/types/decorator/index.d.ts +1 -1
  49. package/dist/types/interface/index.d.ts +5 -3
  50. package/package.json +11 -12
@@ -52,8 +52,8 @@ declare class MeoCordApp {
52
52
  *
53
53
  * Built once and cached, so dispatch stays a single ordered walk with an early exit
54
54
  * rather than paying to rank anything per interaction. Ordering here is what lets
55
- * `gi-profile-summary-{ownerId}-{uid}` keep the ids it owns when
56
- * `gi-profile-{uuid}-{uid}` would also match them — without it, the winner would be
55
+ * `gi-profile/summary/{ownerId}/{uid}` keep the ids it owns when
56
+ * `gi-profile/{uuid}/{uid}` would also match them — without it, the winner would be
57
57
  * whichever controller happened to be registered first.
58
58
  */
59
59
  private componentRoutes?;
@@ -295,7 +295,7 @@ interface GuardWithParams {
295
295
  * @example
296
296
  * ```typescript
297
297
  * // Method-level usage
298
- * @Command('profile-{id}', CommandType.BUTTON)
298
+ * @Command('profile/{id}', CommandType.BUTTON)
299
299
  * @UseGuard(
300
300
  * { provide: RateLimiterGuard, params: { limit: 2, window: 3000 } },
301
301
  * ButtonInteractionGuard
@@ -57,9 +57,11 @@ interface CommandMetadata<T extends string = string> {
57
57
  dynamicParams?: T[];
58
58
  /**
59
59
  * How specific this pattern is; higher wins when more than one route matches the
60
- * same customId. A greedy parameter can overlap a more literal sibling —
61
- * `gi-profile-{uuid:*}-{uid}` also matches an id meant for
62
- * `gi-profile-summary-{ownerId}-{uid}` — so dispatch cannot rely on declaration order.
60
+ * same customId. A parameter takes whatever fills its segment, so a broad pattern can
61
+ * also match an id a more literal sibling owns — `gi-profile/{uuid}/{uid}` matches
62
+ * `gi-profile/summary/123/456` just as `gi-profile/summary/{ownerId}/{uid}` does — and
63
+ * ranking is what settles it, since declaration order would make the winner depend on
64
+ * file layout.
63
65
  */
64
66
  specificity?: number;
65
67
  }
package/package.json CHANGED
@@ -1,16 +1,19 @@
1
1
  {
2
2
  "name": "meocord",
3
3
  "description": "Decorator-based Discord bot framework built on discord.js. Brings NestJS-style controllers, dependency injection, guards, and testing utilities to bot development — with a full CLI and TypeScript-first design.",
4
- "version": "3.1.0",
4
+ "version": "3.2.1",
5
5
  "type": "module",
6
6
  "engines": {
7
7
  "node": ">=22"
8
8
  },
9
9
  "scripts": {
10
- "lint": "prettier --write \"**/*.md\" && eslint --fix . && tsc --noEmit && tsc --noEmit --project tsconfig.test.json",
10
+ "format": "prettier --write \"**/*.md\" \"src/bin/app-template/**/*.template\"",
11
+ "format:check": "prettier --check \"**/*.md\" \"src/bin/app-template/**/*.template\"",
12
+ "lint": "bun run format && eslint --fix . && tsc --noEmit && tsc --noEmit --project tsconfig.test.json && tsc --noEmit --project tsconfig.eslint.json",
11
13
  "build": "rm -rf ./dist && rollup -c",
12
14
  "prepare": "husky",
13
15
  "test": "vitest run",
16
+ "verify:generated": "bun scripts/verify-generated.ts",
14
17
  "test:watch": "vitest",
15
18
  "test:coverage": "vitest run --coverage",
16
19
  "test:typecheck": "tsc --noEmit --project tsconfig.test.json"
@@ -75,16 +78,14 @@
75
78
  ],
76
79
  "dependencies": {
77
80
  "@clack/prompts": "^1.7.0",
78
- "@swc/core": "1.15.47",
81
+ "@swc/core": "1.16.1",
79
82
  "chalk": "^6.0.0",
80
83
  "cli-table3": "^0.6.5",
81
84
  "commander": "^15.0.0",
82
- "dayjs": "^1.11.21",
83
- "dotenv": "^17.4.2",
85
+ "dayjs": "^1.11.23",
84
86
  "inversify": "^8.2.3",
85
87
  "jiti": "^2.7.0",
86
88
  "lodash-es": "^4.18.1",
87
- "nodemon": "^3.1.14",
88
89
  "reflect-metadata": "^0.2.2",
89
90
  "simple-git": "^3.36.0",
90
91
  "swc-loader": "^0.2.7",
@@ -100,14 +101,13 @@
100
101
  "@rollup/plugin-node-resolve": "^16.0.3",
101
102
  "@rollup/plugin-swc": "^0.4.1",
102
103
  "@semantic-release/commit-analyzer": "^13.0.1",
103
- "@semantic-release/exec": "^7.1.0",
104
104
  "@semantic-release/github": "^12.0.9",
105
105
  "@semantic-release/release-notes-generator": "^14.1.1",
106
106
  "@types/lodash-es": "^4.17.12",
107
107
  "@types/webpack-node-externals": "^3.0.4",
108
108
  "@typescript-eslint/parser": "^8.67.0",
109
109
  "discord.js": "^14.27.0",
110
- "eslint": "^10.8.1",
110
+ "eslint": "^10.9.0",
111
111
  "eslint-config-prettier": "^10.1.8",
112
112
  "eslint-plugin-headers": "^1.3.4",
113
113
  "eslint-plugin-import-x": "^4.17.1",
@@ -116,16 +116,15 @@
116
116
  "globals": "^17.11.0",
117
117
  "husky": "^9.1.7",
118
118
  "prettier": "^3.9.6",
119
- "rollup": "^4.62.4",
119
+ "rollup": "^4.62.5",
120
120
  "rollup-plugin-copy": "^3.5.0",
121
121
  "rollup-plugin-dts": "^6.5.1",
122
122
  "semantic-release": "^25.0.9",
123
- "ts-node": "^10.9.2",
124
123
  "typescript": "^6.0.3",
125
124
  "typescript-eslint": "^8.67.0",
126
- "@vitest/coverage-istanbul": "^4.1.10",
125
+ "@vitest/coverage-istanbul": "^4.1.11",
127
126
  "unplugin-swc": "^1.5.11",
128
- "vitest": "^4.1.10"
127
+ "vitest": "^4.1.11"
129
128
  },
130
129
  "peerDependencies": {
131
130
  "discord.js": "^14.26.4",