trivious 1.3.18 → 1.3.20

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 (91) hide show
  1. package/dist/core/client/trivious.client.cjs.map +1 -1
  2. package/dist/core/client/trivious.client.d.cts +1 -1
  3. package/dist/core/client/trivious.client.d.ts +1 -1
  4. package/dist/core/client/trivious.client.js.map +1 -1
  5. package/dist/core/commands/command.base.cjs +2 -2
  6. package/dist/core/commands/command.base.cjs.map +1 -1
  7. package/dist/core/commands/command.base.d.cts +1 -1
  8. package/dist/core/commands/command.base.d.ts +1 -1
  9. package/dist/core/commands/command.base.js +2 -2
  10. package/dist/core/commands/command.base.js.map +1 -1
  11. package/dist/core/commands/contextcommand.base.cjs +1 -1
  12. package/dist/core/commands/contextcommand.base.cjs.map +1 -1
  13. package/dist/core/commands/contextcommand.base.d.cts +1 -1
  14. package/dist/core/commands/contextcommand.base.d.ts +1 -1
  15. package/dist/core/commands/contextcommand.base.js +1 -1
  16. package/dist/core/commands/contextcommand.base.js.map +1 -1
  17. package/dist/core/commands/subcommand.base.cjs +1 -1
  18. package/dist/core/commands/subcommand.base.cjs.map +1 -1
  19. package/dist/core/commands/subcommand.base.d.cts +1 -1
  20. package/dist/core/commands/subcommand.base.d.ts +1 -1
  21. package/dist/core/commands/subcommand.base.js +1 -1
  22. package/dist/core/commands/subcommand.base.js.map +1 -1
  23. package/dist/core/components/component.base.cjs +2 -2
  24. package/dist/core/components/component.base.cjs.map +1 -1
  25. package/dist/core/components/component.base.d.cts +1 -1
  26. package/dist/core/components/component.base.d.ts +1 -1
  27. package/dist/core/components/component.base.js +2 -2
  28. package/dist/core/components/component.base.js.map +1 -1
  29. package/dist/core/events/interactionCreate.cjs +4 -4
  30. package/dist/core/events/interactionCreate.cjs.map +1 -1
  31. package/dist/core/events/interactionCreate.d.cts +1 -1
  32. package/dist/core/events/interactionCreate.d.ts +1 -1
  33. package/dist/core/events/interactionCreate.js +1 -1
  34. package/dist/core/events/interactionCreate.js.map +1 -1
  35. package/dist/core/registry/command.registry.cjs +2 -2
  36. package/dist/core/registry/command.registry.cjs.map +1 -1
  37. package/dist/core/registry/command.registry.d.cts +1 -1
  38. package/dist/core/registry/command.registry.d.ts +1 -1
  39. package/dist/core/registry/command.registry.js +2 -2
  40. package/dist/core/registry/command.registry.js.map +1 -1
  41. package/dist/core/registry/component.registry.cjs +2 -2
  42. package/dist/core/registry/component.registry.cjs.map +1 -1
  43. package/dist/core/registry/component.registry.d.cts +1 -1
  44. package/dist/core/registry/component.registry.d.ts +1 -1
  45. package/dist/core/registry/component.registry.js +2 -2
  46. package/dist/core/registry/component.registry.js.map +1 -1
  47. package/dist/core/registry/event.registry.cjs +2 -2
  48. package/dist/core/registry/event.registry.cjs.map +1 -1
  49. package/dist/core/registry/event.registry.d.cts +1 -1
  50. package/dist/core/registry/event.registry.d.ts +1 -1
  51. package/dist/core/registry/event.registry.js +2 -2
  52. package/dist/core/registry/event.registry.js.map +1 -1
  53. package/dist/core/registry/index.cjs +1 -1
  54. package/dist/core/registry/index.cjs.map +1 -1
  55. package/dist/core/registry/index.d.cts +1 -1
  56. package/dist/core/registry/index.d.ts +1 -1
  57. package/dist/core/registry/index.js +1 -1
  58. package/dist/core/registry/index.js.map +1 -1
  59. package/dist/core/registry/module.registry.cjs +2 -2
  60. package/dist/core/registry/module.registry.cjs.map +1 -1
  61. package/dist/core/registry/module.registry.d.cts +1 -1
  62. package/dist/core/registry/module.registry.d.ts +1 -1
  63. package/dist/core/registry/module.registry.js +2 -2
  64. package/dist/core/registry/module.registry.js.map +1 -1
  65. package/dist/{index-uczj1Waw.d.ts → index-BPaYmWRO.d.ts} +93 -93
  66. package/dist/{index-BCF4f686.d.cts → index-CU2Xl9Xo.d.cts} +93 -93
  67. package/dist/index.cjs +0 -9
  68. package/dist/index.d.cts +2 -2
  69. package/dist/index.d.ts +2 -2
  70. package/dist/index.js +0 -1
  71. package/dist/shared/typings/client.d.cts +1 -1
  72. package/dist/shared/typings/client.d.ts +1 -1
  73. package/dist/shared/typings/commands.d.cts +1 -1
  74. package/dist/shared/typings/commands.d.ts +1 -1
  75. package/dist/shared/typings/components.d.cts +1 -1
  76. package/dist/shared/typings/components.d.ts +1 -1
  77. package/dist/shared/typings/events.d.cts +1 -1
  78. package/dist/shared/typings/events.d.ts +1 -1
  79. package/dist/shared/typings/index.d.cts +1 -1
  80. package/dist/shared/typings/index.d.ts +1 -1
  81. package/dist/shared/typings/module.d.cts +1 -1
  82. package/dist/shared/typings/module.d.ts +1 -1
  83. package/dist/shared/typings/permissions.cjs.map +1 -1
  84. package/dist/shared/typings/permissions.d.cts +1 -1
  85. package/dist/shared/typings/permissions.d.ts +1 -1
  86. package/dist/shared/typings/permissions.js.map +1 -1
  87. package/dist/shared/utility/functions.cjs.map +1 -1
  88. package/dist/shared/utility/functions.d.cts +1 -1
  89. package/dist/shared/utility/functions.d.ts +1 -1
  90. package/dist/shared/utility/functions.js.map +1 -1
  91. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/shared/utility/functions.ts"],"names":["__filename","__dirname","fs"],"mappings":"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","file":"functions.js","sourcesContent":["import { promises as fs, existsSync } from \"fs\";\nimport { join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"url\";\nimport { dirname } from \"path\";\nimport { getPermissionLevel, PermissionLevel } from \"../typings/permissions.js\";\nimport { GuildMember, User } from \"discord.js\";\nimport TriviousClient from \"src/core/client/trivious.client.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * Get the package root.\n *\n * @returns {string}\n */\nconst getPackageRoot = (): string => {\n\tlet dir = __dirname;\n\n\twhile (dir !== dirname(dir)) {\n\t\tif (existsSync(join(dir, \"package.json\")) || existsSync(join(dir, \"node_modules\"))) {\n\t\t\treturn dir;\n\t\t}\n\t\tdir = dirname(dir);\n\t}\n\treturn __dirname;\n};\n\n/**\n * Framework package root.\n *\n * @type {string}\n */\nexport const FRAMEWORK_PACKAGE_ROOT = getPackageRoot();\n\n/**\n * Get the core path.\n *\n * @export\n * @param {{ userPath?: string; coreDirectory: string }} options\n * @returns {string}\n */\nexport function getCorePath(options: { userPath?: string; coreDirectory: string }): string {\n\tconst { userPath, coreDirectory } = options;\n\tif (userPath) {\n\t\treturn resolveUserPath(userPath);\n\t}\n\n\tconst builtInCandidates = [\n\t\tjoin(FRAMEWORK_PACKAGE_ROOT, \"lib\", coreDirectory),\n\t\tjoin(FRAMEWORK_PACKAGE_ROOT, \"dist\", coreDirectory),\n\t];\n\n\tfor (const candidate of builtInCandidates) {\n\t\tif (existsSync(candidate)) {\n\t\t\treturn candidate;\n\t\t}\n\t}\n\n\treturn join(FRAMEWORK_PACKAGE_ROOT, \"lib\", coreDirectory);\n}\n\n/**\n * Resolve a user given core path.\n *\n * @export\n * @param {string} relativePath\n * @returns {string}\n */\nexport function resolveUserPath(relativePath: string): string {\n\tconst candidates = [\n\t\tjoin(process.cwd(), relativePath),\n\n\t\tjoin(process.cwd(), \"lib\", relativePath),\n\t\tjoin(process.cwd(), \"dist\", relativePath),\n\n\t\tjoin(FRAMEWORK_PACKAGE_ROOT, relativePath),\n\t\tjoin(FRAMEWORK_PACKAGE_ROOT, \"lib\", relativePath),\n\t\tjoin(FRAMEWORK_PACKAGE_ROOT, \"dist\", relativePath),\n\t];\n\n\tfor (const candidate of candidates) {\n\t\tconst full = resolve(candidate);\n\t\tif (existsSync(full)) return full;\n\t}\n\n\treturn join(process.cwd(), relativePath);\n}\n\n/**\n * Whether a directory or file exists.\n *\n * @export\n * @async\n * @param {string} path\n * @returns {unknown}\n */\nexport async function exists(path: string) {\n\ttry {\n\t\tawait fs.access(path);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Whether a user/member has permission.\n *\n * @export\n * @param {{\n * \tpermission: PermissionLevel;\n * \tuser?: User;\n * \tmember?: GuildMember;\n * }} options\n * @returns {boolean}\n */\nexport function hasPermission(\n\tclient: TriviousClient,\n\toptions: {\n\t\tpermission: PermissionLevel;\n\t\tuser?: User;\n\t\tmember?: GuildMember;\n\t}\n) {\n\tconst { permission, user, member } = options;\n\n\tif (user) {\n\t\tif (permission === PermissionLevel.BOT_OWNER) return user.id === \"424764032667484171\";\n\t\treturn true;\n\t}\n\n\tif (member) {\n\t\tconst memberPermission = getPermissionLevel(client, member);\n\t\treturn memberPermission >= permission;\n\t}\n\n\treturn false;\n}\n"]}
