gt-sanity 0.0.6 → 1.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 (88) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/index.d.mts +95 -73
  3. package/dist/index.d.ts +95 -73
  4. package/dist/index.js +9066 -1207
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +9083 -1197
  7. package/dist/index.mjs.map +1 -1
  8. package/package.json +8 -3
  9. package/src/adapter/core.ts +41 -4
  10. package/src/adapter/getLocales.ts +2 -2
  11. package/src/components/TranslationsProvider.tsx +942 -0
  12. package/src/components/page/BatchProgress.tsx +27 -0
  13. package/src/components/page/ImportAllDialog.tsx +51 -0
  14. package/src/components/page/ImportMissingDialog.tsx +55 -0
  15. package/src/components/page/TranslateAllDialog.tsx +55 -0
  16. package/src/components/page/TranslationsTable.tsx +81 -0
  17. package/src/components/page/TranslationsTool.tsx +299 -837
  18. package/src/components/shared/BaseTranslationWrapper.tsx +82 -0
  19. package/src/components/shared/LocaleCheckbox.tsx +47 -0
  20. package/src/components/shared/SingleDocumentView.tsx +108 -0
  21. package/src/components/tab/TranslationView.tsx +379 -0
  22. package/src/components/tab/TranslationsTab.tsx +25 -0
  23. package/src/configuration/baseDocumentLevelConfig/documentLevelPatch.ts +6 -9
  24. package/src/configuration/baseDocumentLevelConfig/helpers/createI18nDocAndPatchMetadata.ts +5 -24
  25. package/src/configuration/baseDocumentLevelConfig/helpers/patchI18nDoc.ts +3 -23
  26. package/src/configuration/baseDocumentLevelConfig/index.ts +16 -68
  27. package/src/configuration/baseFieldLevelConfig.ts +15 -50
  28. package/src/index.ts +29 -43
  29. package/src/sanity-api/findDocuments.ts +44 -0
  30. package/src/sanity-api/publishDocuments.ts +49 -0
  31. package/src/sanity-api/resolveRefs.ts +146 -0
  32. package/src/serialization/BaseDocumentMerger.ts +138 -0
  33. package/src/serialization/BaseSerializationConfig.ts +220 -0
  34. package/src/serialization/__tests__/BaseDocumentDeserializer/__snapshots__/documentLevelDeserialization.test.ts.snap +189 -0
  35. package/src/serialization/__tests__/BaseDocumentDeserializer/__snapshots__/fieldLevelDeserialization.test.ts.snap +107 -0
  36. package/src/serialization/__tests__/BaseDocumentDeserializer/baseDeserialization.test.ts +397 -0
  37. package/src/serialization/__tests__/BaseDocumentDeserializer/documentLevelDeserialization.test.ts +107 -0
  38. package/src/serialization/__tests__/BaseDocumentDeserializer/fieldLevelDeserialization.test.ts +107 -0
  39. package/src/serialization/__tests__/BaseDocumentMerger/__snapshots__/documentLevelMerge.test.ts.snap +193 -0
  40. package/src/serialization/__tests__/BaseDocumentMerger/__snapshots__/fieldLevelMerge.test.ts.snap +97 -0
  41. package/src/serialization/__tests__/BaseDocumentMerger/baseMerge.test.ts +36 -0
  42. package/src/serialization/__tests__/BaseDocumentMerger/documentLevelMerge.test.ts +96 -0
  43. package/src/serialization/__tests__/BaseDocumentMerger/fieldLevelMerge.test.ts +142 -0
  44. package/src/serialization/__tests__/BaseDocumentMerger/utils.ts +52 -0
  45. package/src/serialization/__tests__/BaseDocumentSerializer/__snapshots__/documentInlineMarks.test.ts.snap +39 -0
  46. package/src/serialization/__tests__/BaseDocumentSerializer/__snapshots__/documentLevelSerialization.test.ts.snap +8 -0
  47. package/src/serialization/__tests__/BaseDocumentSerializer/__snapshots__/fieldLevelSerialization.test.ts.snap +8 -0
  48. package/src/serialization/__tests__/BaseDocumentSerializer/baseSerialization.test.ts +345 -0
  49. package/src/serialization/__tests__/BaseDocumentSerializer/documentInlineMarks.test.ts +53 -0
  50. package/src/serialization/__tests__/BaseDocumentSerializer/documentLevelSerialization.test.ts +120 -0
  51. package/src/serialization/__tests__/BaseDocumentSerializer/fieldLevelSerialization.test.ts +153 -0
  52. package/src/serialization/__tests__/BaseDocumentSerializer/utils.ts +27 -0
  53. package/src/serialization/__tests__/README +2 -0
  54. package/src/serialization/__tests__/__fixtures__/annotationAndInlineBlocks.json +140 -0
  55. package/src/serialization/__tests__/__fixtures__/customStyles.json +62 -0
  56. package/src/serialization/__tests__/__fixtures__/documentInlineMarks.json +70 -0
  57. package/src/serialization/__tests__/__fixtures__/documentLevelArticle.json +185 -0
  58. package/src/serialization/__tests__/__fixtures__/fieldLevelArticle.json +107 -0
  59. package/src/serialization/__tests__/__fixtures__/inlineDocumentLevelArticle.json +134 -0
  60. package/src/serialization/__tests__/__fixtures__/inlineSchema.ts +270 -0
  61. package/src/serialization/__tests__/__fixtures__/messy-html.html +26 -0
  62. package/src/serialization/__tests__/__fixtures__/nestedLanguageFields.json +54 -0
  63. package/src/serialization/__tests__/__fixtures__/schema.ts +310 -0
  64. package/src/serialization/__tests__/global.setup.ts +40 -0
  65. package/src/serialization/__tests__/helpers.ts +132 -0
  66. package/src/serialization/data.ts +82 -0
  67. package/src/serialization/deserialize/BaseDocumentDeserializer.ts +171 -0
  68. package/src/serialization/deserialize/helpers.ts +42 -0
  69. package/src/serialization/helpers.ts +18 -0
  70. package/src/serialization/index.ts +11 -0
  71. package/src/serialization/serialize/fieldFilters.ts +124 -0
  72. package/src/serialization/serialize/index.ts +284 -0
  73. package/src/serialization/types.ts +41 -0
  74. package/src/translation/importDocument.ts +4 -5
  75. package/src/translation/uploadFiles.ts +1 -1
  76. package/src/types.ts +3 -19
  77. package/src/utils/batchProcessor.ts +111 -0
  78. package/src/utils/importUtils.ts +95 -0
  79. package/src/utils/serialize.ts +25 -5
  80. package/src/utils/shared.ts +1 -1
  81. package/src/adapter/index.ts +0 -13
  82. package/src/components/NewTask.tsx +0 -251
  83. package/src/components/TaskView.tsx +0 -257
  84. package/src/components/TranslationContext.tsx +0 -24
  85. package/src/components/TranslationView.tsx +0 -114
  86. package/src/components/TranslationsTab.tsx +0 -181
  87. /package/src/components/{LanguageStatus.tsx → shared/LanguageStatus.tsx} +0 -0
  88. /package/src/components/{ProgressBar.tsx → shared/ProgressBar.tsx} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gt-sanity",
