zenstack 0.6.0-pre.12 → 0.6.0-pre.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cli/index.js CHANGED
@@ -10,12 +10,13 @@ var _colors = _interopRequireDefault(require("colors"));
10
10
  var _commander = require("commander");
11
11
  var _telemetry = _interopRequireDefault(require("../telemetry"));
12
12
  var _cliUtil = require("./cli-util");
13
+ var semver = _interopRequireWildcard(require("semver"));
14
+ var _cliError = require("./cli-error");
15
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
18
  /* eslint-disable @typescript-eslint/no-explicit-any */
15
19
 
16
- // import * as semver from 'semver';
17
- // import { CliError } from './cli-error';
18
-
19
20
  // required minimal version of Prisma
20
21
  const requiredPrismaVersion = '4.0.0';
21
22
  exports.requiredPrismaVersion = requiredPrismaVersion;
@@ -34,22 +35,18 @@ const generateAction = async options => {
34
35
  };
35
36
  exports.generateAction = generateAction;
36
37
  const checkRequiredPackage = (packageName, minVersion) => {
37
- // let packageVersion: string;
38
- // try {
39
- // // eslint-disable-next-line @typescript-eslint/no-var-requires
40
- // packageVersion = require(`${packageName}/package.json`).version;
41
- // } catch (error) {
42
- // console.error(colors.red(`${packageName} not found, please install it`));
43
- // throw new CliError(`${packageName} not found`);
44
- // }
45
- // if (minVersion && semver.lt(packageVersion, minVersion)) {
46
- // console.error(
47
- // colors.red(
48
- // `${packageName} needs to be above ${minVersion}, the installed version is ${packageVersion}, please upgrade it`
49
- // )
50
- // );
51
- // throw new CliError(`${packageName} version is too low`);
52
- // }
38
+ let packageVersion;
39
+ try {
40
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
41
+ packageVersion = require(`${packageName}/package.json`).version;
42
+ } catch (error) {
43
+ console.error(_colors.default.red(`${packageName} not found, please install it`));
44
+ throw new _cliError.CliError(`${packageName} not found`);
45
+ }
46
+ if (minVersion && semver.lt(packageVersion, minVersion)) {
47
+ console.error(_colors.default.red(`${packageName} needs to be above ${minVersion}, the installed version is ${packageVersion}, please upgrade it`));
48
+ throw new _cliError.CliError(`${packageName} version is too low`);
49
+ }
53
50
  };
