create-joist-app 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/build/index.js +51 -32
  2. package/build/index.js.map +1 -1
  3. package/package.json +1 -1
  4. package/templates/basic/README.md +70 -0
  5. package/templates/basic/gitignore +28 -0
  6. package/templates/basic/jest.config.js +14 -0
  7. package/templates/basic/joist-config.json +7 -0
  8. package/templates/basic/migrations/1580658856631_initial.ts +22 -0
  9. package/templates/basic/package.json +28 -0
  10. package/templates/basic/src/context.ts +14 -0
  11. package/templates/basic/src/entities/Author.test.ts +17 -0
  12. package/templates/basic/src/entities/Author.ts +7 -0
  13. package/templates/basic/src/entities/Book.ts +3 -0
  14. package/templates/basic/src/entities/entities.ts +14 -0
  15. package/templates/basic/src/entities/factories/index.ts +2 -0
  16. package/templates/basic/src/entities/factories/newAuthor.ts +6 -0
  17. package/templates/basic/src/entities/factories/newBook.ts +6 -0
  18. package/templates/basic/src/entities/index.ts +3 -0
  19. package/templates/basic/src/setupTestEnv.ts +5 -0
  20. package/templates/basic/src/setupTests.ts +29 -0
  21. package/templates/basic/tsconfig.json +23 -0
  22. package/templates/graphql/README.md +84 -0
  23. package/templates/graphql/codegen.yml +11 -0
  24. package/templates/graphql/gitignore +28 -0
  25. package/templates/graphql/graphql-codegen-joist.js +5 -0
  26. package/templates/graphql/graphql-codegen.js +26 -0
  27. package/templates/graphql/jest.config.js +14 -0
  28. package/templates/graphql/joist-config.json +8 -0
  29. package/templates/graphql/migrations/1580658856631_initial.ts +38 -0
  30. package/templates/graphql/package.json +41 -0
  31. package/templates/graphql/schema/.history.json +9 -0
  32. package/templates/graphql/schema/author.graphql +20 -0
  33. package/templates/graphql/schema/book.graphql +19 -0
  34. package/templates/graphql/schema/enums.graphql +0 -0
  35. package/templates/graphql/schema/root.graphql +0 -0
  36. package/templates/graphql/src/.history.json +12 -0
  37. package/templates/graphql/src/context.ts +14 -0
  38. package/templates/graphql/src/entities/Author.test.ts +36 -0
  39. package/templates/graphql/src/entities/Author.ts +7 -0
  40. package/templates/graphql/src/entities/Book.ts +3 -0
  41. package/templates/graphql/src/entities/entities.ts +14 -0
  42. package/templates/graphql/src/entities/factories/index.ts +2 -0
  43. package/templates/graphql/src/entities/factories/newAuthor.ts +6 -0
  44. package/templates/graphql/src/entities/factories/newBook.ts +6 -0
  45. package/templates/graphql/src/entities/index.ts +3 -0
  46. package/templates/graphql/src/jest.d.ts +9 -0
  47. package/templates/graphql/src/resolvers/author/authorResolvers.test.ts +17 -0
  48. package/templates/graphql/src/resolvers/author/authorResolvers.ts +5 -0
  49. package/templates/graphql/src/resolvers/author/saveAuthorMutation.test.ts +13 -0
  50. package/templates/graphql/src/resolvers/author/saveAuthorMutation.ts +9 -0
  51. package/templates/graphql/src/resolvers/book/bookResolvers.test.ts +17 -0
  52. package/templates/graphql/src/resolvers/book/bookResolvers.ts +5 -0
  53. package/templates/graphql/src/resolvers/book/saveBookMutation.test.ts +16 -0
  54. package/templates/graphql/src/resolvers/book/saveBookMutation.ts +9 -0
  55. package/templates/graphql/src/resolvers/enumResolvers.ts +5 -0
  56. package/templates/graphql/src/resolvers/index.ts +15 -0
  57. package/templates/graphql/src/resolvers/mutations/index.ts +7 -0
  58. package/templates/graphql/src/resolvers/objects/index.ts +6 -0
  59. package/templates/graphql/src/resolvers/testUtils.ts +10 -0
  60. package/templates/graphql/src/resolvers/utils.ts +1 -0
  61. package/templates/graphql/src/server.ts +37 -0
  62. package/templates/graphql/src/setupIt.ts +17 -0
  63. package/templates/graphql/src/setupTestEnv.ts +5 -0
  64. package/templates/graphql/src/setupTests.ts +37 -0
  65. package/templates/graphql/tsconfig.json +23 -0