3
- "version": "0.0.6",
3
+ "version": "1.0.0",
4
4
  "description": "General Translation integration with Sanity",
5
5
  "keywords": [
6
6
  "sanity",
@@ -50,6 +50,7 @@
50
50
  "lint": "eslint .",
51
51
  "lint:fix": "eslint . --fix",
52
52
  "prepublishOnly": "npm run build",
53
+ "test": "vitest run",
53
54
  "watch": "pkg-utils watch --strict"
54
55
  },
55
56
  "dependencies": {
@@ -57,21 +58,25 @@
57
58
  "@sanity/block-tools": "^3.70.0",
58
59
  "@sanity/icons": "^3.7.4",
59
60
  "@sanity/incompatible-plugin": "^1.0.5",
61
+ "@sanity/mutator": "^3.98.1",
62
+ "@sanity/schema": "^3.98.1",
60
63
  "@sanity/ui": "^2.16.4",
61
64
  "@sanity/util": "^3.98.1",
62
65
  "generaltranslation": "^7.6.3",
63
66
  "jsonpath-plus": "^10.3.0",
64
67
  "jsonpointer": "^5.0.1",
65
- "lightningcss": "^1.30.1",
66
- "sanity-naive-html-serializer": "^3.2.0"
68
+ "lodash.merge": "^4.6.2"
67
69
  },