54
51
  async function _default() {
55
52
  await _telemetry.default.trackSpan('cli:start', 'cli:complete', 'cli:error', {
@@ -58,7 +55,7 @@ async function _default() {
58
55
  const program = new _commander.Command('zenstack');
59
56
  program.version(
60
57
  // eslint-disable-next-line @typescript-eslint/no-var-requires
61
- require('../../package.json').version, '-v --version', 'display CLI version');
58
+ require('../package.json').version, '-v --version', 'display CLI version');
62
59
  const schemaExtensions = _module.ZModelLanguageMetaData.fileExtensions.join(', ');
63
60
  program.description(`${_colors.default.bold.blue('ζ')} ZenStack is a toolkit for building secure CRUD apps with Next.js + Typescript.\n\nDocumentation: https://zenstack.dev.`).showHelpAfterError().showSuggestionAfterError();
64
61
  const schemaOption = new _commander.Option('--schema <file>', `schema file (with extension ${schemaExtensions})`).default('./schema.zmodel');
package/cli/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["requiredPrismaVersion","initAction","projectPath","options","telemetry","trackSpan","command","initProject","packageManager","generateAction","checkRequiredPackage","runPlugins","packageName","minVersion","args","process","argv","program","Command","version","require","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","default","pmOption","choices","addOption","argument","action","exitOverride","parseAsync"],"sources":["../../src/cli/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ZModelLanguageMetaData } from '@zenstackhq/language/module';\nimport colors from 'colors';\nimport { Command, Option } from 'commander';\nimport telemetry from '../telemetry';\nimport { PackageManagers } from '../utils/pkg-utils';\nimport { initProject, runPlugins } from './cli-util';\n// import * as semver from 'semver';\n// import { CliError } from './cli-error';\n\n// required minimal version of Prisma\nexport const requiredPrismaVersion = '4.0.0';\n\nexport const initAction = async (\n projectPath: string,\n options: {\n packageManager: PackageManagers | undefined;\n }\n): Promise<void> => {\n await telemetry.trackSpan(\n 'cli:command:start',\n 'cli:command:complete',\n 'cli:command:error',\n { command: 'init' },\n () => initProject(projectPath, options.packageManager)\n );\n};\n\nexport const generateAction = async (options: {\n schema: string;\n packageManager: PackageManagers | undefined;\n}): Promise<void> => {\n checkRequiredPackage('prisma', requiredPrismaVersion);\n checkRequiredPackage('@prisma/client', requiredPrismaVersion);\n await telemetry.trackSpan(\n 'cli:command:start',\n 'cli:command:complete',\n 'cli:command:error',\n { command: 'generate' },\n () => runPlugins(options)\n );\n};\n\nconst checkRequiredPackage = (packageName: string, minVersion?: string) => {\n // let packageVersion: string;\n // try {\n // // eslint-disable-next-line @typescript-eslint/no-var-requires\n // packageVersion = require(`${packageName}/package.json`).version;\n // } catch (error) {\n // console.error(colors.red(`${packageName} not found, please install it`));\n // throw new CliError(`${packageName} not found`);\n // }\n // if (minVersion && semver.lt(packageVersion, minVersion)) {\n // console.error(\n // colors.red(\n // `${packageName} needs to be above ${minVersion}, the installed version is ${packageVersion}, please upgrade it`\n // )\n // );\n // throw new CliError(`${packageName} version is too low`);\n // }\n};\n\nexport default async function (): Promise<void> {\n await telemetry.trackSpan('cli:start', 'cli:complete', 'cli:error', { args: process.argv }, async () => {\n const program = new Command('zenstack');\n\n program.version(\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n require('../../package.json').version,\n '-v --version',\n 'display CLI version'\n );\n\n const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(', ');\n\n program\n .description(\n `${colors.bold.blue(\n 'ζ'\n )} ZenStack is a toolkit for building secure CRUD apps with Next.js + Typescript.\\n\\nDocumentation: https://zenstack.dev.`\n )\n .showHelpAfterError()\n .showSuggestionAfterError();\n\n const schemaOption = new Option('--schema <file>', `schema file (with extension ${schemaExtensions})`).default(\n './schema.zmodel'\n );\n\n const pmOption = new Option('-p, --package-manager <pm>', 'package manager to use').choices([\n 'npm',\n 'yarn',\n 'pnpm',\n ]);\n\n //#region wraps Prisma commands\n\n program\n .command('init')\n .description('Set up a new ZenStack project.')\n .addOption(pmOption)\n .argument('[path]', 'project path', '.')\n .action(initAction);\n\n program\n .command('generate')\n .description('Generates RESTful API and Typescript client for your data model.')\n .addOption(schemaOption)\n .addOption(pmOption)\n .action(generateAction);\n\n //#endregion\n\n // handle errors explicitly to ensure telemetry\n program.exitOverride();\n\n await program.parseAsync(process.argv);\n });\n}\n"],"mappings":";;;;;;;AACA;AACA;AACA;AACA;AAEA;AAAqD;AANrD;;AAOA;AACA;;AAEA;AACO,MAAMA,qBAAqB,GAAG,OAAO;AAAC;AAEtC,MAAMC,UAAU,GAAG,OACtBC,WAAmB,EACnBC,OAEC,KACe;EAChB,MAAMC,kBAAS,CAACC,SAAS,CACrB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB;IAAEC,OAAO,EAAE;EAAO,CAAC,EACnB,MAAM,IAAAC,oBAAW,EAACL,WAAW,EAAEC,OAAO,CAACK,cAAc,CAAC,CACzD;AACL,CAAC;AAAC;AAEK,MAAMC,cAAc,GAAG,MAAON,OAGpC,IAAoB;EACjBO,oBAAoB,CAAC,QAAQ,EAAEV,qBAAqB,CAAC;EACrDU,oBAAoB,CAAC,gBAAgB,EAAEV,qBAAqB,CAAC;EAC7D,MAAMI,kBAAS,CAACC,SAAS,CACrB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB;IAAEC,OAAO,EAAE;EAAW,CAAC,EACvB,MAAM,IAAAK,mBAAU,EAACR,OAAO,CAAC,CAC5B;AACL,CAAC;AAAC;AAEF,MAAMO,oBAAoB,GAAG,CAACE,WAAmB,EAAEC,UAAmB,KAAK;EACvE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAA,CACH;AAEc,0BAAiC;EAC5C,MAAMT,kBAAS,CAACC,SAAS,CAAC,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE;IAAES,IAAI,EAAEC,OAAO,CAACC;EAAK,CAAC,EAAE,YAAY;IACpG,MAAMC,OAAO,GAAG,IAAIC,kBAAO,CAAC,UAAU,CAAC;IAEvCD,OAAO,CAACE,OAAO;IACX;IACAC,OAAO,CAAC,oBAAoB,CAAC,CAACD,OAAO,EACrC,cAAc,EACd,qBAAqB,CACxB;IAED,MAAME,gBAAgB,GAAGC,8BAAsB,CAACC,cAAc,CAACC,IAAI,CAAC,IAAI,CAAC;IAEzEP,OAAO,CACFQ,WAAW,CACP,GAAEC,eAAM,CAACC,IAAI,CAACC,IAAI,CACf,GAAG,CACL,yHAAwH,CAC7H,CACAC,kBAAkB,EAAE,CACpBC,wBAAwB,EAAE;IAE/B,MAAMC,YAAY,GAAG,IAAIC,iBAAM,CAAC,iBAAiB,EAAG,+BAA8BX,gBAAiB,GAAE,CAAC,CAACY,OAAO,CAC1G,iBAAiB,CACpB;IAED,MAAMC,QAAQ,GAAG,IAAIF,iBAAM,CAAC,4BAA4B,EAAE,wBAAwB,CAAC,CAACG,OAAO,CAAC,CACxF,KAAK,EACL,MAAM,EACN,MAAM,CACT,CAAC;;IAEF;;IAEAlB,OAAO,CACFX,OAAO,CAAC,MAAM,CAAC,CACfmB,WAAW,CAAC,gCAAgC,CAAC,CAC7CW,SAAS,CAACF,QAAQ,CAAC,CACnBG,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,CAAC,CACvCC,MAAM,CAACrC,UAAU,CAAC;IAEvBgB,OAAO,CACFX,OAAO,CAAC,UAAU,CAAC,CACnBmB,WAAW,CAAC,kEAAkE,CAAC,CAC/EW,SAAS,CAACL,YAAY,CAAC,CACvBK,SAAS,CAACF,QAAQ,CAAC,CACnBI,MAAM,CAAC7B,cAAc,CAAC;;IAE3B;;IAEA;IACAQ,OAAO,CAACsB,YAAY,EAAE;IAEtB,MAAMtB,OAAO,CAACuB,UAAU,CAACzB,OAAO,CAACC,IAAI,CAAC;EAC1C,CAAC,CAAC;AACN"}
1
+ {"version":3,"file":"index.js","names":["requiredPrismaVersion","initAction","projectPath","options","telemetry","trackSpan","command","initProject","packageManager","generateAction","checkRequiredPackage","runPlugins","packageName","minVersion","packageVersion","require","version","error","console","colors","red","CliError","semver","lt","args","process","argv","program","Command","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","default","pmOption","choices","addOption","argument","action","exitOverride","parseAsync"],"sources":["../../src/cli/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ZModelLanguageMetaData } from '@zenstackhq/language/module';\nimport colors from 'colors';\nimport { Command, Option } from 'commander';\nimport telemetry from '../telemetry';\nimport { PackageManagers } from '../utils/pkg-utils';\nimport { initProject, runPlugins } from './cli-util';\nimport * as semver from 'semver';\nimport { CliError } from './cli-error';\n\n// required minimal version of Prisma\nexport const requiredPrismaVersion = '4.0.0';\n\nexport const initAction = async (\n projectPath: string,\n options: {\n packageManager: PackageManagers | undefined;\n }\n): Promise<void> => {\n await telemetry.trackSpan(\n 'cli:command:start',\n 'cli:command:complete',\n 'cli:command:error',\n { command: 'init' },\n () => initProject(projectPath, options.packageManager)\n );\n};\n\nexport const generateAction = async (options: {\n schema: string;\n packageManager: PackageManagers | undefined;\n}): Promise<void> => {\n checkRequiredPackage('prisma', requiredPrismaVersion);\n checkRequiredPackage('@prisma/client', requiredPrismaVersion);\n await telemetry.trackSpan(\n 'cli:command:start',\n 'cli:command:complete',\n 'cli:command:error',\n { command: 'generate' },\n () => runPlugins(options)\n );\n};\n\nconst checkRequiredPackage = (packageName: string, minVersion?: string) => {\n let packageVersion: string;\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n packageVersion = require(`${packageName}/package.json`).version;\n } catch (error) {\n console.error(colors.red(`${packageName} not found, please install it`));\n throw new CliError(`${packageName} not found`);\n }\n\n if (minVersion && semver.lt(packageVersion, minVersion)) {\n console.error(\n colors.red(\n `${packageName} needs to be above ${minVersion}, the installed version is ${packageVersion}, please upgrade it`\n )\n );\n throw new CliError(`${packageName} version is too low`);\n }\n};\n\nexport default async function (): Promise<void> {\n await telemetry.trackSpan('cli:start', 'cli:complete', 'cli:error', { args: process.argv }, async () => {\n const program = new Command('zenstack');\n\n program.version(\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n require('../package.json').version,\n '-v --version',\n 'display CLI version'\n );\n\n const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(', ');\n\n program\n .description(\n `${colors.bold.blue(\n 'ζ'\n )} ZenStack is a toolkit for building secure CRUD apps with Next.js + Typescript.\\n\\nDocumentation: https://zenstack.dev.`\n )\n .showHelpAfterError()\n .showSuggestionAfterError();\n\n const schemaOption = new Option('--schema <file>', `schema file (with extension ${schemaExtensions})`).default(\n './schema.zmodel'\n );\n\n const pmOption = new Option('-p, --package-manager <pm>', 'package manager to use').choices([\n 'npm',\n 'yarn',\n 'pnpm',\n ]);\n\n //#region wraps Prisma commands\n\n program\n .command('init')\n .description('Set up a new ZenStack project.')\n .addOption(pmOption)\n .argument('[path]', 'project path', '.')\n .action(initAction);\n\n program\n .command('generate')\n .description('Generates RESTful API and Typescript client for your data model.')\n .addOption(schemaOption)\n .addOption(pmOption)\n .action(generateAction);\n\n //#endregion\n\n // handle errors explicitly to ensure telemetry\n program.exitOverride();\n\n await program.parseAsync(process.argv);\n });\n}\n"],"mappings":"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"}
@@ -24,7 +24,7 @@ class PluginRunner {
24
24
  * Runs a series of nested generators
25
25
  */
26
26
  async run(context) {
27
- const version = require('../../package.json').version;
27
+ const version = require('../package.json').version;
28
28
  console.log(_colors.default.bold(`⌛️ ZenStack CLI v${version}, running plugins`));
29
29
  const plugins = [];
30
30
  const pluginDecls = context.schema.declarations.filter(d => (0, _ast.isPlugin)(d));
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-runner.js","names":["PluginRunner","run","context","version","require","console","log","colors","bold","plugins","pluginDecls","schema","declarations","filter","d","isPlugin","prereqPlugins","allPluginProviders","concat","map","p","getPluginProvider","includes","prismaOutput","pluginProvider","plugin","find","options","fields","forEach","f","value","getLiteral","getLiteralArray","CliError","name","pluginModulePath","getPluginModulePath","pluginModule","error","default","push","getPluginName","provider","output","warnings","dmmf","undefined","runPlugin","getDMMF","datamodel","fs","readFileSync","encoding","green","w","warn","yellow","providerField","spinner","ora","cyan","start","telemetry","trackSpan","result","Promise","Array","isArray","succeed","startsWith","replace","path","join","__dirname"],"sources":["../../src/cli/plugin-runner.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport { DMMF } from '@prisma/generator-helper';\nimport { getDMMF } from '@prisma/internals';\nimport { Plugin, isPlugin } from '@zenstackhq/language/ast';\nimport { PluginFunction, PluginOptions, getLiteral, getLiteralArray } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'fs';\nimport ora from 'ora';\nimport path from 'path';\nimport telemetry from '../telemetry';\nimport { Context } from '../types';\nimport { CliError } from './cli-error';\n\n/**\n * ZenStack code generator\n */\nexport class PluginRunner {\n /**\n * Runs a series of nested generators\n */\n async run(context: Context): Promise<void> {\n const version = require('../../package.json').version;\n console.log(colors.bold(`⌛️ ZenStack CLI v${version}, running plugins`));\n\n const plugins: Array<{\n provider: string;\n name: string;\n run: PluginFunction;\n options: PluginOptions;\n }> = [];\n\n const pluginDecls = context.schema.declarations.filter((d): d is Plugin => isPlugin(d));\n const prereqPlugins = ['@zenstack/prisma', '@zenstack/model-meta', '@zenstack/access-policy'];\n const allPluginProviders = prereqPlugins.concat(\n pluginDecls\n .map((p) => this.getPluginProvider(p))\n .filter((p): p is string => !!p && !prereqPlugins.includes(p))\n );\n let prismaOutput = './prisma/schema.prisma';\n\n for (const pluginProvider of allPluginProviders) {\n const plugin = pluginDecls.find((p) => this.getPluginProvider(p) === pluginProvider);\n if (plugin) {\n const options: PluginOptions = {};\n\n plugin.fields.forEach((f) => {\n const value = getLiteral(f.value) || getLiteralArray(f.value);\n if (!value) {\n throw new CliError(`Invalid plugin value for ${f.name}`);\n }\n options[f.name] = value;\n });\n\n const pluginModulePath = this.getPluginModulePath(pluginProvider);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let pluginModule: any;\n try {\n pluginModule = require(pluginModulePath);\n } catch {\n console.error(`Unable to load plugin module ${pluginProvider}: ${pluginModulePath}`);\n throw new CliError(`Unable to load plugin module ${pluginProvider}`);\n }\n\n if (!pluginModule.default || typeof pluginModule.default !== 'function') {\n console.error(`Plugin provider ${pluginProvider} is missing a default function export`);\n throw new CliError(`Plugin provider ${pluginProvider} is missing a default function export`);\n }\n plugins.push({\n name: this.getPluginName(pluginModule, pluginProvider),\n provider: pluginProvider,\n run: pluginModule.default as PluginFunction,\n options,\n });\n\n if (pluginProvider === '@zenstack/prisma' && options.output) {\n // record custom prisma output path\n prismaOutput = options.output as string;\n }\n } else {\n // synthesize a plugin\n const pluginModule = require(this.getPluginModulePath(pluginProvider));\n plugins.push({\n name: this.getPluginName(pluginModule, pluginProvider),\n provider: pluginProvider,\n run: pluginModule.default,\n options: {},\n });\n }\n }\n\n const warnings: string[] = [];\n\n let dmmf: DMMF.Document | undefined = undefined;\n for (const { name, provider, run, options } of plugins) {\n await this.runPlugin(name, run, context, options, dmmf, warnings);\n if (provider === '@zenstack/prisma') {\n // load prisma DMMF\n dmmf = await getDMMF({\n datamodel: fs.readFileSync(prismaOutput, { encoding: 'utf-8' }),\n });\n }\n }\n\n console.log(colors.green(colors.bold('\\n👻 All plugins completed successfully!')));\n\n warnings.forEach((w) => console.warn(colors.yellow(w)));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private getPluginName(pluginModule: any, pluginProvider: string): string {\n return typeof pluginModule.name === 'string' ? (pluginModule.name as string) : pluginProvider;\n }\n\n private getPluginProvider(plugin: Plugin) {\n const providerField = plugin.fields.find((f) => f.name === 'provider');\n return getLiteral<string>(providerField?.value);\n }\n\n private async runPlugin(\n name: string,\n run: PluginFunction,\n context: Context,\n options: PluginOptions,\n dmmf: DMMF.Document | undefined,\n warnings: string[]\n ) {\n const spinner = ora(`Running plugin ${colors.cyan(name)}`).start();\n await telemetry.trackSpan(\n 'cli:plugin:start',\n 'cli:plugin:complete',\n 'cli:plugin:error',\n {\n plugin: name,\n },\n async () => {\n let result = run(context.schema, options, dmmf);\n if (result instanceof Promise) {\n result = await result;\n }\n if (Array.isArray(result)) {\n warnings.push(...result);\n }\n }\n );\n spinner.succeed();\n }\n\n private getPluginModulePath(provider: string) {\n let pluginModulePath = provider;\n if (pluginModulePath.startsWith('@zenstack')) {\n pluginModulePath = pluginModulePath.replace(/^@zenstack/, path.join(__dirname, '../plugins'));\n }\n return pluginModulePath;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"plugin-runner.js","names":["PluginRunner","run","context","version","require","console","log","colors","bold","plugins","pluginDecls","schema","declarations","filter","d","isPlugin","prereqPlugins","allPluginProviders","concat","map","p","getPluginProvider","includes","prismaOutput","pluginProvider","plugin","find","options","fields","forEach","f","value","getLiteral","getLiteralArray","CliError","name","pluginModulePath","getPluginModulePath","pluginModule","error","default","push","getPluginName","provider","output","warnings","dmmf","undefined","runPlugin","getDMMF","datamodel","fs","readFileSync","encoding","green","w","warn","yellow","providerField","spinner","ora","cyan","start","telemetry","trackSpan","result","Promise","Array","isArray","succeed","startsWith","replace","path","join","__dirname"],"sources":["../../src/cli/plugin-runner.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nimport { DMMF } from '@prisma/generator-helper';\nimport { getDMMF } from '@prisma/internals';\nimport { Plugin, isPlugin } from '@zenstackhq/language/ast';\nimport { PluginFunction, PluginOptions, getLiteral, getLiteralArray } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'fs';\nimport ora from 'ora';\nimport path from 'path';\nimport telemetry from '../telemetry';\nimport { Context } from '../types';\nimport { CliError } from './cli-error';\n\n/**\n * ZenStack code generator\n */\nexport class PluginRunner {\n /**\n * Runs a series of nested generators\n */\n async run(context: Context): Promise<void> {\n const version = require('../package.json').version;\n console.log(colors.bold(`⌛️ ZenStack CLI v${version}, running plugins`));\n\n const plugins: Array<{\n provider: string;\n name: string;\n run: PluginFunction;\n options: PluginOptions;\n }> = [];\n\n const pluginDecls = context.schema.declarations.filter((d): d is Plugin => isPlugin(d));\n const prereqPlugins = ['@zenstack/prisma', '@zenstack/model-meta', '@zenstack/access-policy'];\n const allPluginProviders = prereqPlugins.concat(\n pluginDecls\n .map((p) => this.getPluginProvider(p))\n .filter((p): p is string => !!p && !prereqPlugins.includes(p))\n );\n let prismaOutput = './prisma/schema.prisma';\n\n for (const pluginProvider of allPluginProviders) {\n const plugin = pluginDecls.find((p) => this.getPluginProvider(p) === pluginProvider);\n if (plugin) {\n const options: PluginOptions = {};\n\n plugin.fields.forEach((f) => {\n const value = getLiteral(f.value) || getLiteralArray(f.value);\n if (!value) {\n throw new CliError(`Invalid plugin value for ${f.name}`);\n }\n options[f.name] = value;\n });\n\n const pluginModulePath = this.getPluginModulePath(pluginProvider);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let pluginModule: any;\n try {\n pluginModule = require(pluginModulePath);\n } catch {\n console.error(`Unable to load plugin module ${pluginProvider}: ${pluginModulePath}`);\n throw new CliError(`Unable to load plugin module ${pluginProvider}`);\n }\n\n if (!pluginModule.default || typeof pluginModule.default !== 'function') {\n console.error(`Plugin provider ${pluginProvider} is missing a default function export`);\n throw new CliError(`Plugin provider ${pluginProvider} is missing a default function export`);\n }\n plugins.push({\n name: this.getPluginName(pluginModule, pluginProvider),\n provider: pluginProvider,\n run: pluginModule.default as PluginFunction,\n options,\n });\n\n if (pluginProvider === '@zenstack/prisma' && options.output) {\n // record custom prisma output path\n prismaOutput = options.output as string;\n }\n } else {\n // synthesize a plugin\n const pluginModule = require(this.getPluginModulePath(pluginProvider));\n plugins.push({\n name: this.getPluginName(pluginModule, pluginProvider),\n provider: pluginProvider,\n run: pluginModule.default,\n options: {},\n });\n }\n }\n\n const warnings: string[] = [];\n\n let dmmf: DMMF.Document | undefined = undefined;\n for (const { name, provider, run, options } of plugins) {\n await this.runPlugin(name, run, context, options, dmmf, warnings);\n if (provider === '@zenstack/prisma') {\n // load prisma DMMF\n dmmf = await getDMMF({\n datamodel: fs.readFileSync(prismaOutput, { encoding: 'utf-8' }),\n });\n }\n }\n\n console.log(colors.green(colors.bold('\\n👻 All plugins completed successfully!')));\n\n warnings.forEach((w) => console.warn(colors.yellow(w)));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private getPluginName(pluginModule: any, pluginProvider: string): string {\n return typeof pluginModule.name === 'string' ? (pluginModule.name as string) : pluginProvider;\n }\n\n private getPluginProvider(plugin: Plugin) {\n const providerField = plugin.fields.find((f) => f.name === 'provider');\n return getLiteral<string>(providerField?.value);\n }\n\n private async runPlugin(\n name: string,\n run: PluginFunction,\n context: Context,\n options: PluginOptions,\n dmmf: DMMF.Document | undefined,\n warnings: string[]\n ) {\n const spinner = ora(`Running plugin ${colors.cyan(name)}`).start();\n await telemetry.trackSpan(\n 'cli:plugin:start',\n 'cli:plugin:complete',\n 'cli:plugin:error',\n {\n plugin: name,\n },\n async () => {\n let result = run(context.schema, options, dmmf);\n if (result instanceof Promise) {\n result = await result;\n }\n if (Array.isArray(result)) {\n warnings.push(...result);\n }\n }\n );\n spinner.succeed();\n }\n\n private getPluginModulePath(provider: string) {\n let pluginModulePath = provider;\n if (pluginModulePath.startsWith('@zenstack')) {\n pluginModulePath = pluginModulePath.replace(/^@zenstack/, path.join(__dirname, '../plugins'));\n }\n return pluginModulePath;\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publisher": "zenstack",
4
4
  "displayName": "ZenStack Language Tools",
5
5
  "description": "A toolkit for building secure CRUD apps with Next.js + Typescript",
6
- "version": "0.6.0-pre.12",
6
+ "version": "0.6.0-pre.14",
7
7
  "author": {
8
8
  "name": "ZenStack Team"
9
9
  },
@@ -91,8 +91,8 @@
91
91
  "vscode-uri": "^3.0.6",
92
92
  "zod": "^3.19.1",
93
93
  "@zenstackhq/language": "0.6.0-pre.12",
94
- "@zenstackhq/sdk": "0.6.0-pre.12",
95
- "@zenstackhq/runtime": "0.6.0-pre.12"
94
+ "@zenstackhq/runtime": "0.6.0-pre.14",
95
+ "@zenstackhq/sdk": "0.6.0-pre.12"
96
96
  },
97
97
  "devDependencies": {
98
98
  "@babel/cli": "^7.19.3",
@@ -35,7 +35,7 @@ async function generate(model, options) {
35
35
  function wrapReadbackErrorCheck(code) {
36
36
  return `try {
37
37
  ${code}
38
- } catch (err: any) {
38
+ } catch (err: unknown) {
39
39
  if (err instanceof Prisma.PrismaClientKnownRequestError && err.code === 'P2004') {
40
40
  // unable to readback data
41
41
  return undefined;
@@ -61,6 +61,7 @@ function generateModelHooks(project, outDir, model) {
61
61
  isExported: true
62
62
  });
63
63
  useFunc.addStatements(['const mutate = request.getMutate();', 'const { endpoint } = useContext(RequestHandlerContext);']);
64
+ const modelRouteName = (0, _changeCase.camelCase)(model.name);
64
65
 
65
66
  // create
66
67
  {
@@ -75,7 +76,7 @@ function generateModelHooks(project, outDir, model) {
75
76
  name: 'args',
76
77
  type: inputType
77
78
  }]
78
- }).addBody().addStatements([wrapReadbackErrorCheck(`return await request.post<${inputType}, ${returnType}>(\`\${endpoint}/${model.name}/create\`, args, mutate);`)]);
79
+ }).addBody().addStatements([wrapReadbackErrorCheck(`return await request.post<${inputType}, ${returnType}>(\`\${endpoint}/${modelRouteName}/create\`, args, mutate);`)]);
79
80
  }
80
81
 
81
82
  // createMany
@@ -91,7 +92,7 @@ function generateModelHooks(project, outDir, model) {
91
92
  name: 'args',
92
93
  type: inputType
93
94
  }]
94
- }).addBody().addStatements([`return await request.post<${inputType}, ${returnType}>(\`\${endpoint}/${model.name}/createMany\`, args, mutate);`]);
95
+ }).addBody().addStatements([`return await request.post<${inputType}, ${returnType}>(\`\${endpoint}/${modelRouteName}/createMany\`, args, mutate);`]);
95
96
  }