package/build/index.js CHANGED
@@ -21,7 +21,7 @@ async function main() {
21
21
  .version(packageJson.version)
22
22
  .description("Create a new Joist ORM project")
23
23
  .argument("[project-directory]", "Directory to create the project in")
24
- .option("-t, --template <template>", "Template to use (basic, graphql)", "basic")
24
+ .option("-t, --template <template>", "Template to use (basic, graphql)")
25
25
  .option("--use-yarn", "Use Yarn as the package manager")
26
26
  .option("--use-npm", "Use npm as the package manager")
27
27
  .option("--use-pnpm", "Use pnpm as the package manager")
@@ -95,6 +95,39 @@ async function main() {
95
95
  console.error(picocolors_1.default.red(`Directory is not empty: ${resolvedPath}`));
96
96
  process.exit(1);
97
97
  }
98
+ // Get database configuration
99
+ let dbConfig = {
100
+ host: opts.dbHost || "localhost",
101
+ port: opts.dbPort || "5432",
102
+ user: opts.dbUser || projectName.replace(/-/g, "_") + "_user",
103
+ password: opts.dbPassword || "local",
104
+ name: opts.dbName || projectName.replace(/-/g, "_"),
105
+ };
106
+ if (!opts.yes) {
107
+ const response = await (0, prompts_1.default)([
108
+ {
109
+ type: "text",
110
+ name: "dbName",
111
+ message: "Database name:",
112
+ initial: dbConfig.name,
113
+ },
114
+ {
115
+ type: "text",
116
+ name: "dbUser",
117
+ message: "Database user:",
118
+ initial: dbConfig.user,
119
+ },
120
+ ]);
121
+ if (response.dbName === undefined) {
122
+ console.log(picocolors_1.default.red("Cancelled."));
123
+ process.exit(1);
124
+ }
125
+ dbConfig = {
126
+ ...dbConfig,
127
+ name: response.dbName || dbConfig.name,
128
+ user: response.dbUser || dbConfig.user,
129
+ };
130
+ }
98
131
  // Determine template
99
132
  let template = opts.template || "basic";
100
133
  if (!opts.yes && !opts.template) {
@@ -112,7 +145,7 @@ async function main() {
112
145
  ],
113
146
  initial: 0,
114
147
  });
