
Security News
Meet Socket at Black Hat and DEF CON 2025 in Las Vegas
Meet Socket at Black Hat & DEF CON 2025 for 1:1s, insider security talks at Allegiant Stadium, and a private dinner with top minds in software supply chain security.
@paljs/types
Advanced tools
- [Introduction](#introduction) - [Installation](#installation) - [Usage](#usage) - [Features](#features) - [Configuration](#configuration) - [License](#license)
A comprehensive TypeScript type definitions package for the PalJS ecosystem. This package provides shared type definitions, interfaces, and utilities used across all PalJS packages for type safety and consistency.
npm install @paljs/types
# or
yarn add @paljs/types
# or
pnpm add @paljs/types
Types for CLI commands and project templates.
import { CliGeneratedExamples } from '@paljs/types';
// Available project examples
type CliGeneratedExamples = 'apollo-nexus-schema' | 'apollo-sdl-first' | 'graphql-modules' | 'full-stack-nextjs';
// Usage
const example: CliGeneratedExamples = 'full-stack-nextjs';
Core types for code generation functionality.
import { GeneratorOptions, QueriesAndMutations, Query, Mutation } from '@paljs/types';
// Available query types
type Query = 'findUnique' | 'findFirst' | 'findMany' | 'findCount' | 'aggregate';
// Available mutation types
type Mutation = 'createOne' | 'updateOne' | 'upsertOne' | 'deleteOne' | 'updateMany' | 'deleteMany';
// Combined queries and mutations
type QueriesAndMutations = Query | Mutation;
// Generator configuration interface
interface GeneratorOptions<
ModelName extends string = string,
ModelsObject extends Record<ModelName, Record<string, any>> = Record<ModelName, Record<string, any>>,
> {
// Return generated code as text instead of writing files
backAsText?: boolean;
// Prisma client instance name
prismaName: string;
// Models to include in generation
models?: ModelName[];
// Output directory
output: string;
// Generate JavaScript instead of TypeScript
javaScript?: boolean;
// Fields to exclude globally
excludeFields: string[];
// Models to exclude with specific operations
excludeModels: {
name: ModelName;
queries?: boolean;
mutations?: boolean;
}[];
// Disable all queries or mutations
disableQueries?: boolean;
disableMutations?: boolean;
// Fields to exclude per model
excludeFieldsByModel: {
[modelName in ModelName]: (keyof ModelsObject[modelName])[];
};
// Queries/mutations to exclude per model
excludeQueriesAndMutationsByModel: {
[modelName in ModelName]: QueriesAndMutations[];
};
// Queries/mutations to exclude globally
excludeQueriesAndMutations: QueriesAndMutations[];
// Input fields to exclude
excludeInputFields?: string[];
// Custom input filter function
filterInputs?: (input: DMMF.InputType) => DMMF.SchemaArg[];
// Disable field update operations input
doNotUseFieldUpdateOperationsInput?: boolean;
}
Types for PalJS configuration files.
import { ConfigFile } from '@paljs/types';
interface ConfigFile {
// Schema file path
schema?: string;
// Multi-schema configuration
multiSchema?: boolean;
schemas?: Record<string, SchemaConfig>;
// Backend generation settings
backend?: {
generator: 'nexus' | 'sdl' | 'graphql-modules';
output: string;
excludeFields?: string[];
excludeModels?: Array<{
name: string;
queries?: boolean;
mutations?: boolean;
}>;
// ... other backend options
};
// Frontend generation settings
frontend?: {
admin?: {
models: string[];
output: string;
pageContent?: string;
};
graphql?: {
output: string;
models?: string[];
};
};
}
interface SchemaConfig {
schema: string;
backend?: BackendConfig;
frontend?: FrontendConfig;
}
Types for admin interface generation.
import { AdminSchemaOptions } from '@paljs/types';
interface AdminSchemaOptions {
// Models to include in admin interface
models: string[];
// Output directory for admin pages
output: string;
// Custom page template
pageContent?: string;
// Exclude specific fields from admin
excludeFields?: Record<string, string[]>;
// Custom field configurations
fieldConfigs?: Record<string, FieldConfig[]>;
}
interface FieldConfig {
name: string;
type: 'text' | 'email' | 'number' | 'select' | 'textarea' | 'checkbox';
label: string;
required?: boolean;
options?: Array<{ value: string; label: string }>;
validation?: ValidationConfig;
}
interface ValidationConfig {
minLength?: number;
maxLength?: number;
min?: number;
max?: number;
pattern?: RegExp;
}
Types for generated schema output.
import { GeneratedSchema } from '@paljs/types';
interface GeneratedSchema {
// Generated file content
content: string;
// File path
path: string;
// Generation timestamp
timestamp: Date;
// Generator type used
generator: 'nexus' | 'sdl' | 'graphql-modules';
// Models included
models: string[];
// Configuration used
options: GeneratorOptions;
}
Extended Prisma DMMF types with additional functionality.
import { DMMF } from '@paljs/types';
// Re-exports Prisma DMMF types with extensions
namespace DMMF {
export interface Document {
datamodel: Datamodel;
schema: Schema;
mappings: Mappings;
}
export interface Model {
name: string;
dbName?: string;
fields: Field[];
primaryKey?: PrimaryKey;
uniqueFields: string[][];
uniqueIndexes: UniqueIndex[];
documentation?: string;
isGenerated?: boolean;
}
export interface Field {
name: string;
kind: FieldKind;
isList: boolean;
isRequired: boolean;
isUnique: boolean;
isId: boolean;
isReadOnly: boolean;
hasDefaultValue: boolean;
type: string;
relationName?: string;
relationFromFields?: string[];
relationToFields?: string[];
relationOnDelete?: string;
default?: FieldDefault;
documentation?: string;
isGenerated?: boolean;
isUpdatedAt?: boolean;
}
export interface InputType {
name: string;
constraints: {
maxNumFields?: number;
minNumFields?: number;
};
fields: SchemaArg[];
}
export interface SchemaArg {
name: string;
comment?: string;
isNullable: boolean;
isOptional: boolean;
inputTypes: SchemaArgInputType[];
deprecation?: Deprecation;
}
}
import type { GeneratorOptions, QueriesAndMutations } from '@paljs/types';
const generatorConfig: GeneratorOptions<'User' | 'Post'> = {
prismaName: 'prisma',
output: './src/generated',
models: ['User', 'Post'],
excludeFields: ['password', 'hash'],
excludeModels: [
{ name: 'User', mutations: false },
{ name: 'Post', queries: false },
],
excludeQueriesAndMutations: ['deleteMany', 'updateMany'],
excludeFieldsByModel: {
User: ['internalNotes'],
Post: ['adminComments'],
},
excludeQueriesAndMutationsByModel: {
User: ['deleteMany'],
Post: ['updateMany'],
},
};
import type { CliGeneratedExamples } from '@paljs/types';
function validateExample(example: string): example is CliGeneratedExamples {
const validExamples: CliGeneratedExamples[] = [
'apollo-nexus-schema',
'apollo-sdl-first',
'graphql-modules',
'full-stack-nextjs',
];
return validExamples.includes(example as CliGeneratedExamples);
}
// Usage
const userInput = 'full-stack-nextjs';
if (validateExample(userInput)) {
console.log(`Valid example: ${userInput}`);
}
import type { ConfigFile } from '@paljs/types';
const config: ConfigFile = {
schema: './prisma/schema.prisma',
backend: {
generator: 'nexus',
output: './src/graphql',
excludeFields: ['password'],
excludeModels: [{ name: 'Log', queries: true, mutations: false }],
},
frontend: {
admin: {
models: ['User', 'Post', 'Category'],
output: './src/admin/pages',
},
graphql: {
output: './src/graphql/generated',
models: ['User', 'Post'],
},
},
};
import type { ConfigFile } from '@paljs/types';
const multiSchemaConfig: ConfigFile = {
multiSchema: true,
schemas: {
user: {
schema: './prisma/user.prisma',
backend: {
generator: 'nexus',
output: './src/graphql/user',
},
},
blog: {
schema: './prisma/blog.prisma',
backend: {
generator: 'sdl',
output: './src/graphql/blog',
},
},
},
};
import type { AdminSchemaOptions, FieldConfig } from '@paljs/types';
const adminConfig: AdminSchemaOptions = {
models: ['User', 'Post', 'Category'],
output: './src/admin',
excludeFields: {
User: ['password', 'hash'],
Post: ['internalNotes'],
},
fieldConfigs: {
User: [
{
name: 'email',
type: 'email',
label: 'Email Address',
required: true,
validation: {
pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
},
},
{
name: 'role',
type: 'select',
label: 'User Role',
options: [
{ value: 'USER', label: 'User' },
{ value: 'ADMIN', label: 'Administrator' },
],
},
],
},
};
import type { Query, Mutation, QueriesAndMutations } from '@paljs/types';
function isQuery(operation: QueriesAndMutations): operation is Query {
const queries: Query[] = ['findUnique', 'findFirst', 'findMany', 'findCount', 'aggregate'];
return queries.includes(operation as Query);
}
function isMutation(operation: QueriesAndMutations): operation is Mutation {
const mutations: Mutation[] = ['createOne', 'updateOne', 'upsertOne', 'deleteOne', 'updateMany', 'deleteMany'];
return mutations.includes(operation as Mutation);
}
// Usage
const operation: QueriesAndMutations = 'findMany';
if (isQuery(operation)) {
console.log(`${operation} is a query operation`);
} else if (isMutation(operation)) {
console.log(`${operation} is a mutation operation`);
}
import type { GeneratorOptions } from '@paljs/types';
// Define your model types
interface UserModel {
id: number;
email: string;
name?: string;
password: string;
}
interface PostModel {
id: number;
title: string;
content?: string;
authorId: number;
}
// Use with generic types
type MyModels = {
User: UserModel;
Post: PostModel;
};
const config: GeneratorOptions<keyof MyModels, MyModels> = {
prismaName: 'prisma',
output: './src/generated',
models: ['User', 'Post'], // Type-safe model names
excludeFields: ['password'],
excludeFieldsByModel: {
User: ['password'], // Type-safe field names
Post: ['content'],
},
};
This package provides types used throughout the PalJS ecosystem:
GeneratorOptions
, QueriesAndMutations
CliGeneratedExamples
, ConfigFile
For optimal type checking, configure your tsconfig.json
:
{
"compilerOptions": {
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true
},
"include": ["src/**/*", "node_modules/@paljs/types/**/*"]
}
MIT License - see the LICENSE file for details.
FAQs
- [Introduction](#introduction) - [Installation](#installation) - [Usage](#usage) - [Features](#features) - [Configuration](#configuration) - [License](#license)
The npm package @paljs/types receives a total of 6,899 weekly downloads. As such, @paljs/types popularity was classified as popular.
We found that @paljs/types demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Meet Socket at Black Hat & DEF CON 2025 for 1:1s, insider security talks at Allegiant Stadium, and a private dinner with top minds in software supply chain security.
Security News
CAI is a new open source AI framework that automates penetration testing tasks like scanning and exploitation up to 3,600× faster than humans.
Security News
Deno 2.4 brings back bundling, improves dependency updates and telemetry, and makes the runtime more practical for real-world JavaScript projects.