96
97
 
97
98
  // findMany
@@ -109,7 +110,7 @@ function generateModelHooks(project, outDir, model) {
109
110
  name: 'options?',
110
111
  type: `RequestOptions<${returnType}>`
111
112
  }]
112
- }).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${model.name}/findMany\`, args, options);`]);
113
+ }).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${modelRouteName}/findMany\`, args, options);`]);
113
114
  }
114
115
 
115
116
  // findUnique
@@ -127,7 +128,7 @@ function generateModelHooks(project, outDir, model) {
127
128
  name: 'options?',
128
129
  type: `RequestOptions<${returnType}>`
129
130
  }]
130
- }).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${model.name}/findUnique\`, args, options);`]);
131
+ }).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${modelRouteName}/findUnique\`, args, options);`]);
131
132
  }
132
133
 
133
134
  // findFirst
@@ -145,7 +146,7 @@ function generateModelHooks(project, outDir, model) {
145
146
  name: 'options?',
146
147
  type: `RequestOptions<${returnType}>`
147
148
  }]
148
- }).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${model.name}/findFirst\`, args, options);`]);
149
+ }).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${modelRouteName}/findFirst\`, args, options);`]);
149
150
  }
150
151
 
151
152
  // update
@@ -161,7 +162,7 @@ function generateModelHooks(project, outDir, model) {
161
162
  name: 'args',
162
163
  type: inputType
163
164
  }]
164
- }).addBody().addStatements([wrapReadbackErrorCheck(`return await request.put<${inputType}, ${returnType}>(\`\${endpoint}/${model.name}/update\`, args, mutate);`)]);
165
+ }).addBody().addStatements([wrapReadbackErrorCheck(`return await request.put<${inputType}, ${returnType}>(\`\${endpoint}/${modelRouteName}/update\`, args, mutate);`)]);
165
166
  }
166
167
 
167
168
  // updateMany
@@ -177,7 +178,7 @@ function generateModelHooks(project, outDir, model) {
177
178
  name: 'args',
178
179
  type: inputType
179
180
  }]
180
- }).addBody().addStatements([`return await request.put<${inputType}, ${returnType}>(\`\${endpoint}/${model.name}/updateMany\`, args, mutate);`]);
181
+ }).addBody().addStatements([`return await request.put<${inputType}, ${returnType}>(\`\${endpoint}/${modelRouteName}/updateMany\`, args, mutate);`]);
181
182
  }