115
- if (!response.template) {
148
+ if (response.template === undefined) {
116
149
  console.log(picocolors_1.default.red("Cancelled."));
117
150
  process.exit(1);
118
151
  }
@@ -132,41 +165,27 @@ async function main() {
132
165
  else if (opts.useBun) {
133
166
  packageManager = "bun";
134
167
  }
135
- else {
168
+ else if (opts.yes) {
136
169
  packageManager = (0, get_package_manager_1.getPackageManager)();
137
170
  }
138
- // Get database configuration
139
- let dbConfig = {
140
- host: opts.dbHost || "localhost",
141
- port: opts.dbPort || "5432",
142
- user: opts.dbUser || projectName.replace(/-/g, "_") + "_user",
143
- password: opts.dbPassword || "local",
144
- name: opts.dbName || projectName.replace(/-/g, "_"),
145
- };
146
- if (!opts.yes) {
147
- const response = await (0, prompts_1.default)([
148
- {
149
- type: "text",
150
- name: "dbName",
151
- message: "Database name:",
152
- initial: dbConfig.name,
153
- },
154
- {
155
- type: "text",
156
- name: "dbUser",
157
- message: "Database user:",
158
- initial: dbConfig.user,
159
- },
160
- ]);
161
- if (response.dbName === undefined) {
171
+ else {
172
+ const response = await (0, prompts_1.default)({
173
+ type: "select",
174
+ name: "packageManager",
175
+ message: "Which package manager would you like to use?",
176
+ choices: [
177
+ { title: "npm", value: "npm" },
178
+ { title: "yarn", value: "yarn" },
179
+ { title: "pnpm", value: "pnpm" },
180
+ { title: "bun", value: "bun" },
181
+ ],
182
+ initial: 0,
183
+ });
184
+ if (response.packageManager === undefined) {
162
185
  console.log(picocolors_1.default.red("Cancelled."));
163
186
  process.exit(1);
164
187
  }
165
- dbConfig = {
166
- ...dbConfig,
167
- name: response.dbName || dbConfig.name,
168
- user: response.dbUser || dbConfig.user,
169
- };
188
+ packageManager = response.packageManager;
170
189
  }
171
190
  console.log();
172
191
  console.log(`Creating a new Joist app in ${picocolors_1.default.green(resolvedPath)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-joist-app",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Create a new Joist ORM project with a single command",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -0,0 +1,70 @@
1
+ # {{PROJECT_NAME}}
2
+
3
+ A [Joist ORM](https://joist-orm.io/) project.
4
+
5
+ ## Getting Started
6
+
7
+ ### Prerequisites
8
+
9
+ - Node.js 18+
10
+ - Docker (for PostgreSQL)
11
+
12
+ ### Setup
13
+
14
+ 1. Start the database and run initial setup:
15
+
16
+ ```bash
17
+ yarn db
18
+ ```
19
+
20
+ This command will:
21
+ - Start a PostgreSQL container
22
+ - Run database migrations
23
+ - Generate Joist entity code
24
+
25
+ ### Development
26
+
27
+ #### Running Tests
28
+
29
+ ```bash
30
+ yarn test
31
+ ```
32
+
33
+ #### Creating a New Migration
34
+
35
+ ```bash
36
+ yarn migrate:new my-migration-name
37
+ ```
38
+
39
+ Then edit the generated file in `migrations/` and run:
40
+
41
+ ```bash
42
+ yarn migrate
43
+ yarn codegen
44
+ ```
45
+
46
+ #### Resetting the Database
47
+
48
+ ```bash
49
+ yarn redb
50
+ ```
51
+
52
+ ### Project Structure
53
+
54
+ ```
55
+ ├── migrations/ # Database migrations
56
+ ├── src/
57
+ │ ├── entities/ # Joist entities
58
+ │ │ ├── codegen/ # Generated code (do not edit)
59
+ │ │ └── factories/ # Test factories
60
+ │ ├── context.ts # Request context
61
+ │ ├── setupTestEnv.ts # Global test setup
62
+ │ └── setupTests.ts # Per-suite test setup
63
+ ├── docker-compose.yml # PostgreSQL service
64
+ └── joist-config.json # Joist configuration
65
+ ```
66
+
67
+ ## Learn More
68
+
69
+ - [Joist Documentation](https://joist-orm.io/)
70
+ - [GitHub Repository](https://github.com/joist-orm/joist-orm)
@@ -0,0 +1,28 @@
1
+ # Dependencies
2
+ node_modules/
3
+
4
+ # Build output
5
+ build/
6
+ dist/
7
+
8
+ # IDE
9
+ .idea/
10
+ .vscode/
11
+ *.swp
12
+ *.swo
13
+
14
+ # OS
15
+ .DS_Store
16
+ Thumbs.db
17
+
18
+ # Test output
19
+ coverage/
20
+
21
+ # Logs
22
+ *.log
23
+ npm-debug.log*
24
+ yarn-debug.log*
25
+ yarn-error.log*
26
+
27
+ # TypeScript
28
+ *.tsbuildinfo
@@ -0,0 +1,14 @@
1
+ /** @type {import('jest').Config} */
2
+ module.exports = {
3
+ transform: {
4
+ "^.+\\.tsx?$": "@swc/jest",
5
+ },
6
+ moduleNameMapper: {
7
+ "^src/(.*)$": "<rootDir>/src/$1",
8
+ },
9
+ testMatch: ["<rootDir>/src/**/*.test.{ts,tsx}"],
10
+ testEnvironment: "node",
11
+ globalSetup: "./src/setupTestEnv.ts",
12
+ setupFilesAfterEnv: ["./src/setupTests.ts"],
13
+ maxWorkers: 1,
14
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "contextType": "Context@src/context",
3
+ "entities": { "Author": { "tag": "a" }, "Book": { "tag": "b" } },
4
+ "entitiesDirectory": "./src/entities",
5
+ "idType": "tagged-string",
6
+ "version": "0.0.0"
7
+ }
@@ -0,0 +1,22 @@
1
+ import {
2
+ createCreatedAtFunction,
3
+ createEntityTable,
4
+ createUpdatedAtFunction,
5
+ foreignKey,
6
+ } from "joist-migration-utils";
7
+ import { MigrationBuilder } from "node-pg-migrate";
8
+
9
+ export function up(b: MigrationBuilder): void {
10
+ createUpdatedAtFunction(b);
11
+ createCreatedAtFunction(b);
12
+
13
+ createEntityTable(b, "authors", {
14
+ first_name: { type: "varchar(255)", notNull: true },
15
+ last_name: { type: "varchar(255)", notNull: false },
16
+ });
17
+
18
+ createEntityTable(b, "books", {
19
+ title: { type: "varchar(255)", notNull: true },
20
+ author_id: foreignKey("authors", { notNull: true }),
21
+ });
22
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "basic-template",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "build": "tsc",
7
+ "test": "env-cmd jest --runInBand",
8
+ "codegen": "env-cmd yarn joist-codegen",
9
+ "format": "prettier --write \"src/**/*.{ts,tsx}\""
10
+ },
11
+ "dependencies": {
12
+ "@types/pg": "^8.18.0",
13
+ "joist-orm": "2.0.3-next.36",
14
+ "pg": "^8.16.3"
15
+ },
16
+ "devDependencies": {
17
+ "@swc/core": "^1.13.0",
18
+ "@swc/jest": "^0.2.39",
19
+ "@types/jest": "^30.0.0",
20
+ "@types/node": "^24.0.0",
21
+ "env-cmd": "^11.0.0",
22
+ "jest": "^30.0.0",
23
+ "node-pg-migrate": "^8.0.4",
24
+ "prettier": "^3.6.0",
25
+ "tsx": "^4.20.0",
26
+ "typescript": "^5.9.0"
27
+ }
28
+ }
@@ -0,0 +1,14 @@
1
+ import { EntityManager, newPgConnectionConfig } from "joist-orm";
2
+ import { PostgresDriver } from "joist-orm/pg";
3
+ import { Pool } from "pg";
4
+
5
+ export interface Context {
6
+ pool: Pool;
7
+ em: EntityManager;
8
+ }
9
+
10
+ export function newContext(): Context {
11
+ const pool = new Pool(newPgConnectionConfig());
12
+ const em = new EntityManager({}, new PostgresDriver(pool));
13
+ return { em, pool };
14
+ }
@@ -0,0 +1,17 @@
1
+ import { newEm } from "../setupTests";
2
+ import { newAuthor, newBook } from "./factories";
3
+
4
+ describe("Author", () => {
5
+ it("can create an author", async () => {
6
+ const em = newEm();
7
+ newAuthor(em, { firstName: "John", lastName: "Doe" });
8
+ await em.flush();
9
+ });
10
+
11
+ it("can have books", async () => {
12
+ const em = newEm();
13
+ const author = newAuthor(em, { firstName: "Test", lastName: "Author" });
14
+ newBook(em, { title: "Test Book", author });
15
+ await em.flush();
16
+ });
17
+ });
@@ -0,0 +1,7 @@
1
+ import { AuthorCodegen } from "./codegen/AuthorCodegen";
2
+
3
+ export class Author extends AuthorCodegen {
4
+ get fullName(): string {
5
+ return `${this.firstName} ${this.lastName}`;
6
+ }
7
+ }
@@ -0,0 +1,3 @@
1
+ import { BookCodegen } from "./codegen/BookCodegen";
2
+
3
+ export class Book extends BookCodegen {}
@@ -0,0 +1,14 @@
1
+ // organize-imports-ignore
2
+
3
+ // This file drives our import order to avoid undefined errors
4
+ // when the subclasses extend the base classes, see:
5
+ // https://medium.com/visual-development/how-to-fix-nasty-circular-dependency-issues-once-and-for-all-in-javascript-typescript-a04c987cf0de
6
+
7
+ export * from "./codegen/AuthorCodegen";
8
+ export * from "./codegen/BookCodegen";
9
+ export * from "./Author";
10
+ export * from "./Book";
11
+
12
+ export * from "./factories/newAuthor";
13
+ export * from "./factories/newBook";
14
+ export * from "./codegen/metadata";
@@ -0,0 +1,2 @@
1
+ export * from "./newAuthor";
2
+ export * from "./newBook";
@@ -0,0 +1,6 @@
1
+ import { EntityManager, FactoryOpts, newTestInstance } from "joist-orm";
2
+ import { Author } from "../entities";
3
+
4
+ export function newAuthor(em: EntityManager, opts?: FactoryOpts<Author>): Author {
5
+ return newTestInstance(em, Author, opts);
6
+ }
@@ -0,0 +1,6 @@
1
+ import { EntityManager, FactoryOpts, newTestInstance } from "joist-orm";
2
+ import { Book } from "../entities";
3
+
4
+ export function newBook(em: EntityManager, opts?: FactoryOpts<Book>): Book {
5
+ return newTestInstance(em, Book, opts);
6
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./entities";
2
+ export * from "./Author";
3
+ export * from "./Book";
@@ -0,0 +1,5 @@
1
+ import { GetEnvVars } from "env-cmd";
2
+
3
+ export default async function globalSetup() {
4
+ Object.entries(await GetEnvVars()).forEach(([key, value]) => (process.env[key] = value));
5
+ }
@@ -0,0 +1,29 @@
1
+ import expect from "expect";
2
+ import { newPgConnectionConfig } from "joist-orm";
3
+ import { PostgresDriver } from "joist-orm/pg";
4
+ import { toMatchEntity } from "joist-orm/tests";
5
+ import pg from "pg";
6
+ import { Context } from "./context";
7
+ import { EntityManager } from "./entities";
8
+
9
+ expect.extend({ toMatchEntity });
10
+
11
+ let pool: pg.Pool;
12
+
13
+ beforeAll(async () => {
14
+ pool = new pg.Pool(newPgConnectionConfig());
15
+ });
16
+
17
+ beforeEach(async () => {
18
+ await pool.query("select flush_database()");
19
+ });
20
+
21
+ afterAll(async () => {
22
+ await pool.end();
23
+ });
24
+
25
+ export function newEm(): EntityManager {
26
+ const driver = new PostgresDriver(pool);
27
+ const ctx = { pool, em: null as any } satisfies Context;
28
+ return new EntityManager(ctx, driver);
29
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "nodenext",
5
+ "lib": ["ES2022"],
6
+ "moduleResolution": "nodenext",
7
+ "esModuleInterop": true,
8
+ "strict": true,
9
+ "skipLibCheck": true,
10
+ "forceConsistentCasingInFileNames": true,
11
+ "declaration": true,
12
+ "declarationMap": true,
13
+ "sourceMap": true,
14
+ "outDir": "./build",
15
+ "rootDir": "./src",
16
+ "baseUrl": "./src",
17
+ "paths": {
18
+ "src/*": ["./*"]
19
+ }
20
+ },
21
+ "include": ["src"],
22
+ "exclude": ["node_modules", "build"]
23
+ }
@@ -0,0 +1,84 @@
1
+ # {{PROJECT_NAME}}
2
+
3
+ A [Joist ORM](https://joist-orm.io/) project with GraphQL.
4
+
5
+ ## Getting Started
6
+
7
+ ### Prerequisites
8
+
9
+ - Node.js 18+
10
+ - Docker (for PostgreSQL)
11
+
12
+ ### Setup
13
+
14
+ 1. Start the database and run initial setup:
15
+
16
+ ```bash
17
+ yarn db
18
+ ```
19
+
20
+ This command will:
21
+ - Start a PostgreSQL container
22
+ - Run database migrations
23
+ - Generate Joist entity code and GraphQL types
24
+
25
+ ### Development
26
+
27
+ #### Starting the Server
28
+
29
+ ```bash
30
+ yarn dev
31
+ ```
32
+
33
+ The GraphQL server will start at http://localhost:4000
34
+
35
+ #### Running Tests
36
+
37
+ ```bash
38
+ yarn test
39
+ ```
40
+
41
+ #### Creating a New Migration
42
+
43
+ ```bash
44
+ yarn migrate:new my-migration-name
45
+ ```
46
+
47
+ Then edit the generated file in `migrations/` and run:
48
+
49
+ ```bash
50
+ yarn migrate
51
+ yarn codegen
52
+ ```
53
+
54
+ #### Resetting the Database
55
+
56
+ ```bash
57
+ yarn redb
58
+ ```
59
+
60
+ ### Project Structure
61
+
62
+ ```
63
+ ├── migrations/ # Database migrations
64
+ ├── src/
65
+ │ ├── entities/ # Joist entities
66
+ │ │ ├── codegen/ # Generated entity code (do not edit)
67
+ │ │ └── factories/ # Test factories
68
+ │ ├── resolvers/ # GraphQL resolvers
69
+ │ ├── generated/ # Generated GraphQL types (do not edit)
70
+ │ ├── context.ts # Request context
71
+ │ ├── schema.graphql # GraphQL schema
72
+ │ ├── server.ts # Apollo Server setup
73
+ │ ├── setupTestEnv.ts # Global test setup
74
+ │ └── setupTests.ts # Per-suite test setup
75
+ ├── docker-compose.yml # PostgreSQL service
76
+ ├── joist-config.json # Joist configuration
77
+ └── codegen.yml # GraphQL codegen configuration
78
+ ```
79
+
80
+ ## Learn More
81
+
82
+ - [Joist Documentation](https://joist-orm.io/)
83
+ - [Apollo Server](https://www.apollographql.com/docs/apollo-server/)
84
+ - [GitHub Repository](https://github.com/joist-orm/joist-orm)
@@ -0,0 +1,11 @@
1
+ schema: "./src/**/*.graphql"
2
+ generates:
3
+ ./src/generated/graphql-types.ts:
4
+ plugins:
5
+ - typescript
6
+ - typescript-resolvers
7
+ config:
8
+ contextType: "../context#Context"
9
+ mappers:
10
+ Author: ../entities#Author
11
+ Book: ../entities#Book
@@ -0,0 +1,28 @@
1
+ # Dependencies
2
+ node_modules/
3
+
4
+ # Build output
5
+ build/
6
+ dist/
7
+
8
+ # IDE
9
+ .idea/
10
+ .vscode/
11
+ *.swp
12
+ *.swo
13
+
14
+ # OS
15
+ .DS_Store
16
+ Thumbs.db
17
+
18
+ # Test output
19
+ coverage/
20
+
21
+ # Logs
22
+ *.log
23
+ npm-debug.log*
24
+ yarn-debug.log*
25
+ yarn-error.log*
26
+
27
+ # TypeScript
28
+ *.tsbuildinfo
@@ -0,0 +1,5 @@
1
+ const mappers = { Author: "src/entities#Author", Book: "src/entities#Book" };
2
+
3
+ const enumValues = {};
4
+
5
+ module.exports = { mappers, enumValues };
@@ -0,0 +1,26 @@
1
+ const { mappers, enumValues } = require("./graphql-codegen-joist");
2
+
3
+ module.exports = {
4
+ overwrite: true,
5
+ schema: "./schema/**/*.graphql",
6
+ documents: null,
7
+ generates: {
8
+ "src/generated/graphql-types.ts": {
9
+ config: {
10
+ contextType: "src/context#Context",
11
+ noSchemaStitching: true,
12
+ avoidOptionals: true,
13
+ scaffolding: {
14
+ ignoreObjectsPattern: "Detail$",
15
+ },
16
+ mappers,
17
+ enumValues,
18
+ },
19
+ plugins: [
20
+ "@homebound/graphql-typescript-simple-resolvers",
21
+ "@homebound/graphql-typescript-resolver-scaffolding",
22
+ "@homebound/graphql-typescript-possible-types",
23
+ ],
24
+ },
25
+ },
26
+ };
@@ -0,0 +1,14 @@
1
+ /** @type {import('jest').Config} */
2
+ module.exports = {
3
+ transform: {
4
+ "^.+\\.tsx?$": "@swc/jest",
5
+ },
6
+ moduleNameMapper: {
7
+ "^src/(.*)$": "<rootDir>/src/$1",
8
+ },
9
+ testMatch: ["<rootDir>/src/**/*.test.{ts,tsx}"],
10
+ testEnvironment: "node",
11
+ globalSetup: "./src/setupTestEnv.ts",
12
+ setupFilesAfterEnv: ["./src/setupTests.ts"],
13
+ maxWorkers: 1,
14
+ };