@eightyfourthousand/client-graphql 2026.4.0 → 2026.4.1

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 (149) hide show
  1. package/index.d.ts +4 -0
  2. package/index.js +7 -0
  3. package/index.js.map +1 -0
  4. package/lib/client-ssr.d.ts +16 -0
  5. package/lib/client-ssr.js +39 -0
  6. package/lib/client-ssr.js.map +1 -0
  7. package/lib/client.d.ts +15 -0
  8. package/lib/client.js +46 -0
  9. package/lib/client.js.map +1 -0
  10. package/lib/config.d.ts +8 -0
  11. package/lib/config.js +19 -0
  12. package/lib/config.js.map +1 -0
  13. package/lib/functions/get-bibliography-entry.d.ts +9 -0
  14. package/lib/functions/get-bibliography-entry.js +27 -0
  15. package/lib/functions/get-bibliography-entry.js.map +1 -0
  16. package/lib/functions/get-glossary-instance.d.ts +9 -0
  17. package/lib/functions/get-glossary-instance.js +36 -0
  18. package/lib/functions/get-glossary-instance.js.map +1 -0
  19. package/lib/functions/get-passage.d.ts +10 -0
  20. package/lib/functions/get-passage.js +68 -0
  21. package/lib/functions/get-passage.js.map +1 -0
  22. package/lib/functions/get-term-passages.d.ts +20 -0
  23. package/lib/functions/get-term-passages.js +32 -0
  24. package/lib/functions/get-term-passages.js.map +1 -0
  25. package/lib/functions/get-translation-blocks-around.d.ts +15 -0
  26. package/lib/functions/get-translation-blocks-around.js +86 -0
  27. package/lib/functions/get-translation-blocks-around.js.map +1 -0
  28. package/lib/functions/get-translation-blocks.d.ts +25 -0
  29. package/lib/functions/get-translation-blocks.js +96 -0
  30. package/lib/functions/get-translation-blocks.js.map +1 -0
  31. package/lib/functions/get-translation-imprint.d.ts +10 -0
  32. package/lib/functions/get-translation-imprint.js +68 -0
  33. package/lib/functions/get-translation-imprint.js.map +1 -0
  34. package/lib/functions/get-translation-metadata.d.ts +16 -0
  35. package/lib/functions/get-translation-metadata.js +72 -0
  36. package/lib/functions/get-translation-metadata.js.map +1 -0
  37. package/lib/functions/get-translation-titles.d.ts +9 -0
  38. package/lib/functions/get-translation-titles.js +34 -0
  39. package/lib/functions/get-translation-titles.js.map +1 -0
  40. package/lib/functions/get-translation-toc.d.ts +9 -0
  41. package/{src/lib/functions/get-translation-toc.ts → lib/functions/get-translation-toc.js} +18 -48
  42. package/lib/functions/get-translation-toc.js.map +1 -0
  43. package/lib/functions/get-translation-uuids.d.ts +16 -0
  44. package/lib/functions/get-translation-uuids.js +40 -0
  45. package/lib/functions/get-translation-uuids.js.map +1 -0
  46. package/lib/functions/get-translations-metadata.d.ts +9 -0
  47. package/lib/functions/get-translations-metadata.js +51 -0
  48. package/lib/functions/get-translations-metadata.js.map +1 -0
  49. package/lib/functions/get-work-bibliography.d.ts +9 -0
  50. package/lib/functions/get-work-bibliography.js +33 -0
  51. package/lib/functions/get-work-bibliography.js.map +1 -0
  52. package/lib/functions/get-work-folios.d.ts +12 -0
  53. package/lib/functions/get-work-folios.js +32 -0
  54. package/lib/functions/get-work-folios.js.map +1 -0
  55. package/lib/functions/get-work-glossary-terms-around.d.ts +13 -0
  56. package/lib/functions/get-work-glossary-terms-around.js +95 -0
  57. package/lib/functions/get-work-glossary-terms-around.js.map +1 -0
  58. package/lib/functions/get-work-glossary-terms.d.ts +24 -0
  59. package/lib/functions/get-work-glossary-terms.js +104 -0
  60. package/lib/functions/get-work-glossary-terms.js.map +1 -0
  61. package/lib/functions/has-permission.d.ts +9 -0
  62. package/lib/functions/has-permission.js +15 -0
  63. package/lib/functions/has-permission.js.map +1 -0
  64. package/{src/lib/functions/index.ts → lib/functions/index.d.ts} +3 -12
  65. package/lib/functions/index.js +20 -0
  66. package/lib/functions/index.js.map +1 -0
  67. package/lib/functions/replace.d.ts +27 -0
  68. package/lib/functions/replace.js +49 -0
  69. package/lib/functions/replace.js.map +1 -0
  70. package/lib/functions/save-passages.d.ts +16 -0
  71. package/lib/functions/save-passages.js +35 -0
  72. package/lib/functions/save-passages.js.map +1 -0
  73. package/lib/generated/graphql.d.ts +1062 -0
  74. package/lib/generated/graphql.js +357 -0
  75. package/lib/generated/graphql.js.map +1 -0
  76. package/lib/mappers/alignment.d.ts +19 -0
  77. package/lib/mappers/alignment.js +19 -0
  78. package/lib/mappers/alignment.js.map +1 -0
  79. package/lib/mappers/annotation.d.ts +19 -0
  80. package/lib/mappers/annotation.js +74 -0
  81. package/lib/mappers/annotation.js.map +1 -0
  82. package/lib/mappers/imprint.d.ts +37 -0
  83. package/lib/mappers/imprint.js +44 -0
  84. package/lib/mappers/imprint.js.map +1 -0
  85. package/lib/mappers/index.js +8 -0
  86. package/lib/mappers/index.js.map +1 -0
  87. package/lib/mappers/passage.d.ts +41 -0
  88. package/lib/mappers/passage.js +39 -0
  89. package/lib/mappers/passage.js.map +1 -0
  90. package/lib/mappers/title.d.ts +18 -0
  91. package/lib/mappers/title.js +18 -0
  92. package/lib/mappers/title.js.map +1 -0
  93. package/lib/mappers/toc.d.ts +25 -0
  94. package/lib/mappers/toc.js +25 -0
  95. package/lib/mappers/toc.js.map +1 -0
  96. package/lib/mappers/work.d.ts +22 -0
  97. package/lib/mappers/work.js +22 -0
  98. package/lib/mappers/work.js.map +1 -0
  99. package/package.json +25 -3
  100. package/ssr.d.ts +4 -0
  101. package/ssr.js +7 -0
  102. package/ssr.js.map +1 -0
  103. package/README.md +0 -9
  104. package/codegen.ts +0 -34
  105. package/project.json +0 -21
  106. package/src/index.ts +0 -75
  107. package/src/lib/client-ssr.ts +0 -44
  108. package/src/lib/client.ts +0 -58
  109. package/src/lib/config.ts +0 -21
  110. package/src/lib/functions/get-bibliography-entry.ts +0 -40
  111. package/src/lib/functions/get-glossary-instance.ts +0 -49
  112. package/src/lib/functions/get-passage.ts +0 -81
  113. package/src/lib/functions/get-term-passages.ts +0 -53
  114. package/src/lib/functions/get-translation-blocks-around.ts +0 -129
  115. package/src/lib/functions/get-translation-blocks.ts +0 -158
  116. package/src/lib/functions/get-translation-imprint.ts +0 -114
  117. package/src/lib/functions/get-translation-metadata.ts +0 -99
  118. package/src/lib/functions/get-translation-titles.ts +0 -55
  119. package/src/lib/functions/get-translation-uuids.ts +0 -63
  120. package/src/lib/functions/get-translations-metadata.ts +0 -81
  121. package/src/lib/functions/get-work-bibliography.ts +0 -47
  122. package/src/lib/functions/get-work-folios.ts +0 -52
  123. package/src/lib/functions/get-work-glossary-terms-around.ts +0 -127
  124. package/src/lib/functions/get-work-glossary-terms.ts +0 -154
  125. package/src/lib/functions/has-permission.ts +0 -38
  126. package/src/lib/functions/replace.ts +0 -91
  127. package/src/lib/functions/save-passages.ts +0 -76
  128. package/src/lib/generated/graphql.ts +0 -1297
  129. package/src/lib/graphql/fragments/alignment.graphql +0 -7
  130. package/src/lib/graphql/fragments/annotation.graphql +0 -7
  131. package/src/lib/graphql/fragments/imprint.graphql +0 -34
  132. package/src/lib/graphql/fragments/passage.graphql +0 -29
  133. package/src/lib/graphql/fragments/title.graphql +0 -6
  134. package/src/lib/graphql/fragments/toc.graphql +0 -40
  135. package/src/lib/graphql/fragments/work.graphql +0 -10
  136. package/src/lib/graphql/queries/passages.graphql +0 -116
  137. package/src/lib/graphql/queries/work.graphql +0 -38
  138. package/src/lib/graphql/queries/works.graphql +0 -23
  139. package/src/lib/mappers/alignment.ts +0 -34
  140. package/src/lib/mappers/annotation.ts +0 -204
  141. package/src/lib/mappers/imprint.ts +0 -79
  142. package/src/lib/mappers/passage.ts +0 -80
  143. package/src/lib/mappers/title.ts +0 -35
  144. package/src/lib/mappers/toc.ts +0 -49
  145. package/src/lib/mappers/work.ts +0 -38
  146. package/src/ssr.ts +0 -66
  147. package/tsconfig.json +0 -17
  148. package/tsconfig.lib.json +0 -14
  149. /package/{src/lib/mappers/index.ts → lib/mappers/index.d.ts} +0 -0