182
183
 
183
184
  // upsert
@@ -193,7 +194,7 @@ function generateModelHooks(project, outDir, model) {
193
194
  name: 'args',
194
195
  type: inputType
195
196
  }]
196
- }).addBody().addStatements([wrapReadbackErrorCheck(`return await request.put<${inputType}, ${returnType}>(\`\${endpoint}/${model.name}/upsert\`, args, mutate);`)]);
197
+ }).addBody().addStatements([wrapReadbackErrorCheck(`return await request.put<${inputType}, ${returnType}>(\`\${endpoint}/${modelRouteName}/upsert\`, args, mutate);`)]);
197
198
  }
198
199
 
199
200
  // del
@@ -209,7 +210,7 @@ function generateModelHooks(project, outDir, model) {
209
210
  name: 'args?',
210
211
  type: inputType
211
212
  }]
212
- }).addBody().addStatements([wrapReadbackErrorCheck(`return await request.del<${returnType}>(\`\${endpoint}/${model.name}/delete\`, args, mutate);`)]);
213
+ }).addBody().addStatements([wrapReadbackErrorCheck(`return await request.del<${returnType}>(\`\${endpoint}/${modelRouteName}/delete\`, args, mutate);`)]);
213
214
  }
214
215
 
215
216
  // deleteMany
@@ -225,7 +226,7 @@ function generateModelHooks(project, outDir, model) {
225
226
  name: 'args?',
226
227
  type: inputType
227
228
  }]
228
- }).addBody().addStatements([`return await request.del<${returnType}>(\`\${endpoint}/${model.name}/deleteMany\`, args, mutate);`]);
229
+ }).addBody().addStatements([`return await request.del<${returnType}>(\`\${endpoint}/${modelRouteName}/deleteMany\`, args, mutate);`]);
229
230
  }
230
231
 
231
232
  // aggregate
@@ -243,7 +244,7 @@ function generateModelHooks(project, outDir, model) {
243
244
  name: 'options?',
244
245
  type: `RequestOptions<${returnType}>`
245
246
  }]
246
- }).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${model.name}/aggregate\`, args, options);`]);
247
+ }).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${modelRouteName}/aggregate\`, args, options);`]);
247
248
  }
248
249
 
249
250
  // groupBy
@@ -300,7 +301,7 @@ function generateModelHooks(project, outDir, model) {
300
301
  name: 'options?',
301
302
  type: `RequestOptions<${returnType}>`
302
303
  }]
303
- }).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${model.name}/groupBy\`, args, options);`]);
304
+ }).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${modelRouteName}/groupBy\`, args, options);`]);
304
305
  }
305
306
 
306
307
  // count
@@ -318,7 +319,7 @@ function generateModelHooks(project, outDir, model) {
318
319
  name: 'options?',
319
320
  type: `RequestOptions<${returnType}>`
320
321
  }]
321
- }).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${model.name}/count\`, args, options);`]);
322
+ }).addBody().addStatements([`return request.get<${returnType}>(\`\${endpoint}/${modelRouteName}/count\`, args, options);`]);
322
323
  }
323
324
  useFunc.addStatements(['return { create, createMany, findMany, findUnique, findFirst, update, updateMany, upsert, del, deleteMany, aggregate, groupBy, count };']);
324
325
  sf.formatText();