1
+ {"version":3,"sources":["../../../src/shared/utility/functions.ts"],"names":["__filename","__dirname","fs"],"mappings":"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","file":"functions.js","sourcesContent":["import TriviousClient from \"../../core/client/trivious.client.js\";\nimport { promises as fs, existsSync } from \"fs\";\nimport { join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"url\";\nimport { dirname } from \"path\";\nimport { getPermissionLevel, PermissionLevel } from \"../typings/permissions.js\";\nimport { GuildMember, User } from \"discord.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * Get the package root.\n *\n * @returns {string}\n */\nconst getPackageRoot = (): string => {\n\tlet dir = __dirname;\n\n\twhile (dir !== dirname(dir)) {\n\t\tif (existsSync(join(dir, \"package.json\")) || existsSync(join(dir, \"node_modules\"))) {\n\t\t\treturn dir;\n\t\t}\n\t\tdir = dirname(dir);\n\t}\n\treturn __dirname;\n};\n\n/**\n * Framework package root.\n *\n * @type {string}\n */\nexport const FRAMEWORK_PACKAGE_ROOT = getPackageRoot();\n\n/**\n * Get the core path.\n *\n * @export\n * @param {{ userPath?: string; coreDirectory: string }} options\n * @returns {string}\n */\nexport function getCorePath(options: { userPath?: string; coreDirectory: string }): string {\n\tconst { userPath, coreDirectory } = options;\n\tif (userPath) {\n\t\treturn resolveUserPath(userPath);\n\t}\n\n\tconst builtInCandidates = [\n\t\tjoin(FRAMEWORK_PACKAGE_ROOT, \"lib\", coreDirectory),\n\t\tjoin(FRAMEWORK_PACKAGE_ROOT, \"dist\", coreDirectory),\n\t];\n\n\tfor (const candidate of builtInCandidates) {\n\t\tif (existsSync(candidate)) {\n\t\t\treturn candidate;\n\t\t}\n\t}\n\n\treturn join(FRAMEWORK_PACKAGE_ROOT, \"lib\", coreDirectory);\n}\n\n/**\n * Resolve a user given core path.\n *\n * @export\n * @param {string} relativePath\n * @returns {string}\n */\nexport function resolveUserPath(relativePath: string): string {\n\tconst candidates = [\n\t\tjoin(process.cwd(), relativePath),\n\n\t\tjoin(process.cwd(), \"lib\", relativePath),\n\t\tjoin(process.cwd(), \"dist\", relativePath),\n\n\t\tjoin(FRAMEWORK_PACKAGE_ROOT, relativePath),\n\t\tjoin(FRAMEWORK_PACKAGE_ROOT, \"lib\", relativePath),\n\t\tjoin(FRAMEWORK_PACKAGE_ROOT, \"dist\", relativePath),\n\t];\n\n\tfor (const candidate of candidates) {\n\t\tconst full = resolve(candidate);\n\t\tif (existsSync(full)) return full;\n\t}\n\n\treturn join(process.cwd(), relativePath);\n}\n\n/**\n * Whether a directory or file exists.\n *\n * @export\n * @async\n * @param {string} path\n * @returns {unknown}\n */\nexport async function exists(path: string) {\n\ttry {\n\t\tawait fs.access(path);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Whether a user/member has permission.\n *\n * @export\n * @param {{\n * \tpermission: PermissionLevel;\n * \tuser?: User;\n * \tmember?: GuildMember;\n * }} options\n * @returns {boolean}\n */\nexport function hasPermission(\n\tclient: TriviousClient,\n\toptions: {\n\t\tpermission: PermissionLevel;\n\t\tuser?: User;\n\t\tmember?: GuildMember;\n\t}\n) {\n\tconst { permission, user, member } = options;\n\n\tif (user) {\n\t\tif (permission === PermissionLevel.BOT_OWNER) return user.id === \"424764032667484171\";\n\t\treturn true;\n\t}\n\n\tif (member) {\n\t\tconst memberPermission = getPermissionLevel(client, member);\n\t\treturn memberPermission >= permission;\n\t}\n\n\treturn false;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trivious",
3
- "version": "1.3.18",
3
+ "version": "1.3.20",
4
4
  "type": "module",
5
5
  "keywords": [
6
6
  "discord-bot",