@@ -1,63 +0,0 @@
1
- import type { GraphQLClient } from 'graphql-request';
2
- import { gql } from 'graphql-request';
3
-
4
- const DEFAULT_PAGE_SIZE = 200;
5
-
6
- const GET_WORK_UUIDS = gql`
7
- query GetWorkUuids($cursor: String, $limit: Int, $filter: WorkFilter) {
8
- works(cursor: $cursor, limit: $limit, filter: $filter) {
9
- items {
10
- uuid
11
- }
12
- pageInfo {
13
- nextCursor
14
- hasMoreAfter
15
- }
16
- }
17
- }
18
- `;
19
-
20
- type GetWorkUuidsResponse = {
21
- works: {
22
- items: Array<{ uuid: string }>;
23
- pageInfo: {
24
- nextCursor: string | null;
25
- hasMoreAfter: boolean;
26
- };
27
- };
28
- };
29
-
30
- type WorkFilter = {
31
- maxPages?: number;
32
- };
33
-
34
- /**
35
- * Get work UUIDs with optional filtering.
36
- * @param client - GraphQL client
37
- * @param filter - Optional filter criteria (e.g., maxPages)
38
- * @param limit - Optional limit on total results (fetches all pages if not specified)
39
- */
40
- export async function getTranslationUuids({
41
- client,
42
- filter,
43
- limit,
44
- }: {
45
- client: GraphQLClient;
46
- filter?: WorkFilter;
47
- limit?: number;
48
- }): Promise<string[]> {
49
- try {
50
- // Single request - no pagination needed for static params
51
- const response: GetWorkUuidsResponse =
52
- await client.request<GetWorkUuidsResponse>(GET_WORK_UUIDS, {
53
- cursor: null,
54
- limit: limit ?? DEFAULT_PAGE_SIZE,
55
- filter,
56
- });
57
-
58
- return response.works.items.map((w) => w.uuid);
59
- } catch (error) {
60
- console.error('Error fetching translation UUIDs:', error);
61
- return [];
62
- }
63
- }
@@ -1,81 +0,0 @@
1
- import type { GraphQLClient } from 'graphql-request';
2
- import { gql } from 'graphql-request';
3
- import type { Work } from '@eightyfourthousand/data-access';
4
- import { worksFromGraphQL } from '../mappers';
5
-
6
- const GET_ALL_WORKS = gql`
7
- query GetAllWorks($cursor: String, $limit: Int) {
8
- works(cursor: $cursor, limit: $limit) {
9
- items {
10
- uuid
11
- title
12
- toh
13
- publicationDate
14
- publicationVersion
15
- pages
16
- restriction
17
- section
18
- }
19
- pageInfo {
20
- nextCursor
21
- hasMoreAfter
22
- }
23
- }
24
- }
25
- `;
26
-
27
- type GraphQLWork = {
28
- uuid: string;
29
- title: string;
30
- toh: string[];
31
- publicationDate: string;
32
- publicationVersion: string;
33
- pages: number;
34
- restriction: boolean;
35
- section: string;
36
- };
37
-
38
- type GetAllWorksResponse = {
39
- works: {
40
- items: GraphQLWork[];
41
- pageInfo: {
42
- nextCursor: string | null;
43
- hasMoreAfter: boolean;
44
- };
45
- };
46
- };
47
-
48
- /**
49
- * Get metadata for all published translation works (fetches all pages).
50
- */
51
- export async function getTranslationsMetadata({
52
- client,
53
- limit = 200,
54
- }: {
55
- client: GraphQLClient;
56
- limit?: number;
57
- }): Promise<Work[]> {
58
- try {
59
- const allWorks: GraphQLWork[] = [];
60
- let cursor: string | null = null;
61
-
62
- // Fetch all pages
63
- do {
64
- const response: GetAllWorksResponse =
65
- await client.request<GetAllWorksResponse>(GET_ALL_WORKS, {
66
- cursor,
67
- limit,
68
- });
69
-
70
- allWorks.push(...response.works.items);
71
- cursor = response.works.pageInfo.hasMoreAfter
72
- ? response.works.pageInfo.nextCursor
73
- : null;
74
- } while (cursor !== null);
75
-
76
- return worksFromGraphQL(allWorks);
77
- } catch (error) {
78
- console.error('Error fetching translations metadata:', error);
79
- return [];
80
- }
81
- }
@@ -1,47 +0,0 @@
1
- import type { GraphQLClient } from 'graphql-request';
2
- import { gql } from 'graphql-request';
3
- import type { BibliographyEntries } from '@eightyfourthousand/data-access';
4
-
5
- const GET_WORK_BIBLIOGRAPHY = gql`
6
- query GetWorkBibliography($uuid: ID!) {
7
- work(uuid: $uuid) {
8
- bibliography {
9
- heading
10
- entries {
11
- uuid
12
- html
13
- workUuid
14
- }
15
- }
16
- }
17
- }
18
- `;
19
-
20
- type GetWorkBibliographyResponse = {
21
- work: {
22
- bibliography: BibliographyEntries;
23
- } | null;
24
- };
25
-
26
- /**
27
- * Get bibliography entries for a specific work.
28
- */
29
- export async function getWorkBibliography({
30
- client,
31
- uuid,
32
- }: {
33
- client: GraphQLClient;
34
- uuid: string;
35
- }): Promise<BibliographyEntries> {
36
- try {
37
- const response = await client.request<GetWorkBibliographyResponse>(
38
- GET_WORK_BIBLIOGRAPHY,
39
- { uuid },
40
- );
41
-
42
- return response.work?.bibliography ?? [];
43
- } catch (error) {
44
- console.error('Error fetching work bibliography:', error);
45
- return [];
46
- }
47
- }
@@ -1,52 +0,0 @@
1
- import type { GraphQLClient } from 'graphql-request';
2
- import { gql } from 'graphql-request';
3
- import type { Folio } from '@eightyfourthousand/data-access';
4
-
5
- const GET_WORK_FOLIOS = gql`
6
- query GetWorkFolios($uuid: ID!, $toh: String!, $page: Int, $size: Int) {
7
- work(uuid: $uuid) {
8
- folios(toh: $toh, page: $page, size: $size) {
9
- uuid
10
- content
11
- volume
12
- folio
13
- side
14
- }
15
- }
16
- }
17
- `;
18
-
19
- type GetWorkFoliosResponse = {
20
- work: {
21
- folios: Folio[];
22
- } | null;
23
- };
24
-
25
- /**
26
- * Get folios for a specific work, filtered by toh and paginated.
27
- */
28
- export async function getWorkFolios({
29
- client,
30
- uuid,
31
- toh,
32
- page = 0,
33
- size = 10,
34
- }: {
35
- client: GraphQLClient;
36
- uuid: string;
37
- toh: string;
38
- page?: number;
39
- size?: number;
40
- }): Promise<Folio[]> {
41
- try {
42
- const response = await client.request<GetWorkFoliosResponse>(
43
- GET_WORK_FOLIOS,
44
- { uuid, toh, page, size },
45
- );
46
-
47
- return response.work?.folios ?? [];
48
- } catch (error) {
49
- console.error('Error fetching work folios:', error);
50
- return [];
51
- }
52
- }
@@ -1,127 +0,0 @@
1
- import type { GraphQLClient } from 'graphql-request';
2
- import { gql } from 'graphql-request';
3
- import type { GlossaryTermInstance } from '@eightyfourthousand/data-access';
4
- import type { GlossaryTermsPage } from './get-work-glossary-terms';
5
-
6
- const GET_WORK_GLOSSARY_TERMS_AROUND = gql`
7
- query GetWorkGlossaryTermsAround(
8
- $uuid: ID!
9
- $cursor: String!
10
- $limit: Int
11
- $withAttestations: Boolean
12
- ) {
13
- work(uuid: $uuid) {
14
- glossaryTerms(
15
- cursor: $cursor
16
- limit: $limit
17
- direction: AROUND
18
- withAttestations: $withAttestations
19
- ) {
20
- nodes {
21
- uuid
22
- authority
23
- definition
24
- termNumber
25
- names {
26
- english
27
- tibetan
28
- sanskrit
29
- pali
30
- chinese
31
- wylie
32
- alternatives
33
- }
34
- passages(first: 10) {
35
- items {
36
- uuid
37
- type
38
- label
39
- }
40
- nextCursor
41
- hasMore
42
- }
43
- }
44
- pageInfo {
45
- nextCursor
46
- prevCursor
47
- hasMoreAfter
48
- hasMoreBefore
49
- }
50
- totalCount
51
- }
52
- }
53
- }
54
- `;
55
-
56
- type GetWorkGlossaryTermsAroundResponse = {
57
- work: {
58
- glossaryTerms: {
59
- nodes: GlossaryTermInstance[];
60
- pageInfo: {
61
- nextCursor?: string | null;
62
- prevCursor?: string | null;
63
- hasMoreAfter: boolean;
64
- hasMoreBefore: boolean;
65
- };
66
- totalCount: number;
67
- };
68
- } | null;
69
- };
70
-
71
- /**
72
- * Get glossary terms around a specific term UUID.
73
- * Used for navigating to a glossary entry that hasn't been loaded yet.
74
- */
75
- export async function getWorkGlossaryTermsAround({
76
- client,
77
- uuid,
78
- termUuid,
79
- limit,
80
- withAttestations = false,
81
- }: {
82
- client: GraphQLClient;
83
- uuid: string;
84
- termUuid: string;
85
- limit?: number;
86
- withAttestations?: boolean;
87
- }): Promise<GlossaryTermsPage> {
88
- try {
89
- const response = await client.request<GetWorkGlossaryTermsAroundResponse>(
90
- GET_WORK_GLOSSARY_TERMS_AROUND,
91
- {
92
- uuid,
93
- cursor: termUuid,
94
- limit,
95
- withAttestations,
96
- },
97
- );
98
-
99
- if (!response.work) {
100
- return {
101
- terms: [],
102
- hasMoreAfter: false,
103
- hasMoreBefore: false,
104
- totalCount: 0,
105
- };
106
- }
107
-
108
- const { glossaryTerms } = response.work;
109
-
110
- return {
111
- terms: glossaryTerms.nodes,
112
- nextCursor: glossaryTerms.pageInfo.nextCursor ?? undefined,
113
- prevCursor: glossaryTerms.pageInfo.prevCursor ?? undefined,
114
- hasMoreAfter: glossaryTerms.pageInfo.hasMoreAfter,
115
- hasMoreBefore: glossaryTerms.pageInfo.hasMoreBefore,
116
- totalCount: glossaryTerms.totalCount,
117
- };
118
- } catch (error) {
119
- console.error('Error fetching glossary terms around:', error);
120
- return {
121
- terms: [],
122
- hasMoreAfter: false,
123
- hasMoreBefore: false,
124
- totalCount: 0,
125
- };
126
- }
127
- }
@@ -1,154 +0,0 @@
1
- import type { GraphQLClient } from 'graphql-request';
2
- import { gql } from 'graphql-request';
3
- import type {
4
- GlossaryTermInstance,
5
- PaginationDirection,
6
- } from '@eightyfourthousand/data-access';
7
-
8
- const GET_WORK_GLOSSARY_TERMS = gql`
9
- query GetWorkGlossaryTerms(
10
- $uuid: ID!
11
- $cursor: String
12
- $limit: Int
13
- $direction: PaginationDirection
14
- $withAttestations: Boolean
15
- ) {
16
- work(uuid: $uuid) {
17
- glossaryTerms(
18
- cursor: $cursor
19
- limit: $limit
20
- direction: $direction
21
- withAttestations: $withAttestations
22
- ) {
23
- nodes {
24
- uuid
25
- authority
26
- definition
27
- termNumber
28
- names {
29
- english
30
- tibetan
31
- sanskrit
32
- pali
33
- chinese
34
- wylie
35
- alternatives
36
- }
37
- passages(first: 10) {
38
- items {
39
- uuid
40
- type
41
- label
42
- }
43
- nextCursor
44
- hasMore
45
- }
46
- }
47
- pageInfo {
48
- nextCursor
49
- prevCursor
50
- hasMoreAfter
51
- hasMoreBefore
52
- }
53
- totalCount
54
- }
55
- }
56
- }
57
- `;
58
-
59
- type GetWorkGlossaryTermsResponse = {
60
- work: {
61
- glossaryTerms: {
62
- nodes: GlossaryTermInstance[];
63
- pageInfo: {
64
- nextCursor?: string | null;
65
- prevCursor?: string | null;
66
- hasMoreAfter: boolean;
67
- hasMoreBefore: boolean;
68
- };
69
- totalCount: number;
70
- };
71
- } | null;
72
- };
73
-
74
- /**
75
- * Result of fetching glossary terms with pagination info
76
- */
77
- export type GlossaryTermsPage = {
78
- terms: GlossaryTermInstance[];
79
- nextCursor?: string;
80
- prevCursor?: string;
81
- hasMoreAfter: boolean;
82
- hasMoreBefore: boolean;
83
- totalCount: number;
84
- };
85
-
86
- /**
87
- * Map internal pagination direction to GraphQL enum
88
- */
89
- function mapDirection(
90
- direction?: PaginationDirection,
91
- ): 'FORWARD' | 'BACKWARD' | undefined {
92
- if (!direction) return undefined;
93
- return direction === 'forward' ? 'FORWARD' : 'BACKWARD';
94
- }
95
-
96
- /**
97
- * Get paginated glossary terms for a work.
98
- */
99
- export async function getWorkGlossaryTerms({
100
- client,
101
- uuid,
102
- cursor,
103
- limit = 50,
104
- direction,
105
- withAttestations = false,
106
- }: {
107
- client: GraphQLClient;
108
- uuid: string;
109
- cursor?: string;
110
- limit?: number;
111
- direction?: PaginationDirection;
112
- withAttestations?: boolean;
113
- }): Promise<GlossaryTermsPage> {
114
- try {
115
- const response = await client.request<GetWorkGlossaryTermsResponse>(
116
- GET_WORK_GLOSSARY_TERMS,
117
- {
118
- uuid,
119
- cursor,
120
- limit,
121
- direction: mapDirection(direction),
122
- withAttestations,
123
- },
124
- );
125
-
126
- if (!response.work) {
127
- return {
128
- terms: [],
129
- hasMoreAfter: false,
130
- hasMoreBefore: false,
131
- totalCount: 0,
132
- };
133
- }
134
-
135
- const { glossaryTerms } = response.work;
136
-
137
- return {
138
- terms: glossaryTerms.nodes,
139
- nextCursor: glossaryTerms.pageInfo.nextCursor ?? undefined,
140
- prevCursor: glossaryTerms.pageInfo.prevCursor ?? undefined,
141
- hasMoreAfter: glossaryTerms.pageInfo.hasMoreAfter,
142
- hasMoreBefore: glossaryTerms.pageInfo.hasMoreBefore,
143
- totalCount: glossaryTerms.totalCount,
144
- };
145
- } catch (error) {
146
- console.error('Error fetching work glossary terms:', error);
147
- return {
148
- terms: [],
149
- hasMoreAfter: false,
150
- hasMoreBefore: false,
151
- totalCount: 0,
152
- };
153
- }
154
- }
@@ -1,38 +0,0 @@
1
- import type { GraphQLClient } from 'graphql-request';
2
- import { gql } from 'graphql-request';
3
-
4
- // Permission enum matching the GraphQL schema
5
- export type Permission =
6
- | 'PROJECTS_READ'
7
- | 'PROJECTS_EDIT'
8
- | 'PROJECTS_ADMIN'
9
- | 'EDITOR_READ'
10
- | 'EDITOR_EDIT'
11
- | 'EDITOR_ADMIN';
12
-
13
- const HAS_PERMISSION_QUERY = gql`
14
- query HasPermission($permission: Permission!) {
15
- hasPermission(permission: $permission)
16
- }
17
- `;
18
-
19
- interface HasPermissionResponse {
20
- hasPermission: boolean;
21
- }
22
-
23
- /**
24
- * Check if the current user has a specific permission
25
- */
26
- export const hasPermission = async ({
27
- client,
28
- permission,
29
- }: {
30
- client: GraphQLClient;
31
- permission: Permission;
32
- }): Promise<boolean> => {
33
- const response = await client.request<HasPermissionResponse>(
34
- HAS_PERMISSION_QUERY,
35
- { permission },
36
- );
37
- return response.hasPermission;
38
- };
@@ -1,91 +0,0 @@
1
- import type { GraphQLClient } from 'graphql-request';
2
- import { gql } from 'graphql-request';
3
- import type { TranslationEditorContentItem } from '@eightyfourthousand/data-access';
4
-
5
- export type ReplaceType = 'PASSAGE';
6
-
7
- export interface ReplacedPassage {
8
- json?: TranslationEditorContentItem | null;
9
- uuid: string;
10
- }
11
-
12
- interface ReplaceResponse {
13
- replace: {
14
- deletedAnnotationCount: number;
15
- error?: string;
16
- nextOccurrenceStart?: number | null;
17
- nextPassageUuid?: string | null;
18
- passages: ReplacedPassage[];
19
- replacedOccurrenceCount: number;
20
- success: boolean;
21
- updatedAnnotationCount: number;
22
- updatedCount: number;
23
- };
24
- }
25
-
26
- const REPLACE_MUTATION = gql`
27
- mutation Replace(
28
- $searchText: String!
29
- $replaceText: String!
30
- $targetUuids: [ID!]!
31
- $type: ReplaceType
32
- $occurrenceIndex: Int
33
- $cursorPassageUuid: ID
34
- $cursorStart: Int
35
- ) {
36
- replace(
37
- searchText: $searchText
38
- replaceText: $replaceText
39
- targetUuids: $targetUuids
40
- type: $type
41
- occurrenceIndex: $occurrenceIndex
42
- cursorPassageUuid: $cursorPassageUuid
43
- cursorStart: $cursorStart
44
- ) {
45
- success
46
- updatedCount
47
- replacedOccurrenceCount
48
- updatedAnnotationCount
49
- deletedAnnotationCount
50
- nextPassageUuid
51
- nextOccurrenceStart
52
- error
53
- passages {
54
- uuid
55
- json
56
- }
57
- }
58
- }
59
- `;
60
-
61
- export const replace = async ({
62
- client,
63
- cursorPassageUuid,
64
- cursorStart,
65
- occurrenceIndex,
66
- replaceText,
67
- searchText,
68
- targetUuids,
69
- type = 'PASSAGE',
70
- }: {
71
- client: GraphQLClient;
72
- occurrenceIndex?: number;
73
- replaceText: string;
74
- searchText: string;
75
- cursorPassageUuid?: string;
76
- cursorStart?: number;
77
- targetUuids: string[];
78
- type?: ReplaceType;
79
- }) => {
80
- const response = await client.request<ReplaceResponse>(REPLACE_MUTATION, {
81
- searchText,
82
- replaceText,
83
- targetUuids,
84
- type,
85
- occurrenceIndex,
86
- cursorPassageUuid,
87
- cursorStart,
88
- });
89
-
90
- return response.replace;
91
- };