diff --git a/.discordenorc.json b/.discordenorc.json new file mode 100644 index 000000000..0557d01da --- /dev/null +++ b/.discordenorc.json @@ -0,0 +1,5 @@ +{ + "desiredProps": { + "message": ["id", "messageReference"] + } +} diff --git a/package.json b/package.json index 71129c939..bfe64a6fe 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ }, "devDependencies": { "chokidar-cli": "^3.0.0", + "discordeno": "19.0.0-alpha.1", "eslint": "^8.36.0", "eslint-config-discordeno": "*", "husky": "^8.0.3", diff --git a/packages/discordeno/bin/discordeno.js b/packages/discordeno/bin/discordeno.js new file mode 100644 index 000000000..bc92202e8 --- /dev/null +++ b/packages/discordeno/bin/discordeno.js @@ -0,0 +1 @@ +import('../dist/esm/bin/index.js') diff --git a/packages/discordeno/bin/disocrdeno.js b/packages/discordeno/bin/disocrdeno.js deleted file mode 100755 index 7b12c5199..000000000 --- a/packages/discordeno/bin/disocrdeno.js +++ /dev/null @@ -1 +0,0 @@ -import('../dist/bin/index.js') diff --git a/packages/discordeno/package.json b/packages/discordeno/package.json index b098bdd9c..3f4dc888e 100644 --- a/packages/discordeno/package.json +++ b/packages/discordeno/package.json @@ -4,10 +4,10 @@ "main": "./dist/esm/index.js", "exports": { "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", + "require": "./dist/cjs/index.cjs", "types": "./dist/types/index.d.ts" }, - "bin": "./bin/disocrdeno.js", + "bin": "./bin/discordeno.js", "types": "./dist/types/index.d.ts", "type": "module", "license": "Apache-2.0", @@ -34,7 +34,8 @@ "@discordeno/rest": "19.0.0-alpha.1", "@discordeno/types": "19.0.0-alpha.1", "@discordeno/utils": "19.0.0-alpha.1", - "commander": "^11.0.0" + "commander": "^11.0.0", + "read-package-up": "^11.0.0" }, "devDependencies": { "@swc/cli": "^0.1.62", diff --git a/packages/discordeno/src/bin/generators/messageTypeGenerator.ts b/packages/discordeno/src/bin/generators/messageTypeGenerator.ts new file mode 100644 index 000000000..52bb76471 --- /dev/null +++ b/packages/discordeno/src/bin/generators/messageTypeGenerator.ts @@ -0,0 +1,142 @@ +const messageTypeProps = { + activity: ` /** Sent with Rich Presence-related chat embeds */ + activity?: { + /** Type of message activity */ + type: MessageActivityTypes + /** party_id from a Rich Presence event */ + partyId?: string + }\n`, + interaction: ` /** Sent if the message is a response to an Interaction */ + interaction?: { + /** Id of the interaction */ + id: bigint + /** The member who invoked the interaction in the guild */ + member?: Member + /** The name of the ApplicationCommand including the name of the subcommand/subcommand group */ + name: string + /** The type of interaction */ + type: InteractionTypes + /** The user who invoked the interaction */ + user: User + }\n`, + messageReference: ` /** Data showing the source of a crossposted channel follow add, pin or reply message */ + messageReference?: { + /** id of the originating message's channel Note: channel_id is optional when creating a reply, but will always be present when receiving an event/response that includes this data model. */ + channelId?: bigint + /** id of the originating message's guild */ + guildId?: bigint + /** id of the originating message */ + messageId?: bigint + }\n`, + reactions: ` /** Reactions on this message. */ + reactions?: Array<{ + /** Whether the current user reacted using this emoji */ + me: boolean + /** Times this emoji has been used to react */ + count: number + /** Emoji information */ + emoji: Emoji + }>\n`, + stickerItems: ` /** Sent if the message contains stickers */ + stickerItems?: Array<{ + /** The id of this sticker. */ + id: bigint + /** The name of this sticker. */ + name: string + /** The type of this stickers format. */ + formatType: StickerFormatTypes + }>\n`, + applicationId: ` /** if the message is an Interaction or application-owned webhook, this is the id of the application */ + applicationId?: bigint\n`, + attachments: ` /** Any attached files on this message. */ + attachments?: Attachment[]\n`, + author: ` /** The author of this message (not guaranteed to be a valid user) Note: The author object follows the structure of the user object, but is only a valid user in the case where the message is generated by a user or bot user. If the message is generated by a webhook, the author object corresponds to the webhook's id, username, and avatar. You can tell if a message is generated by a webhook by checking for the webhook_id on the message object. */ + author: User\n`, + channelId: ` /** id of the channel the message was sent in */ + channelId: bigint\n`, + components: ` /** The components related to this message */ + components: Component[]\n`, + content: ` /** Contents of the message */ + content: string\n`, + editedTimestamp: ` /** The timestamp in milliseconds when this message was edited last. */ + editedTimestamp?: number\n`, + embeds: ` /** Any embedded content */ + embeds?: Embed[]\n`, + guildId: ` /** id of the guild the message was sent in Note: For MESSAGE_CREATE and MESSAGE_UPDATE events, the message object may not contain a guild_id or member field since the events are sent directly to the receiving user and the bot who sent the message, rather than being sent through the guild like non-ephemeral messages. */ + guildId?: bigint\n`, + id: ` /** id of the message */ + id: bigint\n`, + member: ` /** Member properties for this message's author Note: The member object exists in MESSAGE_CREATE and MESSAGE_UPDATE events from text-based guild channels. This allows bots to obtain real-time member data without requiring bots to store member state in memory. */ + member?: Member\n`, + mentions: ` /** Users specifically mentioned in the message Note: The user objects in the mentions array will only have the partial member field present in MESSAGE_CREATE and MESSAGE_UPDATE events from text-based guild channels. */ + mentions?: User[]\n`, + mentionedChannelIds: ` /** Channels specifically mentioned in this message Note: Not all channel mentions in a message will appear in mention_channels. Only textual channels that are visible to everyone in a discoverable guild will ever be included. Only crossposted messages (via Channel Following) currently include mention_channels at all. If no mentions in the message meet these requirements, this field will not be sent. */ + mentionedChannelIds?: bigint[]\n`, + mentionedRoleIds: ` /** Roles specifically mentioned in this message */ + mentionedRoleIds?: bigint[]\n`, + nonce: ` /** Used for validating a message was sent */ + nonce?: string | number\n`, + type: ` /** Type of message */ + type: MessageTypes\n`, + thread: ` /** The thread that was started from this message, includes thread member object */ + thread?: Channel\n`, + webhookId: ` /** If the message is generated by a webhook, this is the webhook's id */ + webhookId?: bigint\n`, +} + +export const messageTypeGenerator = (desiredProps: Array): string => { + let generatedMessageType = `import type { DiscordMessage, InteractionTypes, MessageActivityTypes, MessageTypes, StickerFormatTypes } from '@discordeno/types' +import { CHANNEL_MENTION_REGEX } from '../constants.js' +import { snowflakeToTimestamp, type Bot } from '../index.js' +import { MessageFlags } from '../typings.js' +import type { Attachment } from './attachment.js' +import type { Channel } from './channel.js' +import type { Component } from './component.js' +import type { Embed } from './embed.js' +import type { Emoji } from './emoji.js' +import type { Member } from './member.js' +import { ToggleBitfield } from './toggles/ToggleBitfield.js' +import type { User } from './user.js' + +export interface MessageBase { + /** Holds all the boolean values on this message. */ + bitfield?: ToggleBitfield + /** Whether this message has been published to subscribed channels (via Channel Following) */ + crossposted: boolean + /** Whether this message is only visible to the user who invoked the Interaction */ + ephemeral: boolean + /** Whether this message failed to mention some roles and add their members to the thread */ + failedToMentionSomeRolesInThread: boolean + /** Message flags combined as a bitfield */ + flags?: ToggleBitfield + /** Whether this message has an associated thread, with the same id as the message */ + hasThread: boolean + /** Whether this message originated from a message in another channel (via Channel Following) */ + isCrosspost: boolean + /** Whether this message is an Interaction Response and the bot is "thinking" */ + loading: boolean + /** The ids of the users who were mentioned in this message. */ + mentionedUserIds: bigint[] + /** Whether this message mentions everyone */ + mentionEveryone: boolean + /** Whether this message is pinned */ + pinned: boolean + /** Whether the source message for this crosspost has been deleted (via Channel Following) */ + sourceMessageDeleted: boolean + /** Whether do not include any embeds when serializing this message */ + suppressEmbeds: boolean + /** Whether this message will not trigger push and desktop notifications */ + suppressNotifications: boolean + /** The timestamp in milliseconds when this message was created */ + timestamp: number + /** Whether this was a TTS message. */ + tts: boolean + /** Whether this message came from the urgent message system */ + urgent: boolean +} + +export interface Message extends MessageBase {\n` + desiredProps.forEach((desiredProp) => (generatedMessageType += messageTypeProps[desiredProp])) + generatedMessageType += `}\n` + return generatedMessageType +} diff --git a/packages/discordeno/src/bin/index.ts b/packages/discordeno/src/bin/index.ts index 39d8f68f2..cb4e56c9b 100644 --- a/packages/discordeno/src/bin/index.ts +++ b/packages/discordeno/src/bin/index.ts @@ -1,4 +1,9 @@ import { Command } from 'commander' +import { mkdir, writeFile } from 'node:fs/promises' +import path from 'node:path' +import { readPackageUp } from 'read-package-up' +import { messageTypeGenerator } from './generators/messageTypeGenerator.js' +import { readConfig } from './utils/readConfig.js' const program = new Command() program.name('discordeno').description('CLI to discordeno utilities').version('0.1.0') @@ -6,6 +11,14 @@ program.name('discordeno').description('CLI to discordeno utilities').version('0 program .command('generate') .description('Generate types/schema for discordeno') - .action(() => {}) + .action(async () => { + const config = await readConfig() + const packagePath = await readPackageUp({ cwd: process.cwd() }) + const transformerPath = path.join(path.dirname(packagePath!.path), 'node_modules/.discordeno/transformer') + await mkdir(path.join(transformerPath, 'src'), { recursive: true }) + + // @ts-expect-error should check before, TODO later + await writeFile(path.join(transformerPath, 'src', 'message.ts'), messageTypeGenerator(config.desiredProps.message)) + }) program.parse() diff --git a/packages/discordeno/src/bin/types/DiscordenoConfig.ts b/packages/discordeno/src/bin/types/DiscordenoConfig.ts new file mode 100644 index 000000000..376df4172 --- /dev/null +++ b/packages/discordeno/src/bin/types/DiscordenoConfig.ts @@ -0,0 +1,5 @@ +export interface DiscordenoConfig { + desiredProps: { + message: string[] + } +} diff --git a/packages/discordeno/src/bin/utils/readConfig.ts b/packages/discordeno/src/bin/utils/readConfig.ts new file mode 100644 index 000000000..c90262d5e --- /dev/null +++ b/packages/discordeno/src/bin/utils/readConfig.ts @@ -0,0 +1,38 @@ +import { readFile } from 'node:fs/promises' +import path from 'node:path' +import { readPackageUp } from 'read-package-up' +import type { DiscordenoConfig } from '../types/DiscordenoConfig.js' + +/** + * + * Credit: Primsa + * https://github.com/prisma/prisma/blob/862ae2d428edf32fb1440563f6ed4759489c7f30/packages/internals/src/cli/getSchema.ts + */ + +export const readConfig = async (): Promise => { + const configPath = await getConfigPath() + if (configPath === null) { + console.error('Error: No config found') + process.exit(1) + } + return await readFile(configPath, 'utf-8').then((config) => JSON.parse(config) as DiscordenoConfig) +} + +const getConfigPath = async (): Promise => { + const workDir = process.cwd() + const pkgJson = await readPackageUp({ cwd: workDir }) + if (pkgJson?.packageJson?.discordeno) return pkgJson?.packageJson?.discordeno as string + const possibleFileName = ['.discordenorc', '.discordenorc.json', 'discordenorc.js'] + const relativeConfigPath = await Promise.all( + possibleFileName.map( + async (filename) => + await readFile(path.join(workDir, filename), 'utf-8') + .then(() => filename) + .catch(() => null), + ), + ) + const firstRelativeConfigPath = relativeConfigPath.find((config) => config !== null) + if (firstRelativeConfigPath) return firstRelativeConfigPath + + return null +} diff --git a/yarn.lock b/yarn.lock index 5251f6a35..b4f1807a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,34 @@ __metadata: version: 6 cacheKey: 8 +"@babel/code-frame@npm:^7.22.13": + version: 7.23.5 + resolution: "@babel/code-frame@npm:7.23.5" + dependencies: + "@babel/highlight": ^7.23.4 + chalk: ^2.4.2 + checksum: d90981fdf56a2824a9b14d19a4c0e8db93633fd488c772624b4e83e0ceac6039a27cd298a247c3214faa952bf803ba23696172ae7e7235f3b97f43ba278c569a + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/highlight@npm:7.23.4" + dependencies: + "@babel/helper-validator-identifier": ^7.22.20 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + checksum: 643acecdc235f87d925979a979b539a5d7d1f31ae7db8d89047269082694122d11aa85351304c9c978ceeb6d250591ccadb06c366f358ccee08bb9c122476b89 + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -714,6 +742,13 @@ __metadata: languageName: node linkType: hard +"@types/normalize-package-data@npm:^2.4.3": + version: 2.4.4 + resolution: "@types/normalize-package-data@npm:2.4.4" + checksum: 65dff72b543997b7be8b0265eca7ace0e34b75c3e5fee31de11179d08fa7124a7a5587265d53d0409532ecb7f7fba662c2012807963e1f9b059653ec2c83ee05 + languageName: node + linkType: hard + "@types/responselike@npm:^1.0.0": version: 1.0.0 resolution: "@types/responselike@npm:1.0.0" @@ -994,7 +1029,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^3.2.0": +"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" dependencies: @@ -1424,6 +1459,17 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 + languageName: node + linkType: hard + "chalk@npm:^4.0.0, chalk@npm:^4.1.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -1838,6 +1884,7 @@ __metadata: resolution: "discordeno-monorepo@workspace:." dependencies: chokidar-cli: ^3.0.0 + discordeno: 19.0.0-alpha.1 eslint: ^8.36.0 eslint-config-discordeno: "*" husky: ^8.0.3 @@ -1851,7 +1898,7 @@ __metadata: languageName: unknown linkType: soft -"discordeno@workspace:packages/discordeno": +"discordeno@19.0.0-alpha.1, discordeno@workspace:packages/discordeno": version: 0.0.0-use.local resolution: "discordeno@workspace:packages/discordeno" dependencies: @@ -1872,12 +1919,13 @@ __metadata: eslint: ^8.36.0 eslint-config-discordeno: "*" mocha: ^10.2.0 + read-package-up: ^11.0.0 sinon: ^15.0.2 ts-node: ^10.9.1 tsconfig: "*" typescript: ^4.9.5 bin: - discordeno: ./bin/disocrdeno.js + discordeno: ./bin/discordeno.js languageName: unknown linkType: soft @@ -2053,6 +2101,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + "escape-string-regexp@npm:^5.0.0": version: 5.0.0 resolution: "escape-string-regexp@npm:5.0.0" @@ -2608,6 +2663,13 @@ __metadata: languageName: node linkType: hard +"find-up-simple@npm:^1.0.0": + version: 1.0.0 + resolution: "find-up-simple@npm:1.0.0" + checksum: 91c3d51c1111b5eb4e6e6d71d21438f6571a37a69dc288d4222b98996756e2f472fa5393a4dddb5e1a84929405d87e86f4bdce798ba84ee513b79854960ec140 + languageName: node + linkType: hard + "find-up@npm:5.0.0, find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" @@ -2732,6 +2794,13 @@ __metadata: languageName: node linkType: hard +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 + languageName: node + linkType: hard + "function.prototype.name@npm:^1.1.5": version: 1.1.5 resolution: "function.prototype.name@npm:1.1.5" @@ -2983,6 +3052,13 @@ __metadata: languageName: node linkType: hard +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + "has-flag@npm:^4.0.0": version: 4.0.0 resolution: "has-flag@npm:4.0.0" @@ -3038,6 +3114,15 @@ __metadata: languageName: node linkType: hard +"hasown@npm:^2.0.0": + version: 2.0.0 + resolution: "hasown@npm:2.0.0" + dependencies: + function-bind: ^1.1.2 + checksum: 6151c75ca12554565098641c98a40f4cc86b85b0fd5b6fe92360967e4605a4f9610f7757260b4e8098dd1c2ce7f4b095f2006fe72a570e3b6d2d28de0298c176 + languageName: node + linkType: hard + "he@npm:1.2.0": version: 1.2.0 resolution: "he@npm:1.2.0" @@ -3047,6 +3132,15 @@ __metadata: languageName: node linkType: hard +"hosted-git-info@npm:^7.0.0": + version: 7.0.1 + resolution: "hosted-git-info@npm:7.0.1" + dependencies: + lru-cache: ^10.0.1 + checksum: be5280f0a20d6153b47e1ab578e09f5ae8ad734301b3ed7e547dc88a6814d7347a4888db1b4f9635cc738e3c0ef1fbff02272aba7d07c75d4c5a50ff8d618db6 + languageName: node + linkType: hard + "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -3171,6 +3265,13 @@ __metadata: languageName: node linkType: hard +"index-to-position@npm:^0.1.2": + version: 0.1.2 + resolution: "index-to-position@npm:0.1.2" + checksum: ce0ab15544b154d6821b4f8b3fdb5dc410d560d20e43bcb0fb8ea2ccc5f93dc04caeee6b3ebd4abc7091e437156db4caaaef934ce20f05f079a1dbc73755f7e7 + languageName: node + linkType: hard + "infer-owner@npm:^1.0.4": version: 1.0.4 resolution: "infer-owner@npm:1.0.4" @@ -3268,6 +3369,15 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.8.1": + version: 2.13.1 + resolution: "is-core-module@npm:2.13.1" + dependencies: + hasown: ^2.0.0 + checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c + languageName: node + linkType: hard + "is-date-object@npm:^1.0.1": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" @@ -3539,6 +3649,13 @@ __metadata: languageName: node linkType: hard +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + "js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" @@ -3758,6 +3875,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^10.0.1": + version: 10.1.0 + resolution: "lru-cache@npm:10.1.0" + checksum: 58056d33e2500fbedce92f8c542e7c11b50d7d086578f14b7074d8c241422004af0718e08a6eaae8705cee09c77e39a61c1c79e9370ba689b7010c152e6a76ab + languageName: node + linkType: hard + "lru-cache@npm:^4.0.1": version: 4.1.5 resolution: "lru-cache@npm:4.1.5" @@ -4204,6 +4328,18 @@ __metadata: languageName: node linkType: hard +"normalize-package-data@npm:^6.0.0": + version: 6.0.0 + resolution: "normalize-package-data@npm:6.0.0" + dependencies: + hosted-git-info: ^7.0.0 + is-core-module: ^2.8.1 + semver: ^7.3.5 + validate-npm-package-license: ^3.0.4 + checksum: 741211a4354ba6d618caffa98f64e0e5ec9e5575bf3aefe47f4b68e662d65f9ba1b6b2d10640c16254763ed0879288155566138b5ffe384172352f6e969c1752 + languageName: node + linkType: hard + "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" @@ -4431,6 +4567,17 @@ __metadata: languageName: node linkType: hard +"parse-json@npm:^8.0.0": + version: 8.1.0 + resolution: "parse-json@npm:8.1.0" + dependencies: + "@babel/code-frame": ^7.22.13 + index-to-position: ^0.1.2 + type-fest: ^4.7.1 + checksum: efc4256c91e835b1340e2b4f535272247f174fcba85eead15ff938be23b3ca2d521a04c76e564d1dc2f61c0c9ebcb6157d5433d459c7e736c81d014b49577b31 + languageName: node + linkType: hard + "path-exists@npm:^3.0.0": version: 3.0.0 resolution: "path-exists@npm:3.0.0" @@ -4636,6 +4783,30 @@ __metadata: languageName: node linkType: hard +"read-package-up@npm:^11.0.0": + version: 11.0.0 + resolution: "read-package-up@npm:11.0.0" + dependencies: + find-up-simple: ^1.0.0 + read-pkg: ^9.0.0 + type-fest: ^4.6.0 + checksum: 535b7554d47fae5fb5c2e7aceebd48b5de4142cdfe7b21f942fa9a0f56db03d3b53cce298e19438e1149292279c285e6ba6722eca741d590fd242519c4bdbc17 + languageName: node + linkType: hard + +"read-pkg@npm:^9.0.0": + version: 9.0.1 + resolution: "read-pkg@npm:9.0.1" + dependencies: + "@types/normalize-package-data": ^2.4.3 + normalize-package-data: ^6.0.0 + parse-json: ^8.0.0 + type-fest: ^4.6.0 + unicorn-magic: ^0.1.0 + checksum: 5544bea2a58c6e5706db49a96137e8f0768c69395f25363f934064fbba00bdcdaa326fcd2f4281741df38cf81dbf27b76138240dc6de0ed718cf650475e0de3c + languageName: node + linkType: hard + "readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" @@ -5074,6 +5245,40 @@ __metadata: languageName: node linkType: hard +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: ^3.0.0 + spdx-license-ids: ^3.0.0 + checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.3.0 + resolution: "spdx-exceptions@npm:2.3.0" + checksum: cb69a26fa3b46305637123cd37c85f75610e8c477b6476fa7354eb67c08128d159f1d36715f19be6f9daf4b680337deb8c65acdcae7f2608ba51931540687ac0 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: ^2.1.0 + spdx-license-ids: ^3.0.0 + checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.16 + resolution: "spdx-license-ids@npm:3.0.16" + checksum: 5cdaa85aaa24bd02f9353a2e357b4df0a4f205cb35655f3fd0a5674a4fb77081f28ffd425379214bc3be2c2b7593ce1215df6bcc75884aeee0a9811207feabe2 + languageName: node + linkType: hard + "ssri@npm:^9.0.0": version: 9.0.1 resolution: "ssri@npm:9.0.1" @@ -5260,6 +5465,15 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + "supports-color@npm:^7.1.0, supports-color@npm:^7.2.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" @@ -5556,6 +5770,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^4.6.0, type-fest@npm:^4.7.1": + version: 4.8.2 + resolution: "type-fest@npm:4.8.2" + checksum: 1809def7aadc62368fb087d0632b770b0831c8daeccb06e397ad68d6651fbbce11c73ce3a58f3f5a4b6a362a8a2f067f497b26d936973aa0607a00ca74edb2af + languageName: node + linkType: hard + "typed-array-length@npm:^1.0.4": version: 1.0.4 resolution: "typed-array-length@npm:1.0.4" @@ -5651,6 +5872,13 @@ __metadata: languageName: node linkType: hard +"unicorn-magic@npm:^0.1.0": + version: 0.1.0 + resolution: "unicorn-magic@npm:0.1.0" + checksum: 48c5882ca3378f380318c0b4eb1d73b7e3c5b728859b060276e0a490051d4180966beeb48962d850fd0c6816543bcdfc28629dcd030bb62a286a2ae2acb5acb6 + languageName: node + linkType: hard + "unique-filename@npm:^2.0.0": version: 2.0.1 resolution: "unique-filename@npm:2.0.1" @@ -5710,6 +5938,16 @@ __metadata: languageName: node linkType: hard +"validate-npm-package-license@npm:^3.0.4": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: ^3.0.0 + spdx-expression-parse: ^3.0.0 + checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad + languageName: node + linkType: hard + "vscode-oniguruma@npm:^1.7.0": version: 1.7.0 resolution: "vscode-oniguruma@npm:1.7.0"