├── .github ├── issue_template.md └── workflows │ └── CI.yml ├── .gitignore ├── .husky ├── commit-msg └── pre-commit ├── .prettierrc ├── .release-it.json ├── .vscode └── settings.json ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── assets └── logo.jpg ├── bun.lock ├── commitlint.config.js ├── example ├── .gitignore ├── bun.lock ├── index.ts ├── package.json └── prisma │ ├── fakeData.utils.ts │ └── schema.prisma ├── package.json ├── src ├── __tests__ │ ├── __snapshots__ │ │ └── createMethods.test.ts.snap │ ├── createMethods.test.ts │ ├── generatorUtils.test.ts │ ├── sample.prisma │ └── testUtils.ts ├── bin.ts ├── constants.ts ├── generator.ts ├── helpers │ └── createMethods.ts └── utils │ ├── generatorUtils.ts │ └── writeFileSafely.ts ├── tsconfig.json └── vitest.config.ts /.github/issue_template.md: -------------------------------------------------------------------------------- 1 | Hi, there! 2 | 3 | I know reporting an issue can be as overwhelming as fixing it at times. To simplify the process for both of us, I created a CodeSandbox that you can access through this link: https://codesandbox.io/p/sandbox/prisma-generator-fake-data-example-xplkvs. Feel free to fork it and try to replicate your scenario. Please avoid sharing any Personal Identifiable Information if you're sharing your own code! Also, don't forget to update the `prisma-generator-fake-data` version if it's out of date. 4 | 5 | If you are unable to fork the CodeSandbox, please provide a detailed, step-by-step explanation of how to replicate the issue you are experiencing. 6 | -------------------------------------------------------------------------------- /.github/workflows/CI.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: 3 | push: 4 | branches: 5 | - main 6 | pull_request: 7 | branches: 8 | - '*' 9 | jobs: 10 | Test: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v2 14 | - uses: oven-sh/setup-bun@v1 15 | with: 16 | bun-version: latest 17 | - name: Install dependencies 18 | run: bun install --frozen-lockfile 19 | - name: Run Tests 🧪 20 | run: bun test 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | yarn-error.log 4 | build 5 | pnpm-debug.log 6 | .env* 7 | example/prisma/fake-data.ts -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | npx --no-install commitlint --edit "$1" 5 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npx pretty-quick --staged 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all" 4 | } 5 | -------------------------------------------------------------------------------- /.release-it.json: -------------------------------------------------------------------------------- 1 | { 2 | "github": { 3 | "release": true 4 | }, 5 | "plugins": { 6 | "@release-it/conventional-changelog": { 7 | "preset": "conventionalcommits", 8 | "infile": "CHANGELOG.md" 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "node_modules/typescript/lib" 3 | } 4 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## [0.15.0](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.14.3...v0.15.0) (2025-05-06) 4 | 5 | ### ⚠️ BREAKING CHANGES ⚠️ 6 | 7 | - This version requires Prisma 6.7.0 or higher. If you're using an older version of Prisma, please stay on version 0.14.3. 8 | 9 | ### Features 10 | 11 | - Add support for prisma 6.7.0+ ([#29](https://github.com/luisrudge/prisma-generator-fake-data/issues/29)) ([c0b070b](https://github.com/luisrudge/prisma-generator-fake-data/commit/c0b070b8b663e72b09808dfcb37a77517a51a6f7)) (thanks @fxdave) 12 | 13 | ### [0.14.3](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.14.2...v0.14.3) (2024-11-01) 14 | 15 | ### Bug Fixes 16 | 17 | - Integer data type fields should not be returning bigint's ([8c15f32](https://github.com/luisrudge/prisma-generator-fake-data/commit/8c15f324793795b833f76bc48b1418f05fca4e32)) 18 | 19 | ### [0.14.2](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.14.1...v0.14.2) (2024-03-22) 20 | 21 | ### Bug Fixes 22 | 23 | - Correctly generate import path on Windows ([56ec5e0](https://github.com/luisrudge/prisma-generator-fake-data/commit/56ec5e0678c776dccf12dcb2ecb4c9aa3a83671e)) 24 | 25 | ### [0.14.1](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.14.0...v0.14.1) (2024-01-25) 26 | 27 | ### Bug Fixes 28 | 29 | - Correctly generate import path ([0ff1424](https://github.com/luisrudge/prisma-generator-fake-data/commit/0ff142467ea4a96195ed4b9528c531a4c3c70d92)) 30 | 31 | ## [0.14.0](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.13.0...v0.14.0) (2024-01-25) 32 | 33 | ### Features 34 | 35 | - Support array of default enums https://github.com/luisrudge/prisma-generator-fake-data/pull/22 36 | - Generate Decimals using Decimal.js #21 https://github.com/luisrudge/prisma-generator-fake-data/pull/21 37 | - Allow overriding faker method using prisma comment #20 38 | 39 | ### Bug Fixes 40 | 41 | - fix BigInt generation, fix example folder ([82e0d4e](https://github.com/luisrudge/prisma-generator-fake-data/commit/82e0d4ecb7c6ce0730edb6c1fe9dede85fc89522)) 42 | 43 | ## [0.13.0](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.12.0...v0.13.0) (2023-11-23) 44 | 45 | ### Features 46 | 47 | - Use optional client output location when it exists ([130bed7](https://github.com/luisrudge/prisma-generator-fake-data/commit/130bed7c9a3b4a5bdfee8f7bbf785f7eb7a2bb8d)) 48 | 49 | ## [0.12.0](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.11.1...v0.12.0) (2023-11-15) 50 | 51 | ### Features 52 | 53 | - add support for enum arrays with default value ([eab337c](https://github.com/luisrudge/prisma-generator-fake-data/commit/eab337cac34b4da9b250142925dda629e8c75fc3)) 54 | 55 | ### [0.11.1](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.11.0...v0.11.1) (2023-11-08) 56 | 57 | ### Bug Fixes 58 | 59 | - Update createMethods.ts wrong function call ([efa2928](https://github.com/luisrudge/prisma-generator-fake-data/commit/efa2928426c3a948f7f5a5844e228536cfeba46e)) 60 | 61 | ## [0.11.0](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.10.0...v0.11.0) (2023-09-27) 62 | 63 | ### Features 64 | 65 | - update to use faker 7.x -> 9.x ([261e7a2](https://github.com/luisrudge/prisma-generator-fake-data/commit/261e7a2ccb8f486d89dd22b7efbff57c98063a44)) 66 | 67 | ### Bug Fixes 68 | 69 | - remove settings.json ([67633df](https://github.com/luisrudge/prisma-generator-fake-data/commit/67633df103d94677370188bea3a37a86ca11ed91)) 70 | 71 | ## [0.10.0](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.9.0...v0.10.0) (2023-07-21) 72 | 73 | ### Features 74 | 75 | - upgrade to prisma 5 ([2f879a2](https://github.com/luisrudge/prisma-generator-fake-data/commit/2f879a21025d26e5bd57713c3fbe8b18a0451f7f)) 76 | 77 | ## [0.9.0](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.8.0...v0.9.0) (2023-07-14) 78 | 79 | ### Features 80 | 81 | - add option to default to null instead of undefined fix [#11](https://github.com/luisrudge/prisma-generator-fake-data/issues/11) ([1dbf9d2](https://github.com/luisrudge/prisma-generator-fake-data/commit/1dbf9d2feb0f33b0c0de9e0abc006afcc9ec89b2)) 82 | 83 | ## [0.8.0](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.7.0...v0.8.0) (2023-05-29) 84 | 85 | ### Bug Fixes 86 | 87 | - render fake values for JSON fields with default values ([55fefba](https://github.com/luisrudge/prisma-generator-fake-data/commit/55fefba6be537e397bf8520a5d139b7c537e66e6)) 88 | 89 | ## [0.7.0](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.6.0...v0.7.0) (2023-04-06) 90 | 91 | ### Features 92 | 93 | - render real enums; render optional fields as undefined; render default values when available ([70b21fc](https://github.com/luisrudge/prisma-generator-fake-data/commit/70b21fc0782c83f792c063227cabc5a617e674a3)) 94 | 95 | ## [0.6.0](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.5.0...v0.6.0) (2023-04-05) 96 | 97 | ### Features 98 | 99 | - remove overrides and add fake\*Complete methods with foreign keys ([e370ab4](https://github.com/luisrudge/prisma-generator-fake-data/commit/e370ab4d42a505a72bb5290a6ef8dbd00813febc)) 100 | 101 | ### Bug Fixes 102 | 103 | - render enums with `as const` ([1e1946d](https://github.com/luisrudge/prisma-generator-fake-data/commit/1e1946d35fcb150256432344688261ac95109277)) 104 | 105 | ### [0.5.1](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.5.0...v0.5.1) (2023-03-31) 106 | 107 | ### Bug Fixes 108 | 109 | - render enums with `as const` ([1e1946d](https://github.com/luisrudge/prisma-generator-fake-data/commit/1e1946d35fcb150256432344688261ac95109277)) 110 | 111 | ## [0.5.0](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.4.1...v0.5.0) (2023-03-30) 112 | 113 | ### Features 114 | 115 | - add extraExport field ([6558bce](https://github.com/luisrudge/prisma-generator-fake-data/commit/6558bcef6cb6877409bdf660505bc8487ec57613)) 116 | 117 | ### [0.4.1](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.4.0...v0.4.1) (2023-03-28) 118 | 119 | ### Bug Fixes 120 | 121 | - remove prettier as dependency ([ed2ae92](https://github.com/luisrudge/prisma-generator-fake-data/commit/ed2ae92a39ec8a0141d270d5f60fd9d472de5ff3)) 122 | 123 | ## [0.4.0](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.3.5...v0.4.0) (2023-03-27) 124 | 125 | ### Features 126 | 127 | - add extraImport option ([3362156](https://github.com/luisrudge/prisma-generator-fake-data/commit/3362156c9866acd2fb76d9987b3121eddde35ab7)) 128 | 129 | ### [0.3.5](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.3.4...v0.3.5) (2023-03-26) 130 | 131 | ### Bug Fixes 132 | 133 | - return undefined for optional fields ([0d92c64](https://github.com/luisrudge/prisma-generator-fake-data/commit/0d92c6401b018830f4b9057c1f4e5144c2c9334a)) 134 | 135 | ### [0.3.4](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.3.3...v0.3.4) (2023-03-26) 136 | 137 | ### Bug Fixes 138 | 139 | - empty omit ([a097169](https://github.com/luisrudge/prisma-generator-fake-data/commit/a097169cc1639d4b1cf22a1ce218a0ed938410b3)) 140 | 141 | ### [0.3.3](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.3.2...v0.3.3) (2023-03-26) 142 | 143 | ### Bug Fixes 144 | 145 | - omit relation fields from overrides types ([a0936d5](https://github.com/luisrudge/prisma-generator-fake-data/commit/a0936d5270f6a15a9cf525d9b97ab78db631af70)) 146 | 147 | ### [0.3.2](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.3.1...v0.3.2) (2023-03-26) 148 | 149 | ### Bug Fixes 150 | 151 | - parse json field during creation ([9dcbf15](https://github.com/luisrudge/prisma-generator-fake-data/commit/9dcbf15b3b10ecbf090fff7f67df68e204da92a7)) 152 | 153 | ### [0.3.1](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.3.0...v0.3.1) (2023-03-26) 154 | 155 | ## [0.3.0](https://github.com/luisrudge/prisma-generator-fake-data/compare/v0.2.0...v0.3.0) (2023-03-26) 156 | 157 | ### Features 158 | 159 | - handle non-required fields ([4d60be7](https://github.com/luisrudge/prisma-generator-fake-data/commit/4d60be7ce259113157c3eba208ce5f986d5de738)) 160 | 161 | ### 0.2.0 (2023-03-26) 162 | 163 | ##### New Features 164 | 165 | - custom data shapes for JSON fields ([a2432738](https://github.com/luisrudge/prisma-generator-fake-data/commit/a24327385e886ed59ba6005b04380d9f8e439a1d)) 166 | - add name, fullName, firstName faker methods ([5ff33fa4](https://github.com/luisrudge/prisma-generator-fake-data/commit/5ff33fa48f66bbdc6c310831bedd1f76292c1274)) 167 | 168 | #### 0.1.2 (2023-03-26) 169 | 170 | ##### Chores 171 | 172 | - update pkg.json ([f3d61b46](https://github.com/luisrudge/prisma-generator-fake-data/commit/f3d61b46b0730fa080c74100135916df4a5a9614)) 173 | - simplify repo (remove yarn workspaces) ([7a405c23](https://github.com/luisrudge/prisma-generator-fake-data/commit/7a405c239c0ac52b7d345d7f4a2f6da008d1fd37)) 174 | - add readme to npm package ([335f0f44](https://github.com/luisrudge/prisma-generator-fake-data/commit/335f0f44070224360fbf6a40762b786b984763ba)) 175 | - remove semantic-release ([c423484c](https://github.com/luisrudge/prisma-generator-fake-data/commit/c423484c4cd0be4bd20a01b7fdccb20c7b6febab)) 176 | - remove publish stuff from gh ([01d74225](https://github.com/luisrudge/prisma-generator-fake-data/commit/01d74225bb0207a301167cef067900496424c353)) 177 | - remove windows from CI ([2167a863](https://github.com/luisrudge/prisma-generator-fake-data/commit/2167a8637dc01fd12af673c2b74baa6d7dee3d25)) 178 | - ci ([137a9cc5](https://github.com/luisrudge/prisma-generator-fake-data/commit/137a9cc5fc641972b6aca3cb3f0cc985c7a5662a)) 179 | - fix ci ([756499b2](https://github.com/luisrudge/prisma-generator-fake-data/commit/756499b24741d842a7e82a69d76dbb0f74bf3ff4)) 180 | 181 | ##### Documentation Changes 182 | 183 | - copy ([c5f379e7](https://github.com/luisrudge/prisma-generator-fake-data/commit/c5f379e78a26215efd5037f4f50db4441a956da7)) 184 | - prisma syntax highlighting ([6aa59966](https://github.com/luisrudge/prisma-generator-fake-data/commit/6aa5996642bdc017452349729b92de40a40a1691)) 185 | - add readme info ([441b21a9](https://github.com/luisrudge/prisma-generator-fake-data/commit/441b21a93bdb1ab8e9073098f7234eadaec89e09)) 186 | 187 | ##### New Features 188 | 189 | - initial release ([9a3d2f59](https://github.com/luisrudge/prisma-generator-fake-data/commit/9a3d2f59d585dbf1d67612207bb9a7d5ac2368d1)) 190 | - initial commit ([6fecd886](https://github.com/luisrudge/prisma-generator-fake-data/commit/6fecd8861a5a0fc8964f21c9b882e4a4cdf411a8)) 191 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012-2022 Scott Chacon and others 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # prisma-generator-fake-data 2 | 3 | ![Generated with Bing Image Creator. Prompt: create a logo with a cute panda smiling and holding a triangular prisma, digital art](assets/logo.jpg) 4 | 5 | _Generated with Bing Image Creator. Prompt: create a logo with a cute panda smiling and holding a triangular prisma, digital art_ 6 | 7 | ![npm](https://img.shields.io/npm/v/prisma-generator-fake-data) 8 | ![GitHub Workflow Status (with branch)](https://img.shields.io/github/actions/workflow/status/luisrudge/prisma-generator-fake-data/CI.yml?branch=main) 9 | 10 | ## The easiest way to generate mock data based on your Prisma models! 11 | 12 | ### What is prisma-generator-fake-data? 13 | 14 | It's a [Prisma Generator](https://www.prisma.io/docs/concepts/components/prisma-schema/generators) that uses [faker.js](https://fakerjs.dev/) to create realistic-looking fake data for your Prisma models. With this generator, you can quickly and easily create fake data for your Prisma models, without having to write barely any code. 15 | 16 | ### Get started 17 | 18 | - Setup your Prisma project as usual ([Get Started With Prisma](https://www.prisma.io/docs/getting-started)) 19 | - Install this package 20 | 21 | - `npm install -D prisma-generator-fake-data` 22 | - `yarn add -D prisma-generator-fake-data` 23 | - `pnpm install -D prisma-generator-fake-data` 24 | - `bun add -D prisma-generator-fake-data` 25 | 26 | - Modify your Prisma model file 27 | ```prisma 28 | generator custom_generator { 29 | provider = "prisma-generator-fake-data" 30 | output = "../types/fake-data.ts" 31 | } 32 | ``` 33 | - Run `npx prisma generate` 34 | 35 | You're all done! 36 | 37 | > If you prefer, you can easily get started with [this CodeSandbox.](https://codesandbox.io/p/sandbox/prisma-generator-fake-data-example-xplkvs?file=%2Fscript.ts&selection=%5B%7B%22endColumn%22%3A6%2C%22endLineNumber%22%3A38%2C%22startColumn%22%3A6%2C%22startLineNumber%22%3A38%7D%5D) 38 | 39 | ### Usage 40 | 41 | Once the file is generated, you can import it in your project. 42 | 43 | ```prisma 44 | generator client { 45 | provider = "prisma-client-js" 46 | } 47 | 48 | generator custom_generator { 49 | provider = "prisma-generator-fake-data" 50 | /// by default, the file will be generated at `./prisma/fake-data.ts` 51 | } 52 | 53 | datasource db { 54 | provider = "postgresql" 55 | url = env("DATABASE_URL") 56 | } 57 | 58 | model User { 59 | id String @id @default(cuid()) 60 | email String @unique 61 | name String 62 | /// Use comments to specify the faker method. For example: 63 | ///FAKE:faker.location.streetAddress({ useFullAddress: true }) 64 | address String 65 | ///FAKE:{notificationsEnabled: faker.datatype.boolean(), preferredColor: faker.color.rgb()} 66 | settings Json 67 | status UserStatus 68 | profile Profile? 69 | } 70 | 71 | model Profile { 72 | id Int @id @default(autoincrement()) 73 | someConfiguration Boolean 74 | userId String @unique 75 | user User @relation(fields: [userId], references: [id]) 76 | } 77 | 78 | enum UserStatus { 79 | active 80 | inactive 81 | } 82 | ``` 83 | 84 | ```ts 85 | import { fakeUser, fakeProfileComplete } from './prisma/fake-data'; //or your custom output path 86 | 87 | console.log(fakeUser()); 88 | console.log(fakeProfileComplete()); 89 | /* 90 | { 91 | email: 'Ella.Mayer@gmail.com', 92 | name: 'Lana Gulgowski', 93 | age: 81, 94 | settings: { notificationsEnabled: true, preferredColor: '#ee5344' }, 95 | maybeString: undefined, 96 | status: 'active' 97 | } 98 | { 99 | id: 96601, 100 | someConfiguration: true, 101 | userId: '821cf67a-dd86-49d7-b0e4-9ad451ad173d' 102 | } 103 | */ 104 | ``` 105 | 106 | ### Generator options 107 | 108 | | Option | Required | Default | Example | Description | 109 | | ------------ | -------- | ------------------ | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 110 | | output | no | `"./fake-data.ts"` | `"../types/fake-data.ts"` | Path where the file will be exported to. Base folder is your prisma folder. | 111 | | extraImport | no | `""` | `"import {myCustomFunction} from '../utils/fakeImports'"` | This import will be added to your generated file. Useful when you want to use a custom function to generate fake JSON data. You can use your TypeScript aliases. Base folder is your prisma folder. | 112 | | extraExport | no | `""` | `"export * from '../utils/fakeImports'"` | This export will be added to your generated file. Useful when you want to export all of the fake methods created by this generator from the same file. Base folder is your prisma folder. | 113 | | emptyValueAs | no | `"undefined"` | `"null"` | By default, optional fields will be generated with `undefined`. You can change this behavior by overriding this parameter. You can use a function imported in `extraImport` or just pass a hardcoded value like `"null"`. | 114 | | | | | 115 | 116 | ### Fields with special treatment: 117 | 118 | - `name`, `fullName`, `firstName`, `lastName`, and `age` will use specific `faker-js` methods to appear more realistic. 119 | - If you have an optional Prisma field (e.g., `message String?`), the fake data generator will always return `undefined` for that property (customizable through the `emptyValueAs` option). 120 | - If you have a `JSON` Prisma field, you can add your own data shape by adding a special comment above your field. 121 | - Example: `///FAKE:{test: faker.lorem.word()}` 122 | - Keep in mind that the generator will simply relay whatever is after the `FAKE:` string to your generated code, so it needs to be valid TypeScript. 123 | - By using the `extraImport` generator option, you can create your own helper methods to generate fake data for your JSON fields 124 | 125 | Inspired by https://github.com/toyamarinyon/prisma-factory-generator 126 | 127 | This generator was bootstrapped using [create-prisma-generator](https://github.com/YassinEldeeb/create-prisma-generator) 128 | 129 | -------------------------------------------------------------------------------- /assets/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/luisrudge/prisma-generator-fake-data/7081912cb577052f3465951f169f6179f803ebd8/assets/logo.jpg -------------------------------------------------------------------------------- /bun.lock: -------------------------------------------------------------------------------- 1 | { 2 | "lockfileVersion": 1, 3 | "workspaces": { 4 | "": { 5 | "name": "prisma-generator-fake-data", 6 | "dependencies": { 7 | "@faker-js/faker": "^9.7.0", 8 | "@prisma/generator-helper": "^6.7.0", 9 | "@prisma/internals": "^6.7.0", 10 | "decimal.js": "^10.5.0", 11 | "tiny-invariant": "^1.3.3", 12 | }, 13 | "devDependencies": { 14 | "@release-it/conventional-changelog": "^10.0.1", 15 | "@types/node": "^22.15.13", 16 | "@types/prettier": "^3.0.0", 17 | "generate-changelog": "^1.8.0", 18 | "prettier": "^3.5.3", 19 | "pretty-quick": "^4.1.1", 20 | "prisma": "^6.7.0", 21 | "release-it": "^19.0.2", 22 | "typescript": "^5.8.3", 23 | "vitest": "^3.1.3", 24 | }, 25 | }, 26 | }, 27 | "packages": { 28 | "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], 29 | 30 | "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], 31 | 32 | "@conventional-changelog/git-client": ["@conventional-changelog/git-client@1.0.1", "", { "dependencies": { "@types/semver": "^7.5.5", "semver": "^7.5.2" }, "peerDependencies": { "conventional-commits-filter": "^5.0.0", "conventional-commits-parser": "^6.0.0" }, "optionalPeers": ["conventional-commits-filter", "conventional-commits-parser"] }, "sha512-PJEqBwAleffCMETaVm/fUgHldzBE35JFk3/9LL6NUA5EXa3qednu+UT6M7E5iBu3zIQZCULYIiZ90fBYHt6xUw=="], 33 | 34 | "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], 35 | 36 | "@esbuild/android-arm": ["@esbuild/android-arm@0.25.4", "", { "os": "android", "cpu": "arm" }, "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ=="], 37 | 38 | "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.4", "", { "os": "android", "cpu": "arm64" }, "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A=="], 39 | 40 | "@esbuild/android-x64": ["@esbuild/android-x64@0.25.4", "", { "os": "android", "cpu": "x64" }, "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ=="], 41 | 42 | "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g=="], 43 | 44 | "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A=="], 45 | 46 | "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ=="], 47 | 48 | "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ=="], 49 | 50 | "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.4", "", { "os": "linux", "cpu": "arm" }, "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ=="], 51 | 52 | "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ=="], 53 | 54 | "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ=="], 55 | 56 | "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA=="], 57 | 58 | "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg=="], 59 | 60 | "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag=="], 61 | 62 | "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA=="], 63 | 64 | "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g=="], 65 | 66 | "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA=="], 67 | 68 | "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.4", "", { "os": "none", "cpu": "arm64" }, "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ=="], 69 | 70 | "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.4", "", { "os": "none", "cpu": "x64" }, "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw=="], 71 | 72 | "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A=="], 73 | 74 | "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw=="], 75 | 76 | "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q=="], 77 | 78 | "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ=="], 79 | 80 | "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg=="], 81 | 82 | "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], 83 | 84 | "@faker-js/faker": ["@faker-js/faker@9.7.0", "", {}, "sha512-aozo5vqjCmDoXLNUJarFZx2IN/GgGaogY4TMJ6so/WLZOWpSV7fvj2dmrV6sEAnUm1O7aCrhTibjpzeDFgNqbg=="], 85 | 86 | "@hutson/parse-repository-url": ["@hutson/parse-repository-url@5.0.0", "", {}, "sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg=="], 87 | 88 | "@inquirer/checkbox": ["@inquirer/checkbox@4.1.5", "", { "dependencies": { "@inquirer/core": "^10.1.10", "@inquirer/figures": "^1.0.11", "@inquirer/type": "^3.0.6", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-swPczVU+at65xa5uPfNP9u3qx/alNwiaykiI/ExpsmMSQW55trmZcwhYWzw/7fj+n6Q8z1eENvR7vFfq9oPSAQ=="], 89 | 90 | "@inquirer/confirm": ["@inquirer/confirm@5.1.9", "", { "dependencies": { "@inquirer/core": "^10.1.10", "@inquirer/type": "^3.0.6" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-NgQCnHqFTjF7Ys2fsqK2WtnA8X1kHyInyG+nMIuHowVTIgIuS10T4AznI/PvbqSpJqjCUqNBlKGh1v3bwLFL4w=="], 91 | 92 | "@inquirer/core": ["@inquirer/core@10.1.10", "", { "dependencies": { "@inquirer/figures": "^1.0.11", "@inquirer/type": "^3.0.6", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-roDaKeY1PYY0aCqhRmXihrHjoSW2A00pV3Ke5fTpMCkzcGF64R8e0lw3dK+eLEHwS4vB5RnW1wuQmvzoRul8Mw=="], 93 | 94 | "@inquirer/editor": ["@inquirer/editor@4.2.10", "", { "dependencies": { "@inquirer/core": "^10.1.10", "@inquirer/type": "^3.0.6", "external-editor": "^3.1.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-5GVWJ+qeI6BzR6TIInLP9SXhWCEcvgFQYmcRG6d6RIlhFjM5TyG18paTGBgRYyEouvCmzeco47x9zX9tQEofkw=="], 95 | 96 | "@inquirer/expand": ["@inquirer/expand@4.0.12", "", { "dependencies": { "@inquirer/core": "^10.1.10", "@inquirer/type": "^3.0.6", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-jV8QoZE1fC0vPe6TnsOfig+qwu7Iza1pkXoUJ3SroRagrt2hxiL+RbM432YAihNR7m7XnU0HWl/WQ35RIGmXHw=="], 97 | 98 | "@inquirer/figures": ["@inquirer/figures@1.0.11", "", {}, "sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw=="], 99 | 100 | "@inquirer/input": ["@inquirer/input@4.1.9", "", { "dependencies": { "@inquirer/core": "^10.1.10", "@inquirer/type": "^3.0.6" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-mshNG24Ij5KqsQtOZMgj5TwEjIf+F2HOESk6bjMwGWgcH5UBe8UoljwzNFHqdMbGYbgAf6v2wU/X9CAdKJzgOA=="], 101 | 102 | "@inquirer/number": ["@inquirer/number@3.0.12", "", { "dependencies": { "@inquirer/core": "^10.1.10", "@inquirer/type": "^3.0.6" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-7HRFHxbPCA4e4jMxTQglHJwP+v/kpFsCf2szzfBHy98Wlc3L08HL76UDiA87TOdX5fwj2HMOLWqRWv9Pnn+Z5Q=="], 103 | 104 | "@inquirer/password": ["@inquirer/password@4.0.12", "", { "dependencies": { "@inquirer/core": "^10.1.10", "@inquirer/type": "^3.0.6", "ansi-escapes": "^4.3.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-FlOB0zvuELPEbnBYiPaOdJIaDzb2PmJ7ghi/SVwIHDDSQ2K4opGBkF+5kXOg6ucrtSUQdLhVVY5tycH0j0l+0g=="], 105 | 106 | "@inquirer/prompts": ["@inquirer/prompts@7.5.0", "", { "dependencies": { "@inquirer/checkbox": "^4.1.5", "@inquirer/confirm": "^5.1.9", "@inquirer/editor": "^4.2.10", "@inquirer/expand": "^4.0.12", "@inquirer/input": "^4.1.9", "@inquirer/number": "^3.0.12", "@inquirer/password": "^4.0.12", "@inquirer/rawlist": "^4.1.0", "@inquirer/search": "^3.0.12", "@inquirer/select": "^4.2.0" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-tk8Bx7l5AX/CR0sVfGj3Xg6v7cYlFBkEahH+EgBB+cZib6Fc83dwerTbzj7f2+qKckjIUGsviWRI1d7lx6nqQA=="], 107 | 108 | "@inquirer/rawlist": ["@inquirer/rawlist@4.1.0", "", { "dependencies": { "@inquirer/core": "^10.1.10", "@inquirer/type": "^3.0.6", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-6ob45Oh9pXmfprKqUiEeMz/tjtVTFQTgDDz1xAMKMrIvyrYjAmRbQZjMJfsictlL4phgjLhdLu27IkHNnNjB7g=="], 109 | 110 | "@inquirer/search": ["@inquirer/search@3.0.12", "", { "dependencies": { "@inquirer/core": "^10.1.10", "@inquirer/figures": "^1.0.11", "@inquirer/type": "^3.0.6", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-H/kDJA3kNlnNIjB8YsaXoQI0Qccgf0Na14K1h8ExWhNmUg2E941dyFPrZeugihEa9AZNW5NdsD/NcvUME83OPQ=="], 111 | 112 | "@inquirer/select": ["@inquirer/select@4.2.0", "", { "dependencies": { "@inquirer/core": "^10.1.10", "@inquirer/figures": "^1.0.11", "@inquirer/type": "^3.0.6", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-KkXQ4aSySWimpV4V/TUJWdB3tdfENZUU765GjOIZ0uPwdbGIG6jrxD4dDf1w68uP+DVtfNhr1A92B+0mbTZ8FA=="], 113 | 114 | "@inquirer/type": ["@inquirer/type@3.0.6", "", { "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA=="], 115 | 116 | "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="], 117 | 118 | "@nodeutils/defaults-deep": ["@nodeutils/defaults-deep@1.1.0", "", { "dependencies": { "lodash": "^4.15.0" } }, "sha512-gG44cwQovaOFdSR02jR9IhVRpnDP64VN6JdjYJTfNz4J4fWn7TQnmrf22nSjRqlwlxPcW8PL/L3KbJg3tdwvpg=="], 119 | 120 | "@octokit/auth-token": ["@octokit/auth-token@5.1.2", "", {}, "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw=="], 121 | 122 | "@octokit/core": ["@octokit/core@6.1.5", "", { "dependencies": { "@octokit/auth-token": "^5.0.0", "@octokit/graphql": "^8.2.2", "@octokit/request": "^9.2.3", "@octokit/request-error": "^6.1.8", "@octokit/types": "^14.0.0", "before-after-hook": "^3.0.2", "universal-user-agent": "^7.0.0" } }, "sha512-vvmsN0r7rguA+FySiCsbaTTobSftpIDIpPW81trAmsv9TGxg3YCujAxRYp/Uy8xmDgYCzzgulG62H7KYUFmeIg=="], 123 | 124 | "@octokit/endpoint": ["@octokit/endpoint@10.1.4", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA=="], 125 | 126 | "@octokit/graphql": ["@octokit/graphql@8.2.2", "", { "dependencies": { "@octokit/request": "^9.2.3", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA=="], 127 | 128 | "@octokit/openapi-types": ["@octokit/openapi-types@25.0.0", "", {}, "sha512-FZvktFu7HfOIJf2BScLKIEYjDsw6RKc7rBJCdvCTfKsVnx2GEB/Nbzjr29DUdb7vQhlzS/j8qDzdditP0OC6aw=="], 129 | 130 | "@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@11.6.0", "", { "dependencies": { "@octokit/types": "^13.10.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw=="], 131 | 132 | "@octokit/plugin-request-log": ["@octokit/plugin-request-log@5.3.1", "", { "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw=="], 133 | 134 | "@octokit/plugin-rest-endpoint-methods": ["@octokit/plugin-rest-endpoint-methods@13.5.0", "", { "dependencies": { "@octokit/types": "^13.10.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw=="], 135 | 136 | "@octokit/request": ["@octokit/request@9.2.3", "", { "dependencies": { "@octokit/endpoint": "^10.1.4", "@octokit/request-error": "^6.1.8", "@octokit/types": "^14.0.0", "fast-content-type-parse": "^2.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-Ma+pZU8PXLOEYzsWf0cn/gY+ME57Wq8f49WTXA8FMHp2Ps9djKw//xYJ1je8Hm0pR2lU9FUGeJRWOtxq6olt4w=="], 137 | 138 | "@octokit/request-error": ["@octokit/request-error@6.1.8", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ=="], 139 | 140 | "@octokit/rest": ["@octokit/rest@21.1.1", "", { "dependencies": { "@octokit/core": "^6.1.4", "@octokit/plugin-paginate-rest": "^11.4.2", "@octokit/plugin-request-log": "^5.3.1", "@octokit/plugin-rest-endpoint-methods": "^13.3.0" } }, "sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg=="], 141 | 142 | "@octokit/types": ["@octokit/types@14.0.0", "", { "dependencies": { "@octokit/openapi-types": "^25.0.0" } }, "sha512-VVmZP0lEhbo2O1pdq63gZFiGCKkm8PPp8AUOijlwPO6hojEVjspA0MWKP7E4hbvGxzFKNqKr6p0IYtOH/Wf/zA=="], 143 | 144 | "@phun-ky/typeof": ["@phun-ky/typeof@1.2.8", "", {}, "sha512-7J6ca1tK0duM2BgVB+CuFMh3idlIVASOP2QvOCbNWDc6JnvjtKa9nufPoJQQ4xrwBonwgT1TIhRRcEtzdVgWsA=="], 145 | 146 | "@prisma/config": ["@prisma/config@6.7.0", "", { "dependencies": { "esbuild": ">=0.12 <1", "esbuild-register": "3.6.0" } }, "sha512-di8QDdvSz7DLUi3OOcCHSwxRNeW7jtGRUD2+Z3SdNE3A+pPiNT8WgUJoUyOwJmUr5t+JA2W15P78C/N+8RXrOA=="], 147 | 148 | "@prisma/debug": ["@prisma/debug@6.7.0", "", {}, "sha512-RabHn9emKoYFsv99RLxvfG2GHzWk2ZI1BuVzqYtmMSIcuGboHY5uFt3Q3boOREM9de6z5s3bQoyKeWnq8Fz22w=="], 149 | 150 | "@prisma/dmmf": ["@prisma/dmmf@6.7.0", "", {}, "sha512-Nabzf5H7KUwYV/1u8R5gTQ7x3ffdPIhtxVJsjhnLOjeuem8YzVu39jOgQbiOlfOvjU4sPYkV9wEXc5tIHumdUw=="], 151 | 152 | "@prisma/driver-adapter-utils": ["@prisma/driver-adapter-utils@6.7.0", "", { "dependencies": { "@prisma/debug": "6.7.0" } }, "sha512-xYcXALWz1GsCRqwcDw0kP0R27chn99Co/HMX0nyOvIjAOo+41Tl/qcCOce/Ik1wNMGTI68N64kt3iccJ4EJoCQ=="], 153 | 154 | "@prisma/engines": ["@prisma/engines@6.7.0", "", { "dependencies": { "@prisma/debug": "6.7.0", "@prisma/engines-version": "6.7.0-36.3cff47a7f5d65c3ea74883f1d736e41d68ce91ed", "@prisma/fetch-engine": "6.7.0", "@prisma/get-platform": "6.7.0" } }, "sha512-3wDMesnOxPrOsq++e5oKV9LmIiEazFTRFZrlULDQ8fxdub5w4NgRBoxtWbvXmj2nJVCnzuz6eFix3OhIqsZ1jw=="], 155 | 156 | "@prisma/engines-version": ["@prisma/engines-version@6.7.0-36.3cff47a7f5d65c3ea74883f1d736e41d68ce91ed", "", {}, "sha512-EvpOFEWf1KkJpDsBCrih0kg3HdHuaCnXmMn7XFPObpFTzagK1N0Q0FMnYPsEhvARfANP5Ok11QyoTIRA2hgJTA=="], 157 | 158 | "@prisma/fetch-engine": ["@prisma/fetch-engine@6.7.0", "", { "dependencies": { "@prisma/debug": "6.7.0", "@prisma/engines-version": "6.7.0-36.3cff47a7f5d65c3ea74883f1d736e41d68ce91ed", "@prisma/get-platform": "6.7.0" } }, "sha512-zLlAGnrkmioPKJR4Yf7NfW3hftcvqeNNEHleMZK9yX7RZSkhmxacAYyfGsCcqRt47jiZ7RKdgE0Wh2fWnm7WsQ=="], 159 | 160 | "@prisma/generator": ["@prisma/generator@6.7.0", "", {}, "sha512-wCsD7QJn1JBKJfv5uOMhwBCvZPGerPJ3EC2HocFPFaHSzVIXLi/zNb/8gpBxervOXTbQRJ2dpqvMsJnwAnPi8A=="], 161 | 162 | "@prisma/generator-helper": ["@prisma/generator-helper@6.7.0", "", { "dependencies": { "@prisma/debug": "6.7.0", "@prisma/dmmf": "6.7.0", "@prisma/generator": "6.7.0" } }, "sha512-z4ey7n8eUFx7Ol7RJCoEo9SVK2roy80qLXdrUFlmswcs0e/z03wDl4tpaA02BE2Yi9KCZl2Tkd6oMes81vUefA=="], 163 | 164 | "@prisma/get-platform": ["@prisma/get-platform@6.7.0", "", { "dependencies": { "@prisma/debug": "6.7.0" } }, "sha512-i9IH5lO4fQwnMLvQLYNdgVh9TK3PuWBfQd7QLk/YurnAIg+VeADcZDbmhAi4XBBDD+hDif9hrKyASu0hbjwabw=="], 165 | 166 | "@prisma/internals": ["@prisma/internals@6.7.0", "", { "dependencies": { "@prisma/config": "6.7.0", "@prisma/debug": "6.7.0", "@prisma/dmmf": "6.7.0", "@prisma/driver-adapter-utils": "6.7.0", "@prisma/engines": "6.7.0", "@prisma/fetch-engine": "6.7.0", "@prisma/generator": "6.7.0", "@prisma/generator-helper": "6.7.0", "@prisma/get-platform": "6.7.0", "@prisma/prisma-schema-wasm": "6.7.0-36.3cff47a7f5d65c3ea74883f1d736e41d68ce91ed", "@prisma/schema-engine-wasm": "6.7.0-36.3cff47a7f5d65c3ea74883f1d736e41d68ce91ed", "@prisma/schema-files-loader": "6.7.0", "arg": "5.0.2", "prompts": "2.4.2" }, "peerDependencies": { "typescript": ">=5.1.0" }, "optionalPeers": ["typescript"] }, "sha512-TeIw9cPf5y0ULw5yOUKxVK/p6J/lvCMIAFzQQ3aSjlg5+XaNxyK8S77J1C2T/kI50/xIPJXiytjv3baUKKVzlA=="], 167 | 168 | "@prisma/prisma-schema-wasm": ["@prisma/prisma-schema-wasm@6.7.0-36.3cff47a7f5d65c3ea74883f1d736e41d68ce91ed", "", {}, "sha512-lxeu/lRSt0KbYEdsSbWpVKj3DoSqfEnB7h+ju6plR0Eg+jxEdahZRbowzd5qoiMtC57cBhtjQCD2AvewxnUyHA=="], 169 | 170 | "@prisma/schema-engine-wasm": ["@prisma/schema-engine-wasm@6.7.0-36.3cff47a7f5d65c3ea74883f1d736e41d68ce91ed", "", {}, "sha512-BMdbaajhV46xPBEqwV/7pxYR67hA02ywUcKDKTIULhaofdbhCUee/O0zqoG4TmgsQZc3DUdwK7nmh2U7Ndj3fA=="], 171 | 172 | "@prisma/schema-files-loader": ["@prisma/schema-files-loader@6.7.0", "", { "dependencies": { "@prisma/prisma-schema-wasm": "6.7.0-36.3cff47a7f5d65c3ea74883f1d736e41d68ce91ed", "fs-extra": "11.3.0" } }, "sha512-JaAu/hcMAX6rEhB48wTTyTqo7BNS2Cw8ReTGdqIHXJlBHz4p1HxvoqYcmJw/WEsjUx07J0L7RgQJhhbJpo1cdQ=="], 173 | 174 | "@release-it/conventional-changelog": ["@release-it/conventional-changelog@10.0.1", "", { "dependencies": { "concat-stream": "^2.0.0", "conventional-changelog": "^6.0.0", "conventional-recommended-bump": "^10.0.0", "git-semver-tags": "^8.0.0", "semver": "^7.6.3" }, "peerDependencies": { "release-it": "^18.0.0 || ^19.0.0" } }, "sha512-Qp+eyMGCPyq5xiWoNK91cWVIR/6HD1QAUNeG6pV2G4kxotWl81k/KDQqDNvrNVmr9+zDp53jI7pVVYQp6mi4zA=="], 175 | 176 | "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.40.2", "", { "os": "android", "cpu": "arm" }, "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg=="], 177 | 178 | "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.40.2", "", { "os": "android", "cpu": "arm64" }, "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw=="], 179 | 180 | "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.40.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w=="], 181 | 182 | "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.40.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ=="], 183 | 184 | "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.40.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ=="], 185 | 186 | "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.40.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q=="], 187 | 188 | "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.40.2", "", { "os": "linux", "cpu": "arm" }, "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q=="], 189 | 190 | "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.40.2", "", { "os": "linux", "cpu": "arm" }, "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg=="], 191 | 192 | "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.40.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg=="], 193 | 194 | "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.40.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg=="], 195 | 196 | "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.40.2", "", { "os": "linux", "cpu": "none" }, "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw=="], 197 | 198 | "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.40.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q=="], 199 | 200 | "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.40.2", "", { "os": "linux", "cpu": "none" }, "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg=="], 201 | 202 | "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.40.2", "", { "os": "linux", "cpu": "none" }, "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg=="], 203 | 204 | "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.40.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ=="], 205 | 206 | "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.40.2", "", { "os": "linux", "cpu": "x64" }, "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng=="], 207 | 208 | "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.40.2", "", { "os": "linux", "cpu": "x64" }, "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA=="], 209 | 210 | "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.40.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg=="], 211 | 212 | "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.40.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA=="], 213 | 214 | "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.40.2", "", { "os": "win32", "cpu": "x64" }, "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA=="], 215 | 216 | "@tootallnate/quickjs-emscripten": ["@tootallnate/quickjs-emscripten@0.23.0", "", {}, "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="], 217 | 218 | "@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="], 219 | 220 | "@types/node": ["@types/node@22.15.13", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-mkmz+UBGCF/ssSObTp1McwQEvIjO2hUnVvZzck61l0su7btUill8OSvzA4N62+AtkJgMhiniyD+wEL5kocZaEA=="], 221 | 222 | "@types/normalize-package-data": ["@types/normalize-package-data@2.4.4", "", {}, "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA=="], 223 | 224 | "@types/parse-path": ["@types/parse-path@7.1.0", "", { "dependencies": { "parse-path": "*" } }, "sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q=="], 225 | 226 | "@types/prettier": ["@types/prettier@3.0.0", "", { "dependencies": { "prettier": "*" } }, "sha512-mFMBfMOz8QxhYVbuINtswBp9VL2b4Y0QqYHwqLz3YbgtfAcat2Dl6Y1o4e22S/OVE6Ebl9m7wWiMT2lSbAs1wA=="], 227 | 228 | "@types/semver": ["@types/semver@7.7.0", "", {}, "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA=="], 229 | 230 | "@vitest/expect": ["@vitest/expect@3.1.3", "", { "dependencies": { "@vitest/spy": "3.1.3", "@vitest/utils": "3.1.3", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-7FTQQuuLKmN1Ig/h+h/GO+44Q1IlglPlR2es4ab7Yvfx+Uk5xsv+Ykk+MEt/M2Yn/xGmzaLKxGw2lgy2bwuYqg=="], 231 | 232 | "@vitest/mocker": ["@vitest/mocker@3.1.3", "", { "dependencies": { "@vitest/spy": "3.1.3", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^5.0.0 || ^6.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-PJbLjonJK82uCWHjzgBJZuR7zmAOrSvKk1QBxrennDIgtH4uK0TB1PvYmc0XBCigxxtiAVPfWtAdy4lpz8SQGQ=="], 233 | 234 | "@vitest/pretty-format": ["@vitest/pretty-format@3.1.3", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-i6FDiBeJUGLDKADw2Gb01UtUNb12yyXAqC/mmRWuYl+m/U9GS7s8us5ONmGkGpUUo7/iAYzI2ePVfOZTYvUifA=="], 235 | 236 | "@vitest/runner": ["@vitest/runner@3.1.3", "", { "dependencies": { "@vitest/utils": "3.1.3", "pathe": "^2.0.3" } }, "sha512-Tae+ogtlNfFei5DggOsSUvkIaSuVywujMj6HzR97AHK6XK8i3BuVyIifWAm/sE3a15lF5RH9yQIrbXYuo0IFyA=="], 237 | 238 | "@vitest/snapshot": ["@vitest/snapshot@3.1.3", "", { "dependencies": { "@vitest/pretty-format": "3.1.3", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "sha512-XVa5OPNTYUsyqG9skuUkFzAeFnEzDp8hQu7kZ0N25B1+6KjGm4hWLtURyBbsIAOekfWQ7Wuz/N/XXzgYO3deWQ=="], 239 | 240 | "@vitest/spy": ["@vitest/spy@3.1.3", "", { "dependencies": { "tinyspy": "^3.0.2" } }, "sha512-x6w+ctOEmEXdWaa6TO4ilb7l9DxPR5bwEb6hILKuxfU1NqWT2mpJD9NJN7t3OTfxmVlOMrvtoFJGdgyzZ605lQ=="], 241 | 242 | "@vitest/utils": ["@vitest/utils@3.1.3", "", { "dependencies": { "@vitest/pretty-format": "3.1.3", "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" } }, "sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg=="], 243 | 244 | "add-stream": ["add-stream@1.0.0", "", {}, "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ=="], 245 | 246 | "agent-base": ["agent-base@7.1.3", "", {}, "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw=="], 247 | 248 | "ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], 249 | 250 | "ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], 251 | 252 | "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], 253 | 254 | "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], 255 | 256 | "array-ify": ["array-ify@1.0.0", "", {}, "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng=="], 257 | 258 | "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], 259 | 260 | "ast-types": ["ast-types@0.13.4", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w=="], 261 | 262 | "async-retry": ["async-retry@1.3.3", "", { "dependencies": { "retry": "0.13.1" } }, "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw=="], 263 | 264 | "basic-ftp": ["basic-ftp@5.0.5", "", {}, "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg=="], 265 | 266 | "before-after-hook": ["before-after-hook@3.0.2", "", {}, "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A=="], 267 | 268 | "bluebird": ["bluebird@3.7.2", "", {}, "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="], 269 | 270 | "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], 271 | 272 | "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], 273 | 274 | "c12": ["c12@3.0.3", "", { "dependencies": { "chokidar": "^4.0.3", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^16.4.7", "exsolve": "^1.0.4", "giget": "^2.0.0", "jiti": "^2.4.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^1.0.0", "pkg-types": "^2.1.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-uC3MacKBb0Z15o5QWCHvHWj5Zv34pGQj9P+iXKSpTuSGFS0KKhUWf4t9AJ+gWjYOdmWCPEGpEzm8sS0iqbpo1w=="], 275 | 276 | "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], 277 | 278 | "chai": ["chai@5.2.0", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw=="], 279 | 280 | "chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], 281 | 282 | "chardet": ["chardet@0.7.0", "", {}, "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="], 283 | 284 | "check-error": ["check-error@2.1.1", "", {}, "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw=="], 285 | 286 | "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], 287 | 288 | "ci-info": ["ci-info@4.2.0", "", {}, "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg=="], 289 | 290 | "citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], 291 | 292 | "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], 293 | 294 | "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], 295 | 296 | "cli-width": ["cli-width@4.1.0", "", {}, "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ=="], 297 | 298 | "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], 299 | 300 | "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], 301 | 302 | "commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], 303 | 304 | "compare-func": ["compare-func@2.0.0", "", { "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" } }, "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA=="], 305 | 306 | "concat-stream": ["concat-stream@2.0.0", "", { "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.0.2", "typedarray": "^0.0.6" } }, "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A=="], 307 | 308 | "confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], 309 | 310 | "consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], 311 | 312 | "conventional-changelog": ["conventional-changelog@6.0.0", "", { "dependencies": { "conventional-changelog-angular": "^8.0.0", "conventional-changelog-atom": "^5.0.0", "conventional-changelog-codemirror": "^5.0.0", "conventional-changelog-conventionalcommits": "^8.0.0", "conventional-changelog-core": "^8.0.0", "conventional-changelog-ember": "^5.0.0", "conventional-changelog-eslint": "^6.0.0", "conventional-changelog-express": "^5.0.0", "conventional-changelog-jquery": "^6.0.0", "conventional-changelog-jshint": "^5.0.0", "conventional-changelog-preset-loader": "^5.0.0" } }, "sha512-tuUH8H/19VjtD9Ig7l6TQRh+Z0Yt0NZ6w/cCkkyzUbGQTnUEmKfGtkC9gGfVgCfOL1Rzno5NgNF4KY8vR+Jo3w=="], 313 | 314 | "conventional-changelog-angular": ["conventional-changelog-angular@8.0.0", "", { "dependencies": { "compare-func": "^2.0.0" } }, "sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA=="], 315 | 316 | "conventional-changelog-atom": ["conventional-changelog-atom@5.0.0", "", {}, "sha512-WfzCaAvSCFPkznnLgLnfacRAzjgqjLUjvf3MftfsJzQdDICqkOOpcMtdJF3wTerxSpv2IAAjX8doM3Vozqle3g=="], 317 | 318 | "conventional-changelog-codemirror": ["conventional-changelog-codemirror@5.0.0", "", {}, "sha512-8gsBDI5Y3vrKUCxN6Ue8xr6occZ5nsDEc4C7jO/EovFGozx8uttCAyfhRrvoUAWi2WMm3OmYs+0mPJU7kQdYWQ=="], 319 | 320 | "conventional-changelog-conventionalcommits": ["conventional-changelog-conventionalcommits@8.0.0", "", { "dependencies": { "compare-func": "^2.0.0" } }, "sha512-eOvlTO6OcySPyyyk8pKz2dP4jjElYunj9hn9/s0OB+gapTO8zwS9UQWrZ1pmF2hFs3vw1xhonOLGcGjy/zgsuA=="], 321 | 322 | "conventional-changelog-core": ["conventional-changelog-core@8.0.0", "", { "dependencies": { "@hutson/parse-repository-url": "^5.0.0", "add-stream": "^1.0.0", "conventional-changelog-writer": "^8.0.0", "conventional-commits-parser": "^6.0.0", "git-raw-commits": "^5.0.0", "git-semver-tags": "^8.0.0", "hosted-git-info": "^7.0.0", "normalize-package-data": "^6.0.0", "read-package-up": "^11.0.0", "read-pkg": "^9.0.0" } }, "sha512-EATUx5y9xewpEe10UEGNpbSHRC6cVZgO+hXQjofMqpy+gFIrcGvH3Fl6yk2VFKh7m+ffenup2N7SZJYpyD9evw=="], 323 | 324 | "conventional-changelog-ember": ["conventional-changelog-ember@5.0.0", "", {}, "sha512-RPflVfm5s4cSO33GH/Ey26oxhiC67akcxSKL8CLRT3kQX2W3dbE19sSOM56iFqUJYEwv9mD9r6k79weWe1urfg=="], 325 | 326 | "conventional-changelog-eslint": ["conventional-changelog-eslint@6.0.0", "", {}, "sha512-eiUyULWjzq+ybPjXwU6NNRflApDWlPEQEHvI8UAItYW/h22RKkMnOAtfCZxMmrcMO1OKUWtcf2MxKYMWe9zJuw=="], 327 | 328 | "conventional-changelog-express": ["conventional-changelog-express@5.0.0", "", {}, "sha512-D8Q6WctPkQpvr2HNCCmwU5GkX22BVHM0r4EW8vN0230TSyS/d6VQJDAxGb84lbg0dFjpO22MwmsikKL++Oo/oQ=="], 329 | 330 | "conventional-changelog-jquery": ["conventional-changelog-jquery@6.0.0", "", {}, "sha512-2kxmVakyehgyrho2ZHBi90v4AHswkGzHuTaoH40bmeNqUt20yEkDOSpw8HlPBfvEQBwGtbE+5HpRwzj6ac2UfA=="], 331 | 332 | "conventional-changelog-jshint": ["conventional-changelog-jshint@5.0.0", "", { "dependencies": { "compare-func": "^2.0.0" } }, "sha512-gGNphSb/opc76n2eWaO6ma4/Wqu3tpa2w7i9WYqI6Cs2fncDSI2/ihOfMvXveeTTeld0oFvwMVNV+IYQIk3F3g=="], 333 | 334 | "conventional-changelog-preset-loader": ["conventional-changelog-preset-loader@5.0.0", "", {}, "sha512-SetDSntXLk8Jh1NOAl1Gu5uLiCNSYenB5tm0YVeZKePRIgDW9lQImromTwLa3c/Gae298tsgOM+/CYT9XAl0NA=="], 335 | 336 | "conventional-changelog-writer": ["conventional-changelog-writer@8.0.1", "", { "dependencies": { "conventional-commits-filter": "^5.0.0", "handlebars": "^4.7.7", "meow": "^13.0.0", "semver": "^7.5.2" }, "bin": { "conventional-changelog-writer": "dist/cli/index.js" } }, "sha512-hlqcy3xHred2gyYg/zXSMXraY2mjAYYo0msUCpK+BGyaVJMFCKWVXPIHiaacGO2GGp13kvHWXFhYmxT4QQqW3Q=="], 337 | 338 | "conventional-commits-filter": ["conventional-commits-filter@5.0.0", "", {}, "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q=="], 339 | 340 | "conventional-commits-parser": ["conventional-commits-parser@6.1.0", "", { "dependencies": { "meow": "^13.0.0" }, "bin": { "conventional-commits-parser": "dist/cli/index.js" } }, "sha512-5nxDo7TwKB5InYBl4ZC//1g9GRwB/F3TXOGR9hgUjMGfvSP4Vu5NkpNro2+1+TIEy1vwxApl5ircECr2ri5JIw=="], 341 | 342 | "conventional-recommended-bump": ["conventional-recommended-bump@10.0.0", "", { "dependencies": { "@conventional-changelog/git-client": "^1.0.0", "conventional-changelog-preset-loader": "^5.0.0", "conventional-commits-filter": "^5.0.0", "conventional-commits-parser": "^6.0.0", "meow": "^13.0.0" }, "bin": { "conventional-recommended-bump": "dist/cli/index.js" } }, "sha512-RK/fUnc2btot0oEVtrj3p2doImDSs7iiz/bftFCDzels0Qs1mxLghp+DFHMaOC0qiCI6sWzlTDyBFSYuot6pRA=="], 343 | 344 | "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], 345 | 346 | "data-uri-to-buffer": ["data-uri-to-buffer@6.0.2", "", {}, "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw=="], 347 | 348 | "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], 349 | 350 | "decimal.js": ["decimal.js@10.5.0", "", {}, "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw=="], 351 | 352 | "deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], 353 | 354 | "default-browser": ["default-browser@5.2.1", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg=="], 355 | 356 | "default-browser-id": ["default-browser-id@5.0.0", "", {}, "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA=="], 357 | 358 | "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], 359 | 360 | "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], 361 | 362 | "degenerator": ["degenerator@5.0.1", "", { "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", "esprima": "^4.0.1" } }, "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ=="], 363 | 364 | "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], 365 | 366 | "dot-prop": ["dot-prop@5.3.0", "", { "dependencies": { "is-obj": "^2.0.0" } }, "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q=="], 367 | 368 | "dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], 369 | 370 | "emoji-regex": ["emoji-regex@10.4.0", "", {}, "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw=="], 371 | 372 | "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], 373 | 374 | "esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], 375 | 376 | "esbuild-register": ["esbuild-register@3.6.0", "", { "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { "esbuild": ">=0.12 <1" } }, "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg=="], 377 | 378 | "escodegen": ["escodegen@2.1.0", "", { "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2" }, "optionalDependencies": { "source-map": "~0.6.1" }, "bin": { "esgenerate": "bin/esgenerate.js", "escodegen": "bin/escodegen.js" } }, "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w=="], 379 | 380 | "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], 381 | 382 | "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], 383 | 384 | "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], 385 | 386 | "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], 387 | 388 | "eta": ["eta@3.5.0", "", {}, "sha512-e3x3FBvGzeCIHhF+zhK8FZA2vC5uFn6b4HJjegUbIWrDb4mJ7JjTGMJY9VGIbRVpmSwHopNiaJibhjIr+HfLug=="], 389 | 390 | "execa": ["execa@8.0.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^3.0.0" } }, "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg=="], 391 | 392 | "expect-type": ["expect-type@1.2.1", "", {}, "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw=="], 393 | 394 | "exsolve": ["exsolve@1.0.5", "", {}, "sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg=="], 395 | 396 | "external-editor": ["external-editor@3.1.0", "", { "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" } }, "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew=="], 397 | 398 | "fast-content-type-parse": ["fast-content-type-parse@2.0.1", "", {}, "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q=="], 399 | 400 | "fdir": ["fdir@6.4.4", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg=="], 401 | 402 | "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], 403 | 404 | "find-up-simple": ["find-up-simple@1.0.1", "", {}, "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ=="], 405 | 406 | "fs-extra": ["fs-extra@11.3.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew=="], 407 | 408 | "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], 409 | 410 | "generate-changelog": ["generate-changelog@1.8.0", "", { "dependencies": { "bluebird": "^3.0.6", "commander": "^2.9.0", "github-url-from-git": "^1.4.0" }, "bin": { "generate-changelog": "./bin/generate", "changelog": "./bin/generate" } }, "sha512-msgpxeB75Ziyg3wGsZuPNl7c5RxChMKmYcAX5obnhUow90dBZW3nLic6nxGtst7Bpx453oS6zAIHcX7F3QVasw=="], 411 | 412 | "get-east-asian-width": ["get-east-asian-width@1.3.0", "", {}, "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ=="], 413 | 414 | "get-stream": ["get-stream@8.0.1", "", {}, "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="], 415 | 416 | "get-uri": ["get-uri@6.0.4", "", { "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", "debug": "^4.3.4" } }, "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ=="], 417 | 418 | "giget": ["giget@2.0.0", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.6.0", "pathe": "^2.0.3" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA=="], 419 | 420 | "git-raw-commits": ["git-raw-commits@5.0.0", "", { "dependencies": { "@conventional-changelog/git-client": "^1.0.0", "meow": "^13.0.0" }, "bin": { "git-raw-commits": "src/cli.js" } }, "sha512-I2ZXrXeOc0KrCvC7swqtIFXFN+rbjnC7b2T943tvemIOVNl+XP8YnA9UVwqFhzzLClnSA60KR/qEjLpXzs73Qg=="], 421 | 422 | "git-semver-tags": ["git-semver-tags@8.0.0", "", { "dependencies": { "@conventional-changelog/git-client": "^1.0.0", "meow": "^13.0.0" }, "bin": { "git-semver-tags": "src/cli.js" } }, "sha512-N7YRIklvPH3wYWAR2vysaqGLPRcpwQ0GKdlqTiVN5w1UmCdaeY3K8s6DMKRCh54DDdzyt/OAB6C8jgVtb7Y2Fg=="], 423 | 424 | "git-up": ["git-up@8.1.1", "", { "dependencies": { "is-ssh": "^1.4.0", "parse-url": "^9.2.0" } }, "sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g=="], 425 | 426 | "git-url-parse": ["git-url-parse@16.1.0", "", { "dependencies": { "git-up": "^8.1.0" } }, "sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw=="], 427 | 428 | "github-url-from-git": ["github-url-from-git@1.5.0", "", {}, "sha512-WWOec4aRI7YAykQ9+BHmzjyNlkfJFG8QLXnDTsLz/kZefq7qkzdfo4p6fkYYMIq1aj+gZcQs/1HQhQh3DPPxlQ=="], 429 | 430 | "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], 431 | 432 | "handlebars": ["handlebars@4.7.8", "", { "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "optionalDependencies": { "uglify-js": "^3.1.4" }, "bin": { "handlebars": "bin/handlebars" } }, "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ=="], 433 | 434 | "hosted-git-info": ["hosted-git-info@7.0.2", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w=="], 435 | 436 | "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], 437 | 438 | "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], 439 | 440 | "human-signals": ["human-signals@5.0.0", "", {}, "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="], 441 | 442 | "iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], 443 | 444 | "ignore": ["ignore@7.0.4", "", {}, "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A=="], 445 | 446 | "index-to-position": ["index-to-position@1.1.0", "", {}, "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg=="], 447 | 448 | "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], 449 | 450 | "inquirer": ["inquirer@12.6.0", "", { "dependencies": { "@inquirer/core": "^10.1.10", "@inquirer/prompts": "^7.5.0", "@inquirer/type": "^3.0.6", "ansi-escapes": "^4.3.2", "mute-stream": "^2.0.0", "run-async": "^3.0.0", "rxjs": "^7.8.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-3zmmccQd/8o65nPOZJZ+2wqt76Ghw3+LaMrmc6JE/IzcvQhJ1st+QLCOo/iLS85/tILU0myG31a2TAZX0ysAvg=="], 451 | 452 | "ip-address": ["ip-address@9.0.5", "", { "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" } }, "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g=="], 453 | 454 | "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], 455 | 456 | "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], 457 | 458 | "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], 459 | 460 | "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="], 461 | 462 | "is-obj": ["is-obj@2.0.0", "", {}, "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="], 463 | 464 | "is-ssh": ["is-ssh@1.4.1", "", { "dependencies": { "protocols": "^2.0.1" } }, "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg=="], 465 | 466 | "is-stream": ["is-stream@3.0.0", "", {}, "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="], 467 | 468 | "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], 469 | 470 | "is-wsl": ["is-wsl@3.1.0", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw=="], 471 | 472 | "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], 473 | 474 | "issue-parser": ["issue-parser@7.0.1", "", { "dependencies": { "lodash.capitalize": "^4.2.1", "lodash.escaperegexp": "^4.1.2", "lodash.isplainobject": "^4.0.6", "lodash.isstring": "^4.0.1", "lodash.uniqby": "^4.7.0" } }, "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg=="], 475 | 476 | "jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="], 477 | 478 | "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], 479 | 480 | "jsbn": ["jsbn@1.1.0", "", {}, "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="], 481 | 482 | "jsonfile": ["jsonfile@6.1.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ=="], 483 | 484 | "kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], 485 | 486 | "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], 487 | 488 | "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], 489 | 490 | "lodash.capitalize": ["lodash.capitalize@4.2.1", "", {}, "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw=="], 491 | 492 | "lodash.escaperegexp": ["lodash.escaperegexp@4.1.2", "", {}, "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw=="], 493 | 494 | "lodash.get": ["lodash.get@4.4.2", "", {}, "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ=="], 495 | 496 | "lodash.isplainobject": ["lodash.isplainobject@4.0.6", "", {}, "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="], 497 | 498 | "lodash.isstring": ["lodash.isstring@4.0.1", "", {}, "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="], 499 | 500 | "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], 501 | 502 | "lodash.uniqby": ["lodash.uniqby@4.7.0", "", {}, "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww=="], 503 | 504 | "log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="], 505 | 506 | "loupe": ["loupe@3.1.3", "", {}, "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug=="], 507 | 508 | "lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="], 509 | 510 | "macos-release": ["macos-release@3.3.0", "", {}, "sha512-tPJQ1HeyiU2vRruNGhZ+VleWuMQRro8iFtJxYgnS4NQe+EukKF6aGiIT+7flZhISAt2iaXBCfFGvAyif7/f8nQ=="], 511 | 512 | "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="], 513 | 514 | "meow": ["meow@13.2.0", "", {}, "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA=="], 515 | 516 | "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], 517 | 518 | "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], 519 | 520 | "mime-types": ["mime-types@3.0.1", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA=="], 521 | 522 | "mimic-fn": ["mimic-fn@4.0.0", "", {}, "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="], 523 | 524 | "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], 525 | 526 | "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], 527 | 528 | "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], 529 | 530 | "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], 531 | 532 | "mute-stream": ["mute-stream@2.0.0", "", {}, "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA=="], 533 | 534 | "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], 535 | 536 | "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], 537 | 538 | "netmask": ["netmask@2.0.2", "", {}, "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="], 539 | 540 | "new-github-release-url": ["new-github-release-url@2.0.0", "", { "dependencies": { "type-fest": "^2.5.1" } }, "sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ=="], 541 | 542 | "node-fetch-native": ["node-fetch-native@1.6.6", "", {}, "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ=="], 543 | 544 | "normalize-package-data": ["normalize-package-data@6.0.2", "", { "dependencies": { "hosted-git-info": "^7.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" } }, "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g=="], 545 | 546 | "npm-run-path": ["npm-run-path@5.3.0", "", { "dependencies": { "path-key": "^4.0.0" } }, "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ=="], 547 | 548 | "nypm": ["nypm@0.6.0", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "pathe": "^2.0.3", "pkg-types": "^2.0.0", "tinyexec": "^0.3.2" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg=="], 549 | 550 | "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], 551 | 552 | "onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], 553 | 554 | "open": ["open@10.1.2", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "is-wsl": "^3.1.0" } }, "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw=="], 555 | 556 | "ora": ["ora@8.2.0", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", "stdin-discarder": "^0.2.2", "string-width": "^7.2.0", "strip-ansi": "^7.1.0" } }, "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw=="], 557 | 558 | "os-name": ["os-name@6.0.0", "", { "dependencies": { "macos-release": "^3.2.0", "windows-release": "^6.0.0" } }, "sha512-bv608E0UX86atYi2GMGjDe0vF/X1TJjemNS8oEW6z22YW1Rc3QykSYoGfkQbX0zZX9H0ZB6CQP/3GTf1I5hURg=="], 559 | 560 | "os-tmpdir": ["os-tmpdir@1.0.2", "", {}, "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g=="], 561 | 562 | "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], 563 | 564 | "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], 565 | 566 | "pac-proxy-agent": ["pac-proxy-agent@7.2.0", "", { "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", "socks-proxy-agent": "^8.0.5" } }, "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA=="], 567 | 568 | "pac-resolver": ["pac-resolver@7.0.1", "", { "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" } }, "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg=="], 569 | 570 | "parse-json": ["parse-json@8.3.0", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "index-to-position": "^1.1.0", "type-fest": "^4.39.1" } }, "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ=="], 571 | 572 | "parse-path": ["parse-path@7.1.0", "", { "dependencies": { "protocols": "^2.0.0" } }, "sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw=="], 573 | 574 | "parse-url": ["parse-url@9.2.0", "", { "dependencies": { "@types/parse-path": "^7.0.0", "parse-path": "^7.0.0" } }, "sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ=="], 575 | 576 | "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], 577 | 578 | "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], 579 | 580 | "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], 581 | 582 | "pathval": ["pathval@2.0.0", "", {}, "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA=="], 583 | 584 | "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], 585 | 586 | "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], 587 | 588 | "picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], 589 | 590 | "pkg-types": ["pkg-types@2.1.0", "", { "dependencies": { "confbox": "^0.2.1", "exsolve": "^1.0.1", "pathe": "^2.0.3" } }, "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A=="], 591 | 592 | "postcss": ["postcss@8.5.3", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A=="], 593 | 594 | "prettier": ["prettier@3.5.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw=="], 595 | 596 | "pretty-quick": ["pretty-quick@4.1.1", "", { "dependencies": { "find-up": "^5.0.0", "ignore": "^7.0.3", "mri": "^1.2.0", "picocolors": "^1.1.1", "picomatch": "^4.0.2", "tinyexec": "^0.3.2", "tslib": "^2.8.1" }, "peerDependencies": { "prettier": "^3.0.0" }, "bin": { "pretty-quick": "lib/cli.mjs" } }, "sha512-9Ud0l/CspNTmyIdYac9X7Inb3o8fuUsw+1zJFvCGn+at0t1UwUcUdo2RSZ41gcmfLv1fxgWQxWEfItR7CBwugg=="], 597 | 598 | "prisma": ["prisma@6.7.0", "", { "dependencies": { "@prisma/config": "6.7.0", "@prisma/engines": "6.7.0" }, "optionalDependencies": { "fsevents": "2.3.3" }, "peerDependencies": { "typescript": ">=5.1.0" }, "optionalPeers": ["typescript"], "bin": { "prisma": "build/index.js" } }, "sha512-vArg+4UqnQ13CVhc2WUosemwh6hr6cr6FY2uzDvCIFwH8pu8BXVv38PktoMLVjtX7sbYThxbnZF5YiR8sN2clw=="], 599 | 600 | "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], 601 | 602 | "protocols": ["protocols@2.0.2", "", {}, "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ=="], 603 | 604 | "proxy-agent": ["proxy-agent@6.5.0", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", "socks-proxy-agent": "^8.0.5" } }, "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A=="], 605 | 606 | "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], 607 | 608 | "rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="], 609 | 610 | "read-package-up": ["read-package-up@11.0.0", "", { "dependencies": { "find-up-simple": "^1.0.0", "read-pkg": "^9.0.0", "type-fest": "^4.6.0" } }, "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ=="], 611 | 612 | "read-pkg": ["read-pkg@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" } }, "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA=="], 613 | 614 | "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], 615 | 616 | "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], 617 | 618 | "release-it": ["release-it@19.0.2", "", { "dependencies": { "@nodeutils/defaults-deep": "1.1.0", "@octokit/rest": "21.1.1", "@phun-ky/typeof": "1.2.8", "async-retry": "1.3.3", "c12": "3.0.3", "ci-info": "^4.2.0", "eta": "3.5.0", "git-url-parse": "16.1.0", "inquirer": "12.6.0", "issue-parser": "7.0.1", "lodash.get": "4.4.2", "lodash.merge": "4.6.2", "mime-types": "3.0.1", "new-github-release-url": "2.0.0", "open": "10.1.2", "ora": "8.2.0", "os-name": "6.0.0", "proxy-agent": "6.5.0", "semver": "7.7.1", "tinyexec": "1.0.1", "tinyglobby": "0.2.13", "undici": "6.21.2", "url-join": "5.0.0", "wildcard-match": "5.1.4", "yargs-parser": "21.1.1" }, "bin": { "release-it": "bin/release-it.js" } }, "sha512-tGRCcKeXNOMrK9Qe+ZIgQiMlQgjV8PLxZjTq1XGlCk5u1qPgx+Pps0i8HIt667FDt0wLjFtvn5o9ItpitKnVUA=="], 619 | 620 | "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], 621 | 622 | "retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="], 623 | 624 | "rollup": ["rollup@4.40.2", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.40.2", "@rollup/rollup-android-arm64": "4.40.2", "@rollup/rollup-darwin-arm64": "4.40.2", "@rollup/rollup-darwin-x64": "4.40.2", "@rollup/rollup-freebsd-arm64": "4.40.2", "@rollup/rollup-freebsd-x64": "4.40.2", "@rollup/rollup-linux-arm-gnueabihf": "4.40.2", "@rollup/rollup-linux-arm-musleabihf": "4.40.2", "@rollup/rollup-linux-arm64-gnu": "4.40.2", "@rollup/rollup-linux-arm64-musl": "4.40.2", "@rollup/rollup-linux-loongarch64-gnu": "4.40.2", "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2", "@rollup/rollup-linux-riscv64-gnu": "4.40.2", "@rollup/rollup-linux-riscv64-musl": "4.40.2", "@rollup/rollup-linux-s390x-gnu": "4.40.2", "@rollup/rollup-linux-x64-gnu": "4.40.2", "@rollup/rollup-linux-x64-musl": "4.40.2", "@rollup/rollup-win32-arm64-msvc": "4.40.2", "@rollup/rollup-win32-ia32-msvc": "4.40.2", "@rollup/rollup-win32-x64-msvc": "4.40.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg=="], 625 | 626 | "run-applescript": ["run-applescript@7.0.0", "", {}, "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A=="], 627 | 628 | "run-async": ["run-async@3.0.0", "", {}, "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q=="], 629 | 630 | "rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="], 631 | 632 | "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], 633 | 634 | "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], 635 | 636 | "semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], 637 | 638 | "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], 639 | 640 | "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], 641 | 642 | "siginfo": ["siginfo@2.0.0", "", {}, "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g=="], 643 | 644 | "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], 645 | 646 | "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], 647 | 648 | "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], 649 | 650 | "socks": ["socks@2.8.4", "", { "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" } }, "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ=="], 651 | 652 | "socks-proxy-agent": ["socks-proxy-agent@8.0.5", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" } }, "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw=="], 653 | 654 | "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], 655 | 656 | "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], 657 | 658 | "spdx-correct": ["spdx-correct@3.2.0", "", { "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA=="], 659 | 660 | "spdx-exceptions": ["spdx-exceptions@2.5.0", "", {}, "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w=="], 661 | 662 | "spdx-expression-parse": ["spdx-expression-parse@3.0.1", "", { "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q=="], 663 | 664 | "spdx-license-ids": ["spdx-license-ids@3.0.21", "", {}, "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg=="], 665 | 666 | "sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], 667 | 668 | "stackback": ["stackback@0.0.2", "", {}, "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw=="], 669 | 670 | "std-env": ["std-env@3.9.0", "", {}, "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw=="], 671 | 672 | "stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="], 673 | 674 | "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], 675 | 676 | "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], 677 | 678 | "strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], 679 | 680 | "strip-final-newline": ["strip-final-newline@3.0.0", "", {}, "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="], 681 | 682 | "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], 683 | 684 | "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], 685 | 686 | "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], 687 | 688 | "tinyglobby": ["tinyglobby@0.2.13", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw=="], 689 | 690 | "tinypool": ["tinypool@1.0.2", "", {}, "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA=="], 691 | 692 | "tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], 693 | 694 | "tinyspy": ["tinyspy@3.0.2", "", {}, "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q=="], 695 | 696 | "tmp": ["tmp@0.0.33", "", { "dependencies": { "os-tmpdir": "~1.0.2" } }, "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw=="], 697 | 698 | "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], 699 | 700 | "type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], 701 | 702 | "typedarray": ["typedarray@0.0.6", "", {}, "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="], 703 | 704 | "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], 705 | 706 | "uglify-js": ["uglify-js@3.19.3", "", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="], 707 | 708 | "undici": ["undici@6.21.2", "", {}, "sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g=="], 709 | 710 | "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], 711 | 712 | "unicorn-magic": ["unicorn-magic@0.1.0", "", {}, "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ=="], 713 | 714 | "universal-user-agent": ["universal-user-agent@7.0.2", "", {}, "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q=="], 715 | 716 | "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], 717 | 718 | "url-join": ["url-join@5.0.0", "", {}, "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA=="], 719 | 720 | "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], 721 | 722 | "validate-npm-package-license": ["validate-npm-package-license@3.0.4", "", { "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew=="], 723 | 724 | "vite": ["vite@6.3.5", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ=="], 725 | 726 | "vite-node": ["vite-node@3.1.3", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.4.0", "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", "vite": "^5.0.0 || ^6.0.0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-uHV4plJ2IxCl4u1up1FQRrqclylKAogbtBfOTwcuJ28xFi+89PZ57BRh+naIRvH70HPwxy5QHYzg1OrEaC7AbA=="], 727 | 728 | "vitest": ["vitest@3.1.3", "", { "dependencies": { "@vitest/expect": "3.1.3", "@vitest/mocker": "3.1.3", "@vitest/pretty-format": "^3.1.3", "@vitest/runner": "3.1.3", "@vitest/snapshot": "3.1.3", "@vitest/spy": "3.1.3", "@vitest/utils": "3.1.3", "chai": "^5.2.0", "debug": "^4.4.0", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.13", "tinypool": "^1.0.2", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0", "vite-node": "3.1.3", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.1.3", "@vitest/ui": "3.1.3", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-188iM4hAHQ0km23TN/adso1q5hhwKqUpv+Sd6p5sOuh6FhQnRNW3IsiIpvxqahtBabsJ2SLZgmGSpcYK4wQYJw=="], 729 | 730 | "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], 731 | 732 | "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="], 733 | 734 | "wildcard-match": ["wildcard-match@5.1.4", "", {}, "sha512-wldeCaczs8XXq7hj+5d/F38JE2r7EXgb6WQDM84RVwxy81T/sxB5e9+uZLK9Q9oNz1mlvjut+QtvgaOQFPVq/g=="], 735 | 736 | "windows-release": ["windows-release@6.0.1", "", { "dependencies": { "execa": "^8.0.1" } }, "sha512-MS3BzG8QK33dAyqwxfYJCJ03arkwKaddUOvvnnlFdXLudflsQF6I8yAxrLBeQk4yO8wjdH/+ax0YzxJEDrOftg=="], 737 | 738 | "wordwrap": ["wordwrap@1.0.0", "", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="], 739 | 740 | "wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], 741 | 742 | "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], 743 | 744 | "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], 745 | 746 | "yoctocolors-cjs": ["yoctocolors-cjs@2.1.2", "", {}, "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA=="], 747 | 748 | "@octokit/plugin-paginate-rest/@octokit/types": ["@octokit/types@13.10.0", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="], 749 | 750 | "@octokit/plugin-rest-endpoint-methods/@octokit/types": ["@octokit/types@13.10.0", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="], 751 | 752 | "ansi-escapes/type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], 753 | 754 | "execa/onetime": ["onetime@6.0.0", "", { "dependencies": { "mimic-fn": "^4.0.0" } }, "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ=="], 755 | 756 | "hosted-git-info/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], 757 | 758 | "log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], 759 | 760 | "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], 761 | 762 | "parse-json/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], 763 | 764 | "read-package-up/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], 765 | 766 | "read-pkg/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], 767 | 768 | "release-it/tinyexec": ["tinyexec@1.0.1", "", {}, "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw=="], 769 | 770 | "wrap-ansi/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], 771 | 772 | "wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 773 | 774 | "@octokit/plugin-paginate-rest/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@24.2.0", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="], 775 | 776 | "@octokit/plugin-rest-endpoint-methods/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@24.2.0", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="], 777 | 778 | "wrap-ansi/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], 779 | 780 | "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], 781 | } 782 | } 783 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ['@commitlint/config-conventional'], 3 | plugins: { 4 | '@release-it/conventional-changelog': { 5 | gitRawCommitsOpts: { 6 | merges: null, 7 | }, 8 | parserOpts: { 9 | mergePattern: '^Merge pull request #(\\d+) from (.*)$', 10 | }, 11 | }, 12 | }, 13 | }; 14 | -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | .prisma -------------------------------------------------------------------------------- /example/index.ts: -------------------------------------------------------------------------------- 1 | import { fakeProfileComplete } from './prisma/fake-data'; 2 | import { fakeUser } from './prisma/fake-data'; 3 | 4 | console.log(fakeUser()); 5 | console.log(fakeProfileComplete()); 6 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "usage", 3 | "private": true, 4 | "version": "1.0.0", 5 | "main": "src/app.js", 6 | "license": "MIT", 7 | "scripts": { 8 | "start": "ts-node index.ts" 9 | }, 10 | "dependencies": { 11 | "@prisma/client": "^6.7.0", 12 | "ts-node": "^10.9.2", 13 | "prisma-generator-fake-data": "file:../" 14 | }, 15 | "devDependencies": { 16 | "@types/node": "22.15.13", 17 | "prisma": "^6.7.0", 18 | "typescript": "5.8.3" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /example/prisma/fakeData.utils.ts: -------------------------------------------------------------------------------- 1 | import { faker } from '@faker-js/faker'; 2 | export function fakeSettings() { 3 | return { 4 | notificationsEnabled: faker.datatype.boolean(), 5 | preferredColor: faker.color.rgb(), 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /example/prisma/schema.prisma: -------------------------------------------------------------------------------- 1 | generator client { 2 | ///provider = "prisma-client-js" to use the old client 3 | provider = "prisma-client" 4 | output = "../.prisma" 5 | } 6 | 7 | generator custom_generator { 8 | ///in your project, you'll use it like this 9 | ///provider = "prisma-generator-fake-data" 10 | provider = "ts-node ../src/bin.ts" 11 | extraImport = "import {fakeSettings} from './fakeData.utils'" 12 | extraExport = "export * from './fakeData.utils'" 13 | } 14 | 15 | datasource db { 16 | provider = "postgresql" 17 | url = env("DATABASE_URL") 18 | } 19 | 20 | model User { 21 | id String @id @default(cuid()) 22 | email String @unique 23 | name String 24 | age Int 25 | ///FAKE:fakeSettings() 26 | settings Json 27 | maybeString String? 28 | status UserStatus 29 | status2 UserStatus @default(active) 30 | profile Profile? 31 | } 32 | 33 | enum UserStatus { 34 | active 35 | inactive 36 | } 37 | 38 | model Profile { 39 | id Int @id @default(autoincrement()) 40 | someConfiguration Boolean 41 | userId String @unique 42 | user User @relation(fields: [userId], references: [id]) 43 | settings ProfileSettings? 44 | } 45 | 46 | model ProfileSettings { 47 | id Int @id @default(autoincrement()) 48 | someConfiguration Boolean 49 | profileId Int @unique 50 | profile Profile @relation(fields: [profileId], references: [id]) 51 | } 52 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "prisma-generator-fake-data", 3 | "description": "The easiest way to generate mock data based on your Prisma models!", 4 | "version": "0.15.0", 5 | "main": "dist/generator.js", 6 | "license": "MIT", 7 | "bin": { 8 | "prisma-generator-fake-data": "dist/bin.js" 9 | }, 10 | "engines": { 11 | "node": ">= 16.0.0" 12 | }, 13 | "scripts": { 14 | "build": "npx tsc", 15 | "prepack": "bun run build", 16 | "test": "vitest run", 17 | "test:watch": "vitest", 18 | "typecheck": "tsc --noEmit", 19 | "release": "release-it" 20 | }, 21 | "dependencies": { 22 | "@faker-js/faker": "^9.7.0", 23 | "@prisma/generator-helper": "^6.7.0", 24 | "@prisma/internals": "^6.7.0", 25 | "decimal.js": "^10.5.0", 26 | "tiny-invariant": "^1.3.3" 27 | }, 28 | "devDependencies": { 29 | "@release-it/conventional-changelog": "^10.0.1", 30 | "@types/node": "^22.15.13", 31 | "@types/prettier": "^3.0.0", 32 | "generate-changelog": "^1.8.0", 33 | "prettier": "^3.5.3", 34 | "pretty-quick": "^4.1.1", 35 | "prisma": "^6.7.0", 36 | "release-it": "^19.0.2", 37 | "typescript": "^5.8.3", 38 | "vitest": "^3.1.3" 39 | }, 40 | "homepage": "https://github.com/luisrudge/prisma-generator-fake-data", 41 | "repository": { 42 | "type": "git", 43 | "url": "https://github.com/luisrudge/prisma-generator-fake-data.git" 44 | }, 45 | "author": "Luis Rudge ", 46 | "keywords": [ 47 | "prisma", 48 | "prisma2", 49 | "generator", 50 | "fake data", 51 | "faker-js" 52 | ], 53 | "files": [ 54 | "dist" 55 | ], 56 | "publishConfig": { 57 | "registry": "https://registry.npmjs.org/" 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/__tests__/__snapshots__/createMethods.test.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`createMethods with \`null\` as \`emptyValueAs\` 1`] = ` 4 | "import { Enum } from '@prisma/client'; 5 | import { faker } from '@faker-js/faker'; 6 | import Decimal from 'decimal.js'; 7 | 8 | 9 | 10 | export function fakeUser() { 11 | return { 12 | email: faker.internet.email(), 13 | name: faker.person.fullName(), 14 | companyName: faker.company.name(), 15 | age: faker.number.int({min: 0, max: 99}), 16 | firstName: faker.person.firstName(), 17 | lastName: faker.person.lastName(), 18 | string: faker.lorem.words(5), 19 | nullableString: null, 20 | boolean: faker.datatype.boolean(), 21 | nullableBoolean: null, 22 | int: faker.number.int(), 23 | nullableInt: null, 24 | bigInt: BigInt(faker.number.int()), 25 | nullableBigInt: null, 26 | float: faker.number.float(), 27 | nullableFloat: null, 28 | decimal: new Decimal(faker.number.float()), 29 | nullableDecimal: null, 30 | dateTime: faker.date.anytime(), 31 | nullableDateTime: null, 32 | stringArray: faker.lorem.words(5).split(' '), 33 | intArray: [faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 })], 34 | bigIntArray: [BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int())], 35 | floatArray: [faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float()], 36 | booleanArray: [faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean()], 37 | dateTimeArray: [faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime()], 38 | json: {test: faker.lorem.word()}, 39 | nullableJson: null, 40 | enum: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 41 | nullableEnum: null, 42 | enums: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 43 | }; 44 | } 45 | export function fakeUserComplete() { 46 | return { 47 | id: faker.string.uuid(), 48 | email: faker.internet.email(), 49 | name: faker.person.fullName(), 50 | companyName: faker.company.name(), 51 | age: faker.number.int({min: 0, max: 99}), 52 | firstName: faker.person.firstName(), 53 | lastName: faker.person.lastName(), 54 | string: faker.lorem.words(5), 55 | stringWithDefault: 'default', 56 | nullableString: null, 57 | boolean: faker.datatype.boolean(), 58 | booleanWithDefault: true, 59 | nullableBoolean: null, 60 | int: faker.number.int(), 61 | intWithDefault: 1, 62 | nullableInt: null, 63 | bigInt: BigInt(faker.number.int()), 64 | bigIntWithDefault: BigInt(1), 65 | nullableBigInt: null, 66 | float: faker.number.float(), 67 | floatWithDefault: 1.1, 68 | nullableFloat: null, 69 | decimal: new Decimal(faker.number.float()), 70 | decimalWithDefault: new Decimal(1.23), 71 | nullableDecimal: null, 72 | dateTime: faker.date.anytime(), 73 | dateTimeWithDefault: new Date(), 74 | nullableDateTime: null, 75 | stringArray: faker.lorem.words(5).split(' '), 76 | intArray: [faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 })], 77 | bigIntArray: [BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int())], 78 | floatArray: [faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float()], 79 | booleanArray: [faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean()], 80 | dateTimeArray: [faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime()], 81 | json: {test: faker.lorem.word()}, 82 | jsonWithDefault: {}, 83 | jsonWithDefaultAndFake: {test2: faker.lorem.word()}, 84 | nullableJson: null, 85 | enum: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 86 | enumWithDefault: Enum.A, 87 | nullableEnum: null, 88 | enums: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 89 | enumsWithDefault: [Enum.A, Enum.B], 90 | }; 91 | } 92 | export function fakeUser2Complete() { 93 | return { 94 | id: faker.number.int({ max: 2147483647 }), 95 | }; 96 | } 97 | export function fakeUserRelationComplete() { 98 | return { 99 | id: faker.string.uuid(), 100 | userId: faker.string.uuid(), 101 | userId2: faker.string.uuid(), 102 | }; 103 | } 104 | export function fakeUser2RelationComplete() { 105 | return { 106 | id: faker.string.uuid(), 107 | user2Id: faker.number.int(), 108 | }; 109 | } 110 | " 111 | `; 112 | 113 | exports[`createMethods with custom clientImportPath 1`] = ` 114 | "import { Enum } from './src/generated/client'; 115 | import { faker } from '@faker-js/faker'; 116 | import Decimal from 'decimal.js'; 117 | 118 | 119 | 120 | export function fakeUser() { 121 | return { 122 | email: faker.internet.email(), 123 | name: faker.person.fullName(), 124 | companyName: faker.company.name(), 125 | age: faker.number.int({min: 0, max: 99}), 126 | firstName: faker.person.firstName(), 127 | lastName: faker.person.lastName(), 128 | string: faker.lorem.words(5), 129 | nullableString: null, 130 | boolean: faker.datatype.boolean(), 131 | nullableBoolean: null, 132 | int: faker.number.int(), 133 | nullableInt: null, 134 | bigInt: BigInt(faker.number.int()), 135 | nullableBigInt: null, 136 | float: faker.number.float(), 137 | nullableFloat: null, 138 | decimal: new Decimal(faker.number.float()), 139 | nullableDecimal: null, 140 | dateTime: faker.date.anytime(), 141 | nullableDateTime: null, 142 | stringArray: faker.lorem.words(5).split(' '), 143 | intArray: [faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 })], 144 | bigIntArray: [BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int())], 145 | floatArray: [faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float()], 146 | booleanArray: [faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean()], 147 | dateTimeArray: [faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime()], 148 | json: {test: faker.lorem.word()}, 149 | nullableJson: null, 150 | enum: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 151 | nullableEnum: null, 152 | enums: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 153 | }; 154 | } 155 | export function fakeUserComplete() { 156 | return { 157 | id: faker.string.uuid(), 158 | email: faker.internet.email(), 159 | name: faker.person.fullName(), 160 | companyName: faker.company.name(), 161 | age: faker.number.int({min: 0, max: 99}), 162 | firstName: faker.person.firstName(), 163 | lastName: faker.person.lastName(), 164 | string: faker.lorem.words(5), 165 | stringWithDefault: 'default', 166 | nullableString: null, 167 | boolean: faker.datatype.boolean(), 168 | booleanWithDefault: true, 169 | nullableBoolean: null, 170 | int: faker.number.int(), 171 | intWithDefault: 1, 172 | nullableInt: null, 173 | bigInt: BigInt(faker.number.int()), 174 | bigIntWithDefault: BigInt(1), 175 | nullableBigInt: null, 176 | float: faker.number.float(), 177 | floatWithDefault: 1.1, 178 | nullableFloat: null, 179 | decimal: new Decimal(faker.number.float()), 180 | decimalWithDefault: new Decimal(1.23), 181 | nullableDecimal: null, 182 | dateTime: faker.date.anytime(), 183 | dateTimeWithDefault: new Date(), 184 | nullableDateTime: null, 185 | stringArray: faker.lorem.words(5).split(' '), 186 | intArray: [faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 })], 187 | bigIntArray: [BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int())], 188 | floatArray: [faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float()], 189 | booleanArray: [faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean()], 190 | dateTimeArray: [faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime()], 191 | json: {test: faker.lorem.word()}, 192 | jsonWithDefault: {}, 193 | jsonWithDefaultAndFake: {test2: faker.lorem.word()}, 194 | nullableJson: null, 195 | enum: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 196 | enumWithDefault: Enum.A, 197 | nullableEnum: null, 198 | enums: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 199 | enumsWithDefault: [Enum.A, Enum.B], 200 | }; 201 | } 202 | export function fakeUser2Complete() { 203 | return { 204 | id: faker.number.int({ max: 2147483647 }), 205 | }; 206 | } 207 | export function fakeUserRelationComplete() { 208 | return { 209 | id: faker.string.uuid(), 210 | userId: faker.string.uuid(), 211 | userId2: faker.string.uuid(), 212 | }; 213 | } 214 | export function fakeUser2RelationComplete() { 215 | return { 216 | id: faker.string.uuid(), 217 | user2Id: faker.number.int(), 218 | }; 219 | } 220 | " 221 | `; 222 | 223 | exports[`createMethods with default clientImportPath 1`] = ` 224 | "import { Enum } from '@prisma/client'; 225 | import { faker } from '@faker-js/faker'; 226 | import Decimal from 'decimal.js'; 227 | 228 | 229 | 230 | export function fakeUser() { 231 | return { 232 | email: faker.internet.email(), 233 | name: faker.person.fullName(), 234 | companyName: faker.company.name(), 235 | age: faker.number.int({min: 0, max: 99}), 236 | firstName: faker.person.firstName(), 237 | lastName: faker.person.lastName(), 238 | string: faker.lorem.words(5), 239 | nullableString: null, 240 | boolean: faker.datatype.boolean(), 241 | nullableBoolean: null, 242 | int: faker.number.int(), 243 | nullableInt: null, 244 | bigInt: BigInt(faker.number.int()), 245 | nullableBigInt: null, 246 | float: faker.number.float(), 247 | nullableFloat: null, 248 | decimal: new Decimal(faker.number.float()), 249 | nullableDecimal: null, 250 | dateTime: faker.date.anytime(), 251 | nullableDateTime: null, 252 | stringArray: faker.lorem.words(5).split(' '), 253 | intArray: [faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 })], 254 | bigIntArray: [BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int())], 255 | floatArray: [faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float()], 256 | booleanArray: [faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean()], 257 | dateTimeArray: [faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime()], 258 | json: {test: faker.lorem.word()}, 259 | nullableJson: null, 260 | enum: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 261 | nullableEnum: null, 262 | enums: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 263 | }; 264 | } 265 | export function fakeUserComplete() { 266 | return { 267 | id: faker.string.uuid(), 268 | email: faker.internet.email(), 269 | name: faker.person.fullName(), 270 | companyName: faker.company.name(), 271 | age: faker.number.int({min: 0, max: 99}), 272 | firstName: faker.person.firstName(), 273 | lastName: faker.person.lastName(), 274 | string: faker.lorem.words(5), 275 | stringWithDefault: 'default', 276 | nullableString: null, 277 | boolean: faker.datatype.boolean(), 278 | booleanWithDefault: true, 279 | nullableBoolean: null, 280 | int: faker.number.int(), 281 | intWithDefault: 1, 282 | nullableInt: null, 283 | bigInt: BigInt(faker.number.int()), 284 | bigIntWithDefault: BigInt(1), 285 | nullableBigInt: null, 286 | float: faker.number.float(), 287 | floatWithDefault: 1.1, 288 | nullableFloat: null, 289 | decimal: new Decimal(faker.number.float()), 290 | decimalWithDefault: new Decimal(1.23), 291 | nullableDecimal: null, 292 | dateTime: faker.date.anytime(), 293 | dateTimeWithDefault: new Date(), 294 | nullableDateTime: null, 295 | stringArray: faker.lorem.words(5).split(' '), 296 | intArray: [faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 })], 297 | bigIntArray: [BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int())], 298 | floatArray: [faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float()], 299 | booleanArray: [faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean()], 300 | dateTimeArray: [faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime()], 301 | json: {test: faker.lorem.word()}, 302 | jsonWithDefault: {}, 303 | jsonWithDefaultAndFake: {test2: faker.lorem.word()}, 304 | nullableJson: null, 305 | enum: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 306 | enumWithDefault: Enum.A, 307 | nullableEnum: null, 308 | enums: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 309 | enumsWithDefault: [Enum.A, Enum.B], 310 | }; 311 | } 312 | export function fakeUser2Complete() { 313 | return { 314 | id: faker.number.int({ max: 2147483647 }), 315 | }; 316 | } 317 | export function fakeUserRelationComplete() { 318 | return { 319 | id: faker.string.uuid(), 320 | userId: faker.string.uuid(), 321 | userId2: faker.string.uuid(), 322 | }; 323 | } 324 | export function fakeUser2RelationComplete() { 325 | return { 326 | id: faker.string.uuid(), 327 | user2Id: faker.number.int(), 328 | }; 329 | } 330 | " 331 | `; 332 | 333 | exports[`createMethods with extraExport 1`] = ` 334 | "import { Enum } from '@prisma/client'; 335 | import { faker } from '@faker-js/faker'; 336 | import Decimal from 'decimal.js'; 337 | 338 | export * from '../utils/fakeImports' 339 | 340 | export function fakeUser() { 341 | return { 342 | email: faker.internet.email(), 343 | name: faker.person.fullName(), 344 | companyName: faker.company.name(), 345 | age: faker.number.int({min: 0, max: 99}), 346 | firstName: faker.person.firstName(), 347 | lastName: faker.person.lastName(), 348 | string: faker.lorem.words(5), 349 | nullableString: undefined, 350 | boolean: faker.datatype.boolean(), 351 | nullableBoolean: undefined, 352 | int: faker.number.int(), 353 | nullableInt: undefined, 354 | bigInt: BigInt(faker.number.int()), 355 | nullableBigInt: undefined, 356 | float: faker.number.float(), 357 | nullableFloat: undefined, 358 | decimal: new Decimal(faker.number.float()), 359 | nullableDecimal: undefined, 360 | dateTime: faker.date.anytime(), 361 | nullableDateTime: undefined, 362 | stringArray: faker.lorem.words(5).split(' '), 363 | intArray: [faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 })], 364 | bigIntArray: [BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int())], 365 | floatArray: [faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float()], 366 | booleanArray: [faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean()], 367 | dateTimeArray: [faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime()], 368 | json: {test: faker.lorem.word()}, 369 | nullableJson: undefined, 370 | enum: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 371 | nullableEnum: undefined, 372 | enums: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 373 | }; 374 | } 375 | export function fakeUserComplete() { 376 | return { 377 | id: faker.string.uuid(), 378 | email: faker.internet.email(), 379 | name: faker.person.fullName(), 380 | companyName: faker.company.name(), 381 | age: faker.number.int({min: 0, max: 99}), 382 | firstName: faker.person.firstName(), 383 | lastName: faker.person.lastName(), 384 | string: faker.lorem.words(5), 385 | stringWithDefault: 'default', 386 | nullableString: undefined, 387 | boolean: faker.datatype.boolean(), 388 | booleanWithDefault: true, 389 | nullableBoolean: undefined, 390 | int: faker.number.int(), 391 | intWithDefault: 1, 392 | nullableInt: undefined, 393 | bigInt: BigInt(faker.number.int()), 394 | bigIntWithDefault: BigInt(1), 395 | nullableBigInt: undefined, 396 | float: faker.number.float(), 397 | floatWithDefault: 1.1, 398 | nullableFloat: undefined, 399 | decimal: new Decimal(faker.number.float()), 400 | decimalWithDefault: new Decimal(1.23), 401 | nullableDecimal: undefined, 402 | dateTime: faker.date.anytime(), 403 | dateTimeWithDefault: new Date(), 404 | nullableDateTime: undefined, 405 | stringArray: faker.lorem.words(5).split(' '), 406 | intArray: [faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 })], 407 | bigIntArray: [BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int())], 408 | floatArray: [faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float()], 409 | booleanArray: [faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean()], 410 | dateTimeArray: [faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime()], 411 | json: {test: faker.lorem.word()}, 412 | jsonWithDefault: {}, 413 | jsonWithDefaultAndFake: {test2: faker.lorem.word()}, 414 | nullableJson: undefined, 415 | enum: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 416 | enumWithDefault: Enum.A, 417 | nullableEnum: undefined, 418 | enums: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 419 | enumsWithDefault: [Enum.A, Enum.B], 420 | }; 421 | } 422 | export function fakeUser2Complete() { 423 | return { 424 | id: faker.number.int({ max: 2147483647 }), 425 | }; 426 | } 427 | export function fakeUserRelationComplete() { 428 | return { 429 | id: faker.string.uuid(), 430 | userId: faker.string.uuid(), 431 | userId2: faker.string.uuid(), 432 | }; 433 | } 434 | export function fakeUser2RelationComplete() { 435 | return { 436 | id: faker.string.uuid(), 437 | user2Id: faker.number.int(), 438 | }; 439 | } 440 | " 441 | `; 442 | 443 | exports[`createMethods with extraImport 1`] = ` 444 | "import { Enum } from '@prisma/client'; 445 | import { faker } from '@faker-js/faker'; 446 | import Decimal from 'decimal.js'; 447 | import {myCustomFunction} from '../utils/fakeImports' 448 | 449 | 450 | export function fakeUser() { 451 | return { 452 | email: faker.internet.email(), 453 | name: faker.person.fullName(), 454 | companyName: faker.company.name(), 455 | age: faker.number.int({min: 0, max: 99}), 456 | firstName: faker.person.firstName(), 457 | lastName: faker.person.lastName(), 458 | string: faker.lorem.words(5), 459 | nullableString: undefined, 460 | boolean: faker.datatype.boolean(), 461 | nullableBoolean: undefined, 462 | int: faker.number.int(), 463 | nullableInt: undefined, 464 | bigInt: BigInt(faker.number.int()), 465 | nullableBigInt: undefined, 466 | float: faker.number.float(), 467 | nullableFloat: undefined, 468 | decimal: new Decimal(faker.number.float()), 469 | nullableDecimal: undefined, 470 | dateTime: faker.date.anytime(), 471 | nullableDateTime: undefined, 472 | stringArray: faker.lorem.words(5).split(' '), 473 | intArray: [faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 })], 474 | bigIntArray: [BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int())], 475 | floatArray: [faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float()], 476 | booleanArray: [faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean()], 477 | dateTimeArray: [faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime()], 478 | json: {test: faker.lorem.word()}, 479 | nullableJson: undefined, 480 | enum: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 481 | nullableEnum: undefined, 482 | enums: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 483 | }; 484 | } 485 | export function fakeUserComplete() { 486 | return { 487 | id: faker.string.uuid(), 488 | email: faker.internet.email(), 489 | name: faker.person.fullName(), 490 | companyName: faker.company.name(), 491 | age: faker.number.int({min: 0, max: 99}), 492 | firstName: faker.person.firstName(), 493 | lastName: faker.person.lastName(), 494 | string: faker.lorem.words(5), 495 | stringWithDefault: 'default', 496 | nullableString: undefined, 497 | boolean: faker.datatype.boolean(), 498 | booleanWithDefault: true, 499 | nullableBoolean: undefined, 500 | int: faker.number.int(), 501 | intWithDefault: 1, 502 | nullableInt: undefined, 503 | bigInt: BigInt(faker.number.int()), 504 | bigIntWithDefault: BigInt(1), 505 | nullableBigInt: undefined, 506 | float: faker.number.float(), 507 | floatWithDefault: 1.1, 508 | nullableFloat: undefined, 509 | decimal: new Decimal(faker.number.float()), 510 | decimalWithDefault: new Decimal(1.23), 511 | nullableDecimal: undefined, 512 | dateTime: faker.date.anytime(), 513 | dateTimeWithDefault: new Date(), 514 | nullableDateTime: undefined, 515 | stringArray: faker.lorem.words(5).split(' '), 516 | intArray: [faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 })], 517 | bigIntArray: [BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int())], 518 | floatArray: [faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float()], 519 | booleanArray: [faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean()], 520 | dateTimeArray: [faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime()], 521 | json: {test: faker.lorem.word()}, 522 | jsonWithDefault: {}, 523 | jsonWithDefaultAndFake: {test2: faker.lorem.word()}, 524 | nullableJson: undefined, 525 | enum: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 526 | enumWithDefault: Enum.A, 527 | nullableEnum: undefined, 528 | enums: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 529 | enumsWithDefault: [Enum.A, Enum.B], 530 | }; 531 | } 532 | export function fakeUser2Complete() { 533 | return { 534 | id: faker.number.int({ max: 2147483647 }), 535 | }; 536 | } 537 | export function fakeUserRelationComplete() { 538 | return { 539 | id: faker.string.uuid(), 540 | userId: faker.string.uuid(), 541 | userId2: faker.string.uuid(), 542 | }; 543 | } 544 | export function fakeUser2RelationComplete() { 545 | return { 546 | id: faker.string.uuid(), 547 | user2Id: faker.number.int(), 548 | }; 549 | } 550 | " 551 | `; 552 | 553 | exports[`createMethods with extraImport and extraExport 1`] = ` 554 | "import { Enum } from '@prisma/client'; 555 | import { faker } from '@faker-js/faker'; 556 | import Decimal from 'decimal.js'; 557 | import {myCustomFunction} from '../utils/fakeImports' 558 | export * from '../utils/fakeImports' 559 | 560 | export function fakeUser() { 561 | return { 562 | email: faker.internet.email(), 563 | name: faker.person.fullName(), 564 | companyName: faker.company.name(), 565 | age: faker.number.int({min: 0, max: 99}), 566 | firstName: faker.person.firstName(), 567 | lastName: faker.person.lastName(), 568 | string: faker.lorem.words(5), 569 | nullableString: undefined, 570 | boolean: faker.datatype.boolean(), 571 | nullableBoolean: undefined, 572 | int: faker.number.int(), 573 | nullableInt: undefined, 574 | bigInt: BigInt(faker.number.int()), 575 | nullableBigInt: undefined, 576 | float: faker.number.float(), 577 | nullableFloat: undefined, 578 | decimal: new Decimal(faker.number.float()), 579 | nullableDecimal: undefined, 580 | dateTime: faker.date.anytime(), 581 | nullableDateTime: undefined, 582 | stringArray: faker.lorem.words(5).split(' '), 583 | intArray: [faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 })], 584 | bigIntArray: [BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int())], 585 | floatArray: [faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float()], 586 | booleanArray: [faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean()], 587 | dateTimeArray: [faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime()], 588 | json: {test: faker.lorem.word()}, 589 | nullableJson: undefined, 590 | enum: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 591 | nullableEnum: undefined, 592 | enums: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 593 | }; 594 | } 595 | export function fakeUserComplete() { 596 | return { 597 | id: faker.string.uuid(), 598 | email: faker.internet.email(), 599 | name: faker.person.fullName(), 600 | companyName: faker.company.name(), 601 | age: faker.number.int({min: 0, max: 99}), 602 | firstName: faker.person.firstName(), 603 | lastName: faker.person.lastName(), 604 | string: faker.lorem.words(5), 605 | stringWithDefault: 'default', 606 | nullableString: undefined, 607 | boolean: faker.datatype.boolean(), 608 | booleanWithDefault: true, 609 | nullableBoolean: undefined, 610 | int: faker.number.int(), 611 | intWithDefault: 1, 612 | nullableInt: undefined, 613 | bigInt: BigInt(faker.number.int()), 614 | bigIntWithDefault: BigInt(1), 615 | nullableBigInt: undefined, 616 | float: faker.number.float(), 617 | floatWithDefault: 1.1, 618 | nullableFloat: undefined, 619 | decimal: new Decimal(faker.number.float()), 620 | decimalWithDefault: new Decimal(1.23), 621 | nullableDecimal: undefined, 622 | dateTime: faker.date.anytime(), 623 | dateTimeWithDefault: new Date(), 624 | nullableDateTime: undefined, 625 | stringArray: faker.lorem.words(5).split(' '), 626 | intArray: [faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 })], 627 | bigIntArray: [BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int())], 628 | floatArray: [faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float()], 629 | booleanArray: [faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean()], 630 | dateTimeArray: [faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime()], 631 | json: {test: faker.lorem.word()}, 632 | jsonWithDefault: {}, 633 | jsonWithDefaultAndFake: {test2: faker.lorem.word()}, 634 | nullableJson: undefined, 635 | enum: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 636 | enumWithDefault: Enum.A, 637 | nullableEnum: undefined, 638 | enums: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 639 | enumsWithDefault: [Enum.A, Enum.B], 640 | }; 641 | } 642 | export function fakeUser2Complete() { 643 | return { 644 | id: faker.number.int({ max: 2147483647 }), 645 | }; 646 | } 647 | export function fakeUserRelationComplete() { 648 | return { 649 | id: faker.string.uuid(), 650 | userId: faker.string.uuid(), 651 | userId2: faker.string.uuid(), 652 | }; 653 | } 654 | export function fakeUser2RelationComplete() { 655 | return { 656 | id: faker.string.uuid(), 657 | user2Id: faker.number.int(), 658 | }; 659 | } 660 | " 661 | `; 662 | 663 | exports[`createMethods without extraImport 1`] = ` 664 | "import { Enum } from '@prisma/client'; 665 | import { faker } from '@faker-js/faker'; 666 | import Decimal from 'decimal.js'; 667 | 668 | 669 | 670 | export function fakeUser() { 671 | return { 672 | email: faker.internet.email(), 673 | name: faker.person.fullName(), 674 | companyName: faker.company.name(), 675 | age: faker.number.int({min: 0, max: 99}), 676 | firstName: faker.person.firstName(), 677 | lastName: faker.person.lastName(), 678 | string: faker.lorem.words(5), 679 | nullableString: undefined, 680 | boolean: faker.datatype.boolean(), 681 | nullableBoolean: undefined, 682 | int: faker.number.int(), 683 | nullableInt: undefined, 684 | bigInt: BigInt(faker.number.int()), 685 | nullableBigInt: undefined, 686 | float: faker.number.float(), 687 | nullableFloat: undefined, 688 | decimal: new Decimal(faker.number.float()), 689 | nullableDecimal: undefined, 690 | dateTime: faker.date.anytime(), 691 | nullableDateTime: undefined, 692 | stringArray: faker.lorem.words(5).split(' '), 693 | intArray: [faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 })], 694 | bigIntArray: [BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int())], 695 | floatArray: [faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float()], 696 | booleanArray: [faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean()], 697 | dateTimeArray: [faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime()], 698 | json: {test: faker.lorem.word()}, 699 | nullableJson: undefined, 700 | enum: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 701 | nullableEnum: undefined, 702 | enums: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 703 | }; 704 | } 705 | export function fakeUserComplete() { 706 | return { 707 | id: faker.string.uuid(), 708 | email: faker.internet.email(), 709 | name: faker.person.fullName(), 710 | companyName: faker.company.name(), 711 | age: faker.number.int({min: 0, max: 99}), 712 | firstName: faker.person.firstName(), 713 | lastName: faker.person.lastName(), 714 | string: faker.lorem.words(5), 715 | stringWithDefault: 'default', 716 | nullableString: undefined, 717 | boolean: faker.datatype.boolean(), 718 | booleanWithDefault: true, 719 | nullableBoolean: undefined, 720 | int: faker.number.int(), 721 | intWithDefault: 1, 722 | nullableInt: undefined, 723 | bigInt: BigInt(faker.number.int()), 724 | bigIntWithDefault: BigInt(1), 725 | nullableBigInt: undefined, 726 | float: faker.number.float(), 727 | floatWithDefault: 1.1, 728 | nullableFloat: undefined, 729 | decimal: new Decimal(faker.number.float()), 730 | decimalWithDefault: new Decimal(1.23), 731 | nullableDecimal: undefined, 732 | dateTime: faker.date.anytime(), 733 | dateTimeWithDefault: new Date(), 734 | nullableDateTime: undefined, 735 | stringArray: faker.lorem.words(5).split(' '), 736 | intArray: [faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 }),faker.number.int({ max: 2147483647 })], 737 | bigIntArray: [BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int())], 738 | floatArray: [faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float()], 739 | booleanArray: [faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean()], 740 | dateTimeArray: [faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime()], 741 | json: {test: faker.lorem.word()}, 742 | jsonWithDefault: {}, 743 | jsonWithDefaultAndFake: {test2: faker.lorem.word()}, 744 | nullableJson: undefined, 745 | enum: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 746 | enumWithDefault: Enum.A, 747 | nullableEnum: undefined, 748 | enums: faker.helpers.arrayElement([Enum.A, Enum.B, Enum.C] as const), 749 | enumsWithDefault: [Enum.A, Enum.B], 750 | }; 751 | } 752 | export function fakeUser2Complete() { 753 | return { 754 | id: faker.number.int({ max: 2147483647 }), 755 | }; 756 | } 757 | export function fakeUserRelationComplete() { 758 | return { 759 | id: faker.string.uuid(), 760 | userId: faker.string.uuid(), 761 | userId2: faker.string.uuid(), 762 | }; 763 | } 764 | export function fakeUser2RelationComplete() { 765 | return { 766 | id: faker.string.uuid(), 767 | user2Id: faker.number.int(), 768 | }; 769 | } 770 | " 771 | `; 772 | -------------------------------------------------------------------------------- /src/__tests__/createMethods.test.ts: -------------------------------------------------------------------------------- 1 | import { test, expect } from 'vitest'; 2 | import { createMethods } from '../helpers/createMethods'; 3 | import { getSampleDMMF } from './testUtils'; 4 | 5 | test('createMethods with extraImport', async () => { 6 | const sampleDMMF = await getSampleDMMF(); 7 | const extraImport = "import {myCustomFunction} from '../utils/fakeImports'"; 8 | expect( 9 | await createMethods(sampleDMMF.datamodel, extraImport, undefined), 10 | ).toMatchSnapshot(); 11 | }); 12 | 13 | test('createMethods with extraExport', async () => { 14 | const sampleDMMF = await getSampleDMMF(); 15 | const extraExport = "export * from '../utils/fakeImports'"; 16 | expect( 17 | await createMethods(sampleDMMF.datamodel, undefined, extraExport), 18 | ).toMatchSnapshot(); 19 | }); 20 | 21 | test('createMethods with extraImport and extraExport', async () => { 22 | const sampleDMMF = await getSampleDMMF(); 23 | const extraImport = "import {myCustomFunction} from '../utils/fakeImports'"; 24 | const extraExport = "export * from '../utils/fakeImports'"; 25 | expect( 26 | await createMethods(sampleDMMF.datamodel, extraImport, extraExport), 27 | ).toMatchSnapshot(); 28 | }); 29 | 30 | test('createMethods without extraImport', async () => { 31 | const sampleDMMF = await getSampleDMMF(); 32 | expect( 33 | await createMethods(sampleDMMF.datamodel, undefined), 34 | ).toMatchSnapshot(); 35 | }); 36 | 37 | test('createMethods with `null` as `emptyValueAs`', async () => { 38 | const sampleDMMF = await getSampleDMMF(); 39 | expect( 40 | await createMethods(sampleDMMF.datamodel, undefined, undefined, 'null'), 41 | ).toMatchSnapshot(); 42 | }); 43 | 44 | test('createMethods with default clientImportPath', async () => { 45 | const sampleDMMF = await getSampleDMMF(); 46 | expect( 47 | await createMethods( 48 | sampleDMMF.datamodel, 49 | undefined, 50 | undefined, 51 | 'null', 52 | undefined, 53 | ), 54 | ).toMatchSnapshot(); 55 | }); 56 | 57 | test('createMethods with custom clientImportPath', async () => { 58 | const sampleDMMF = await getSampleDMMF(); 59 | expect( 60 | await createMethods( 61 | sampleDMMF.datamodel, 62 | undefined, 63 | undefined, 64 | 'null', 65 | './src/generated/client', 66 | ), 67 | ).toMatchSnapshot(); 68 | }); 69 | -------------------------------------------------------------------------------- /src/__tests__/generatorUtils.test.ts: -------------------------------------------------------------------------------- 1 | import { test, expect } from 'vitest'; 2 | import { GeneratorOptions } from '@prisma/generator-helper'; 3 | import { extractClientPath } from '../utils/generatorUtils'; 4 | 5 | test('extractClientPath returns @prisma/client for Unix node_modules path', () => { 6 | const options = { 7 | generator: { 8 | name: 'test-generator', 9 | provider: { value: 'test-provider' }, 10 | output: { value: '/path/to/output' }, 11 | }, 12 | otherGenerators: [ 13 | { 14 | provider: { value: 'prisma-client-js' }, 15 | output: { value: '/path/to/node_modules/@prisma/client' }, 16 | }, 17 | ], 18 | } as unknown as GeneratorOptions; 19 | 20 | expect(extractClientPath(options)).toBe('@prisma/client'); 21 | }); 22 | 23 | test('extractClientPath returns @prisma/client for Windows node_modules path', () => { 24 | const options = { 25 | generator: { 26 | name: 'test-generator', 27 | provider: { value: 'test-provider' }, 28 | output: { value: 'C:\\path\\to\\output' }, 29 | }, 30 | otherGenerators: [ 31 | { 32 | provider: { value: 'prisma-client-js' }, 33 | output: { value: 'C:\\path\\to\\node_modules\\@prisma\\client' }, 34 | }, 35 | ], 36 | } as unknown as GeneratorOptions; 37 | 38 | expect(extractClientPath(options)).toBe('@prisma/client'); 39 | }); 40 | 41 | test('extractClientPath returns undefined when client path is not found', () => { 42 | const options = { 43 | generator: { 44 | name: 'test-generator', 45 | provider: { value: 'test-provider' }, 46 | output: { value: '/path/to/output' }, 47 | }, 48 | otherGenerators: [], 49 | } as unknown as GeneratorOptions; 50 | 51 | expect(extractClientPath(options)).toBeUndefined(); 52 | }); 53 | 54 | test('extractClientPath returns relative path when client is in a custom location', () => { 55 | const options = { 56 | generator: { 57 | name: 'test-generator', 58 | provider: { value: 'test-provider' }, 59 | output: { value: '/path/to/output' }, 60 | }, 61 | otherGenerators: [ 62 | { 63 | provider: { value: 'prisma-client-js' }, 64 | output: { value: '/path/to/custom/client' }, 65 | }, 66 | ], 67 | } as unknown as GeneratorOptions; 68 | 69 | expect(extractClientPath(options)).toBe('custom/client'); 70 | }); 71 | -------------------------------------------------------------------------------- /src/__tests__/sample.prisma: -------------------------------------------------------------------------------- 1 | datasource db { 2 | provider = "postgresql" 3 | url = env("PGSQL_URL") 4 | } 5 | 6 | model User { 7 | id String @id @default(cuid()) 8 | email String 9 | name String 10 | ///FAKE:faker.company.name() 11 | companyName String 12 | age Int 13 | firstName String 14 | lastName String 15 | string String 16 | stringWithDefault String @default("default") 17 | nullableString String? 18 | boolean Boolean 19 | booleanWithDefault Boolean @default(true) 20 | nullableBoolean Boolean? 21 | int Int 22 | intWithDefault Int @default(1) 23 | nullableInt Int? 24 | bigInt BigInt 25 | bigIntWithDefault BigInt @default(1) 26 | nullableBigInt BigInt? 27 | float Float 28 | floatWithDefault Float @default(1.1) 29 | nullableFloat Float? 30 | decimal Decimal 31 | decimalWithDefault Decimal @default(1.23) 32 | nullableDecimal Decimal? 33 | dateTime DateTime 34 | dateTimeWithDefault DateTime @default(now()) 35 | nullableDateTime DateTime? 36 | stringArray String[] 37 | intArray Int[] 38 | bigIntArray BigInt[] 39 | floatArray Float[] 40 | booleanArray Boolean[] 41 | dateTimeArray DateTime[] 42 | ///anotherComment 43 | ///FAKE:{test: faker.lorem.word()} 44 | json Json 45 | jsonWithDefault Json @default("{}") 46 | ///FAKE:{test2: faker.lorem.word()} 47 | jsonWithDefaultAndFake Json @default("{}") 48 | nullableJson Json? 49 | enum Enum 50 | enumWithDefault Enum @default(A) 51 | nullableEnum Enum? 52 | relation UserRelation? @relation(name: "UserRelationToUser1") 53 | relation2 UserRelation? @relation(name: "UserRelationToUser2") 54 | enums Enum[] 55 | enumsWithDefault Enum[] @default([A, B]) 56 | } 57 | 58 | model User2 { 59 | id Int @id @default(autoincrement()) 60 | User2Relation User2Relation? 61 | } 62 | 63 | enum Enum { 64 | A 65 | B 66 | C 67 | } 68 | 69 | model UserRelation { 70 | id String @id @default(cuid()) 71 | userId String @unique 72 | user User @relation(fields: [userId], references: [id], name: "UserRelationToUser1") 73 | userId2 String @unique 74 | user2 User @relation(fields: [userId2], references: [id], name: "UserRelationToUser2") 75 | } 76 | 77 | model User2Relation { 78 | id String @id @default(cuid()) 79 | 80 | user2Id Int @unique 81 | user User2 @relation(fields: [user2Id], references: [id]) 82 | } 83 | -------------------------------------------------------------------------------- /src/__tests__/testUtils.ts: -------------------------------------------------------------------------------- 1 | import { getDMMF, getSchemaWithPath } from '@prisma/internals'; 2 | import path from 'path'; 3 | 4 | export async function getSampleDMMF() { 5 | const { schemas } = await getSchemaWithPath( 6 | path.join(__dirname, './sample.prisma'), 7 | ); 8 | return getDMMF({ 9 | datamodel: schemas, 10 | }); 11 | } 12 | -------------------------------------------------------------------------------- /src/bin.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | import './generator'; 3 | -------------------------------------------------------------------------------- /src/constants.ts: -------------------------------------------------------------------------------- 1 | export const GENERATOR_NAME = 'prisma-generator-fake-data'; 2 | -------------------------------------------------------------------------------- /src/generator.ts: -------------------------------------------------------------------------------- 1 | import { generatorHandler, GeneratorOptions } from '@prisma/generator-helper'; 2 | import { GENERATOR_NAME } from './constants'; 3 | import { createMethods } from './helpers/createMethods'; 4 | import { extractClientPath } from './utils/generatorUtils'; 5 | import { writeFileSafely } from './utils/writeFileSafely'; 6 | import invariant from 'tiny-invariant'; 7 | 8 | const { version } = require('../package.json'); 9 | generatorHandler({ 10 | onManifest() { 11 | return { 12 | version, 13 | defaultOutput: './fake-data.ts', 14 | prettyName: GENERATOR_NAME, 15 | }; 16 | }, 17 | async onGenerate(options: GeneratorOptions) { 18 | invariant( 19 | typeof options.generator.config.extraExport === 'string' || 20 | options.generator.config.extraExport === undefined, 21 | 'extraExport must be a string or empty', 22 | ); 23 | invariant( 24 | typeof options.generator.config.extraExport === 'string' || 25 | options.generator.config.extraExport === undefined, 26 | 'extraExport must be a string or empty', 27 | ); 28 | invariant( 29 | typeof options.generator.config.emptyValueAs === 'string' || 30 | options.generator.config.emptyValueAs === undefined, 31 | 'emptyValueAs must be a string or empty', 32 | ); 33 | 34 | const fakeMethods = await createMethods( 35 | options.dmmf.datamodel, 36 | options.generator.config.extraImport as string | undefined, 37 | options.generator.config.extraExport as string | undefined, 38 | options.generator.config.emptyValueAs as string | undefined, 39 | extractClientPath(options), 40 | ); 41 | 42 | await writeFileSafely(options.generator.output?.value!, fakeMethods); 43 | }, 44 | }); 45 | -------------------------------------------------------------------------------- /src/helpers/createMethods.ts: -------------------------------------------------------------------------------- 1 | import { logger } from '@prisma/internals'; 2 | import { DMMF } from '@prisma/generator-helper'; 3 | import { faker } from '@faker-js/faker'; 4 | 5 | const MAX_INT = 2147483647; 6 | 7 | function getFieldDefinition( 8 | models: DMMF.Datamodel['models'], 9 | model: DMMF.Datamodel['models'][number], 10 | field: DMMF.Datamodel['models'][number]['fields'][number], 11 | enums: DMMF.Datamodel['enums'], 12 | emptyValueAs: string, 13 | ) { 14 | const docLines = field.documentation?.split('\n') || []; 15 | const fakeLine = docLines.find((line) => line.startsWith('FAKE:')); 16 | const fakeValue = fakeLine?.replace('FAKE:', ''); 17 | 18 | if (fakeLine && !fakeValue) { 19 | logger.warn( 20 | `${model.name}.${field.name} appears to have a '///FAKE:' comment but is missing a method or JSON after it.`, 21 | ); 22 | } 23 | 24 | if (fakeValue) { 25 | return `${field.name}: ${fakeValue}`; 26 | } 27 | 28 | if (field.isId) { 29 | return `${field.name}: ${ 30 | field.type === 'String' 31 | ? 'faker.string.uuid()' 32 | : `faker.number.int({ max: ${MAX_INT} })` 33 | }`; 34 | } 35 | if (field.hasDefaultValue) { 36 | if (field.isList && field.kind === 'enum') { 37 | const enumName = field.type; 38 | const enumValues = enums.find((it) => it.name === enumName)?.values || []; 39 | if (enumValues.length === 0) { 40 | logger.warn( 41 | `Enum ${enumName} has no enum values. Field ${field.name} won't be generated.`, 42 | ); 43 | } else { 44 | const defaults = (field.default as DMMF.FieldDefaultScalar[]) 45 | ?.map((d) => `${enumName}.${d}`) 46 | .join(', '); 47 | return `${field.name}: [${defaults}]`; 48 | } 49 | } 50 | if (field.isList) { 51 | return `${field.name}: ${field.default?.toString() || '[]'}`; 52 | } 53 | if (['Json'].includes(field.type)) { 54 | return `${field.name}: ${fakeValue || field.default?.toString() || '{}'}`; 55 | } 56 | if (field.kind === 'enum') { 57 | return `${field.name}: ${field.type}.${field.default}`; 58 | } 59 | 60 | if (['Int', 'Float', 'Boolean'].includes(field.type)) { 61 | return `${field.name}: ${field.default}`; 62 | } 63 | if (['Decimal'].includes(field.type)) { 64 | return `${field.name}: new Decimal(${field.default})`; 65 | } 66 | if (['BigInt'].includes(field.type)) { 67 | return `${field.name}: BigInt(${field.default})`; 68 | } 69 | if (['String'].includes(field.type)) { 70 | return `${field.name}: '${field.default}'`; 71 | } 72 | if (field.type === 'DateTime') { 73 | return `${field.name}: new Date()`; 74 | } 75 | } 76 | if (!field.isRequired) { 77 | return `${field.name}: ${emptyValueAs}`; 78 | } 79 | if (field.kind === 'enum') { 80 | const enumName = field.type; 81 | const enumValues = enums.find((it) => it.name === enumName)?.values || []; 82 | if (enumValues.length === 0) { 83 | logger.warn( 84 | `Enum ${enumName} has no enum values. Field ${field.name} won't be generated.`, 85 | ); 86 | } else { 87 | const enumValuesAsString = enumValues 88 | .map((v) => `${enumName}.${v.name}`) 89 | .join(', '); 90 | return `${field.name}: faker.helpers.arrayElement([${enumValuesAsString}] as const)`; 91 | } 92 | } 93 | if (model.fields.some((it) => it.relationFromFields?.includes(field.name))) { 94 | return `${field.name}: ${ 95 | field.type === 'String' ? 'faker.string.uuid()' : 'faker.number.int()' 96 | }`; 97 | } 98 | if (field.type === 'String') { 99 | if (field.isList) { 100 | return `${field.name}: faker.lorem.words(5).split(' ')`; 101 | } 102 | if (field.name === 'email') { 103 | return `${field.name}: faker.internet.email()`; 104 | } 105 | if (field.name === 'image' || field.name === 'avatar') { 106 | return `${field.name}: faker.image.avatar()`; 107 | } 108 | if (field.name === 'username') { 109 | return `${field.name}: faker.internet.userName()`; 110 | } 111 | if (field.name === 'name') { 112 | return `${field.name}: faker.person.fullName()`; 113 | } 114 | if (field.name === 'firstName') { 115 | return `${field.name}: faker.person.firstName()`; 116 | } 117 | if (field.name === 'lastName') { 118 | return `${field.name}: faker.person.lastName()`; 119 | } 120 | return `${field.name}: faker.lorem.words(5)`; 121 | } 122 | if (field.type === 'Int') { 123 | if (field.isList) { 124 | return `${field.name}: [faker.number.int({ max: ${MAX_INT} }),faker.number.int({ max: ${MAX_INT} }),faker.number.int({ max: ${MAX_INT} }),faker.number.int({ max: ${MAX_INT} }),faker.number.int({ max: ${MAX_INT} })]`; 125 | } 126 | if (field.name === 'age') { 127 | return `${field.name}: faker.number.int({min: 0, max: 99})`; 128 | } 129 | return `${field.name}: faker.number.int()`; 130 | } 131 | if (field.type === 'BigInt') { 132 | if (field.isList) { 133 | return `${field.name}: [BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int()),BigInt(faker.number.int())]`; 134 | } 135 | return `${field.name}: BigInt(faker.number.int())`; 136 | } 137 | if (field.type === 'Float') { 138 | if (field.isList) { 139 | return `${field.name}: [faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float(),faker.number.float()]`; 140 | } 141 | return `${field.name}: faker.number.float()`; 142 | } 143 | if (field.type === 'Boolean') { 144 | if (field.isList) { 145 | return `${field.name}: [faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean(),faker.datatype.boolean()]`; 146 | } 147 | return `${field.name}: faker.datatype.boolean()`; 148 | } 149 | if (field.type === 'Decimal') { 150 | if (field.isList) { 151 | return `${field.name}: [new Decimal(faker.number.float()),new Decimal(faker.number.float()),new Decimal(faker.number.float()),new Decimal(faker.number.float()),new Decimal(faker.number.float())]`; 152 | } 153 | return `${field.name}: new Decimal(faker.number.float())`; 154 | } 155 | if (field.type === 'DateTime') { 156 | if (field.isList) { 157 | return `${field.name}: [faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime(),faker.date.anytime()]`; 158 | } 159 | return `${field.name}: faker.date.anytime()`; 160 | } 161 | if (field.type === 'Json') { 162 | return `${field.name}: JSON.stringify(${generateRandomJson()})`; 163 | } 164 | logger.warn( 165 | `Type ${field.type}${field.isList ? '[]' : ''} (${ 166 | field.kind 167 | }) is not supported. Field ${field.name} won't be generated.`, 168 | ); 169 | return null; 170 | } 171 | 172 | export async function createMethods( 173 | { enums, models }: DMMF.Datamodel, 174 | extraImport?: string, 175 | extraExport?: string, 176 | emptyValueAs = 'undefined', 177 | clientImportPath: string = '@prisma/client', 178 | ) { 179 | const functions: string[] = []; 180 | 181 | models.forEach((m) => { 182 | createFakeFunctionsWithoutFKs(models, m, enums, functions, emptyValueAs); 183 | createFakeFunctionsWithFKs(models, m, enums, functions, emptyValueAs); 184 | }); 185 | const enumNames = enums.map((it) => it.name).join(', '); 186 | return await `import { ${enumNames} } from '${clientImportPath}'; 187 | import { faker } from '@faker-js/faker'; 188 | import Decimal from 'decimal.js'; 189 | ${extraImport || ''} 190 | ${extraExport || ''} 191 | 192 | ${functions.join('\n')} 193 | `; 194 | } 195 | function createFakeFunctionsWithoutFKs( 196 | models: DMMF.Datamodel['models'], 197 | model: DMMF.Datamodel['models'][number], 198 | enums: DMMF.Datamodel['enums'], 199 | functions: string[], 200 | emptyValueAs: string, 201 | ) { 202 | const validFields = model.fields 203 | .filter((field) => !field.isId) 204 | .filter((field) => field.kind === 'scalar' || field.kind === 'enum') 205 | .filter((field) => { 206 | return !model.fields.find((it) => { 207 | return it.relationFromFields?.includes(field.name); 208 | }); 209 | }) 210 | .filter((field) => !field.hasDefaultValue) 211 | .map((f) => getFieldDefinition(models, model, f, enums, emptyValueAs)) 212 | .filter(Boolean); 213 | if (validFields.length > 0) { 214 | functions.push( 215 | `export function fake${model.name}() { 216 | return { 217 | ${validFields.join(',\n ')}, 218 | }; 219 | }`, 220 | ); 221 | } 222 | } 223 | 224 | function createFakeFunctionsWithFKs( 225 | models: DMMF.Datamodel['models'], 226 | model: DMMF.Datamodel['models'][number], 227 | enums: DMMF.Datamodel['enums'], 228 | functions: string[], 229 | emptyValueAs: string, 230 | ) { 231 | const validFields = model.fields 232 | .filter((field) => field.kind === 'scalar' || field.kind === 'enum') 233 | .map((f) => getFieldDefinition(models, model, f, enums, emptyValueAs)) 234 | .filter(Boolean); 235 | if (validFields.length > 0) { 236 | functions.push( 237 | `export function fake${model.name}Complete() { 238 | return { 239 | ${validFields.join(',\n ')}, 240 | }; 241 | }`, 242 | ); 243 | } 244 | } 245 | 246 | function generateRandomJson(): string { 247 | const obj = { 248 | foo: faker.string.uuid(), 249 | bar: faker.number.int(), 250 | bike: faker.number.hex(), 251 | a: faker.string.alphanumeric(), 252 | b: faker.number.float(), 253 | name: faker.person.firstName(), 254 | prop: faker.string.binary(), 255 | }; 256 | return JSON.stringify(obj); 257 | } 258 | -------------------------------------------------------------------------------- /src/utils/generatorUtils.ts: -------------------------------------------------------------------------------- 1 | import { GeneratorOptions } from '@prisma/generator-helper'; 2 | import { relative, dirname } from 'path'; 3 | 4 | export function extractClientPath(options: GeneratorOptions) { 5 | const targetPath = options.generator.output?.value!; 6 | const clientPath = options.otherGenerators.find((g) => 7 | g?.provider?.value?.includes('prisma-client'), 8 | )?.output?.value; 9 | 10 | if ( 11 | clientPath?.includes('node_modules/@prisma/client') || //unix path 12 | clientPath?.includes('node_modules\\@prisma\\client') //windows path 13 | ) { 14 | return '@prisma/client'; 15 | } 16 | 17 | if (!clientPath) { 18 | return undefined; 19 | } 20 | 21 | const targetDir = dirname(targetPath); 22 | return relative(targetDir, clientPath); 23 | } 24 | -------------------------------------------------------------------------------- /src/utils/writeFileSafely.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | 4 | export const writeFileSafely = async (writeLocation: string, content: any) => { 5 | fs.mkdirSync(path.dirname(writeLocation), { 6 | recursive: true, 7 | }); 8 | 9 | fs.writeFileSync(writeLocation, content); 10 | }; 11 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2018", 4 | "module": "commonjs", 5 | "lib": ["esnext"], 6 | "strict": true, 7 | "strictPropertyInitialization": false, 8 | "esModuleInterop": true, 9 | "experimentalDecorators": true, 10 | "emitDecoratorMetadata": true, 11 | "skipLibCheck": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "removeComments": true, 14 | "sourceMap": true, 15 | "baseUrl": ".", 16 | "moduleResolution": "Node", 17 | "outDir": "./dist", 18 | "rootDir": "./src", 19 | "newLine": "lf" 20 | }, 21 | "include": ["src/**/*"], 22 | "exclude": ["**/node_modules", "**/*.test.ts", "**/__tests__", "**/dest"] 23 | } 24 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config'; 2 | 3 | export default defineConfig({ 4 | test: { 5 | forceRerunTriggers: [ 6 | '**/package.json/**', 7 | '**/vitest.config.*/**', 8 | '**/vite.config.*/**', 9 | 'src/__tests__/sample.prisma', 10 | ], 11 | }, 12 | }); 13 | --------------------------------------------------------------------------------