@@ -1 +1 @@
1
- {"version":3,"file":"react-hooks-generator.js","names":["generate","model","options","project","Project","models","warnings","dm","declarations","filter","d","isDataModel","hasAllowRule","attributes","find","attr","decl","ref","name","push","outDir","output","generateIndex","forEach","generateModelHooks","save","wrapReadbackErrorCheck","code","fileName","paramCase","sf","createSourceFile","path","join","undefined","overwrite","addImportDeclaration","namedImports","moduleSpecifier","addStatements","RUNTIME_PACKAGE","useFunc","addFunction","isExported","argsType","inputType","returnType","isAsync","typeParameters","parameters","type","addBody","formatText","map"],"sources":["../../../src/plugins/react-hooks/react-hooks-generator.ts"],"sourcesContent":["import { DataModel, Model, isDataModel } from '@zenstackhq/language/ast';\nimport { PluginOptions } from '@zenstackhq/sdk';\nimport { paramCase } from 'change-case';\nimport * as path from 'path';\nimport { Project } from 'ts-morph';\nimport { RUNTIME_PACKAGE } from '../plugin-utils';\n\nexport async function generate(model: Model, options: PluginOptions) {\n const project = new Project();\n const models: DataModel[] = [];\n const warnings: string[] = [];\n\n for (const dm of model.declarations.filter((d): d is DataModel => isDataModel(d))) {\n const hasAllowRule = dm.attributes.find((attr) => attr.decl.ref?.name === '@@allow');\n if (!hasAllowRule) {\n warnings.push(`Not generating hooks for \"${dm.name}\" because it doesn't have any @@allow rule`);\n } else {\n models.push(dm);\n }\n }\n\n const outDir = (options.output as string) ?? 'node_modules/.zenstack/src/hooks';\n\n generateIndex(project, outDir, models);\n\n models.forEach((d) => generateModelHooks(project, outDir, d));\n\n await project.save();\n return warnings;\n}\n\nfunction wrapReadbackErrorCheck(code: string) {\n return `try {\n ${code}\n } catch (err: any) {\n if (err instanceof Prisma.PrismaClientKnownRequestError && err.code === 'P2004') {\n // unable to readback data\n return undefined;\n } else {\n throw err;\n }\n }`;\n}\n\nfunction generateModelHooks(project: Project, outDir: string, model: DataModel) {\n const fileName = paramCase(model.name);\n const sf = project.createSourceFile(path.join(outDir, `${fileName}.ts`), undefined, { overwrite: true });\n\n sf.addImportDeclaration({\n namedImports: [{ name: 'Prisma' }, `type ${model.name}`],\n moduleSpecifier: '@prisma/client',\n });\n sf.addStatements([\n `import { useContext } from 'react';`,\n `import { RequestHandlerContext } from '@zenstackhq/next';`,\n `import * as request from '${RUNTIME_PACKAGE}/request';`,\n `import { RequestOptions } from '${RUNTIME_PACKAGE}/types';`,\n ]);\n\n const useFunc = sf.addFunction({\n name: `use${model.name}`,\n isExported: true,\n });\n\n useFunc.addStatements([\n 'const mutate = request.getMutate();',\n 'const { endpoint } = useContext(RequestHandlerContext);',\n ]);\n\n // create\n {\n const argsType = `Prisma.${model.name}CreateArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.CheckSelect<T, ${model.name}, Prisma.${model.name}GetPayload<T>>`;\n useFunc\n .addFunction({\n name: 'create',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n wrapReadbackErrorCheck(\n `return await request.post<${inputType}, ${returnType}>(\\`\\${endpoint}/${model.name}/create\\`, args, mutate);`\n ),\n ]);\n }\n\n // createMany\n {\n const argsType = `Prisma.${model.name}CreateManyArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.BatchPayload`;\n useFunc\n .addFunction({\n name: 'createMany',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return await request.post<${inputType}, ${returnType}>(\\`\\${endpoint}/${model.name}/createMany\\`, args, mutate);`,\n ]);\n }\n\n // findMany\n {\n const argsType = `Prisma.${model.name}FindManyArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Array<Prisma.${model.name}GetPayload<T>>`;\n useFunc\n .addFunction({\n name: 'findMany',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args?',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${model.name}/findMany\\`, args, options);`,\n ]);\n }\n\n // findUnique\n {\n const argsType = `Prisma.${model.name}FindUniqueArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'findUnique',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${model.name}/findUnique\\`, args, options);`,\n ]);\n }\n\n // findFirst\n {\n const argsType = `Prisma.${model.name}FindFirstArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'findFirst',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${model.name}/findFirst\\`, args, options);`,\n ]);\n }\n\n // update\n {\n const argsType = `Prisma.${model.name}UpdateArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'update',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n wrapReadbackErrorCheck(\n `return await request.put<${inputType}, ${returnType}>(\\`\\${endpoint}/${model.name}/update\\`, args, mutate);`\n ),\n ]);\n }\n\n // updateMany\n {\n const argsType = `Prisma.${model.name}UpdateManyArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.BatchPayload`;\n useFunc\n .addFunction({\n name: 'updateMany',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return await request.put<${inputType}, ${returnType}>(\\`\\${endpoint}/${model.name}/updateMany\\`, args, mutate);`,\n ]);\n }\n\n // upsert\n {\n const argsType = `Prisma.${model.name}UpsertArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'upsert',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n wrapReadbackErrorCheck(\n `return await request.put<${inputType}, ${returnType}>(\\`\\${endpoint}/${model.name}/upsert\\`, args, mutate);`\n ),\n ]);\n }\n\n // del\n {\n const argsType = `Prisma.${model.name}DeleteArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'del',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args?',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n wrapReadbackErrorCheck(\n `return await request.del<${returnType}>(\\`\\${endpoint}/${model.name}/delete\\`, args, mutate);`\n ),\n ]);\n }\n\n // deleteMany\n {\n const argsType = `Prisma.${model.name}DeleteManyArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.BatchPayload`;\n useFunc\n .addFunction({\n name: 'deleteMany',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args?',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return await request.del<${returnType}>(\\`\\${endpoint}/${model.name}/deleteMany\\`, args, mutate);`,\n ]);\n }\n\n // aggregate\n {\n const argsType = `Prisma.${model.name}AggregateArgs`;\n const inputType = `Prisma.Subset<T, ${argsType}>`;\n const returnType = `Prisma.Get${model.name}AggregateType<T>`;\n useFunc\n .addFunction({\n name: 'aggregate',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${model.name}/aggregate\\`, args, options);`,\n ]);\n }\n\n // groupBy\n {\n const returnType = `{} extends InputErrors ? Prisma.Get${model.name}GroupByPayload<T> : InputErrors`;\n useFunc\n .addFunction({\n name: 'groupBy',\n typeParameters: [\n `T extends Prisma.${model.name}GroupByArgs`,\n `HasSelectOrTake extends Prisma.Or<Prisma.Extends<'skip', Prisma.Keys<T>>, Prisma.Extends<'take', Prisma.Keys<T>>>`,\n `OrderByArg extends Prisma.True extends HasSelectOrTake ? { orderBy: Prisma.UserGroupByArgs['orderBy'] }: { orderBy?: Prisma.UserGroupByArgs['orderBy'] },`,\n `OrderFields extends Prisma.ExcludeUnderscoreKeys<Prisma.Keys<Prisma.MaybeTupleToUnion<T['orderBy']>>>`,\n `ByFields extends Prisma.TupleToUnion<T['by']>`,\n `ByValid extends Prisma.Has<ByFields, OrderFields>`,\n `HavingFields extends Prisma.GetHavingFields<T['having']>`,\n `HavingValid extends Prisma.Has<ByFields, HavingFields>`,\n `ByEmpty extends T['by'] extends never[] ? Prisma.True : Prisma.False`,\n `InputErrors extends ByEmpty extends Prisma.True\n ? \\`Error: \"by\" must not be empty.\\`\n : HavingValid extends Prisma.False\n ? {\n [P in HavingFields]: P extends ByFields\n ? never\n : P extends string\n ? \\`Error: Field \"\\${P}\" used in \"having\" needs to be provided in \"by\".\\`\n : [\n Error,\n 'Field ',\n P,\n \\` in \"having\" needs to be provided in \"by\"\\`,\n ]\n }[HavingFields]\n : 'take' extends Prisma.Keys<T>\n ? 'orderBy' extends Prisma.Keys<T>\n ? ByValid extends Prisma.True\n ? {}\n : {\n [P in OrderFields]: P extends ByFields\n ? never\n : \\`Error: Field \"\\${P}\" in \"orderBy\" needs to be provided in \"by\"\\`\n }[OrderFields]\n : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n : 'skip' extends Prisma.Keys<T>\n ? 'orderBy' extends Prisma.Keys<T>\n ? ByValid extends Prisma.True\n ? {}\n : {\n [P in OrderFields]: P extends ByFields\n ? never\n : \\`Error: Field \"\\${P}\" in \"orderBy\" needs to be provided in \"by\"\\`\n }[OrderFields]\n : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n : ByValid extends Prisma.True\n ? {}\n : {\n [P in OrderFields]: P extends ByFields\n ? never\n : \\`Error: Field \"\\${P}\" in \"orderBy\" needs to be provided in \"by\"\\`\n }[OrderFields]`,\n ],\n parameters: [\n {\n name: 'args',\n type: `Prisma.SubsetIntersection<T, Prisma.${model.name}GroupByArgs, OrderByArg> & InputErrors`,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${model.name}/groupBy\\`, args, options);`,\n ]);\n }\n\n // count\n {\n const argsType = `Prisma.${model.name}CountArgs`;\n const inputType = `Prisma.Subset<T, ${argsType}>`;\n const returnType = `T extends { select: any; } ? T['select'] extends true ? number : Prisma.GetScalarType<T['select'], Prisma.${model.name}CountAggregateOutputType> : number`;\n useFunc\n .addFunction({\n name: 'count',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([`return request.get<${returnType}>(\\`\\${endpoint}/${model.name}/count\\`, args, options);`]);\n }\n\n useFunc.addStatements([\n 'return { create, createMany, findMany, findUnique, findFirst, update, updateMany, upsert, del, deleteMany, aggregate, groupBy, count };',\n ]);\n\n sf.formatText();\n}\n\nfunction generateIndex(project: Project, outDir: string, models: DataModel[]) {\n const sf = project.createSourceFile(path.join(outDir, 'index.ts'), undefined, { overwrite: true });\n\n sf.addStatements(models.map((d) => `export * from './${paramCase(d.name)}';`));\n\n sf.formatText();\n}\n"],"mappings":";;;;;;AAAA;AAEA;AACA;AACA;AACA;AAAkD;AAAA;AAE3C,eAAeA,QAAQ,CAACC,KAAY,EAAEC,OAAsB,EAAE;EACjE,MAAMC,OAAO,GAAG,IAAIC,gBAAO,EAAE;EAC7B,MAAMC,MAAmB,GAAG,EAAE;EAC9B,MAAMC,QAAkB,GAAG,EAAE;EAE7B,KAAK,MAAMC,EAAE,IAAIN,KAAK,CAACO,YAAY,CAACC,MAAM,CAAEC,CAAC,IAAqB,IAAAC,gBAAW,EAACD,CAAC,CAAC,CAAC,EAAE;IAC/E,MAAME,YAAY,GAAGL,EAAE,CAACM,UAAU,CAACC,IAAI,CAAEC,IAAI;MAAA;MAAA,OAAK,mBAAAA,IAAI,CAACC,IAAI,CAACC,GAAG,mDAAb,eAAeC,IAAI,MAAK,SAAS;IAAA,EAAC;IACpF,IAAI,CAACN,YAAY,EAAE;MACfN,QAAQ,CAACa,IAAI,CAAE,6BAA4BZ,EAAE,CAACW,IAAK,4CAA2C,CAAC;IACnG,CAAC,MAAM;MACHb,MAAM,CAACc,IAAI,CAACZ,EAAE,CAAC;IACnB;EACJ;EAEA,MAAMa,MAAM,GAAIlB,OAAO,CAACmB,MAAM,IAAe,kCAAkC;EAE/EC,aAAa,CAACnB,OAAO,EAAEiB,MAAM,EAAEf,MAAM,CAAC;EAEtCA,MAAM,CAACkB,OAAO,CAAEb,CAAC,IAAKc,kBAAkB,CAACrB,OAAO,EAAEiB,MAAM,EAAEV,CAAC,CAAC,CAAC;EAE7D,MAAMP,OAAO,CAACsB,IAAI,EAAE;EACpB,OAAOnB,QAAQ;AACnB;AAEA,SAASoB,sBAAsB,CAACC,IAAY,EAAE;EAC1C,OAAQ;AACZ,UAAUA,IAAK;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AAEA,SAASH,kBAAkB,CAACrB,OAAgB,EAAEiB,MAAc,EAAEnB,KAAgB,EAAE;EAC5E,MAAM2B,QAAQ,GAAG,IAAAC,qBAAS,EAAC5B,KAAK,CAACiB,IAAI,CAAC;EACtC,MAAMY,EAAE,GAAG3B,OAAO,CAAC4B,gBAAgB,CAACC,IAAI,CAACC,IAAI,CAACb,MAAM,EAAG,GAAEQ,QAAS,KAAI,CAAC,EAAEM,SAAS,EAAE;IAAEC,SAAS,EAAE;EAAK,CAAC,CAAC;EAExGL,EAAE,CAACM,oBAAoB,CAAC;IACpBC,YAAY,EAAE,CAAC;MAAEnB,IAAI,EAAE;IAAS,CAAC,EAAG,QAAOjB,KAAK,CAACiB,IAAK,EAAC,CAAC;IACxDoB,eAAe,EAAE;EACrB,CAAC,CAAC;EACFR,EAAE,CAACS,aAAa,CAAC,CACZ,qCAAoC,EACpC,2DAA0D,EAC1D,6BAA4BC,4BAAgB,YAAW,EACvD,mCAAkCA,4BAAgB,UAAS,CAC/D,CAAC;EAEF,MAAMC,OAAO,GAAGX,EAAE,CAACY,WAAW,CAAC;IAC3BxB,IAAI,EAAG,MAAKjB,KAAK,CAACiB,IAAK,EAAC;IACxByB,UAAU,EAAE;EAChB,CAAC,CAAC;EAEFF,OAAO,CAACF,aAAa,CAAC,CAClB,qCAAqC,EACrC,yDAAyD,CAC5D,CAAC;;EAEF;EACA;IACI,MAAMK,QAAQ,GAAI,UAAS3C,KAAK,CAACiB,IAAK,YAAW;IACjD,MAAM2B,SAAS,GAAI,0BAAyBD,QAAS,GAAE;IACvD,MAAME,UAAU,GAAI,yBAAwB7C,KAAK,CAACiB,IAAK,YAAWjB,KAAK,CAACiB,IAAK,gBAAe;IAC5FuB,OAAO,CACFC,WAAW,CAAC;MACTxB,IAAI,EAAE,QAAQ;MACd6B,OAAO,EAAE,IAAI;MACbC,cAAc,EAAE,CAAE,aAAYJ,QAAS,EAAC,CAAC;MACzCK,UAAU,EAAE,CACR;QACI/B,IAAI,EAAE,MAAM;QACZgC,IAAI,EAAEL;MACV,CAAC;IAET,CAAC,CAAC,CACDM,OAAO,EAAE,CACTZ,aAAa,CAAC,CACXb,sBAAsB,CACjB,6BAA4BmB,SAAU,KAAIC,UAAW,oBAAmB7C,KAAK,CAACiB,IAAK,2BAA0B,CACjH,CACJ,CAAC;EACV;;EAEA;EACA;IACI,MAAM0B,QAAQ,GAAI,UAAS3C,KAAK,CAACiB,IAAK,gBAAe;IACrD,MAAM2B,SAAS,GAAI,0BAAyBD,QAAS,GAAE;IACvD,MAAME,UAAU,GAAI,qBAAoB;IACxCL,OAAO,CACFC,WAAW,CAAC;MACTxB,IAAI,EAAE,YAAY;MAClB6B,OAAO,EAAE,IAAI;MACbC,cAAc,EAAE,CAAE,aAAYJ,QAAS,EAAC,CAAC;MACzCK,UAAU,EAAE,CACR;QACI/B,IAAI,EAAE,MAAM;QACZgC,IAAI,EAAEL;MACV,CAAC;IAET,CAAC,CAAC,CACDM,OAAO,EAAE,CACTZ,aAAa,CAAC,CACV,6BAA4BM,SAAU,KAAIC,UAAW,oBAAmB7C,KAAK,CAACiB,IAAK,+BAA8B,CACrH,CAAC;EACV;;EAEA;EACA;IACI,MAAM0B,QAAQ,GAAI,UAAS3C,KAAK,CAACiB,IAAK,cAAa;IACnD,MAAM2B,SAAS,GAAI,0BAAyBD,QAAS,GAAE;IACvD,MAAME,UAAU,GAAI,gBAAe7C,KAAK,CAACiB,IAAK,gBAAe;IAC7DuB,OAAO,CACFC,WAAW,CAAC;MACTxB,IAAI,EAAE,UAAU;MAChB8B,cAAc,EAAE,CAAE,aAAYJ,QAAS,EAAC,CAAC;MACzCK,UAAU,EAAE,CACR;QACI/B,IAAI,EAAE,OAAO;QACbgC,IAAI,EAAEL;MACV,CAAC,EACD;QACI3B,IAAI,EAAE,UAAU;QAChBgC,IAAI,EAAG,kBAAiBJ,UAAW;MACvC,CAAC;IAET,CAAC,CAAC,CACDK,OAAO,EAAE,CACTZ,aAAa,CAAC,CACV,sBAAqBO,UAAW,oBAAmB7C,KAAK,CAACiB,IAAK,8BAA6B,CAC/F,CAAC;EACV;;EAEA;EACA;IACI,MAAM0B,QAAQ,GAAI,UAAS3C,KAAK,CAACiB,IAAK,gBAAe;IACrD,MAAM2B,SAAS,GAAI,0BAAyBD,QAAS,GAAE;IACvD,MAAME,UAAU,GAAI,UAAS7C,KAAK,CAACiB,IAAK,eAAc;IACtDuB,OAAO,CACFC,WAAW,CAAC;MACTxB,IAAI,EAAE,YAAY;MAClB8B,cAAc,EAAE,CAAE,aAAYJ,QAAS,EAAC,CAAC;MACzCK,UAAU,EAAE,CACR;QACI/B,IAAI,EAAE,MAAM;QACZgC,IAAI,EAAEL;MACV,CAAC,EACD;QACI3B,IAAI,EAAE,UAAU;QAChBgC,IAAI,EAAG,kBAAiBJ,UAAW;MACvC,CAAC;IAET,CAAC,CAAC,CACDK,OAAO,EAAE,CACTZ,aAAa,CAAC,CACV,sBAAqBO,UAAW,oBAAmB7C,KAAK,CAACiB,IAAK,gCAA+B,CACjG,CAAC;EACV;;EAEA;EACA;IACI,MAAM0B,QAAQ,GAAI,UAAS3C,KAAK,CAACiB,IAAK,eAAc;IACpD,MAAM2B,SAAS,GAAI,0BAAyBD,QAAS,GAAE;IACvD,MAAME,UAAU,GAAI,UAAS7C,KAAK,CAACiB,IAAK,eAAc;IACtDuB,OAAO,CACFC,WAAW,CAAC;MACTxB,IAAI,EAAE,WAAW;MACjB8B,cAAc,EAAE,CAAE,aAAYJ,QAAS,EAAC,CAAC;MACzCK,UAAU,EAAE,CACR;QACI/B,IAAI,EAAE,MAAM;QACZgC,IAAI,EAAEL;MACV,CAAC,EACD;QACI3B,IAAI,EAAE,UAAU;QAChBgC,IAAI,EAAG,kBAAiBJ,UAAW;MACvC,CAAC;IAET,CAAC,CAAC,CACDK,OAAO,EAAE,CACTZ,aAAa,CAAC,CACV,sBAAqBO,UAAW,oBAAmB7C,KAAK,CAACiB,IAAK,+BAA8B,CAChG,CAAC;EACV;;EAEA;EACA;IACI,MAAM0B,QAAQ,GAAI,UAAS3C,KAAK,CAACiB,IAAK,YAAW;IACjD,MAAM2B,SAAS,GAAI,0BAAyBD,QAAS,GAAE;IACvD,MAAME,UAAU,GAAI,UAAS7C,KAAK,CAACiB,IAAK,eAAc;IACtDuB,OAAO,CACFC,WAAW,CAAC;MACTxB,IAAI,EAAE,QAAQ;MACd6B,OAAO,EAAE,IAAI;MACbC,cAAc,EAAE,CAAE,aAAYJ,QAAS,EAAC,CAAC;MACzCK,UAAU,EAAE,CACR;QACI/B,IAAI,EAAE,MAAM;QACZgC,IAAI,EAAEL;MACV,CAAC;IAET,CAAC,CAAC,CACDM,OAAO,EAAE,CACTZ,aAAa,CAAC,CACXb,sBAAsB,CACjB,4BAA2BmB,SAAU,KAAIC,UAAW,oBAAmB7C,KAAK,CAACiB,IAAK,2BAA0B,CAChH,CACJ,CAAC;EACV;;EAEA;EACA;IACI,MAAM0B,QAAQ,GAAI,UAAS3C,KAAK,CAACiB,IAAK,gBAAe;IACrD,MAAM2B,SAAS,GAAI,0BAAyBD,QAAS,GAAE;IACvD,MAAME,UAAU,GAAI,qBAAoB;IACxCL,OAAO,CACFC,WAAW,CAAC;MACTxB,IAAI,EAAE,YAAY;MAClB6B,OAAO,EAAE,IAAI;MACbC,cAAc,EAAE,CAAE,aAAYJ,QAAS,EAAC,CAAC;MACzCK,UAAU,EAAE,CACR;QACI/B,IAAI,EAAE,MAAM;QACZgC,IAAI,EAAEL;MACV,CAAC;IAET,CAAC,CAAC,CACDM,OAAO,EAAE,CACTZ,aAAa,CAAC,CACV,4BAA2BM,SAAU,KAAIC,UAAW,oBAAmB7C,KAAK,CAACiB,IAAK,+BAA8B,CACpH,CAAC;EACV;;EAEA;EACA;IACI,MAAM0B,QAAQ,GAAI,UAAS3C,KAAK,CAACiB,IAAK,YAAW;IACjD,MAAM2B,SAAS,GAAI,0BAAyBD,QAAS,GAAE;IACvD,MAAME,UAAU,GAAI,UAAS7C,KAAK,CAACiB,IAAK,eAAc;IACtDuB,OAAO,CACFC,WAAW,CAAC;MACTxB,IAAI,EAAE,QAAQ;MACd6B,OAAO,EAAE,IAAI;MACbC,cAAc,EAAE,CAAE,aAAYJ,QAAS,EAAC,CAAC;MACzCK,UAAU,EAAE,CACR;QACI/B,IAAI,EAAE,MAAM;QACZgC,IAAI,EAAEL;MACV,CAAC;IAET,CAAC,CAAC,CACDM,OAAO,EAAE,CACTZ,aAAa,CAAC,CACXb,sBAAsB,CACjB,4BAA2BmB,SAAU,KAAIC,UAAW,oBAAmB7C,KAAK,CAACiB,IAAK,2BAA0B,CAChH,CACJ,CAAC;EACV;;EAEA;EACA;IACI,MAAM0B,QAAQ,GAAI,UAAS3C,KAAK,CAACiB,IAAK,YAAW;IACjD,MAAM2B,SAAS,GAAI,0BAAyBD,QAAS,GAAE;IACvD,MAAME,UAAU,GAAI,UAAS7C,KAAK,CAACiB,IAAK,eAAc;IACtDuB,OAAO,CACFC,WAAW,CAAC;MACTxB,IAAI,EAAE,KAAK;MACX6B,OAAO,EAAE,IAAI;MACbC,cAAc,EAAE,CAAE,aAAYJ,QAAS,EAAC,CAAC;MACzCK,UAAU,EAAE,CACR;QACI/B,IAAI,EAAE,OAAO;QACbgC,IAAI,EAAEL;MACV,CAAC;IAET,CAAC,CAAC,CACDM,OAAO,EAAE,CACTZ,aAAa,CAAC,CACXb,sBAAsB,CACjB,4BAA2BoB,UAAW,oBAAmB7C,KAAK,CAACiB,IAAK,2BAA0B,CAClG,CACJ,CAAC;EACV;;EAEA;EACA;IACI,MAAM0B,QAAQ,GAAI,UAAS3C,KAAK,CAACiB,IAAK,gBAAe;IACrD,MAAM2B,SAAS,GAAI,0BAAyBD,QAAS,GAAE;IACvD,MAAME,UAAU,GAAI,qBAAoB;IACxCL,OAAO,CACFC,WAAW,CAAC;MACTxB,IAAI,EAAE,YAAY;MAClB6B,OAAO,EAAE,IAAI;MACbC,cAAc,EAAE,CAAE,aAAYJ,QAAS,EAAC,CAAC;MACzCK,UAAU,EAAE,CACR;QACI/B,IAAI,EAAE,OAAO;QACbgC,IAAI,EAAEL;MACV,CAAC;IAET,CAAC,CAAC,CACDM,OAAO,EAAE,CACTZ,aAAa,CAAC,CACV,4BAA2BO,UAAW,oBAAmB7C,KAAK,CAACiB,IAAK,+BAA8B,CACtG,CAAC;EACV;;EAEA;EACA;IACI,MAAM0B,QAAQ,GAAI,UAAS3C,KAAK,CAACiB,IAAK,eAAc;IACpD,MAAM2B,SAAS,GAAI,oBAAmBD,QAAS,GAAE;IACjD,MAAME,UAAU,GAAI,aAAY7C,KAAK,CAACiB,IAAK,kBAAiB;IAC5DuB,OAAO,CACFC,WAAW,CAAC;MACTxB,IAAI,EAAE,WAAW;MACjB8B,cAAc,EAAE,CAAE,aAAYJ,QAAS,EAAC,CAAC;MACzCK,UAAU,EAAE,CACR;QACI/B,IAAI,EAAE,MAAM;QACZgC,IAAI,EAAEL;MACV,CAAC,EACD;QACI3B,IAAI,EAAE,UAAU;QAChBgC,IAAI,EAAG,kBAAiBJ,UAAW;MACvC,CAAC;IAET,CAAC,CAAC,CACDK,OAAO,EAAE,CACTZ,aAAa,CAAC,CACV,sBAAqBO,UAAW,oBAAmB7C,KAAK,CAACiB,IAAK,+BAA8B,CAChG,CAAC;EACV;;EAEA;EACA;IACI,MAAM4B,UAAU,GAAI,sCAAqC7C,KAAK,CAACiB,IAAK,iCAAgC;IACpGuB,OAAO,CACFC,WAAW,CAAC;MACTxB,IAAI,EAAE,SAAS;MACf8B,cAAc,EAAE,CACX,oBAAmB/C,KAAK,CAACiB,IAAK,aAAY,EAC1C,mHAAkH,EAClH,2JAA0J,EAC1J,uGAAsG,EACtG,+CAA8C,EAC9C,mDAAkD,EAClD,0DAAyD,EACzD,wDAAuD,EACvD,sEAAqE,EACrE;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,CAClB;MACD+B,UAAU,EAAE,CACR;QACI/B,IAAI,EAAE,MAAM;QACZgC,IAAI,EAAG,uCAAsCjD,KAAK,CAACiB,IAAK;MAC5D,CAAC,EACD;QACIA,IAAI,EAAE,UAAU;QAChBgC,IAAI,EAAG,kBAAiBJ,UAAW;MACvC,CAAC;IAET,CAAC,CAAC,CACDK,OAAO,EAAE,CACTZ,aAAa,CAAC,CACV,sBAAqBO,UAAW,oBAAmB7C,KAAK,CAACiB,IAAK,6BAA4B,CAC9F,CAAC;EACV;;EAEA;EACA;IACI,MAAM0B,QAAQ,GAAI,UAAS3C,KAAK,CAACiB,IAAK,WAAU;IAChD,MAAM2B,SAAS,GAAI,oBAAmBD,QAAS,GAAE;IACjD,MAAME,UAAU,GAAI,6GAA4G7C,KAAK,CAACiB,IAAK,oCAAmC;IAC9KuB,OAAO,CACFC,WAAW,CAAC;MACTxB,IAAI,EAAE,OAAO;MACb8B,cAAc,EAAE,CAAE,aAAYJ,QAAS,EAAC,CAAC;MACzCK,UAAU,EAAE,CACR;QACI/B,IAAI,EAAE,MAAM;QACZgC,IAAI,EAAEL;MACV,CAAC,EACD;QACI3B,IAAI,EAAE,UAAU;QAChBgC,IAAI,EAAG,kBAAiBJ,UAAW;MACvC,CAAC;IAET,CAAC,CAAC,CACDK,OAAO,EAAE,CACTZ,aAAa,CAAC,CAAE,sBAAqBO,UAAW,oBAAmB7C,KAAK,CAACiB,IAAK,2BAA0B,CAAC,CAAC;EACnH;EAEAuB,OAAO,CAACF,aAAa,CAAC,CAClB,yIAAyI,CAC5I,CAAC;EAEFT,EAAE,CAACsB,UAAU,EAAE;AACnB;AAEA,SAAS9B,aAAa,CAACnB,OAAgB,EAAEiB,MAAc,EAAEf,MAAmB,EAAE;EAC1E,MAAMyB,EAAE,GAAG3B,OAAO,CAAC4B,gBAAgB,CAACC,IAAI,CAACC,IAAI,CAACb,MAAM,EAAE,UAAU,CAAC,EAAEc,SAAS,EAAE;IAAEC,SAAS,EAAE;EAAK,CAAC,CAAC;EAElGL,EAAE,CAACS,aAAa,CAAClC,MAAM,CAACgD,GAAG,CAAE3C,CAAC,IAAM,oBAAmB,IAAAmB,qBAAS,EAACnB,CAAC,CAACQ,IAAI,CAAE,IAAG,CAAC,CAAC;EAE9EY,EAAE,CAACsB,UAAU,EAAE;AACnB"}
1
+ {"version":3,"file":"react-hooks-generator.js","names":["generate","model","options","project","Project","models","warnings","dm","declarations","filter","d","isDataModel","hasAllowRule","attributes","find","attr","decl","ref","name","push","outDir","output","generateIndex","forEach","generateModelHooks","save","wrapReadbackErrorCheck","code","fileName","paramCase","sf","createSourceFile","path","join","undefined","overwrite","addImportDeclaration","namedImports","moduleSpecifier","addStatements","RUNTIME_PACKAGE","useFunc","addFunction","isExported","modelRouteName","camelCase","argsType","inputType","returnType","isAsync","typeParameters","parameters","type","addBody","formatText","map"],"sources":["../../../src/plugins/react-hooks/react-hooks-generator.ts"],"sourcesContent":["import { DataModel, Model, isDataModel } from '@zenstackhq/language/ast';\nimport { PluginOptions } from '@zenstackhq/sdk';\nimport { camelCase, paramCase } from 'change-case';\nimport * as path from 'path';\nimport { Project } from 'ts-morph';\nimport { RUNTIME_PACKAGE } from '../plugin-utils';\n\nexport async function generate(model: Model, options: PluginOptions) {\n const project = new Project();\n const models: DataModel[] = [];\n const warnings: string[] = [];\n\n for (const dm of model.declarations.filter((d): d is DataModel => isDataModel(d))) {\n const hasAllowRule = dm.attributes.find((attr) => attr.decl.ref?.name === '@@allow');\n if (!hasAllowRule) {\n warnings.push(`Not generating hooks for \"${dm.name}\" because it doesn't have any @@allow rule`);\n } else {\n models.push(dm);\n }\n }\n\n const outDir = (options.output as string) ?? 'node_modules/.zenstack/src/hooks';\n\n generateIndex(project, outDir, models);\n\n models.forEach((d) => generateModelHooks(project, outDir, d));\n\n await project.save();\n return warnings;\n}\n\nfunction wrapReadbackErrorCheck(code: string) {\n return `try {\n ${code}\n } catch (err: unknown) {\n if (err instanceof Prisma.PrismaClientKnownRequestError && err.code === 'P2004') {\n // unable to readback data\n return undefined;\n } else {\n throw err;\n }\n }`;\n}\n\nfunction generateModelHooks(project: Project, outDir: string, model: DataModel) {\n const fileName = paramCase(model.name);\n const sf = project.createSourceFile(path.join(outDir, `${fileName}.ts`), undefined, { overwrite: true });\n\n sf.addImportDeclaration({\n namedImports: [{ name: 'Prisma' }, `type ${model.name}`],\n moduleSpecifier: '@prisma/client',\n });\n sf.addStatements([\n `import { useContext } from 'react';`,\n `import { RequestHandlerContext } from '@zenstackhq/next';`,\n `import * as request from '${RUNTIME_PACKAGE}/request';`,\n `import { RequestOptions } from '${RUNTIME_PACKAGE}/types';`,\n ]);\n\n const useFunc = sf.addFunction({\n name: `use${model.name}`,\n isExported: true,\n });\n\n useFunc.addStatements([\n 'const mutate = request.getMutate();',\n 'const { endpoint } = useContext(RequestHandlerContext);',\n ]);\n\n const modelRouteName = camelCase(model.name);\n\n // create\n {\n const argsType = `Prisma.${model.name}CreateArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.CheckSelect<T, ${model.name}, Prisma.${model.name}GetPayload<T>>`;\n useFunc\n .addFunction({\n name: 'create',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n wrapReadbackErrorCheck(\n `return await request.post<${inputType}, ${returnType}>(\\`\\${endpoint}/${modelRouteName}/create\\`, args, mutate);`\n ),\n ]);\n }\n\n // createMany\n {\n const argsType = `Prisma.${model.name}CreateManyArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.BatchPayload`;\n useFunc\n .addFunction({\n name: 'createMany',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return await request.post<${inputType}, ${returnType}>(\\`\\${endpoint}/${modelRouteName}/createMany\\`, args, mutate);`,\n ]);\n }\n\n // findMany\n {\n const argsType = `Prisma.${model.name}FindManyArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Array<Prisma.${model.name}GetPayload<T>>`;\n useFunc\n .addFunction({\n name: 'findMany',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args?',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/findMany\\`, args, options);`,\n ]);\n }\n\n // findUnique\n {\n const argsType = `Prisma.${model.name}FindUniqueArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'findUnique',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/findUnique\\`, args, options);`,\n ]);\n }\n\n // findFirst\n {\n const argsType = `Prisma.${model.name}FindFirstArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'findFirst',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/findFirst\\`, args, options);`,\n ]);\n }\n\n // update\n {\n const argsType = `Prisma.${model.name}UpdateArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'update',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n wrapReadbackErrorCheck(\n `return await request.put<${inputType}, ${returnType}>(\\`\\${endpoint}/${modelRouteName}/update\\`, args, mutate);`\n ),\n ]);\n }\n\n // updateMany\n {\n const argsType = `Prisma.${model.name}UpdateManyArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.BatchPayload`;\n useFunc\n .addFunction({\n name: 'updateMany',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return await request.put<${inputType}, ${returnType}>(\\`\\${endpoint}/${modelRouteName}/updateMany\\`, args, mutate);`,\n ]);\n }\n\n // upsert\n {\n const argsType = `Prisma.${model.name}UpsertArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'upsert',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n wrapReadbackErrorCheck(\n `return await request.put<${inputType}, ${returnType}>(\\`\\${endpoint}/${modelRouteName}/upsert\\`, args, mutate);`\n ),\n ]);\n }\n\n // del\n {\n const argsType = `Prisma.${model.name}DeleteArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.${model.name}GetPayload<T>`;\n useFunc\n .addFunction({\n name: 'del',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args?',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n wrapReadbackErrorCheck(\n `return await request.del<${returnType}>(\\`\\${endpoint}/${modelRouteName}/delete\\`, args, mutate);`\n ),\n ]);\n }\n\n // deleteMany\n {\n const argsType = `Prisma.${model.name}DeleteManyArgs`;\n const inputType = `Prisma.SelectSubset<T, ${argsType}>`;\n const returnType = `Prisma.BatchPayload`;\n useFunc\n .addFunction({\n name: 'deleteMany',\n isAsync: true,\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args?',\n type: inputType,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return await request.del<${returnType}>(\\`\\${endpoint}/${modelRouteName}/deleteMany\\`, args, mutate);`,\n ]);\n }\n\n // aggregate\n {\n const argsType = `Prisma.${model.name}AggregateArgs`;\n const inputType = `Prisma.Subset<T, ${argsType}>`;\n const returnType = `Prisma.Get${model.name}AggregateType<T>`;\n useFunc\n .addFunction({\n name: 'aggregate',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/aggregate\\`, args, options);`,\n ]);\n }\n\n // groupBy\n {\n const returnType = `{} extends InputErrors ? Prisma.Get${model.name}GroupByPayload<T> : InputErrors`;\n useFunc\n .addFunction({\n name: 'groupBy',\n typeParameters: [\n `T extends Prisma.${model.name}GroupByArgs`,\n `HasSelectOrTake extends Prisma.Or<Prisma.Extends<'skip', Prisma.Keys<T>>, Prisma.Extends<'take', Prisma.Keys<T>>>`,\n `OrderByArg extends Prisma.True extends HasSelectOrTake ? { orderBy: Prisma.UserGroupByArgs['orderBy'] }: { orderBy?: Prisma.UserGroupByArgs['orderBy'] },`,\n `OrderFields extends Prisma.ExcludeUnderscoreKeys<Prisma.Keys<Prisma.MaybeTupleToUnion<T['orderBy']>>>`,\n `ByFields extends Prisma.TupleToUnion<T['by']>`,\n `ByValid extends Prisma.Has<ByFields, OrderFields>`,\n `HavingFields extends Prisma.GetHavingFields<T['having']>`,\n `HavingValid extends Prisma.Has<ByFields, HavingFields>`,\n `ByEmpty extends T['by'] extends never[] ? Prisma.True : Prisma.False`,\n `InputErrors extends ByEmpty extends Prisma.True\n ? \\`Error: \"by\" must not be empty.\\`\n : HavingValid extends Prisma.False\n ? {\n [P in HavingFields]: P extends ByFields\n ? never\n : P extends string\n ? \\`Error: Field \"\\${P}\" used in \"having\" needs to be provided in \"by\".\\`\n : [\n Error,\n 'Field ',\n P,\n \\` in \"having\" needs to be provided in \"by\"\\`,\n ]\n }[HavingFields]\n : 'take' extends Prisma.Keys<T>\n ? 'orderBy' extends Prisma.Keys<T>\n ? ByValid extends Prisma.True\n ? {}\n : {\n [P in OrderFields]: P extends ByFields\n ? never\n : \\`Error: Field \"\\${P}\" in \"orderBy\" needs to be provided in \"by\"\\`\n }[OrderFields]\n : 'Error: If you provide \"take\", you also need to provide \"orderBy\"'\n : 'skip' extends Prisma.Keys<T>\n ? 'orderBy' extends Prisma.Keys<T>\n ? ByValid extends Prisma.True\n ? {}\n : {\n [P in OrderFields]: P extends ByFields\n ? never\n : \\`Error: Field \"\\${P}\" in \"orderBy\" needs to be provided in \"by\"\\`\n }[OrderFields]\n : 'Error: If you provide \"skip\", you also need to provide \"orderBy\"'\n : ByValid extends Prisma.True\n ? {}\n : {\n [P in OrderFields]: P extends ByFields\n ? never\n : \\`Error: Field \"\\${P}\" in \"orderBy\" needs to be provided in \"by\"\\`\n }[OrderFields]`,\n ],\n parameters: [\n {\n name: 'args',\n type: `Prisma.SubsetIntersection<T, Prisma.${model.name}GroupByArgs, OrderByArg> & InputErrors`,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/groupBy\\`, args, options);`,\n ]);\n }\n\n // count\n {\n const argsType = `Prisma.${model.name}CountArgs`;\n const inputType = `Prisma.Subset<T, ${argsType}>`;\n const returnType = `T extends { select: any; } ? T['select'] extends true ? number : Prisma.GetScalarType<T['select'], Prisma.${model.name}CountAggregateOutputType> : number`;\n useFunc\n .addFunction({\n name: 'count',\n typeParameters: [`T extends ${argsType}`],\n parameters: [\n {\n name: 'args',\n type: inputType,\n },\n {\n name: 'options?',\n type: `RequestOptions<${returnType}>`,\n },\n ],\n })\n .addBody()\n .addStatements([\n `return request.get<${returnType}>(\\`\\${endpoint}/${modelRouteName}/count\\`, args, options);`,\n ]);\n }\n\n useFunc.addStatements([\n 'return { create, createMany, findMany, findUnique, findFirst, update, updateMany, upsert, del, deleteMany, aggregate, groupBy, count };',\n ]);\n\n sf.formatText();\n}\n\nfunction generateIndex(project: Project, outDir: string, models: DataModel[]) {\n const sf = project.createSourceFile(path.join(outDir, 'index.ts'), undefined, { overwrite: true });\n\n sf.addStatements(models.map((d) => `export * from './${paramCase(d.name)}';`));\n\n sf.formatText();\n}\n"],"mappings":"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"}
package/telemetry.js CHANGED
@@ -24,7 +24,7 @@ class Telemetry {
24
24
  trackingToken = process && process.env && process.env.TELEMETRY_TRACKING_TOKEN || "74944eb779d7d3b4ce185be843fde9fc";
25
25
  _os = os.platform();
26
26
  // eslint-disable-next-line @typescript-eslint/no-var-requires
27
- version = require('../package.json').version;
27
+ version = require('./package.json').version;
28
28
  exitWait = 200;
29
29
  constructor() {
30
30
  if ((process && process.env && process.env.DO_NOT_TRACK || "1") !== '1' && this.trackingToken) {
package/telemetry.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","names":["Telemetry","hostId","machineIdSync","sessionid","cuid","trackingToken","_os","os","platform","version","require","exitWait","constructor","mixpanel","init","geolocate","exitHook","callback","sleep","errorHandler","err","track","message","stack","CliError","CommanderError","console","error","process","exit","unhandledRejectionHandler","uncaughtExceptionHandler","event","properties","payload","distinct_id","session","time","Date","$os","nodeVersion","trackSpan","startEvent","completeEvent","errorEvent","action","start","now","success","Promise","resolve","duration"],"sources":["../src/telemetry.ts"],"sourcesContent":["import { Mixpanel, init } from 'mixpanel';\nimport { machineIdSync } from 'node-machine-id';\nimport cuid from 'cuid';\nimport * as os from 'os';\nimport sleep from 'sleep-promise';\nimport exitHook from 'async-exit-hook';\nimport { CliError } from './cli/cli-error';\nimport { CommanderError } from 'commander';\n\n/**\n * Telemetry events\n */\nexport type TelemetryEvents =\n | 'cli:start'\n | 'cli:complete'\n | 'cli:error'\n | 'cli:command:start'\n | 'cli:command:complete'\n | 'cli:command:error'\n | 'cli:plugin:start'\n | 'cli:plugin:complete'\n | 'cli:plugin:error';\n\n/**\n * Utility class for sending telemetry\n */\nexport class Telemetry {\n private readonly mixpanel: Mixpanel | undefined;\n private readonly hostId = machineIdSync();\n private readonly sessionid = cuid();\n private readonly trackingToken = process.env.TELEMETRY_TRACKING_TOKEN;\n private readonly _os = os.platform();\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n private readonly version = require('../package.json').version;\n private exitWait = 200;\n\n constructor() {\n if (process.env.DO_NOT_TRACK !== '1' && this.trackingToken) {\n this.mixpanel = init(this.trackingToken, {\n geolocate: true,\n });\n }\n\n exitHook(async (callback) => {\n if (this.mixpanel) {\n // a small delay to ensure telemetry is sent\n await sleep(this.exitWait);\n }\n callback();\n });\n\n const errorHandler = async (err: Error) => {\n this.track('cli:error', {\n message: err.message,\n stack: err.stack,\n });\n if (this.mixpanel) {\n // a small delay to ensure telemetry is sent\n await sleep(this.exitWait);\n }\n\n if (err instanceof CliError || err instanceof CommanderError) {\n // error already logged\n } else {\n console.error('\\nAn unexpected error occurred:\\n', err);\n }\n\n process.exit(1);\n };\n\n exitHook.unhandledRejectionHandler(errorHandler);\n exitHook.uncaughtExceptionHandler(errorHandler);\n }\n\n track(event: TelemetryEvents, properties: Record<string, unknown> = {}) {\n if (this.mixpanel) {\n const payload = {\n distinct_id: this.hostId,\n session: this.sessionid,\n time: new Date(),\n $os: this._os,\n nodeVersion: process.version,\n version: this.version,\n ...properties,\n };\n this.mixpanel.track(event, payload);\n }\n }\n\n async trackSpan(\n startEvent: TelemetryEvents,\n completeEvent: TelemetryEvents,\n errorEvent: TelemetryEvents,\n properties: Record<string, unknown>,\n action: () => Promise<unknown> | void\n ) {\n this.track(startEvent, properties);\n const start = Date.now();\n let success = true;\n try {\n await Promise.resolve(action());\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (err: any) {\n this.track(errorEvent, {\n message: err.message,\n stack: err.stack,\n ...properties,\n });\n success = false;\n throw err;\n } finally {\n this.track(completeEvent, {\n duration: Date.now() - start,\n success,\n ...properties,\n });\n }\n }\n}\n\nexport default new Telemetry();\n"],"mappings":"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"}
1
+ {"version":3,"file":"telemetry.js","names":["Telemetry","hostId","machineIdSync","sessionid","cuid","trackingToken","_os","os","platform","version","require","exitWait","constructor","mixpanel","init","geolocate","exitHook","callback","sleep","errorHandler","err","track","message","stack","CliError","CommanderError","console","error","process","exit","unhandledRejectionHandler","uncaughtExceptionHandler","event","properties","payload","distinct_id","session","time","Date","$os","nodeVersion","trackSpan","startEvent","completeEvent","errorEvent","action","start","now","success","Promise","resolve","duration"],"sources":["../src/telemetry.ts"],"sourcesContent":["import { Mixpanel, init } from 'mixpanel';\nimport { machineIdSync } from 'node-machine-id';\nimport cuid from 'cuid';\nimport * as os from 'os';\nimport sleep from 'sleep-promise';\nimport exitHook from 'async-exit-hook';\nimport { CliError } from './cli/cli-error';\nimport { CommanderError } from 'commander';\n\n/**\n * Telemetry events\n */\nexport type TelemetryEvents =\n | 'cli:start'\n | 'cli:complete'\n | 'cli:error'\n | 'cli:command:start'\n | 'cli:command:complete'\n | 'cli:command:error'\n | 'cli:plugin:start'\n | 'cli:plugin:complete'\n | 'cli:plugin:error';\n\n/**\n * Utility class for sending telemetry\n */\nexport class Telemetry {\n private readonly mixpanel: Mixpanel | undefined;\n private readonly hostId = machineIdSync();\n private readonly sessionid = cuid();\n private readonly trackingToken = process.env.TELEMETRY_TRACKING_TOKEN;\n private readonly _os = os.platform();\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n private readonly version = require('./package.json').version;\n private exitWait = 200;\n\n constructor() {\n if (process.env.DO_NOT_TRACK !== '1' && this.trackingToken) {\n this.mixpanel = init(this.trackingToken, {\n geolocate: true,\n });\n }\n\n exitHook(async (callback) => {\n if (this.mixpanel) {\n // a small delay to ensure telemetry is sent\n await sleep(this.exitWait);\n }\n callback();\n });\n\n const errorHandler = async (err: Error) => {\n this.track('cli:error', {\n message: err.message,\n stack: err.stack,\n });\n if (this.mixpanel) {\n // a small delay to ensure telemetry is sent\n await sleep(this.exitWait);\n }\n\n if (err instanceof CliError || err instanceof CommanderError) {\n // error already logged\n } else {\n console.error('\\nAn unexpected error occurred:\\n', err);\n }\n\n process.exit(1);\n };\n\n exitHook.unhandledRejectionHandler(errorHandler);\n exitHook.uncaughtExceptionHandler(errorHandler);\n }\n\n track(event: TelemetryEvents, properties: Record<string, unknown> = {}) {\n if (this.mixpanel) {\n const payload = {\n distinct_id: this.hostId,\n session: this.sessionid,\n time: new Date(),\n $os: this._os,\n nodeVersion: process.version,\n version: this.version,\n ...properties,\n };\n this.mixpanel.track(event, payload);\n }\n }\n\n async trackSpan(\n startEvent: TelemetryEvents,\n completeEvent: TelemetryEvents,\n errorEvent: TelemetryEvents,\n properties: Record<string, unknown>,\n action: () => Promise<unknown> | void\n ) {\n this.track(startEvent, properties);\n const start = Date.now();\n let success = true;\n try {\n await Promise.resolve(action());\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (err: any) {\n this.track(errorEvent, {\n message: err.message,\n stack: err.stack,\n ...properties,\n });\n success = false;\n throw err;\n } finally {\n this.track(completeEvent, {\n duration: Date.now() - start,\n success,\n ...properties,\n });\n }\n }\n}\n\nexport default new Telemetry();\n"],"mappings":"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"}