@paris-ias/trees 1.8.56 → 2.0.0

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 (181) hide show
  1. package/dist/form/actions.d.ts +130 -0
  2. package/dist/form/affiliations.d.ts +293 -0
  3. package/dist/form/apps.d.ts +210 -0
  4. package/dist/form/disciplines.d.ts +41 -0
  5. package/dist/form/events.d.ts +1398 -0
  6. package/dist/form/fellowships.d.ts +2123 -0
  7. package/dist/form/fellowships.js +4 -4
  8. package/dist/form/files.d.ts +41 -0
  9. package/dist/form/mailing.d.ts +63 -0
  10. package/dist/form/news.d.ts +406 -0
  11. package/dist/form/people.d.ts +1063 -0
  12. package/dist/form/people.js +4 -4
  13. package/dist/form/projects.d.ts +565 -0
  14. package/dist/form/publications.d.ts +616 -0
  15. package/dist/form/tags.d.ts +55 -0
  16. package/dist/form/users.d.ts +947 -0
  17. package/dist/graphql/client/events/query.list.events.gql +0 -1
  18. package/dist/graphql/schemas/schema.apex.graphql +37 -9
  19. package/dist/graphql/schemas/schema.website.graphql +31 -4
  20. package/dist/graphql/schemas/website-resolvers-list.json +3 -4
  21. package/dist/list/actions.d.ts +104 -0
  22. package/dist/list/affiliations.d.ts +104 -0
  23. package/dist/list/apps.d.ts +104 -0
  24. package/dist/list/disciplines.d.ts +102 -0
  25. package/dist/list/events.d.ts +173 -0
  26. package/dist/list/fellowships.d.ts +124 -0
  27. package/dist/list/files.d.ts +102 -0
  28. package/dist/list/mailing.d.ts +102 -0
  29. package/dist/list/news.d.ts +104 -0
  30. package/dist/list/people.d.ts +154 -0
  31. package/dist/list/projects.d.ts +104 -0
  32. package/dist/list/publications.d.ts +128 -0
  33. package/dist/list/tags.d.ts +104 -0
  34. package/dist/list/users.d.ts +154 -0
  35. package/index.d.ts +31 -0
  36. package/package.json +173 -14
  37. package/readme.md +609 -74
  38. package/index.ts +0 -63
  39. package/lib/README.md +0 -206
  40. package/lib/buildClientGraphQL.ts +0 -342
  41. package/lib/buildDefaults.ts +0 -0
  42. package/lib/buildSchemas.ts +0 -109
  43. package/lib/generate.ts +0 -505
  44. package/lib/generateAll.ts +0 -231
  45. package/lib/utils.ts +0 -24
  46. package/src/LICENSE +0 -661
  47. package/src/action/graphql/client/query.get.action.gql +0 -22
  48. package/src/action/graphql/client/query.list.action.gql +0 -32
  49. package/src/action/graphql/server/apex.types.action.graphql +0 -15
  50. package/src/action/models/action.ts +0 -147
  51. package/src/affiliation/graphql/client/query.get.affiliations.gql +0 -37
  52. package/src/affiliation/graphql/client/query.list.affiliations.gql +0 -43
  53. package/src/affiliation/graphql/server/shared.types.affiliations.graphql +0 -20
  54. package/src/affiliation/models/affiliation.ts +0 -130
  55. package/src/affiliation/models/member.ts +0 -11
  56. package/src/affiliation/models/partner.ts +0 -9
  57. package/src/apps/graphql/client/query.get.apps.gql +0 -33
  58. package/src/apps/graphql/client/query.list.apps.gql +0 -43
  59. package/src/apps/models/apps.ts +0 -195
  60. package/src/events/graphql/client/query.get.events.gql +0 -119
  61. package/src/events/graphql/client/query.list.events.gql +0 -40
  62. package/src/events/graphql/server/shared.inputs.events.graphql +0 -24
  63. package/src/events/models/eventSlot.ts +0 -73
  64. package/src/events/models/events.ts +0 -569
  65. package/src/fellowships/graphql/client/query.get.fellowships.gql +0 -163
  66. package/src/fellowships/graphql/client/query.list.fellowships.gql +0 -49
  67. package/src/fellowships/graphql/server/apex.inputs.fellowshipDetails.graphql +0 -13
  68. package/src/fellowships/graphql/server/shared.types.fellowshipDetails.graphql +0 -13
  69. package/src/fellowships/graphql/server/shared.types.fellowships.graphql +0 -38
  70. package/src/fellowships/models/fellowshipDetails.ts +0 -145
  71. package/src/fellowships/models/fellowships.ts +0 -341
  72. package/src/files/graphql/client/query.get.files.gql +0 -24
  73. package/src/files/graphql/client/query.list.files.gql +0 -37
  74. package/src/files/graphql/server/apex.inputs.files.graphql +0 -7
  75. package/src/files/graphql/server/apex.inputs.video.graphql +0 -9
  76. package/src/files/graphql/server/apex.types.files.graphql +0 -4
  77. package/src/files/graphql/server/shared.inputs.image.graphql +0 -9
  78. package/src/files/graphql/server/shared.types.files.graphql +0 -15
  79. package/src/files/graphql/server/shared.types.image.graphql +0 -9
  80. package/src/files/graphql/server/shared.types.video.graphql +0 -9
  81. package/src/files/models/files.ts +0 -113
  82. package/src/files/models/gallery.ts +0 -11
  83. package/src/files/models/image.ts +0 -159
  84. package/src/files/models/video.ts +0 -166
  85. package/src/form.ts +0 -52
  86. package/src/index.ts +0 -98
  87. package/src/list.ts +0 -34
  88. package/src/mailing/graphql/client/query.get.mailing.gql +0 -24
  89. package/src/mailing/graphql/client/query.list.mailing.gql +0 -23
  90. package/src/mailing/graphql/server/apex.types.mailing.graphql +0 -13
  91. package/src/mailing/models/mailing.ts +0 -123
  92. package/src/misc/graphql/client/apex.mutations.delete.gql +0 -0
  93. package/src/misc/graphql/client/apex.mutations.upsert.gql +0 -0
  94. package/src/misc/graphql/client/apex.queries.login.gql +0 -0
  95. package/src/misc/graphql/client/query.get.disciplines.gql +0 -17
  96. package/src/misc/graphql/client/query.get.tags.gql +0 -13
  97. package/src/misc/graphql/client/query.list.disciplines.gql +0 -23
  98. package/src/misc/graphql/client/query.list.tags.gql +0 -23
  99. package/src/misc/graphql/server/apex.inputs.misc.graphql +0 -13
  100. package/src/misc/graphql/server/apex.inputs.socials.graphql +0 -12
  101. package/src/misc/graphql/server/apex.mutations.graphql +0 -23
  102. package/src/misc/graphql/server/apex.queries.graphql +0 -36
  103. package/src/misc/graphql/server/apex.types.disciplines.graphql +0 -4
  104. package/src/misc/graphql/server/apex.types.tags.graphql +0 -4
  105. package/src/misc/graphql/server/shared.enums.graphql +0 -112
  106. package/src/misc/graphql/server/shared.inputs.misc.graphql +0 -101
  107. package/src/misc/graphql/server/shared.queries.graphql +0 -35
  108. package/src/misc/graphql/server/shared.types.disciplines.graphql +0 -8
  109. package/src/misc/graphql/server/shared.types.events.graphql +0 -39
  110. package/src/misc/graphql/server/shared.types.location.graphql +0 -17
  111. package/src/misc/graphql/server/shared.types.misc.graphql +0 -120
  112. package/src/misc/graphql/server/shared.types.related.graphql +0 -10
  113. package/src/misc/graphql/server/shared.types.relatedAffiliation.graphql +0 -7
  114. package/src/misc/graphql/server/shared.types.relatedEvent.graphql +0 -7
  115. package/src/misc/graphql/server/shared.types.relatedFellowships.graphql +0 -7
  116. package/src/misc/graphql/server/shared.types.relatedNews.graphql +0 -7
  117. package/src/misc/graphql/server/shared.types.relatedPeople.graphql +0 -6
  118. package/src/misc/graphql/server/shared.types.relatedProject.graphql +0 -7
  119. package/src/misc/graphql/server/shared.types.relatedPublications.graphql +0 -6
  120. package/src/misc/graphql/server/shared.types.socials.graphql +0 -22
  121. package/src/misc/graphql/server/shared.types.tags.graphql +0 -11
  122. package/src/misc/graphql/server/website.mutations.graphql +0 -4
  123. package/src/misc/models/disciplines.ts +0 -116
  124. package/src/misc/models/location.ts +0 -136
  125. package/src/misc/models/organizers.ts +0 -13
  126. package/src/misc/models/related.ts +0 -123
  127. package/src/misc/models/relatedEvents.ts +0 -16
  128. package/src/misc/models/relatedFellowships.ts +0 -7
  129. package/src/misc/models/relatedNews.ts +0 -13
  130. package/src/misc/models/relatedPeople.ts +0 -8
  131. package/src/misc/models/relatedProject.ts +0 -14
  132. package/src/misc/models/relatedPublications.ts +0 -14
  133. package/src/misc/models/socials.ts +0 -133
  134. package/src/misc/models/sponsor.ts +0 -13
  135. package/src/misc/models/tags.ts +0 -116
  136. package/src/misc/models/taxonomy.ts +0 -1
  137. package/src/model.ts +0 -7
  138. package/src/news/graphql/client/query.get.news.gql +0 -128
  139. package/src/news/graphql/client/query.list.news.gql +0 -35
  140. package/src/news/graphql/server/share.types.news.graphql +0 -27
  141. package/src/news/models/news.ts +0 -257
  142. package/src/people/graphql/client/query.get.people.gql +0 -173
  143. package/src/people/graphql/client/query.get.users.gql +0 -0
  144. package/src/people/graphql/client/query.list.people.gql +0 -55
  145. package/src/people/graphql/client/query.list.users.gql +0 -31
  146. package/src/people/graphql/server/apex.inputs.consent.graphql +0 -9
  147. package/src/people/graphql/server/apex.inputs.groups.graphql +0 -8
  148. package/src/people/graphql/server/apex.inputs.vintage.graphql +0 -6
  149. package/src/people/graphql/server/shared.types.consent.graphql +0 -9
  150. package/src/people/graphql/server/shared.types.groups.graphql +0 -8
  151. package/src/people/graphql/server/shared.types.people.graphql +0 -29
  152. package/src/people/graphql/server/shared.types.position.graphql +0 -6
  153. package/src/people/graphql/server/shared.types.users.graphql +0 -17
  154. package/src/people/graphql/server/shared.types.vintage.graphql +0 -6
  155. package/src/people/models/consent.ts +0 -82
  156. package/src/people/models/discussants.ts +0 -9
  157. package/src/people/models/experiences.ts +0 -38
  158. package/src/people/models/fellows.ts +0 -12
  159. package/src/people/models/groups.ts +0 -58
  160. package/src/people/models/people.ts +0 -244
  161. package/src/people/models/position.ts +0 -62
  162. package/src/people/models/speakers.ts +0 -9
  163. package/src/people/models/users.ts +0 -252
  164. package/src/people/models/vintage.ts +0 -124
  165. package/src/projects/graphql/client/query.get.projects.gql +0 -166
  166. package/src/projects/graphql/client/query.list.projects.gql +0 -33
  167. package/src/projects/graphql/server/shared.types.projects.graphql +0 -29
  168. package/src/projects/models/projects.ts +0 -249
  169. package/src/publications/graphql/client/query.get.publications.gql +0 -169
  170. package/src/publications/graphql/client/query.list.publications.gql +0 -35
  171. package/src/publications/graphql/server/shared.types.publications.graphql +0 -34
  172. package/src/publications/models/article.ts +0 -262
  173. package/src/publications/models/publications.ts +0 -306
  174. /package/dist/form/{action.js → actions.js} +0 -0
  175. /package/dist/form/{affiliation.js → affiliations.js} +0 -0
  176. /package/dist/graphql/client/{action/query.get.action.gql → actions/query.get.actions.gql} +0 -0
  177. /package/dist/graphql/client/{action/query.list.action.gql → actions/query.list.actions.gql} +0 -0
  178. /package/dist/graphql/client/{affiliation → affiliations}/query.get.affiliations.gql +0 -0
  179. /package/dist/graphql/client/{affiliation → affiliations}/query.list.affiliations.gql +0 -0
  180. /package/dist/list/{action.js → actions.js} +0 -0
  181. /package/dist/list/{affiliation.js → affiliations.js} +0 -0