68
70
  "devDependencies": {
69
71
  "@sanity/pkg-utils": "^8.1.6",
70
72
  "@sanity/plugin-kit": "^4.0.19",
73
+ "@types/lodash.merge": "^4.6.9",
71
74
  "@types/react": "^19.1.12",
75
+ "jsdom": "^26.1.0",
72
76
  "@typescript-eslint/eslint-plugin": "^8.43.0",
73
77
  "@typescript-eslint/parser": "^8.43.0",
74
78
  "eslint-config-sanity": "^7.1.4",
79
+ "just-clone": "^6.2.0",
75
80
  "prettier-plugin-packagejson": "^2.5.19",
76
81
  "react": "^19.1.1",
77
82
  "react-dom": "^19.1.1",
@@ -3,7 +3,7 @@ import { libraryDefaultLocale } from 'generaltranslation/internal';
3
3
  import type { Secrets } from '../types';
4
4
  import type { TranslateDocumentFilter, IgnoreFields } from './types';
5
5
  import { SECRETS_NAMESPACE } from '../utils/shared';
6
-
6
+ import type { PortableTextHtmlComponents } from '@portabletext/to-html';
7
7
  export const gt = new GT();
8
8
 
9
9
  export function overrideConfig(secrets: Secrets | null) {
@@ -22,6 +22,11 @@ export class GTConfig {
22
22
  singletonMapping: (sourceDocumentId: string, locale: string) => string;
23
23
  ignoreFields: IgnoreFields[];
24
24
  translateDocuments: TranslateDocumentFilter[];
25
+ additionalStopTypes: string[];
26
+ additionalSerializers: Partial<PortableTextHtmlComponents>;
27
+ additionalDeserializers: Record<string, any>;
28
+ additionalBlockDeserializers: any[];
29
+
25
30
  private static instance: GTConfig;
26
31
  constructor(
27
32
  secretsNamespace: string,
@@ -31,7 +36,11 @@ export class GTConfig {
31
36
  singletons: string[],
32
37
  singletonMapping: (sourceDocumentId: string, locale: string) => string,
33
38
  ignoreFields: IgnoreFields[],
34
- translateDocuments: TranslateDocumentFilter[]
39
+ translateDocuments: TranslateDocumentFilter[],
40
+ additionalStopTypes: string[] = [],
41
+ additionalSerializers: Partial<PortableTextHtmlComponents> = {},
42
+ additionalDeserializers: Partial<PortableTextHtmlComponents> = {},
43
+ additionalBlockDeserializers: any[] = []
35
44
  ) {
36
45
  this.secretsNamespace = secretsNamespace;
37
46
  this.languageField = languageField;
@@ -41,6 +50,10 @@ export class GTConfig {
41
50
  this.singletonMapping = singletonMapping;
42
51
  this.ignoreFields = ignoreFields;
43
52
  this.translateDocuments = translateDocuments;
53
+ this.additionalStopTypes = additionalStopTypes;
54
+ this.additionalSerializers = additionalSerializers;
55
+ this.additionalDeserializers = additionalDeserializers;
56
+ this.additionalBlockDeserializers = additionalBlockDeserializers;
44
57
  }
45
58
 
46
59
  static getInstance() {
@@ -53,6 +66,10 @@ export class GTConfig {
53
66
  [],
54
67
  () => '',
55
68
  [],
69
+ [],
70
+ [],
71
+ {},
72
+ {},
56
73
  []
57
74
  );
58
75
  }
@@ -67,7 +84,11 @@ export class GTConfig {
67
84
  singletons: string[],
68
85
  singletonMapping: (sourceDocumentId: string, locale: string) => string,
69
86
  ignoreFields: IgnoreFields[],
70
- translateDocuments: TranslateDocumentFilter[]
87
+ translateDocuments: TranslateDocumentFilter[],
88
+ additionalStopTypes: string[] = [],
89
+ additionalSerializers: Partial<PortableTextHtmlComponents> = {},
90
+ additionalDeserializers: Partial<PortableTextHtmlComponents> = {},
91
+ additionalBlockDeserializers: any[] = []
71
92
  ) {
72
93
  this.secretsNamespace = secretsNamespace;
73
94
  this.languageField = languageField;
@@ -77,6 +98,10 @@ export class GTConfig {
77
98
  this.singletonMapping = singletonMapping;
78
99
  this.ignoreFields = ignoreFields;
79
100
  this.translateDocuments = translateDocuments;
101
+ this.additionalStopTypes = additionalStopTypes;
102
+ this.additionalSerializers = additionalSerializers;
103
+ this.additionalDeserializers = additionalDeserializers;
104
+ this.additionalBlockDeserializers = additionalBlockDeserializers;
80
105
  }
81
106
 
82
107
  getSecretsNamespace() {
@@ -105,5 +130,17 @@ export class GTConfig {
105
130
  getTranslateDocuments() {
106
131
  return this.translateDocuments;
107
132
  }
133
+ getAdditionalStopTypes() {
134
+ return this.additionalStopTypes;
135
+ }
136
+ getAdditionalSerializers() {
137
+ return this.additionalSerializers;
138
+ }
139
+ getAdditionalDeserializers() {
140
+ return this.additionalDeserializers;
141
+ }
142
+ getAdditionalBlockDeserializers() {
143
+ return this.additionalBlockDeserializers;
144
+ }
108
145
  }
109
- export const gtConfig = GTConfig.getInstance();
146
+ export const pluginConfig = GTConfig.getInstance();
@@ -1,11 +1,11 @@
1
1
  import type { Adapter, Secrets } from '../types';
2
- import { gt, gtConfig } from './core';
2
+ import { gt, pluginConfig } from './core';
3
3
 
4
4
  // note: this function is used to get the available locales for a project
5
5
  export const getLocales: Adapter['getLocales'] = async (
6
6
  secrets: Secrets | null
7
7
  ) => {
8
- return gtConfig.getLocales().map((locale: string) => ({
8
+ return pluginConfig.getLocales().map((locale: string) => ({
9
9
  localeId: locale,
10
10
  description: gt.getLocaleProperties(locale).name,
11
11
  enabled: true,