package/index.ts DELETED
@@ -1,63 +0,0 @@
1
- import events from "./dist/events"
2
- import news from "./dist/news"
3
- import people from "./dist/people"
4
- import projects from "./dist/projects"
5
- import fellowships from "./dist/fellowships"
6
- import publications from "./dist/publications"
7
- import workExperience from "./dist/workExperience"
8
- import listEvents from "./dist/list/events"
9
- import listNews from "./dist/list/news"
10
- import listPeople from "./dist/list/people"
11
- import listProjects from "./dist/list/projects"
12
- import listFellowships from "./dist/list/fellowships"
13
- import listPublications from "./dist/list/publications"
14
- import listApps from "./dist/list/apps"
15
- import listExperiences from "./dist/list/workExperience"
16
- import formEvents from "./dist/form/events"
17
- import formNews from "./dist/form/news"
18
- import formPeople from "./dist/form/people"
19
- import formProjects from "./dist/form/projects"
20
- import formFellowships from "./dist/form/fellowships"
21
- import formPublications from "./dist/form/publications"
22
- import formApps from "./dist/form/apps"
23
- import formExperiences from "./dist/form/workExperience"
24
- import apps from "./dist/apps"
25
- import {
26
- templates,
27
- ConfigValue,
28
- Form,
29
- Model,
30
- ModuleType,
31
- Sort,
32
- Views,
33
- formType,
34
- } from "./src"
35
-
36
- export {
37
- templates,
38
- apps,
39
- events,
40
- news,
41
- people,
42
- projects,
43
- fellowships,
44
- publications,
45
- workExperience,
46
- listEvents,
47
- listNews,
48
- listPeople,
49
- listProjects,
50
- listFellowships,
51
- listPublications,
52
- listApps,
53
- listExperiences,
54
- formEvents,
55
- formNews,
56
- formPeople,
57
- formProjects,
58
- formFellowships,
59
- formPublications,
60
- formApps,
61
- formExperiences,
62
- }
63
- export type { Form, Sort, Views, ConfigValue, Model, ModuleType, formType }
package/lib/README.md DELETED
@@ -1,206 +0,0 @@
1
- # Type Generation Scripts
2
-
3
- This directory contains scripts for generating type definitions, schemas, and GraphQL client files for the Paris IAS data management system.
4
-
5
- ## Overview
6
-
7
- The generation process consists of three main tasks:
8
-
9
- 1. **Module Generation** (`generate.ts`) - Creates type modules and configurations
10
- 2. **Schema Generation** (`buildSchemas.ts`) - Builds GraphQL schemas and resolver lists
11
- 3. **GraphQL Client Generation** (`buildClientGraphQL.ts`) - Copies and organizes client GraphQL files
12
-
13
- ## Unified Generation
14
-
15
- ### Main Command
16
- ```bash
17
- npm run generate
18
- ```
19
-
20
- This runs the unified generation script (`generateAll.ts`) that orchestrates all three tasks and provides a single consolidated overview instead of three separate outputs.
21
-
22
- ### Individual Commands
23
- If you need to run specific tasks:
24
-
25
- ```bash
26
- npm run generate:modules # Module generation only
27
- npm run generate:schemas # Schema generation only
28
- npm run generate:client # GraphQL client generation only
29
- ```
30
-
31
- ## Generated Output
32
-
33
- The unified generation provides a clean summary:
34
-
35
- ```
36
- ============================================================
37
- šŸ“Š GENERATION SUMMARY
38
- ============================================================
39
- šŸ• Total Duration: 3001ms
40
- šŸ“ˆ Success Rate: 3/3 tasks completed
41
-
42
- āœ… Completed Tasks:
43
- • Generate Modules: 14/14 modules (1215ms)
44
- • Generate Schemas: 2 schemas + resolvers (1026ms)
45
- • Generate GraphQL Client: 31 files, 12 types (760ms)
46
-
47
- šŸŽ‰ All generation tasks completed successfully!
48
- ============================================================
49
- ```
50
-
51
- ## Generated Structure
52
-
53
- After running the generation, the following structure is created:
54
-
55
- ```
56
- dist/
57
- ā”œā”€ā”€ form/ # Module form configurations
58
- ā”œā”€ā”€ list/ # Module list configurations
59
- ā”œā”€ā”€ graphql/
60
- │ ā”œā”€ā”€ schemas/ # Generated GraphQL schemas
61
- │ │ ā”œā”€ā”€ schema.website.graphql
62
- │ │ ā”œā”€ā”€ schema.apex.graphql
63
- │ │ ā”œā”€ā”€ website-resolvers-list.json
64
- │ │ └── apex-resolvers-list.json
65
- │ └── client/ # GraphQL client operations (minimal output)
66
- │ ā”œā”€ā”€ action/
67
- │ │ ā”œā”€ā”€ query.get.action.gql
68
- │ │ └── query.list.action.gql
69
- │ ā”œā”€ā”€ publications/
70
- │ │ ā”œā”€ā”€ query.get.publications.gql
71
- │ │ └── query.list.publications.gql
72
- │ └── ... (other types)
73
- ```
74
-
75
- **Note**: Only `.gql` files are generated since client applications import them directly.
76
-
77
- ---
78
-
79
- # GraphQL Client Builder
80
-
81
- This directory contains the `buildClientGraphQL.ts` script that automatically copies and organizes all GraphQL client operations from the source directories to the distribution folder.
82
-
83
- ## Overview
84
-
85
- The script processes all GraphQL client files located in `src/[type]/graphql/client/` directories and copies them to `dist/graphql/client/[type]/` with proper TypeScript support.
86
-
87
- ## Features
88
-
89
- - **Automatic Discovery**: Finds all `.gql` and `.graphql` files in client directories
90
- - **Organized Structure**: Maintains type-based organization in the dist folder
91
- - **Minimal Output**: Only copies essential `.gql` files (no unnecessary TypeScript files)
92
- - **Direct Import Ready**: Optimized for direct `.gql` file imports in client applications
93
- - **Operation Detection**: Identifies query, mutation, and subscription operations
94
-
95
- ## Usage
96
-
97
- ### Build Script
98
- ```bash
99
- npm run build:client-graphql
100
- ```
101
-
102
- ### Manual Execution
103
- ```bash
104
- npx tsx lib/buildClientGraphQL.ts
105
- ```
106
-
107
- ### Programmatic Usage
108
- ```typescript
109
- import { buildClientGraphQL } from './lib/buildClientGraphQL.ts'
110
-
111
- // Use default configuration
112
- buildClientGraphQL()
113
-
114
- // Use custom configuration
115
- buildClientGraphQL({
116
- srcDir: './custom/src',
117
- distDir: './custom/dist',
118
- extensions: ['.gql'],
119
- generateDeclarations: false
120
- })
121
- ```
122
-
123
- ## Generated Structure
124
-
125
- After running the script, the following structure is created:
126
-
127
- ```
128
- dist/graphql/client/
129
- ā”œā”€ā”€ index.ts # Main export file
130
- ā”œā”€ā”€ action/
131
- │ ā”œā”€ā”€ index.ts # Action type exports
132
- │ ā”œā”€ā”€ query.get.action.gql
133
- │ ā”œā”€ā”€ query.get.action.d.ts
134
- │ └── ...
135
- ā”œā”€ā”€ publications/
136
- │ ā”œā”€ā”€ index.ts # Publications type exports
137
- │ ā”œā”€ā”€ query.get.publications.gql
138
- │ ā”œā”€ā”€ query.get.publications.d.ts
139
- │ └── ...
140
- └── ... (other types)
141
- ```
142
-
143
- ## Client Usage
144
-
145
- Once built, client applications can import GraphQL operations like this:
146
-
147
- ```typescript
148
- // Import specific operations
149
- import { GET_PUBLICATIONS, LIST_PUBLICATIONS } from '@paris-ias/data/dist/graphql/client/publications'
150
-
151
- // Import all operations for a type
152
- import * as publicationsQueries from '@paris-ias/data/dist/graphql/client/publications'
153
-
154
- // Import all operations
155
- import * as graphqlClient from '@paris-ias/data/dist/graphql/client'
156
-
157
- // Use with Apollo Client, Relay, or other GraphQL clients
158
- const client = new ApolloClient({...})
159
- const result = await client.query({
160
- query: GET_PUBLICATIONS,
161
- variables: { appId: 'iea', itemId: '123' }
162
- })
163
- ```
164
-
165
- ## Configuration Options
166
-
167
- | Option | Type | Default | Description |
168
- |--------|------|---------|-------------|
169
- | `srcDir` | string | `../src` | Source directory containing type folders |
170
- | `distDir` | string | `../dist/graphql/client` | Destination directory for built files |
171
- | `extensions` | string[] | `['.gql', '.graphql']` | File extensions to process |
172
- | `generateDeclarations` | boolean | `false` | Whether to generate TypeScript declaration files (disabled for direct .gql imports) |
173
- | `generateIndexFiles` | boolean | `false` | Whether to generate TypeScript index files (disabled for direct .gql imports) |
174
-
175
- ## Integration with Build Process
176
-
177
- The script is integrated into the main build process:
178
-
179
- 1. `npm run clean` - Removes the dist directory
180
- 2. `npm run generate` - Generates type definitions and schemas
181
- 3. `npm run build:client-graphql` - Builds GraphQL client files
182
- 4. `npm run build` - Runs all build steps
183
-
184
- ## File Naming Conventions
185
-
186
- The script recognizes the following naming patterns:
187
- - `query.*` - GraphQL queries
188
- - `mutation.*` or `*.mutations.*` - GraphQL mutations
189
- - `subscription.*` - GraphQL subscriptions
190
-
191
- ## Error Handling
192
-
193
- The script includes comprehensive error handling:
194
- - Missing directories are reported but don't stop the build
195
- - File copy errors are logged and re-thrown
196
- - TypeScript declaration generation errors are handled gracefully
197
-
198
- ## Development
199
-
200
- To modify the build process:
201
-
202
- 1. Edit `lib/buildClientGraphQL.ts`
203
- 2. Test with `npm run build:client-graphql`
204
- 3. Check the generated files in `dist/graphql/client/`
205
-
206
- The script is designed to be extensible and can be modified to support additional file types, custom transformations, or different organization patterns.
@@ -1,342 +0,0 @@
1
- import fs from "fs"
2
- import path from "path"
3
- import { fileURLToPath } from "url"
4
-
5
- // Declare process global for environments without @types/node
6
- declare const process: any
7
-
8
- const __filename = fileURLToPath(import.meta.url)
9
- const __dirname = path.dirname(__filename)
10
-
11
- /**
12
- * Configuration for the GraphQL client file builder
13
- */
14
- interface BuildConfig {
15
- /** Source directory containing type folders */
16
- srcDir: string
17
- /** Destination directory for built GraphQL files */
18
- distDir: string
19
- /** File extensions to copy */
20
- extensions: string[]
21
- /** Whether to create TypeScript declaration files */
22
- generateDeclarations: boolean
23
- /** Whether to generate TypeScript index files */
24
- generateIndexFiles: boolean
25
- }
26
-
27
- /**
28
- * Information about a discovered GraphQL file
29
- */
30
- interface GraphQLFile {
31
- /** Full path to the source file */
32
- sourcePath: string
33
- /** Relative path from the type's client directory */
34
- relativePath: string
35
- /** Type/category name (e.g., 'publications', 'people') */
36
- typeName: string
37
- /** File name without extension */
38
- fileName: string
39
- /** File extension */
40
- extension: string
41
- }
42
-
43
- /**
44
- * Default configuration for the build process
45
- */
46
- const defaultConfig: BuildConfig = {
47
- srcDir: path.resolve(__dirname, "../src"),
48
- distDir: path.resolve(__dirname, "../dist/graphql/client"),
49
- extensions: [".gql", ".graphql"],
50
- generateDeclarations: false, // Disabled since pinia plugin imports .gql files directly
51
- generateIndexFiles: false, // Disabled since pinia plugin imports .gql files directly
52
- }
53
-
54
- /**
55
- * Ensures a directory exists, creating it recursively if needed
56
- */
57
- function ensureDir(dir: string): void {
58
- if (!fs.existsSync(dir)) {
59
- fs.mkdirSync(dir, { recursive: true })
60
- }
61
- }
62
-
63
- /**
64
- * Discovers all GraphQL client files in the source directory
65
- */
66
- function discoverGraphQLFiles(
67
- srcDir: string,
68
- extensions: string[]
69
- ): GraphQLFile[] {
70
- const files: GraphQLFile[] = []
71
-
72
- try {
73
- const typeDirectories = fs
74
- .readdirSync(srcDir, { withFileTypes: true })
75
- .filter((dirent: any) => dirent.isDirectory())
76
- .map((dirent: any) => dirent.name)
77
-
78
- for (const typeName of typeDirectories) {
79
- const clientDir = path.join(srcDir, typeName, "graphql", "client")
80
-
81
- if (!fs.existsSync(clientDir)) {
82
- console.log(
83
- `āš ļø No client GraphQL directory found for type: ${typeName}`
84
- )
85
- continue
86
- }
87
-
88
- const clientFiles = fs
89
- .readdirSync(clientDir, { withFileTypes: true })
90
- .filter((dirent: any) => dirent.isFile())
91
- .filter((dirent: any) =>
92
- extensions.some((ext) => dirent.name.endsWith(ext))
93
- )
94
-
95
- for (const file of clientFiles) {
96
- const sourcePath = path.join(clientDir, file.name)
97
- const extension = path.extname(file.name)
98
- const fileName = path.basename(file.name, extension)
99
-
100
- files.push({
101
- sourcePath,
102
- relativePath: file.name,
103
- typeName,
104
- fileName,
105
- extension,
106
- })
107
- }
108
- }
109
- } catch (error) {
110
- console.error(`āŒ Error discovering GraphQL files:`, error)
111
- throw error
112
- }
113
-
114
- return files
115
- }
116
-
117
- /**
118
- * Copies a GraphQL file to the destination directory
119
- */
120
- function copyGraphQLFile(file: GraphQLFile, destDir: string): void {
121
- const typeDestDir = path.join(destDir, file.typeName)
122
- ensureDir(typeDestDir)
123
-
124
- const destPath = path.join(typeDestDir, file.relativePath)
125
-
126
- try {
127
- fs.copyFileSync(file.sourcePath, destPath)
128
- console.log(`āœ… Copied: ${file.typeName}/${file.relativePath}`)
129
- } catch (error) {
130
- console.error(`āŒ Failed to copy ${file.sourcePath}:`, error)
131
- throw error
132
- }
133
- }
134
-
135
- /**
136
- * Generates TypeScript declaration file for a GraphQL file
137
- */
138
- function generateDeclarationFile(file: GraphQLFile, destDir: string): void {
139
- const typeDestDir = path.join(destDir, file.typeName)
140
- ensureDir(typeDestDir)
141
-
142
- const declarationPath = path.join(typeDestDir, `${file.fileName}.d.ts`)
143
-
144
- // Read the GraphQL content to extract operation names
145
- const content = fs.readFileSync(file.sourcePath, "utf-8")
146
- const operationMatches =
147
- content.match(/(query|mutation|subscription)\s+(\w+)/g) || []
148
-
149
- let declarationContent = `/**
150
- * TypeScript declarations for ${file.relativePath}
151
- * Generated automatically - do not edit manually
152
- */
153
-
154
- declare const graphqlDocument: string
155
- export default graphqlDocument
156
-
157
- `
158
-
159
- // Add operation name exports if found
160
- if (operationMatches.length > 0) {
161
- declarationContent += `// Operation names found in this document:\n`
162
- operationMatches.forEach((match: string) => {
163
- const matchResult = match.match(/(query|mutation|subscription)\s+(\w+)/)
164
- if (matchResult) {
165
- const [, operationType, operationName] = matchResult
166
- if (operationName) {
167
- declarationContent += `// - ${operationType}: ${operationName}\n`
168
- }
169
- }
170
- })
171
- }
172
-
173
- try {
174
- fs.writeFileSync(declarationPath, declarationContent)
175
- console.log(
176
- `šŸ“ Generated declaration: ${file.typeName}/${file.fileName}.d.ts`
177
- )
178
- } catch (error) {
179
- console.error(
180
- `āŒ Failed to generate declaration for ${file.sourcePath}:`,
181
- error
182
- )
183
- throw error
184
- }
185
- }
186
-
187
- /**
188
- * Generates an index file for each type directory
189
- */
190
- function generateTypeIndex(
191
- typeName: string,
192
- files: GraphQLFile[],
193
- destDir: string
194
- ): void {
195
- const typeDestDir = path.join(destDir, typeName)
196
- const indexPath = path.join(typeDestDir, "index.ts")
197
-
198
- let indexContent = `/**
199
- * GraphQL client operations for ${typeName}
200
- * Generated automatically - do not edit manually
201
- */
202
-
203
- `
204
-
205
- // Group files by operation type
206
- const queries = files.filter((f) => f.fileName.includes("query"))
207
- const mutations = files.filter((f) => f.fileName.includes("mutation"))
208
- const subscriptions = files.filter((f) => f.fileName.includes("subscription"))
209
-
210
- const addExports = (fileList: GraphQLFile[], sectionName: string) => {
211
- if (fileList.length > 0) {
212
- indexContent += `// ${sectionName}\n`
213
- fileList.forEach((file) => {
214
- const exportName = file.fileName
215
- .replace(/^(query|mutation|subscription)\./, "")
216
- .replace(/\./g, "_")
217
- .toUpperCase()
218
- indexContent += `export { default as ${exportName} } from "./${file.fileName}.gql"\n`
219
- })
220
- indexContent += "\n"
221
- }
222
- }
223
-
224
- addExports(queries, "Queries")
225
- addExports(mutations, "Mutations")
226
- addExports(subscriptions, "Subscriptions")
227
-
228
- try {
229
- fs.writeFileSync(indexPath, indexContent)
230
- console.log(`šŸ“¦ Generated index: ${typeName}/index.ts`)
231
- } catch (error) {
232
- console.error(`āŒ Failed to generate index for ${typeName}:`, error)
233
- throw error
234
- }
235
- }
236
-
237
- /**
238
- * Generates a main index file for all types
239
- */
240
- function generateMainIndex(typeNames: string[], destDir: string): void {
241
- const indexPath = path.join(destDir, "index.ts")
242
-
243
- let indexContent = `/**
244
- * GraphQL client operations - Main index
245
- * Generated automatically - do not edit manually
246
- */
247
-
248
- `
249
-
250
- typeNames.forEach((typeName) => {
251
- indexContent += `export * as ${typeName} from "./${typeName}"\n`
252
- })
253
-
254
- try {
255
- fs.writeFileSync(indexPath, indexContent)
256
- console.log(`šŸ“¦ Generated main index: index.ts`)
257
- } catch (error) {
258
- console.error(`āŒ Failed to generate main index:`, error)
259
- throw error
260
- }
261
- }
262
-
263
- /**
264
- * Main build function
265
- */
266
- export function buildClientGraphQL(config: Partial<BuildConfig> = {}): void {
267
- const finalConfig = { ...defaultConfig, ...config }
268
-
269
- console.log("šŸš€ Starting GraphQL client build process...")
270
- console.log(`šŸ“‚ Source directory: ${finalConfig.srcDir}`)
271
- console.log(`šŸ“¦ Destination directory: ${finalConfig.distDir}`)
272
- console.log(`šŸ” Extensions: ${finalConfig.extensions.join(", ")}`)
273
-
274
- // Ensure destination directory exists
275
- ensureDir(finalConfig.distDir)
276
-
277
- // Discover all GraphQL files
278
- console.log("\nšŸ” Discovering GraphQL files...")
279
- const graphqlFiles = discoverGraphQLFiles(
280
- finalConfig.srcDir,
281
- finalConfig.extensions
282
- )
283
-
284
- if (graphqlFiles.length === 0) {
285
- console.log("āš ļø No GraphQL files found!")
286
- return
287
- }
288
-
289
- console.log(
290
- `šŸ“Š Found ${graphqlFiles.length} GraphQL files across ${
291
- new Set(graphqlFiles.map((f) => f.typeName)).size
292
- } types`
293
- )
294
-
295
- // Copy files and generate declarations
296
- console.log("\nšŸ“‹ Copying files...")
297
- const typeNames = new Set<string>()
298
-
299
- for (const file of graphqlFiles) {
300
- typeNames.add(file.typeName)
301
- copyGraphQLFile(file, finalConfig.distDir)
302
-
303
- if (finalConfig.generateDeclarations) {
304
- generateDeclarationFile(file, finalConfig.distDir)
305
- }
306
- }
307
-
308
- // Generate index files for each type (only if enabled)
309
- if (finalConfig.generateIndexFiles) {
310
- console.log("\nšŸ“ Generating index files...")
311
- for (const typeName of typeNames) {
312
- const typeFiles = graphqlFiles.filter((f) => f.typeName === typeName)
313
- generateTypeIndex(typeName, typeFiles, finalConfig.distDir)
314
- }
315
-
316
- // Generate main index file
317
- generateMainIndex(Array.from(typeNames), finalConfig.distDir)
318
- } else {
319
- console.log("\nā­ļø Skipping index file generation (disabled in config)")
320
- }
321
-
322
- console.log("\n✨ GraphQL client build completed successfully!")
323
- console.log(`šŸ“Š Summary:`)
324
- console.log(` • ${graphqlFiles.length} GraphQL files processed`)
325
- console.log(` • ${typeNames.size} type categories`)
326
- console.log(` • Files organized in: ${finalConfig.distDir}`)
327
- }
328
-
329
- // Execute if run directly
330
- if (
331
- typeof process !== "undefined" &&
332
- import.meta.url === `file://${process.argv[1]}`
333
- ) {
334
- try {
335
- buildClientGraphQL()
336
- } catch (error) {
337
- console.error("šŸ’„ Build failed:", error)
338
- if (typeof process !== "undefined") {
339
- process.exit(1)
340
- }
341
- }
342
- }
File without changes