@inlang/sdk 2.1.2 → 2.2.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 (146) hide show
  1. package/dist/database/initDb.js +1 -4
  2. package/dist/database/initDb.js.map +1 -1
  3. package/dist/database/initDbAndSchema.test.js +1 -4
  4. package/dist/database/initDbAndSchema.test.js.map +1 -1
  5. package/dist/database/jsonbPlugin.js +1 -4
  6. package/dist/database/jsonbPlugin.js.map +1 -1
  7. package/dist/database/jsonbPlugin.test.js +1 -4
  8. package/dist/database/jsonbPlugin.test.js.map +1 -1
  9. package/dist/database/schema.js +1 -4
  10. package/dist/database/schema.js.map +1 -1
  11. package/dist/helper.js +1 -4
  12. package/dist/helper.js.map +1 -1
  13. package/dist/human-id/human-id.js +1 -4
  14. package/dist/human-id/human-id.js.map +1 -1
  15. package/dist/human-id/words.js +1 -4
  16. package/dist/human-id/words.js.map +1 -1
  17. package/dist/human-id/words.test.js +1 -4
  18. package/dist/human-id/words.test.js.map +1 -1
  19. package/dist/import-export/exportFiles.js +1 -4
  20. package/dist/import-export/exportFiles.js.map +1 -1
  21. package/dist/import-export/importFiles.js +1 -4
  22. package/dist/import-export/importFiles.js.map +1 -1
  23. package/dist/import-export/importFiles.test.js +1 -4
  24. package/dist/import-export/importFiles.test.js.map +1 -1
  25. package/dist/import-export/roundtrip.test.js +1 -4
  26. package/dist/import-export/roundtrip.test.js.map +1 -1
  27. package/dist/import-export/upsertBundleNestedMatchByProperties.js +1 -4
  28. package/dist/import-export/upsertBundleNestedMatchByProperties.js.map +1 -1
  29. package/dist/index.js +1 -4
  30. package/dist/index.js.map +1 -1
  31. package/dist/json-schema/old-v1-message/fromMessageV1.js +1 -4
  32. package/dist/json-schema/old-v1-message/fromMessageV1.js.map +1 -1
  33. package/dist/json-schema/old-v1-message/fromMessageV1.test.js +1 -4
  34. package/dist/json-schema/old-v1-message/fromMessageV1.test.js.map +1 -1
  35. package/dist/json-schema/old-v1-message/schemaV1.js +1 -4
  36. package/dist/json-schema/old-v1-message/schemaV1.js.map +1 -1
  37. package/dist/json-schema/old-v1-message/toMessageV1.js +1 -4
  38. package/dist/json-schema/old-v1-message/toMessageV1.js.map +1 -1
  39. package/dist/json-schema/old-v1-message/toMessageV1.test.js +1 -4
  40. package/dist/json-schema/old-v1-message/toMessageV1.test.js.map +1 -1
  41. package/dist/json-schema/pattern.js +1 -4
  42. package/dist/json-schema/pattern.js.map +1 -1
  43. package/dist/json-schema/settings.js +1 -4
  44. package/dist/json-schema/settings.js.map +1 -1
  45. package/dist/json-schema/settings.test-d.js +1 -4
  46. package/dist/json-schema/settings.test-d.js.map +1 -1
  47. package/dist/json-schema/settings.test.js +1 -4
  48. package/dist/json-schema/settings.test.js.map +1 -1
  49. package/dist/lix/index.js +1 -4
  50. package/dist/lix/index.js.map +1 -1
  51. package/dist/lix-plugin/applyChanges.js +1 -4
  52. package/dist/lix-plugin/applyChanges.js.map +1 -1
  53. package/dist/lix-plugin/applyChanges.test.js +1 -4
  54. package/dist/lix-plugin/applyChanges.test.js.map +1 -1
  55. package/dist/lix-plugin/detectConflicts.js +1 -4
  56. package/dist/lix-plugin/detectConflicts.js.map +1 -1
  57. package/dist/lix-plugin/detectConflicts.test.js +1 -4
  58. package/dist/lix-plugin/detectConflicts.test.js.map +1 -1
  59. package/dist/lix-plugin/inlangLixPluginV1.js +1 -4
  60. package/dist/lix-plugin/inlangLixPluginV1.js.map +1 -1
  61. package/dist/lix-plugin/inlangLixPluginV1.test.js +1 -4
  62. package/dist/lix-plugin/inlangLixPluginV1.test.js.map +1 -1
  63. package/dist/lix-plugin/merge.test.js +1 -4
  64. package/dist/lix-plugin/merge.test.js.map +1 -1
  65. package/dist/lix-plugin/resolveConflictBySelecting.test.js +1 -4
  66. package/dist/lix-plugin/resolveConflictBySelecting.test.js.map +1 -1
  67. package/dist/migrations/v2/createMessageV1.js +1 -4
  68. package/dist/migrations/v2/createMessageV1.js.map +1 -1
  69. package/dist/migrations/v2/withLanguageTagToLocaleMigration.js +1 -4
  70. package/dist/migrations/v2/withLanguageTagToLocaleMigration.js.map +1 -1
  71. package/dist/migrations/v2/withLanguageTagToLocaleMigration.test.js +1 -4
  72. package/dist/migrations/v2/withLanguageTagToLocaleMigration.test.js.map +1 -1
  73. package/dist/plugin/cache.js +1 -4
  74. package/dist/plugin/cache.js.map +1 -1
  75. package/dist/plugin/cache.test.js +1 -4
  76. package/dist/plugin/cache.test.js.map +1 -1
  77. package/dist/plugin/errors.js +1 -4
  78. package/dist/plugin/errors.js.map +1 -1
  79. package/dist/plugin/importPlugins.js +1 -4
  80. package/dist/plugin/importPlugins.js.map +1 -1
  81. package/dist/plugin/importPlugins.test.js +1 -4
  82. package/dist/plugin/importPlugins.test.js.map +1 -1
  83. package/dist/plugin/meta/ideExtension.js +1 -4
  84. package/dist/plugin/meta/ideExtension.js.map +1 -1
  85. package/dist/plugin/schema.js +1 -4
  86. package/dist/plugin/schema.js.map +1 -1
  87. package/dist/project/api.js +1 -4
  88. package/dist/project/api.js.map +1 -1
  89. package/dist/project/loadProject.d.ts.map +1 -1
  90. package/dist/project/loadProject.js +1 -6
  91. package/dist/project/loadProject.js.map +1 -1
  92. package/dist/project/loadProject.test.js +1 -4
  93. package/dist/project/loadProject.test.js.map +1 -1
  94. package/dist/project/loadProjectFromDirectory.js +1 -4
  95. package/dist/project/loadProjectFromDirectory.js.map +1 -1
  96. package/dist/project/loadProjectFromDirectory.test.js +1 -4
  97. package/dist/project/loadProjectFromDirectory.test.js.map +1 -1
  98. package/dist/project/loadProjectInMemory.js +1 -4
  99. package/dist/project/loadProjectInMemory.js.map +1 -1
  100. package/dist/project/loadProjectInMemory.test.js +1 -4
  101. package/dist/project/loadProjectInMemory.test.js.map +1 -1
  102. package/dist/project/maybeCaptureTelemetry.d.ts.map +1 -1
  103. package/dist/project/maybeCaptureTelemetry.js +1 -6
  104. package/dist/project/maybeCaptureTelemetry.js.map +1 -1
  105. package/dist/project/maybeCaptureTelemetry.test.js +1 -4
  106. package/dist/project/maybeCaptureTelemetry.test.js.map +1 -1
  107. package/dist/project/newProject.d.ts.map +1 -1
  108. package/dist/project/newProject.js +1 -6
  109. package/dist/project/newProject.js.map +1 -1
  110. package/dist/project/newProject.test.js +1 -4
  111. package/dist/project/newProject.test.js.map +1 -1
  112. package/dist/project/saveProjectToDirectory.js +1 -4
  113. package/dist/project/saveProjectToDirectory.js.map +1 -1
  114. package/dist/project/saveProjectToDirectory.test.js +1 -4
  115. package/dist/project/saveProjectToDirectory.test.js.map +1 -1
  116. package/dist/query-utilities/index.js +1 -4
  117. package/dist/query-utilities/index.js.map +1 -1
  118. package/dist/query-utilities/insertBundleNested.js +1 -4
  119. package/dist/query-utilities/insertBundleNested.js.map +1 -1
  120. package/dist/query-utilities/selectBundleNested.js +1 -4
  121. package/dist/query-utilities/selectBundleNested.js.map +1 -1
  122. package/dist/query-utilities/updateBundleNested.js +1 -4
  123. package/dist/query-utilities/updateBundleNested.js.map +1 -1
  124. package/dist/query-utilities/upsertBundleNested.js +1 -4
  125. package/dist/query-utilities/upsertBundleNested.js.map +1 -1
  126. package/dist/services/env-variables/index.js +2 -5
  127. package/dist/services/env-variables/index.js.map +1 -1
  128. package/dist/services/telemetry/capture.d.ts.map +1 -1
  129. package/dist/services/telemetry/capture.js +5 -9
  130. package/dist/services/telemetry/capture.js.map +1 -1
  131. package/dist/services/telemetry/capture.test.js +1 -4
  132. package/dist/services/telemetry/capture.test.js.map +1 -1
  133. package/dist/utilities/detectJsonFormatting.js +1 -4
  134. package/dist/utilities/detectJsonFormatting.js.map +1 -1
  135. package/dist/utilities/detectJsonFormatting.test.js +1 -4
  136. package/dist/utilities/detectJsonFormatting.test.js.map +1 -1
  137. package/package.json +5 -9
  138. package/src/project/loadProject.ts +0 -3
  139. package/src/project/maybeCaptureTelemetry.ts +0 -2
  140. package/src/project/newProject.ts +0 -2
  141. package/src/services/telemetry/capture.ts +4 -5
  142. package/dist/services/error-reporting/index.d.ts +0 -15
  143. package/dist/services/error-reporting/index.d.ts.map +0 -1
  144. package/dist/services/error-reporting/index.js +0 -30
  145. package/dist/services/error-reporting/index.js.map +0 -1
  146. package/src/services/error-reporting/index.ts +0 -28
@@ -1 +1 @@
1
- {"version":3,"file":"settings.test-d.js","sources":["json-schema/settings.test-d.ts"],"sourceRoot":"/","sourcesContent":["import { ProjectSettings } from \"./settings.js\";\n\nconst settings = {} as ProjectSettings;\n\n// language tag and locale should be optional\nsettings.languageTags = undefined;\nsettings.sourceLanguageTag = undefined;\n\n// @ts-expect-error - base locale is required\nsettings.baseLocale = undefined;\n\n// @ts-expect-error - locales are required\nsettings.locales = undefined;\n\n// expect no error\nsettings[\"plugin.mock\"] = {\n\tkey: \"value\",\n\tnested: {\n\t\tmoreNested: {},\n\t},\n};\n"],"names":[],"mappings":";;AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,QAAQ,GAAG,EAAqB,CAAC;AAEvC,6CAA6C;AAC7C,QAAQ,CAAC,YAAY,GAAG,SAAS,CAAC;AAClC,QAAQ,CAAC,iBAAiB,GAAG,SAAS,CAAC;AAEvC,6CAA6C;AAC7C,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC;AAEhC,0CAA0C;AAC1C,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC;AAE7B,kBAAkB;AAClB,QAAQ,CAAC,aAAa,CAAC,GAAG;IACzB,GAAG,EAAE,OAAO;IACZ,MAAM,EAAE;QACP,UAAU,EAAE,EAAE;KACd;CACD,CAAC","debug_id":"18d5d5fa-d82c-541b-a967-918a95a3c9b2"}
1
+ {"version":3,"file":"settings.test-d.js","sourceRoot":"/","sources":["json-schema/settings.test-d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,QAAQ,GAAG,EAAqB,CAAC;AAEvC,6CAA6C;AAC7C,QAAQ,CAAC,YAAY,GAAG,SAAS,CAAC;AAClC,QAAQ,CAAC,iBAAiB,GAAG,SAAS,CAAC;AAEvC,6CAA6C;AAC7C,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC;AAEhC,0CAA0C;AAC1C,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC;AAE7B,kBAAkB;AAClB,QAAQ,CAAC,aAAa,CAAC,GAAG;IACzB,GAAG,EAAE,OAAO;IACZ,MAAM,EAAE;QACP,UAAU,EAAE,EAAE;KACd;CACD,CAAC","sourcesContent":["import { ProjectSettings } from \"./settings.js\";\n\nconst settings = {} as ProjectSettings;\n\n// language tag and locale should be optional\nsettings.languageTags = undefined;\nsettings.sourceLanguageTag = undefined;\n\n// @ts-expect-error - base locale is required\nsettings.baseLocale = undefined;\n\n// @ts-expect-error - locales are required\nsettings.locales = undefined;\n\n// expect no error\nsettings[\"plugin.mock\"] = {\n\tkey: \"value\",\n\tnested: {\n\t\tmoreNested: {},\n\t},\n};\n"]}
@@ -1,5 +1,3 @@
1
-
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9b1af2ee-57bc-53aa-87a7-58e094655f60")}catch(e){}}();
3
1
  import { TypeCompiler } from "@sinclair/typebox/compiler";
4
2
  import { ProjectSettings } from "./settings.js";
5
3
  import { test, expect } from "vitest";
@@ -22,5 +20,4 @@ test("valid settings file", () => {
22
20
  const errors = [...C.Errors(settings)];
23
21
  expect(errors).toEqual([]);
24
22
  });
25
- //# sourceMappingURL=settings.test.js.map
26
- //# debugId=9b1af2ee-57bc-53aa-87a7-58e094655f60
23
+ //# sourceMappingURL=settings.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.test.js","sources":["json-schema/settings.test.ts"],"sourceRoot":"/","sourcesContent":["import { TypeCompiler } from \"@sinclair/typebox/compiler\";\nimport { ProjectSettings } from \"./settings.js\";\nimport { test, expect } from \"vitest\";\n\nconst C = TypeCompiler.Compile(ProjectSettings);\n\ntest(\"valid settings file\", () => {\n\tconst settings: ProjectSettings = {\n\t\tbaseLocale: \"en\",\n\t\tlocales: [\"en\", \"de\"],\n\t\tmodules: [\n\t\t\t\"https://cdn.jsdelivr.net/npm/@inlang/plugin-i18next@3/dist/index.js\",\n\t\t\t\"https://cdn.jsdelivr.net/npm/@inlang/plugin-csv@1/dist/index.js\",\n\t\t],\n\t\t\"plugin.something\": {\n\t\t\tkey: \"value\",\n\t\t\tnested: {\n\t\t\t\tmoreNested: {},\n\t\t\t},\n\t\t},\n\t};\n\n\tconst errors = [...C.Errors(settings)];\n\n\texpect(errors).toEqual([]);\n});\n"],"names":[],"mappings":";;AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AAEhD,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;IAChC,MAAM,QAAQ,GAAoB;QACjC,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;QACrB,OAAO,EAAE;YACR,qEAAqE;YACrE,iEAAiE;SACjE;QACD,kBAAkB,EAAE;YACnB,GAAG,EAAE,OAAO;YACZ,MAAM,EAAE;gBACP,UAAU,EAAE,EAAE;aACd;SACD;KACD,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC","debug_id":"9b1af2ee-57bc-53aa-87a7-58e094655f60"}
1
+ {"version":3,"file":"settings.test.js","sourceRoot":"/","sources":["json-schema/settings.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AAEhD,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;IAChC,MAAM,QAAQ,GAAoB;QACjC,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;QACrB,OAAO,EAAE;YACR,qEAAqE;YACrE,iEAAiE;SACjE;QACD,kBAAkB,EAAE;YACnB,GAAG,EAAE,OAAO;YACZ,MAAM,EAAE;gBACP,UAAU,EAAE,EAAE;aACd;SACD;KACD,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC","sourcesContent":["import { TypeCompiler } from \"@sinclair/typebox/compiler\";\nimport { ProjectSettings } from \"./settings.js\";\nimport { test, expect } from \"vitest\";\n\nconst C = TypeCompiler.Compile(ProjectSettings);\n\ntest(\"valid settings file\", () => {\n\tconst settings: ProjectSettings = {\n\t\tbaseLocale: \"en\",\n\t\tlocales: [\"en\", \"de\"],\n\t\tmodules: [\n\t\t\t\"https://cdn.jsdelivr.net/npm/@inlang/plugin-i18next@3/dist/index.js\",\n\t\t\t\"https://cdn.jsdelivr.net/npm/@inlang/plugin-csv@1/dist/index.js\",\n\t\t],\n\t\t\"plugin.something\": {\n\t\t\tkey: \"value\",\n\t\t\tnested: {\n\t\t\t\tmoreNested: {},\n\t\t\t},\n\t\t},\n\t};\n\n\tconst errors = [...C.Errors(settings)];\n\n\texpect(errors).toEqual([]);\n});\n"]}
package/dist/lix/index.js CHANGED
@@ -1,5 +1,2 @@
1
-
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="336ae7a2-06c7-52d6-a8f1-83c9d685534e")}catch(e){}}();
3
1
  export * from "@lix-js/sdk";
4
- //# sourceMappingURL=index.js.map
5
- //# debugId=336ae7a2-06c7-52d6-a8f1-83c9d685534e
2
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["lix/index.ts"],"sourceRoot":"/","sourcesContent":["export * from \"@lix-js/sdk\";\n"],"names":[],"mappings":";;AAAA,cAAc,aAAa,CAAC","debug_id":"336ae7a2-06c7-52d6-a8f1-83c9d685534e"}
1
+ {"version":3,"file":"index.js","sourceRoot":"/","sources":["lix/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC","sourcesContent":["export * from \"@lix-js/sdk\";\n"]}
@@ -1,7 +1,5 @@
1
1
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
2
  // @ts-nocheck
3
-
4
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9b9ba9f2-e828-592b-9d34-ef9bdb8f67c0")}catch(e){}}();
5
3
  import { getLeafChange, } from "@lix-js/sdk";
6
4
  import { contentFromDatabase, loadDatabaseInMemory } from "sqlite-wasm-kysely";
7
5
  import { initDb } from "../database/initDb.js";
@@ -123,5 +121,4 @@ async function handleForeignKeyViolation(args) {
123
121
  .onConflict((c) => c.column("id").doUpdateSet(args.change.value))
124
122
  .execute();
125
123
  }
126
- //# sourceMappingURL=applyChanges.js.map
127
- //# debugId=9b9ba9f2-e828-592b-9d34-ef9bdb8f67c0
124
+ //# sourceMappingURL=applyChanges.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"applyChanges.js","sources":["lix-plugin/applyChanges.ts"],"sourceRoot":"/","sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport {\n\tgetLeafChange,\n\ttype Change,\n\ttype LixPlugin,\n\ttype LixReadonly,\n} from \"@lix-js/sdk\";\nimport { contentFromDatabase, loadDatabaseInMemory } from \"sqlite-wasm-kysely\";\nimport { initDb } from \"../database/initDb.js\";\nimport type { Kysely } from \"kysely\";\nimport type { InlangDatabaseSchema } from \"../database/schema.js\";\n\nexport const applyChanges: NonNullable<LixPlugin[\"applyChanges\"]> = async ({\n\tlix,\n\tfile,\n\tchanges,\n}) => {\n\tif (file.path?.endsWith(\"db.sqlite\") === false) {\n\t\tthrow new Error(\n\t\t\t\"Unimplemented. Only the db.sqlite file can be handled for now.\"\n\t\t);\n\t}\n\n\t// todo make transactional\n\n\tconst sqlite = await loadDatabaseInMemory(file.data);\n\tconst db = initDb({ sqlite });\n\n\t// the award for the most inefficient deduplication goes to...\n\tconst leafChanges = [\n\t\t...new Set(\n\t\t\tawait Promise.all(\n\t\t\t\tchanges.map(async (change) => {\n\t\t\t\t\tconst leafChange = await getLeafChange({ change, lix });\n\t\t\t\t\t// enable string comparison to avoid duplicates\n\t\t\t\t\treturn JSON.stringify(leafChange);\n\t\t\t\t})\n\t\t\t)\n\t\t),\n\t].map((v) => JSON.parse(v));\n\n\t// changes need to be applied in order of foreign keys to avoid constraint violations\n\t// 1. bundles\n\t// 2. messages\n\t// 3. variants\n\tconst applyOrder: Record<string, number> = {\n\t\tbundle: 1,\n\t\tmessage: 2,\n\t\tvariant: 3,\n\t};\n\n\t// future optimization potential here but sorting in one go\n\tconst orderedLeafChanges = [...leafChanges].sort((a, b) => {\n\t\tconst orderA = applyOrder[a.type];\n\t\tconst orderB = applyOrder[b.type];\n\n\t\tif (orderA === undefined || orderB === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t`Received an unknown entity type: ${a.type} && ${\n\t\t\t\t\tb.type\n\t\t\t\t}. Expected one of: ${Object.keys(applyOrder)}`\n\t\t\t);\n\t\t}\n\n\t\treturn orderA - orderB;\n\t});\n\tfor (const leafChange of orderedLeafChanges) {\n\t\t// deletion\n\t\tif (leafChange.value === undefined) {\n\t\t\tawait db\n\t\t\t\t.deleteFrom(leafChange.type as \"bundle\" | \"message\" | \"variant\")\n\t\t\t\t.where(\"id\", \"=\", leafChange.meta?.id)\n\t\t\t\t.execute();\n\t\t\tcontinue;\n\t\t}\n\n\t\t// upsert the value\n\t\tconst value = leafChange.value as any;\n\n\t\ttry {\n\t\t\tawait db\n\t\t\t\t.insertInto(leafChange.type as \"bundle\" | \"message\" | \"variant\")\n\t\t\t\t.values(value)\n\t\t\t\t.onConflict((c) => c.column(\"id\").doUpdateSet(value))\n\t\t\t\t.execute();\n\t\t} catch (e) {\n\t\t\t// 787 = SQLITE_CONSTRAINT_FOREIGNKEY\n\t\t\tif (e instanceof Error && (e as any)?.resultCode === 787) {\n\t\t\t\tawait handleForeignKeyViolation({ change: leafChange, lix, db });\n\t\t\t} else {\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t}\n\treturn { fileData: contentFromDatabase(sqlite) };\n};\n\n/**\n * Handles foreign key violations e.g. a change\n * doesn't exist in the target database but is referenced\n * by an entity.\n */\nasync function handleForeignKeyViolation(args: {\n\tchange: Change;\n\tlix: LixReadonly;\n\tdb: Kysely<InlangDatabaseSchema>;\n}) {\n\tconst lastKnown = async (\n\t\ttype: \"bundle\" | \"message\" | \"variant\",\n\t\tid: string\n\t) =>\n\t\tawait args.lix.db\n\t\t\t.selectFrom(\"change\")\n\t\t\t.selectAll()\n\t\t\t// heuristic that getting the last bundle value is fine\n\t\t\t// and using created_at is fine too. if the change is undesired\n\t\t\t// , a user can revert it with lix change control\n\t\t\t.orderBy(\"created_at desc\")\n\t\t\t.where(\"type\", \"=\", type)\n\t\t\t.where((eb) => eb.ref(\"value\", \"->>\").key(\"id\"), \"=\", id)\n\t\t\t.where(\"operation\", \"in\", [\"create\", \"update\"])\n\t\t\t// TODO shouldn't throw. The API needs to be able to\n\t\t\t// report issues back to the app without throwing and potentially failing\n\t\t\t// to apply 1000 changes because 1 change is invalid\n\t\t\t// same requirement as in inlang, see https://github.com/opral/inlang-sdk/issues/213\n\t\t\t.executeTakeFirstOrThrow();\n\n\tif (args.change.type === \"message\") {\n\t\tconst lastKnownBundle = await lastKnown(\n\t\t\t\"bundle\",\n\t\t\targs.change.value?.bundleId\n\t\t);\n\t\tawait args.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values(lastKnownBundle.value as any)\n\t\t\t.execute();\n\t} else if (args.change.type === \"variant\") {\n\t\tconst lastKnownMessage = await lastKnown(\n\t\t\t\"message\",\n\t\t\targs.change.value?.messageId\n\t\t);\n\t\t// getting the bundle too out of precaution\n\t\tconst lastKnownBundle = await lastKnown(\n\t\t\t\"bundle\",\n\t\t\tlastKnownMessage.value?.bundleId\n\t\t);\n\t\tawait args.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values(lastKnownBundle.value as any)\n\t\t\t// the bundle exists, so we can ignore the conflict\n\t\t\t.onConflict((c) => c.doNothing())\n\t\t\t.execute();\n\t\tawait args.db\n\t\t\t.insertInto(\"message\")\n\t\t\t.values(lastKnownMessage.value as any)\n\t\t\t.execute();\n\t\tawait args.db\n\t\t\t.insertInto(args.change.type as \"bundle\" | \"message\" | \"variant\")\n\t\t\t.values(args.change.value as any)\n\t\t\t.onConflict((c) => c.column(\"id\").doUpdateSet(args.change.value as any))\n\t\t\t.execute();\n\t}\n\t// re-execute applying the change\n\tawait args.db\n\t\t.insertInto(args.change.type as \"bundle\" | \"message\" | \"variant\")\n\t\t.values(args.change.value as any)\n\t\t.onConflict((c) => c.column(\"id\").doUpdateSet(args.change.value as any))\n\t\t.execute();\n}\n"],"names":[],"mappings":"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","debug_id":"9b9ba9f2-e828-592b-9d34-ef9bdb8f67c0"}
1
+ {"version":3,"file":"applyChanges.js","sourceRoot":"/","sources":["lix-plugin/applyChanges.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc;AAEd,OAAO,EACN,aAAa,GAIb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI/C,MAAM,CAAC,MAAM,YAAY,GAA2C,KAAK,EAAE,EAC1E,GAAG,EACH,IAAI,EACJ,OAAO,GACP,EAAE,EAAE;IACJ,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,KAAK,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACd,gEAAgE,CAChE,CAAC;IACH,CAAC;IAED,0BAA0B;IAE1B,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,8DAA8D;IAC9D,MAAM,WAAW,GAAG;QACnB,GAAG,IAAI,GAAG,CACT,MAAM,OAAO,CAAC,GAAG,CAChB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAC5B,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACxD,+CAA+C;YAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC,CAAC,CACF,CACD;KACD,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5B,qFAAqF;IACrF,aAAa;IACb,cAAc;IACd,cAAc;IACd,MAAM,UAAU,GAA2B;QAC1C,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;KACV,CAAC;IAEF,2DAA2D;IAC3D,MAAM,kBAAkB,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CACd,oCAAoC,CAAC,CAAC,IAAI,OACzC,CAAC,CAAC,IACH,sBAAsB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAC/C,CAAC;QACH,CAAC;QAED,OAAO,MAAM,GAAG,MAAM,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,KAAK,MAAM,UAAU,IAAI,kBAAkB,EAAE,CAAC;QAC7C,WAAW;QACX,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,EAAE;iBACN,UAAU,CAAC,UAAU,CAAC,IAAwC,CAAC;iBAC/D,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;iBACrC,OAAO,EAAE,CAAC;YACZ,SAAS;QACV,CAAC;QAED,mBAAmB;QACnB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAY,CAAC;QAEtC,IAAI,CAAC;YACJ,MAAM,EAAE;iBACN,UAAU,CAAC,UAAU,CAAC,IAAwC,CAAC;iBAC/D,MAAM,CAAC,KAAK,CAAC;iBACb,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;iBACpD,OAAO,EAAE,CAAC;QACb,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,qCAAqC;YACrC,IAAI,CAAC,YAAY,KAAK,IAAK,CAAS,EAAE,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC1D,MAAM,yBAAyB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,CAAC;YACT,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;AAClD,CAAC,CAAC;AAEF;;;;GAIG;AACH,KAAK,UAAU,yBAAyB,CAAC,IAIxC;IACA,MAAM,SAAS,GAAG,KAAK,EACtB,IAAsC,EACtC,EAAU,EACT,EAAE,CACH,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE;SACf,UAAU,CAAC,QAAQ,CAAC;SACpB,SAAS,EAAE;QACZ,uDAAuD;QACvD,+DAA+D;QAC/D,iDAAiD;SAChD,OAAO,CAAC,iBAAiB,CAAC;SAC1B,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;SACxB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;SACxD,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/C,oDAAoD;QACpD,yEAAyE;QACzE,oDAAoD;QACpD,oFAAoF;SACnF,uBAAuB,EAAE,CAAC;IAE7B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,eAAe,GAAG,MAAM,SAAS,CACtC,QAAQ,EACR,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAC3B,CAAC;QACF,MAAM,IAAI,CAAC,EAAE;aACX,UAAU,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC,eAAe,CAAC,KAAY,CAAC;aACpC,OAAO,EAAE,CAAC;IACb,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3C,MAAM,gBAAgB,GAAG,MAAM,SAAS,CACvC,SAAS,EACT,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAC5B,CAAC;QACF,2CAA2C;QAC3C,MAAM,eAAe,GAAG,MAAM,SAAS,CACtC,QAAQ,EACR,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAChC,CAAC;QACF,MAAM,IAAI,CAAC,EAAE;aACX,UAAU,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC,eAAe,CAAC,KAAY,CAAC;YACrC,mDAAmD;aAClD,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;aAChC,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,CAAC,EAAE;aACX,UAAU,CAAC,SAAS,CAAC;aACrB,MAAM,CAAC,gBAAgB,CAAC,KAAY,CAAC;aACrC,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,CAAC,EAAE;aACX,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAwC,CAAC;aAChE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAY,CAAC;aAChC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAY,CAAC,CAAC;aACvE,OAAO,EAAE,CAAC;IACb,CAAC;IACD,iCAAiC;IACjC,MAAM,IAAI,CAAC,EAAE;SACX,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAwC,CAAC;SAChE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAY,CAAC;SAChC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAY,CAAC,CAAC;SACvE,OAAO,EAAE,CAAC;AACb,CAAC","sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport {\n\tgetLeafChange,\n\ttype Change,\n\ttype LixPlugin,\n\ttype LixReadonly,\n} from \"@lix-js/sdk\";\nimport { contentFromDatabase, loadDatabaseInMemory } from \"sqlite-wasm-kysely\";\nimport { initDb } from \"../database/initDb.js\";\nimport type { Kysely } from \"kysely\";\nimport type { InlangDatabaseSchema } from \"../database/schema.js\";\n\nexport const applyChanges: NonNullable<LixPlugin[\"applyChanges\"]> = async ({\n\tlix,\n\tfile,\n\tchanges,\n}) => {\n\tif (file.path?.endsWith(\"db.sqlite\") === false) {\n\t\tthrow new Error(\n\t\t\t\"Unimplemented. Only the db.sqlite file can be handled for now.\"\n\t\t);\n\t}\n\n\t// todo make transactional\n\n\tconst sqlite = await loadDatabaseInMemory(file.data);\n\tconst db = initDb({ sqlite });\n\n\t// the award for the most inefficient deduplication goes to...\n\tconst leafChanges = [\n\t\t...new Set(\n\t\t\tawait Promise.all(\n\t\t\t\tchanges.map(async (change) => {\n\t\t\t\t\tconst leafChange = await getLeafChange({ change, lix });\n\t\t\t\t\t// enable string comparison to avoid duplicates\n\t\t\t\t\treturn JSON.stringify(leafChange);\n\t\t\t\t})\n\t\t\t)\n\t\t),\n\t].map((v) => JSON.parse(v));\n\n\t// changes need to be applied in order of foreign keys to avoid constraint violations\n\t// 1. bundles\n\t// 2. messages\n\t// 3. variants\n\tconst applyOrder: Record<string, number> = {\n\t\tbundle: 1,\n\t\tmessage: 2,\n\t\tvariant: 3,\n\t};\n\n\t// future optimization potential here but sorting in one go\n\tconst orderedLeafChanges = [...leafChanges].sort((a, b) => {\n\t\tconst orderA = applyOrder[a.type];\n\t\tconst orderB = applyOrder[b.type];\n\n\t\tif (orderA === undefined || orderB === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t`Received an unknown entity type: ${a.type} && ${\n\t\t\t\t\tb.type\n\t\t\t\t}. Expected one of: ${Object.keys(applyOrder)}`\n\t\t\t);\n\t\t}\n\n\t\treturn orderA - orderB;\n\t});\n\tfor (const leafChange of orderedLeafChanges) {\n\t\t// deletion\n\t\tif (leafChange.value === undefined) {\n\t\t\tawait db\n\t\t\t\t.deleteFrom(leafChange.type as \"bundle\" | \"message\" | \"variant\")\n\t\t\t\t.where(\"id\", \"=\", leafChange.meta?.id)\n\t\t\t\t.execute();\n\t\t\tcontinue;\n\t\t}\n\n\t\t// upsert the value\n\t\tconst value = leafChange.value as any;\n\n\t\ttry {\n\t\t\tawait db\n\t\t\t\t.insertInto(leafChange.type as \"bundle\" | \"message\" | \"variant\")\n\t\t\t\t.values(value)\n\t\t\t\t.onConflict((c) => c.column(\"id\").doUpdateSet(value))\n\t\t\t\t.execute();\n\t\t} catch (e) {\n\t\t\t// 787 = SQLITE_CONSTRAINT_FOREIGNKEY\n\t\t\tif (e instanceof Error && (e as any)?.resultCode === 787) {\n\t\t\t\tawait handleForeignKeyViolation({ change: leafChange, lix, db });\n\t\t\t} else {\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\t}\n\treturn { fileData: contentFromDatabase(sqlite) };\n};\n\n/**\n * Handles foreign key violations e.g. a change\n * doesn't exist in the target database but is referenced\n * by an entity.\n */\nasync function handleForeignKeyViolation(args: {\n\tchange: Change;\n\tlix: LixReadonly;\n\tdb: Kysely<InlangDatabaseSchema>;\n}) {\n\tconst lastKnown = async (\n\t\ttype: \"bundle\" | \"message\" | \"variant\",\n\t\tid: string\n\t) =>\n\t\tawait args.lix.db\n\t\t\t.selectFrom(\"change\")\n\t\t\t.selectAll()\n\t\t\t// heuristic that getting the last bundle value is fine\n\t\t\t// and using created_at is fine too. if the change is undesired\n\t\t\t// , a user can revert it with lix change control\n\t\t\t.orderBy(\"created_at desc\")\n\t\t\t.where(\"type\", \"=\", type)\n\t\t\t.where((eb) => eb.ref(\"value\", \"->>\").key(\"id\"), \"=\", id)\n\t\t\t.where(\"operation\", \"in\", [\"create\", \"update\"])\n\t\t\t// TODO shouldn't throw. The API needs to be able to\n\t\t\t// report issues back to the app without throwing and potentially failing\n\t\t\t// to apply 1000 changes because 1 change is invalid\n\t\t\t// same requirement as in inlang, see https://github.com/opral/inlang-sdk/issues/213\n\t\t\t.executeTakeFirstOrThrow();\n\n\tif (args.change.type === \"message\") {\n\t\tconst lastKnownBundle = await lastKnown(\n\t\t\t\"bundle\",\n\t\t\targs.change.value?.bundleId\n\t\t);\n\t\tawait args.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values(lastKnownBundle.value as any)\n\t\t\t.execute();\n\t} else if (args.change.type === \"variant\") {\n\t\tconst lastKnownMessage = await lastKnown(\n\t\t\t\"message\",\n\t\t\targs.change.value?.messageId\n\t\t);\n\t\t// getting the bundle too out of precaution\n\t\tconst lastKnownBundle = await lastKnown(\n\t\t\t\"bundle\",\n\t\t\tlastKnownMessage.value?.bundleId\n\t\t);\n\t\tawait args.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values(lastKnownBundle.value as any)\n\t\t\t// the bundle exists, so we can ignore the conflict\n\t\t\t.onConflict((c) => c.doNothing())\n\t\t\t.execute();\n\t\tawait args.db\n\t\t\t.insertInto(\"message\")\n\t\t\t.values(lastKnownMessage.value as any)\n\t\t\t.execute();\n\t\tawait args.db\n\t\t\t.insertInto(args.change.type as \"bundle\" | \"message\" | \"variant\")\n\t\t\t.values(args.change.value as any)\n\t\t\t.onConflict((c) => c.column(\"id\").doUpdateSet(args.change.value as any))\n\t\t\t.execute();\n\t}\n\t// re-execute applying the change\n\tawait args.db\n\t\t.insertInto(args.change.type as \"bundle\" | \"message\" | \"variant\")\n\t\t.values(args.change.value as any)\n\t\t.onConflict((c) => c.column(\"id\").doUpdateSet(args.change.value as any))\n\t\t.execute();\n}\n"]}
@@ -1,7 +1,5 @@
1
1
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
2
  // @ts-nocheck
3
-
4
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="49e45424-5b74-554e-8523-570380dd1e01")}catch(e){}}();
5
3
  import { test, expect } from "vitest";
6
4
  import { loadProjectInMemory } from "../project/loadProjectInMemory.js";
7
5
  import { newProject } from "../project/newProject.js";
@@ -131,5 +129,4 @@ test.skip("it should be able to upsert (insert & update)", async () => {
131
129
  const bundles = await db.selectFrom("bundle").selectAll().execute();
132
130
  expect(bundles).toHaveLength(1);
133
131
  });
134
- //# sourceMappingURL=applyChanges.test.js.map
135
- //# debugId=49e45424-5b74-554e-8523-570380dd1e01
132
+ //# sourceMappingURL=applyChanges.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"applyChanges.test.js","sources":["lix-plugin/applyChanges.test.ts"],"sourceRoot":"/","sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport { test, expect } from \"vitest\";\nimport { loadProjectInMemory } from \"../project/loadProjectInMemory.js\";\nimport { newProject } from \"../project/newProject.js\";\nimport type { Change, NewChange } from \"@lix-js/sdk\";\nimport { applyChanges } from \"./applyChanges.js\";\nimport { loadDatabaseInMemory } from \"sqlite-wasm-kysely\";\nimport { initDb } from \"../database/initDb.js\";\nimport type { Bundle } from \"../database/schema.js\";\n\ntest.skip(\"it should be able to delete\", async () => {\n\tconst project = await loadProjectInMemory({\n\t\tblob: await newProject(),\n\t});\n\n\tconst changes: NewChange[] = [\n\t\t{\n\t\t\tid: \"1\",\n\t\t\toperation: \"create\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"bundle\",\n\t\t\tmeta: { id: \"mock\" },\n\t\t\tvalue: {\n\t\t\t\tid: \"mock\",\n\t\t\t\tdeclarations: [],\n\t\t\t} satisfies Bundle,\n\t\t},\n\t\t{\n\t\t\tid: \"2\",\n\t\t\tparent_id: \"1\",\n\t\t\toperation: \"update\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"bundle\",\n\t\t\tmeta: {\n\t\t\t\tid: \"mock\",\n\t\t\t},\n\t\t\tvalue: {\n\t\t\t\tid: \"mock\",\n\t\t\t\tdeclarations: [],\n\t\t\t} satisfies Bundle,\n\t\t},\n\t\t{\n\t\t\tid: \"3\",\n\t\t\tparent_id: \"2\",\n\t\t\toperation: \"delete\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\tmeta: {\n\t\t\t\tid: \"mock\",\n\t\t\t},\n\t\t\ttype: \"bundle\",\n\t\t\tvalue: undefined,\n\t\t},\n\t];\n\n\tawait project.db\n\t\t.insertInto(\"bundle\")\n\t\t.values({\n\t\t\tid: \"mock\",\n\t\t})\n\t\t.execute();\n\n\tconst dbFile = await project.lix.db\n\t\t.selectFrom(\"file\")\n\t\t.selectAll()\n\t\t.where(\"path\", \"=\", \"/db.sqlite\")\n\t\t.executeTakeFirstOrThrow();\n\n\tconst dbFileAfter = await applyChanges({\n\t\tlix: project.lix,\n\t\tfile: dbFile,\n\t\tchanges: changes as Change[],\n\t});\n\n\tconst db = initDb({\n\t\tsqlite: await loadDatabaseInMemory(dbFileAfter.fileData),\n\t});\n\n\tconst bundles = await db.selectFrom(\"bundle\").selectAll().execute();\n\n\texpect(bundles).toHaveLength(0);\n});\n\ntest.skip(\"it should be able to upsert (insert & update)\", async () => {\n\tconst project = await loadProjectInMemory({\n\t\tblob: await newProject(),\n\t});\n\n\tconst changes: NewChange[] = [\n\t\t{\n\t\t\tid: \"1\",\n\t\t\tparent_id: undefined,\n\t\t\toperation: \"create\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"bundle\",\n\t\t\tmeta: { id: \"mock\" },\n\t\t\tvalue: {\n\t\t\t\tid: \"mock\",\n\t\t\t\tdeclarations: [],\n\t\t\t} satisfies Bundle,\n\t\t},\n\t\t{\n\t\t\tid: \"2\",\n\t\t\tparent_id: \"1\",\n\t\t\toperation: \"update\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"bundle\",\n\t\t\tmeta: {\n\t\t\t\tid: \"mock\",\n\t\t\t},\n\t\t\tvalue: {\n\t\t\t\tid: \"mock\",\n\t\t\t\tdeclarations: [],\n\t\t\t} satisfies Bundle,\n\t\t},\n\t];\n\n\tawait project.db\n\t\t.insertInto(\"bundle\")\n\t\t.values({\n\t\t\tid: \"mock\",\n\t\t})\n\t\t.execute();\n\n\tconst dbFile = await project.lix.db\n\t\t.selectFrom(\"file\")\n\t\t.selectAll()\n\t\t.where(\"path\", \"=\", \"/db.sqlite\")\n\t\t.executeTakeFirstOrThrow();\n\n\tconst dbFileAfter = await applyChanges({\n\t\tlix: project.lix,\n\t\tfile: dbFile,\n\t\tchanges: changes as Change[],\n\t});\n\n\tconst db = initDb({\n\t\tsqlite: await loadDatabaseInMemory(dbFileAfter.fileData),\n\t});\n\n\tconst bundles = await db.selectFrom(\"bundle\").selectAll().execute();\n\n\texpect(bundles).toHaveLength(1);\n});\n"],"names":[],"mappings":"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","debug_id":"49e45424-5b74-554e-8523-570380dd1e01"}
1
+ {"version":3,"file":"applyChanges.test.js","sourceRoot":"/","sources":["lix-plugin/applyChanges.test.ts"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport { test, expect } from \"vitest\";\nimport { loadProjectInMemory } from \"../project/loadProjectInMemory.js\";\nimport { newProject } from \"../project/newProject.js\";\nimport type { Change, NewChange } from \"@lix-js/sdk\";\nimport { applyChanges } from \"./applyChanges.js\";\nimport { loadDatabaseInMemory } from \"sqlite-wasm-kysely\";\nimport { initDb } from \"../database/initDb.js\";\nimport type { Bundle } from \"../database/schema.js\";\n\ntest.skip(\"it should be able to delete\", async () => {\n\tconst project = await loadProjectInMemory({\n\t\tblob: await newProject(),\n\t});\n\n\tconst changes: NewChange[] = [\n\t\t{\n\t\t\tid: \"1\",\n\t\t\toperation: \"create\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"bundle\",\n\t\t\tmeta: { id: \"mock\" },\n\t\t\tvalue: {\n\t\t\t\tid: \"mock\",\n\t\t\t\tdeclarations: [],\n\t\t\t} satisfies Bundle,\n\t\t},\n\t\t{\n\t\t\tid: \"2\",\n\t\t\tparent_id: \"1\",\n\t\t\toperation: \"update\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"bundle\",\n\t\t\tmeta: {\n\t\t\t\tid: \"mock\",\n\t\t\t},\n\t\t\tvalue: {\n\t\t\t\tid: \"mock\",\n\t\t\t\tdeclarations: [],\n\t\t\t} satisfies Bundle,\n\t\t},\n\t\t{\n\t\t\tid: \"3\",\n\t\t\tparent_id: \"2\",\n\t\t\toperation: \"delete\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\tmeta: {\n\t\t\t\tid: \"mock\",\n\t\t\t},\n\t\t\ttype: \"bundle\",\n\t\t\tvalue: undefined,\n\t\t},\n\t];\n\n\tawait project.db\n\t\t.insertInto(\"bundle\")\n\t\t.values({\n\t\t\tid: \"mock\",\n\t\t})\n\t\t.execute();\n\n\tconst dbFile = await project.lix.db\n\t\t.selectFrom(\"file\")\n\t\t.selectAll()\n\t\t.where(\"path\", \"=\", \"/db.sqlite\")\n\t\t.executeTakeFirstOrThrow();\n\n\tconst dbFileAfter = await applyChanges({\n\t\tlix: project.lix,\n\t\tfile: dbFile,\n\t\tchanges: changes as Change[],\n\t});\n\n\tconst db = initDb({\n\t\tsqlite: await loadDatabaseInMemory(dbFileAfter.fileData),\n\t});\n\n\tconst bundles = await db.selectFrom(\"bundle\").selectAll().execute();\n\n\texpect(bundles).toHaveLength(0);\n});\n\ntest.skip(\"it should be able to upsert (insert & update)\", async () => {\n\tconst project = await loadProjectInMemory({\n\t\tblob: await newProject(),\n\t});\n\n\tconst changes: NewChange[] = [\n\t\t{\n\t\t\tid: \"1\",\n\t\t\tparent_id: undefined,\n\t\t\toperation: \"create\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"bundle\",\n\t\t\tmeta: { id: \"mock\" },\n\t\t\tvalue: {\n\t\t\t\tid: \"mock\",\n\t\t\t\tdeclarations: [],\n\t\t\t} satisfies Bundle,\n\t\t},\n\t\t{\n\t\t\tid: \"2\",\n\t\t\tparent_id: \"1\",\n\t\t\toperation: \"update\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"bundle\",\n\t\t\tmeta: {\n\t\t\t\tid: \"mock\",\n\t\t\t},\n\t\t\tvalue: {\n\t\t\t\tid: \"mock\",\n\t\t\t\tdeclarations: [],\n\t\t\t} satisfies Bundle,\n\t\t},\n\t];\n\n\tawait project.db\n\t\t.insertInto(\"bundle\")\n\t\t.values({\n\t\t\tid: \"mock\",\n\t\t})\n\t\t.execute();\n\n\tconst dbFile = await project.lix.db\n\t\t.selectFrom(\"file\")\n\t\t.selectAll()\n\t\t.where(\"path\", \"=\", \"/db.sqlite\")\n\t\t.executeTakeFirstOrThrow();\n\n\tconst dbFileAfter = await applyChanges({\n\t\tlix: project.lix,\n\t\tfile: dbFile,\n\t\tchanges: changes as Change[],\n\t});\n\n\tconst db = initDb({\n\t\tsqlite: await loadDatabaseInMemory(dbFileAfter.fileData),\n\t});\n\n\tconst bundles = await db.selectFrom(\"bundle\").selectAll().execute();\n\n\texpect(bundles).toHaveLength(1);\n});\n"]}
@@ -1,7 +1,5 @@
1
1
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
2
  // @ts-nocheck
3
-
4
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0ac92cf1-42cb-51b1-a701-6f18a71b3811")}catch(e){}}();
5
3
  import { getLowestCommonAncestor, getLeafChange, } from "@lix-js/sdk";
6
4
  export const detectConflicts = async ({ sourceLix, targetLix, leafChangesOnlyInSource, }) => {
7
5
  const result = [];
@@ -43,5 +41,4 @@ export const detectConflicts = async ({ sourceLix, targetLix, leafChangesOnlyInS
43
41
  }
44
42
  return result;
45
43
  };
46
- //# sourceMappingURL=detectConflicts.js.map
47
- //# debugId=0ac92cf1-42cb-51b1-a701-6f18a71b3811
44
+ //# sourceMappingURL=detectConflicts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detectConflicts.js","sources":["lix-plugin/detectConflicts.ts"],"sourceRoot":"/","sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport {\n\tgetLowestCommonAncestor,\n\tgetLeafChange,\n\ttype LixPlugin,\n\ttype NewConflict,\n} from \"@lix-js/sdk\";\n\nexport const detectConflicts: LixPlugin[\"detectConflicts\"] = async ({\n\tsourceLix,\n\ttargetLix,\n\tleafChangesOnlyInSource,\n}) => {\n\tconst result: NewConflict[] = [];\n\tfor (const change of leafChangesOnlyInSource) {\n\t\tconst lowestCommonAncestor = await getLowestCommonAncestor({\n\t\t\tsourceChange: change,\n\t\t\tsourceLix,\n\t\t\ttargetLix,\n\t\t});\n\n\t\tif (lowestCommonAncestor === undefined) {\n\t\t\t// no common parent, no conflict. must be an insert\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst leafChangeInTarget = await getLeafChange({\n\t\t\tchange: lowestCommonAncestor,\n\t\t\tlix: targetLix,\n\t\t});\n\n\t\tif (lowestCommonAncestor.id === leafChangeInTarget.id) {\n\t\t\t// no conflict. the lowest common ancestor is\n\t\t\t// the leaf change in the target. aka, no changes\n\t\t\t// in target have been made that could conflict with the source\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst hasDiff =\n\t\t\tJSON.stringify(change.value) !== JSON.stringify(leafChangeInTarget.value);\n\n\t\tif (hasDiff === false) {\n\t\t\t// TODO we have two different changes that yielded the same snapshot,\n\t\t\t// lix or the plugin need to change the parents of the target change\n\t\t\t// to both the source and the target change. users likely want to\n\t\t\t// see that two \"branches\" led to the same snapshot\n\t\t\tcontinue;\n\t\t}\n\n\t\t// naive raise any snapshot difference as a conflict for now\n\t\t// more sophisticated conflict reporting can be incrementally added\n\t\tresult.push({\n\t\t\tchange_id: leafChangeInTarget.id,\n\t\t\tconflicting_change_id: change.id,\n\t\t\treason:\n\t\t\t\t\"The snapshots of the change do not match. More sophisticated reasoning will be added later.\",\n\t\t});\n\t}\n\treturn result;\n};\n"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc;;;AAEd,OAAO,EACN,uBAAuB,EACvB,aAAa,GAGb,MAAM,aAAa,CAAC;AAErB,MAAM,CAAC,MAAM,eAAe,GAAiC,KAAK,EAAE,EACnE,SAAS,EACT,SAAS,EACT,uBAAuB,GACvB,EAAE,EAAE;IACJ,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,KAAK,MAAM,MAAM,IAAI,uBAAuB,EAAE,CAAC;QAC9C,MAAM,oBAAoB,GAAG,MAAM,uBAAuB,CAAC;YAC1D,YAAY,EAAE,MAAM;YACpB,SAAS;YACT,SAAS;SACT,CAAC,CAAC;QAEH,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACxC,mDAAmD;YACnD,SAAS;QACV,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,aAAa,CAAC;YAC9C,MAAM,EAAE,oBAAoB;YAC5B,GAAG,EAAE,SAAS;SACd,CAAC,CAAC;QAEH,IAAI,oBAAoB,CAAC,EAAE,KAAK,kBAAkB,CAAC,EAAE,EAAE,CAAC;YACvD,6CAA6C;YAC7C,iDAAiD;YACjD,+DAA+D;YAC/D,SAAS;QACV,CAAC;QAED,MAAM,OAAO,GACZ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAE3E,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACvB,qEAAqE;YACrE,oEAAoE;YACpE,iEAAiE;YACjE,mDAAmD;YACnD,SAAS;QACV,CAAC;QAED,4DAA4D;QAC5D,mEAAmE;QACnE,MAAM,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,kBAAkB,CAAC,EAAE;YAChC,qBAAqB,EAAE,MAAM,CAAC,EAAE;YAChC,MAAM,EACL,6FAA6F;SAC9F,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC,CAAC","debug_id":"0ac92cf1-42cb-51b1-a701-6f18a71b3811"}
1
+ {"version":3,"file":"detectConflicts.js","sourceRoot":"/","sources":["lix-plugin/detectConflicts.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc;AAEd,OAAO,EACN,uBAAuB,EACvB,aAAa,GAGb,MAAM,aAAa,CAAC;AAErB,MAAM,CAAC,MAAM,eAAe,GAAiC,KAAK,EAAE,EACnE,SAAS,EACT,SAAS,EACT,uBAAuB,GACvB,EAAE,EAAE;IACJ,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,KAAK,MAAM,MAAM,IAAI,uBAAuB,EAAE,CAAC;QAC9C,MAAM,oBAAoB,GAAG,MAAM,uBAAuB,CAAC;YAC1D,YAAY,EAAE,MAAM;YACpB,SAAS;YACT,SAAS;SACT,CAAC,CAAC;QAEH,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACxC,mDAAmD;YACnD,SAAS;QACV,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,aAAa,CAAC;YAC9C,MAAM,EAAE,oBAAoB;YAC5B,GAAG,EAAE,SAAS;SACd,CAAC,CAAC;QAEH,IAAI,oBAAoB,CAAC,EAAE,KAAK,kBAAkB,CAAC,EAAE,EAAE,CAAC;YACvD,6CAA6C;YAC7C,iDAAiD;YACjD,+DAA+D;YAC/D,SAAS;QACV,CAAC;QAED,MAAM,OAAO,GACZ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAE3E,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACvB,qEAAqE;YACrE,oEAAoE;YACpE,iEAAiE;YACjE,mDAAmD;YACnD,SAAS;QACV,CAAC;QAED,4DAA4D;QAC5D,mEAAmE;QACnE,MAAM,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,kBAAkB,CAAC,EAAE;YAChC,qBAAqB,EAAE,MAAM,CAAC,EAAE;YAChC,MAAM,EACL,6FAA6F;SAC9F,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC,CAAC","sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport {\n\tgetLowestCommonAncestor,\n\tgetLeafChange,\n\ttype LixPlugin,\n\ttype NewConflict,\n} from \"@lix-js/sdk\";\n\nexport const detectConflicts: LixPlugin[\"detectConflicts\"] = async ({\n\tsourceLix,\n\ttargetLix,\n\tleafChangesOnlyInSource,\n}) => {\n\tconst result: NewConflict[] = [];\n\tfor (const change of leafChangesOnlyInSource) {\n\t\tconst lowestCommonAncestor = await getLowestCommonAncestor({\n\t\t\tsourceChange: change,\n\t\t\tsourceLix,\n\t\t\ttargetLix,\n\t\t});\n\n\t\tif (lowestCommonAncestor === undefined) {\n\t\t\t// no common parent, no conflict. must be an insert\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst leafChangeInTarget = await getLeafChange({\n\t\t\tchange: lowestCommonAncestor,\n\t\t\tlix: targetLix,\n\t\t});\n\n\t\tif (lowestCommonAncestor.id === leafChangeInTarget.id) {\n\t\t\t// no conflict. the lowest common ancestor is\n\t\t\t// the leaf change in the target. aka, no changes\n\t\t\t// in target have been made that could conflict with the source\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst hasDiff =\n\t\t\tJSON.stringify(change.value) !== JSON.stringify(leafChangeInTarget.value);\n\n\t\tif (hasDiff === false) {\n\t\t\t// TODO we have two different changes that yielded the same snapshot,\n\t\t\t// lix or the plugin need to change the parents of the target change\n\t\t\t// to both the source and the target change. users likely want to\n\t\t\t// see that two \"branches\" led to the same snapshot\n\t\t\tcontinue;\n\t\t}\n\n\t\t// naive raise any snapshot difference as a conflict for now\n\t\t// more sophisticated conflict reporting can be incrementally added\n\t\tresult.push({\n\t\t\tchange_id: leafChangeInTarget.id,\n\t\t\tconflicting_change_id: change.id,\n\t\t\treason:\n\t\t\t\t\"The snapshots of the change do not match. More sophisticated reasoning will be added later.\",\n\t\t});\n\t}\n\treturn result;\n};\n"]}
@@ -1,7 +1,5 @@
1
1
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
2
  // @ts-nocheck
3
-
4
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f9a7650e-ee5a-5709-96eb-9c505f2c06fa")}catch(e){}}();
5
3
  import { test, expect } from "vitest";
6
4
  import { inlangLixPluginV1 } from "./inlangLixPluginV1.js";
7
5
  import { newLixFile, openLixInMemory, } from "@lix-js/sdk";
@@ -247,5 +245,4 @@ test.skip("it should NOT report a DELETE as a conflict if the parent of the targ
247
245
  expect(conflicts[0]?.change_id).toBe("2qa");
248
246
  expect(conflicts[0]?.conflicting_change_id).toBe("3sd");
249
247
  });
250
- //# sourceMappingURL=detectConflicts.test.js.map
251
- //# debugId=f9a7650e-ee5a-5709-96eb-9c505f2c06fa
248
+ //# sourceMappingURL=detectConflicts.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detectConflicts.test.js","sources":["lix-plugin/detectConflicts.test.ts"],"sourceRoot":"/","sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport { test, expect } from \"vitest\";\nimport { inlangLixPluginV1 } from \"./inlangLixPluginV1.js\";\nimport {\n\tnewLixFile,\n\topenLixInMemory,\n\ttype Change,\n\ttype NewChange,\n} from \"@lix-js/sdk\";\n\ntest.skip(\"a create operation should not report a conflict given that the change does not exist in target\", async () => {\n\tconst targetLix = await openLixInMemory({ blob: await newLixFile() });\n\tconst sourceLix = await openLixInMemory({ blob: await newLixFile() });\n\tconst changes = await sourceLix.db\n\t\t.insertInto(\"change\")\n\t\t.values([\n\t\t\t{\n\t\t\t\tid: \"1\",\n\t\t\t\tparent_id: undefined,\n\t\t\t\toperation: \"create\",\n\t\t\t\tfile_id: \"mock\",\n\t\t\t\tplugin_key: \"mock\",\n\t\t\t\ttype: \"mock\",\n\t\t\t\tvalue: { id: \"change 1\" },\n\t\t\t},\n\t\t])\n\t\t.returningAll()\n\t\t.execute();\n\tconst conflicts = await inlangLixPluginV1.detectConflicts!({\n\t\tsourceLix,\n\t\ttargetLix,\n\t\tleafChangesOnlyInSource: changes,\n\t});\n\texpect(conflicts).toHaveLength(0);\n});\n\ntest.todo(\n\t\"it should report deletions as a conflict if the parent of the target and source are not identical\",\n\tasync () => {\n\t\tconst targetLix = await openLixInMemory({ blob: await newLixFile() });\n\t\tawait targetLix.db\n\t\t\t.insertInto(\"change\")\n\t\t\t.values([\n\t\t\t\t{\n\t\t\t\t\tid: \"1\",\n\t\t\t\t\tparent_id: undefined,\n\t\t\t\t\toperation: \"create\",\n\t\t\t\t\tfile_id: \"mock\",\n\t\t\t\t\tplugin_key: \"mock\",\n\t\t\t\t\ttype: \"mock\",\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tid: \"change 1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t])\n\t\t\t.execute();\n\n\t\tconst sourceLix = await openLixInMemory({ blob: await targetLix.toBlob() });\n\n\t\tconst changesNotInTarget: NewChange[] = [\n\t\t\t{\n\t\t\t\tid: \"2\",\n\t\t\t\tparent_id: \"1\",\n\t\t\t\toperation: \"delete\",\n\t\t\t\tfile_id: \"mock\",\n\t\t\t\tplugin_key: \"mock\",\n\t\t\t\ttype: \"mock\",\n\t\t\t\tvalue: undefined,\n\t\t\t},\n\t\t];\n\n\t\tawait sourceLix.db\n\t\t\t.insertInto(\"change\")\n\t\t\t.values(changesNotInTarget)\n\t\t\t.execute();\n\n\t\tconst conflicts = await inlangLixPluginV1.detectConflicts!({\n\t\t\tsourceLix,\n\t\t\ttargetLix,\n\t\t\tleafChangesOnlyInSource: changesNotInTarget as Change[],\n\t\t});\n\t\texpect(conflicts).toHaveLength(1);\n\t\texpect(conflicts[0]?.change_id).toBe(\"1\");\n\t\texpect(conflicts[0]?.conflicting_change_id).toBe(\"2\");\n\t\tthrow new Error(\"The parent is identicak, fix this test\");\n\t}\n);\n\ntest.skip(\"it should report an UPDATE as a conflict if leaf changes are conflicting\", async () => {\n\tconst targetLix = await openLixInMemory({ blob: await newLixFile() });\n\tconst sourceLix = await openLixInMemory({ blob: await targetLix.toBlob() });\n\n\tconst commonChanges: NewChange[] = [\n\t\t{\n\t\t\tid: \"12s\",\n\t\t\tparent_id: undefined,\n\t\t\toperation: \"create\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"mock\",\n\t\t\tvalue: {\n\t\t\t\tid: \"change 12s\",\n\t\t\t},\n\t\t},\n\t];\n\n\tconst changesOnlyInTarget: NewChange[] = [\n\t\t{\n\t\t\tid: \"3sd\",\n\t\t\tparent_id: \"12s\",\n\t\t\toperation: \"update\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"mock\",\n\t\t\tvalue: {\n\t\t\t\tid: \"change 3sd\",\n\t\t\t},\n\t\t},\n\t];\n\n\tconst changesOnlyInSource: NewChange[] = [\n\t\t{\n\t\t\tid: \"2qa\",\n\t\t\tparent_id: \"12s\",\n\t\t\toperation: \"update\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"mock\",\n\t\t\tvalue: {\n\t\t\t\tid: \"change 2qa\",\n\t\t\t},\n\t\t},\n\t];\n\n\tawait sourceLix.db\n\t\t.insertInto(\"change\")\n\t\t.values([...commonChanges, ...changesOnlyInSource])\n\t\t.execute();\n\n\tawait targetLix.db\n\t\t.insertInto(\"change\")\n\t\t.values([...commonChanges, ...changesOnlyInTarget])\n\t\t.execute();\n\n\tconst conflicts = await inlangLixPluginV1.detectConflicts!({\n\t\tleafChangesOnlyInSource: changesOnlyInSource as Change[],\n\t\tsourceLix: sourceLix,\n\t\ttargetLix: targetLix,\n\t});\n\n\texpect(conflicts).toHaveLength(1);\n});\n\n/**\n * If the common ancestor is the leaf change of the target, then the\n * source change are (likely) not a conflict because no update has\n * been made to the target change that could conflict with updates\n * in the source.\n */\ntest.skip(\"it should NOT report an UPDATE as a conflict if the common ancestor is the leaf change of the target\", async () => {\n\tconst targetLix = await openLixInMemory({ blob: await newLixFile() });\n\tconst sourceLix = await openLixInMemory({ blob: await targetLix.toBlob() });\n\n\tconst commonChanges: NewChange[] = [\n\t\t{\n\t\t\tid: \"12s\",\n\t\t\tparent_id: undefined,\n\t\t\toperation: \"create\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"mock\",\n\t\t\tvalue: {\n\t\t\t\tid: \"change 12s\",\n\t\t\t},\n\t\t},\n\t];\n\n\tconst changesOnlyInTarget: NewChange[] = [\n\t\t{\n\t\t\tid: \"3sd\",\n\t\t\tparent_id: \"12s\",\n\t\t\toperation: \"update\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"mock\",\n\t\t\tvalue: {\n\t\t\t\tid: \"change 3sd\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"23a\",\n\t\t\tparent_id: \"3sd\",\n\t\t\toperation: \"update\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"mock\",\n\t\t\tvalue: {\n\t\t\t\tid: \"change 23a\",\n\t\t\t},\n\t\t},\n\t];\n\n\tconst changesOnlyInSource: NewChange[] = [];\n\n\tawait sourceLix.db\n\t\t.insertInto(\"change\")\n\t\t.values([...commonChanges, ...changesOnlyInSource])\n\t\t.execute();\n\n\tawait targetLix.db\n\t\t.insertInto(\"change\")\n\t\t.values([...commonChanges, ...changesOnlyInTarget])\n\t\t.execute();\n\n\tconst conflicts = await inlangLixPluginV1.detectConflicts!({\n\t\tleafChangesOnlyInSource: changesOnlyInSource as Change[],\n\t\tsourceLix: sourceLix,\n\t\ttargetLix: targetLix,\n\t});\n\n\texpect(conflicts).toHaveLength(0);\n});\n\ntest.skip(\"it should NOT report a DELETE as a conflict if the parent of the target and source are identical\", async () => {\n\tconst targetLix = await openLixInMemory({ blob: await newLixFile() });\n\tawait targetLix.db\n\t\t.insertInto(\"change\")\n\t\t.values([\n\t\t\t{\n\t\t\t\tid: \"12s\",\n\t\t\t\tparent_id: undefined,\n\t\t\t\toperation: \"create\",\n\t\t\t\tfile_id: \"mock\",\n\t\t\t\tplugin_key: \"mock\",\n\t\t\t\ttype: \"mock\",\n\t\t\t\tvalue: {\n\t\t\t\t\tid: \"change 12s\",\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t\t.execute();\n\n\tconst sourceLix = await openLixInMemory({ blob: await targetLix.toBlob() });\n\n\tconst changesNotInTarget: NewChange[] = [\n\t\t{\n\t\t\tid: \"3sd\",\n\t\t\tparent_id: \"12s\",\n\t\t\toperation: \"delete\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"mock\",\n\t\t\tvalue: undefined,\n\t\t},\n\t];\n\n\tconst changesNotInSource: NewChange[] = [\n\t\t{\n\t\t\tid: \"2qa\",\n\t\t\tparent_id: \"12s\",\n\t\t\toperation: \"update\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"mock\",\n\t\t\tvalue: {\n\t\t\t\tid: \"2qa\",\n\t\t\t},\n\t\t},\n\t];\n\n\tawait sourceLix.db.insertInto(\"change\").values(changesNotInTarget).execute();\n\n\tawait targetLix.db.insertInto(\"change\").values(changesNotInSource).execute();\n\n\tconst conflicts = await inlangLixPluginV1.detectConflicts!({\n\t\tsourceLix,\n\t\ttargetLix,\n\t\tleafChangesOnlyInSource: changesNotInTarget as Change[],\n\t});\n\n\texpect(conflicts).toHaveLength(1);\n\texpect(conflicts[0]?.change_id).toBe(\"2qa\");\n\texpect(conflicts[0]?.conflicting_change_id).toBe(\"3sd\");\n});\n"],"names":[],"mappings":"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","debug_id":"f9a7650e-ee5a-5709-96eb-9c505f2c06fa"}
1
+ {"version":3,"file":"detectConflicts.test.js","sourceRoot":"/","sources":["lix-plugin/detectConflicts.test.ts"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport { test, expect } from \"vitest\";\nimport { inlangLixPluginV1 } from \"./inlangLixPluginV1.js\";\nimport {\n\tnewLixFile,\n\topenLixInMemory,\n\ttype Change,\n\ttype NewChange,\n} from \"@lix-js/sdk\";\n\ntest.skip(\"a create operation should not report a conflict given that the change does not exist in target\", async () => {\n\tconst targetLix = await openLixInMemory({ blob: await newLixFile() });\n\tconst sourceLix = await openLixInMemory({ blob: await newLixFile() });\n\tconst changes = await sourceLix.db\n\t\t.insertInto(\"change\")\n\t\t.values([\n\t\t\t{\n\t\t\t\tid: \"1\",\n\t\t\t\tparent_id: undefined,\n\t\t\t\toperation: \"create\",\n\t\t\t\tfile_id: \"mock\",\n\t\t\t\tplugin_key: \"mock\",\n\t\t\t\ttype: \"mock\",\n\t\t\t\tvalue: { id: \"change 1\" },\n\t\t\t},\n\t\t])\n\t\t.returningAll()\n\t\t.execute();\n\tconst conflicts = await inlangLixPluginV1.detectConflicts!({\n\t\tsourceLix,\n\t\ttargetLix,\n\t\tleafChangesOnlyInSource: changes,\n\t});\n\texpect(conflicts).toHaveLength(0);\n});\n\ntest.todo(\n\t\"it should report deletions as a conflict if the parent of the target and source are not identical\",\n\tasync () => {\n\t\tconst targetLix = await openLixInMemory({ blob: await newLixFile() });\n\t\tawait targetLix.db\n\t\t\t.insertInto(\"change\")\n\t\t\t.values([\n\t\t\t\t{\n\t\t\t\t\tid: \"1\",\n\t\t\t\t\tparent_id: undefined,\n\t\t\t\t\toperation: \"create\",\n\t\t\t\t\tfile_id: \"mock\",\n\t\t\t\t\tplugin_key: \"mock\",\n\t\t\t\t\ttype: \"mock\",\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tid: \"change 1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t])\n\t\t\t.execute();\n\n\t\tconst sourceLix = await openLixInMemory({ blob: await targetLix.toBlob() });\n\n\t\tconst changesNotInTarget: NewChange[] = [\n\t\t\t{\n\t\t\t\tid: \"2\",\n\t\t\t\tparent_id: \"1\",\n\t\t\t\toperation: \"delete\",\n\t\t\t\tfile_id: \"mock\",\n\t\t\t\tplugin_key: \"mock\",\n\t\t\t\ttype: \"mock\",\n\t\t\t\tvalue: undefined,\n\t\t\t},\n\t\t];\n\n\t\tawait sourceLix.db\n\t\t\t.insertInto(\"change\")\n\t\t\t.values(changesNotInTarget)\n\t\t\t.execute();\n\n\t\tconst conflicts = await inlangLixPluginV1.detectConflicts!({\n\t\t\tsourceLix,\n\t\t\ttargetLix,\n\t\t\tleafChangesOnlyInSource: changesNotInTarget as Change[],\n\t\t});\n\t\texpect(conflicts).toHaveLength(1);\n\t\texpect(conflicts[0]?.change_id).toBe(\"1\");\n\t\texpect(conflicts[0]?.conflicting_change_id).toBe(\"2\");\n\t\tthrow new Error(\"The parent is identicak, fix this test\");\n\t}\n);\n\ntest.skip(\"it should report an UPDATE as a conflict if leaf changes are conflicting\", async () => {\n\tconst targetLix = await openLixInMemory({ blob: await newLixFile() });\n\tconst sourceLix = await openLixInMemory({ blob: await targetLix.toBlob() });\n\n\tconst commonChanges: NewChange[] = [\n\t\t{\n\t\t\tid: \"12s\",\n\t\t\tparent_id: undefined,\n\t\t\toperation: \"create\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"mock\",\n\t\t\tvalue: {\n\t\t\t\tid: \"change 12s\",\n\t\t\t},\n\t\t},\n\t];\n\n\tconst changesOnlyInTarget: NewChange[] = [\n\t\t{\n\t\t\tid: \"3sd\",\n\t\t\tparent_id: \"12s\",\n\t\t\toperation: \"update\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"mock\",\n\t\t\tvalue: {\n\t\t\t\tid: \"change 3sd\",\n\t\t\t},\n\t\t},\n\t];\n\n\tconst changesOnlyInSource: NewChange[] = [\n\t\t{\n\t\t\tid: \"2qa\",\n\t\t\tparent_id: \"12s\",\n\t\t\toperation: \"update\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"mock\",\n\t\t\tvalue: {\n\t\t\t\tid: \"change 2qa\",\n\t\t\t},\n\t\t},\n\t];\n\n\tawait sourceLix.db\n\t\t.insertInto(\"change\")\n\t\t.values([...commonChanges, ...changesOnlyInSource])\n\t\t.execute();\n\n\tawait targetLix.db\n\t\t.insertInto(\"change\")\n\t\t.values([...commonChanges, ...changesOnlyInTarget])\n\t\t.execute();\n\n\tconst conflicts = await inlangLixPluginV1.detectConflicts!({\n\t\tleafChangesOnlyInSource: changesOnlyInSource as Change[],\n\t\tsourceLix: sourceLix,\n\t\ttargetLix: targetLix,\n\t});\n\n\texpect(conflicts).toHaveLength(1);\n});\n\n/**\n * If the common ancestor is the leaf change of the target, then the\n * source change are (likely) not a conflict because no update has\n * been made to the target change that could conflict with updates\n * in the source.\n */\ntest.skip(\"it should NOT report an UPDATE as a conflict if the common ancestor is the leaf change of the target\", async () => {\n\tconst targetLix = await openLixInMemory({ blob: await newLixFile() });\n\tconst sourceLix = await openLixInMemory({ blob: await targetLix.toBlob() });\n\n\tconst commonChanges: NewChange[] = [\n\t\t{\n\t\t\tid: \"12s\",\n\t\t\tparent_id: undefined,\n\t\t\toperation: \"create\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"mock\",\n\t\t\tvalue: {\n\t\t\t\tid: \"change 12s\",\n\t\t\t},\n\t\t},\n\t];\n\n\tconst changesOnlyInTarget: NewChange[] = [\n\t\t{\n\t\t\tid: \"3sd\",\n\t\t\tparent_id: \"12s\",\n\t\t\toperation: \"update\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"mock\",\n\t\t\tvalue: {\n\t\t\t\tid: \"change 3sd\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"23a\",\n\t\t\tparent_id: \"3sd\",\n\t\t\toperation: \"update\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"mock\",\n\t\t\tvalue: {\n\t\t\t\tid: \"change 23a\",\n\t\t\t},\n\t\t},\n\t];\n\n\tconst changesOnlyInSource: NewChange[] = [];\n\n\tawait sourceLix.db\n\t\t.insertInto(\"change\")\n\t\t.values([...commonChanges, ...changesOnlyInSource])\n\t\t.execute();\n\n\tawait targetLix.db\n\t\t.insertInto(\"change\")\n\t\t.values([...commonChanges, ...changesOnlyInTarget])\n\t\t.execute();\n\n\tconst conflicts = await inlangLixPluginV1.detectConflicts!({\n\t\tleafChangesOnlyInSource: changesOnlyInSource as Change[],\n\t\tsourceLix: sourceLix,\n\t\ttargetLix: targetLix,\n\t});\n\n\texpect(conflicts).toHaveLength(0);\n});\n\ntest.skip(\"it should NOT report a DELETE as a conflict if the parent of the target and source are identical\", async () => {\n\tconst targetLix = await openLixInMemory({ blob: await newLixFile() });\n\tawait targetLix.db\n\t\t.insertInto(\"change\")\n\t\t.values([\n\t\t\t{\n\t\t\t\tid: \"12s\",\n\t\t\t\tparent_id: undefined,\n\t\t\t\toperation: \"create\",\n\t\t\t\tfile_id: \"mock\",\n\t\t\t\tplugin_key: \"mock\",\n\t\t\t\ttype: \"mock\",\n\t\t\t\tvalue: {\n\t\t\t\t\tid: \"change 12s\",\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t\t.execute();\n\n\tconst sourceLix = await openLixInMemory({ blob: await targetLix.toBlob() });\n\n\tconst changesNotInTarget: NewChange[] = [\n\t\t{\n\t\t\tid: \"3sd\",\n\t\t\tparent_id: \"12s\",\n\t\t\toperation: \"delete\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"mock\",\n\t\t\tvalue: undefined,\n\t\t},\n\t];\n\n\tconst changesNotInSource: NewChange[] = [\n\t\t{\n\t\t\tid: \"2qa\",\n\t\t\tparent_id: \"12s\",\n\t\t\toperation: \"update\",\n\t\t\tfile_id: \"mock\",\n\t\t\tplugin_key: \"mock\",\n\t\t\ttype: \"mock\",\n\t\t\tvalue: {\n\t\t\t\tid: \"2qa\",\n\t\t\t},\n\t\t},\n\t];\n\n\tawait sourceLix.db.insertInto(\"change\").values(changesNotInTarget).execute();\n\n\tawait targetLix.db.insertInto(\"change\").values(changesNotInSource).execute();\n\n\tconst conflicts = await inlangLixPluginV1.detectConflicts!({\n\t\tsourceLix,\n\t\ttargetLix,\n\t\tleafChangesOnlyInSource: changesNotInTarget as Change[],\n\t});\n\n\texpect(conflicts).toHaveLength(1);\n\texpect(conflicts[0]?.change_id).toBe(\"2qa\");\n\texpect(conflicts[0]?.conflicting_change_id).toBe(\"3sd\");\n});\n"]}
@@ -1,7 +1,5 @@
1
1
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
2
  // @ts-nocheck
3
-
4
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="7686ea48-75ac-5c05-b6c3-55688fc899ac")}catch(e){}}();
5
3
  import { loadDatabaseInMemory } from "sqlite-wasm-kysely";
6
4
  import { initDb } from "../database/initDb.js";
7
5
  import { applyChanges } from "./applyChanges.js";
@@ -105,5 +103,4 @@ function diffSnapshot({ old, neu, type, }) {
105
103
  }
106
104
  return [];
107
105
  }
108
- //# sourceMappingURL=inlangLixPluginV1.js.map
109
- //# debugId=7686ea48-75ac-5c05-b6c3-55688fc899ac
106
+ //# sourceMappingURL=inlangLixPluginV1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inlangLixPluginV1.js","sources":["lix-plugin/inlangLixPluginV1.ts"],"sourceRoot":"/","sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport type { DiffReport, LixPlugin } from \"@lix-js/sdk\";\nimport { loadDatabaseInMemory } from \"sqlite-wasm-kysely\";\nimport { initDb } from \"../database/initDb.js\";\nimport { applyChanges } from \"./applyChanges.js\";\nimport { detectConflicts } from \"./detectConflicts.js\";\nimport type { Bundle, Message, Variant } from \"../database/schema.js\";\n\nexport const inlangLixPluginV1: LixPlugin<{\n\tbundle: Bundle;\n\tmessage: Message;\n\tvariant: Variant;\n}> = {\n\tkey: \"inlang-lix-plugin-v1\",\n\tglob: \"*\",\n\tapplyChanges,\n\tdetectConflicts,\n\tdiff: {\n\t\t// TODO does not account for deletions\n\t\tfile: async ({ old, neu }) => {\n\t\t\t// can only handle the database for now\n\t\t\tif (neu === undefined || neu.path?.endsWith(\"db.sqlite\") === false) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst result: DiffReport[] = [];\n\t\t\tconst oldDb = old\n\t\t\t\t? initDb({ sqlite: await loadDatabaseInMemory(old.data) })\n\t\t\t\t: undefined;\n\n\t\t\tconst newDb = neu\n\t\t\t\t? initDb({\n\t\t\t\t\t\tsqlite: await loadDatabaseInMemory(neu.data),\n\t\t\t\t\t})\n\t\t\t\t: undefined;\n\n\t\t\tconst newProjectBundles = await newDb\n\t\t\t\t?.selectFrom(\"bundle\")\n\t\t\t\t.selectAll()\n\t\t\t\t.execute();\n\n\t\t\tconst newProjectMessages = await newDb\n\t\t\t\t?.selectFrom(\"message\")\n\t\t\t\t.selectAll()\n\t\t\t\t.execute();\n\t\t\tconst newProjectVariants = await newDb\n\t\t\t\t?.selectFrom(\"variant\")\n\t\t\t\t.selectAll()\n\t\t\t\t.execute();\n\n\t\t\tfor (const bundle of newProjectBundles ?? []) {\n\t\t\t\tconst oldBundle = await oldDb\n\t\t\t\t\t?.selectFrom(\"bundle\")\n\t\t\t\t\t.selectAll()\n\t\t\t\t\t.where(\"id\", \"=\", bundle.id)\n\t\t\t\t\t.executeTakeFirst();\n\t\t\t\tresult.push(\n\t\t\t\t\t...(await inlangLixPluginV1.diff.bundle({\n\t\t\t\t\t\told: oldBundle,\n\t\t\t\t\t\tneu: bundle,\n\t\t\t\t\t}))\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (const message of newProjectMessages ?? []) {\n\t\t\t\tconst oldMessage = await oldDb\n\t\t\t\t\t?.selectFrom(\"message\")\n\t\t\t\t\t.selectAll()\n\t\t\t\t\t.where(\"id\", \"=\", message.id)\n\t\t\t\t\t.executeTakeFirst();\n\n\t\t\t\tresult.push(\n\t\t\t\t\t...(await inlangLixPluginV1.diff.message({\n\t\t\t\t\t\told: oldMessage,\n\t\t\t\t\t\tneu: message,\n\t\t\t\t\t}))\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (const variant of newProjectVariants ?? []) {\n\t\t\t\tconst oldVariant = await oldDb\n\t\t\t\t\t?.selectFrom(\"variant\")\n\t\t\t\t\t.selectAll()\n\t\t\t\t\t.where(\"id\", \"=\", variant.id)\n\t\t\t\t\t.executeTakeFirst();\n\t\t\t\tresult.push(\n\t\t\t\t\t...(await inlangLixPluginV1.diff.variant({\n\t\t\t\t\t\told: oldVariant,\n\t\t\t\t\t\tneu: variant,\n\t\t\t\t\t}))\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\t\tbundle: ({ old, neu }) => diffSnapshot({ old, neu, type: \"bundle\" }),\n\t\tmessage: ({ old, neu }) => diffSnapshot({ old, neu, type: \"message\" }),\n\t\tvariant: ({ old, neu }) => diffSnapshot({ old, neu, type: \"variant\" }),\n\t},\n};\n\nfunction diffSnapshot({\n\told,\n\tneu,\n\ttype,\n}: {\n\told?: Bundle | Message | Variant;\n\tneu?: Bundle | Message | Variant;\n\ttype: \"bundle\" | \"message\" | \"variant\";\n}): DiffReport[] {\n\tif (old === undefined && neu) {\n\t\treturn [{ type, old, neu, operation: \"create\" } satisfies DiffReport];\n\t} else if (old !== undefined && neu === undefined) {\n\t\treturn [{ type, old, neu, operation: \"delete\" } satisfies DiffReport];\n\t} else if (old && neu) {\n\t\tconst hasDiff = JSON.stringify(old) !== JSON.stringify(neu);\n\t\tif (hasDiff) {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\ttype,\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\t// id is required for deletions\n\t\t\t\t\t\tid: old.id ?? neu.id,\n\t\t\t\t\t},\n\t\t\t\t\toperation: \"update\",\n\t\t\t\t\told,\n\t\t\t\t\tneu,\n\t\t\t\t} satisfies DiffReport,\n\t\t\t];\n\t\t}\n\t}\n\treturn [];\n}\n"],"names":[],"mappings":"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","debug_id":"7686ea48-75ac-5c05-b6c3-55688fc899ac"}
1
+ {"version":3,"file":"inlangLixPluginV1.js","sourceRoot":"/","sources":["lix-plugin/inlangLixPluginV1.ts"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport type { DiffReport, LixPlugin } from \"@lix-js/sdk\";\nimport { loadDatabaseInMemory } from \"sqlite-wasm-kysely\";\nimport { initDb } from \"../database/initDb.js\";\nimport { applyChanges } from \"./applyChanges.js\";\nimport { detectConflicts } from \"./detectConflicts.js\";\nimport type { Bundle, Message, Variant } from \"../database/schema.js\";\n\nexport const inlangLixPluginV1: LixPlugin<{\n\tbundle: Bundle;\n\tmessage: Message;\n\tvariant: Variant;\n}> = {\n\tkey: \"inlang-lix-plugin-v1\",\n\tglob: \"*\",\n\tapplyChanges,\n\tdetectConflicts,\n\tdiff: {\n\t\t// TODO does not account for deletions\n\t\tfile: async ({ old, neu }) => {\n\t\t\t// can only handle the database for now\n\t\t\tif (neu === undefined || neu.path?.endsWith(\"db.sqlite\") === false) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst result: DiffReport[] = [];\n\t\t\tconst oldDb = old\n\t\t\t\t? initDb({ sqlite: await loadDatabaseInMemory(old.data) })\n\t\t\t\t: undefined;\n\n\t\t\tconst newDb = neu\n\t\t\t\t? initDb({\n\t\t\t\t\t\tsqlite: await loadDatabaseInMemory(neu.data),\n\t\t\t\t\t})\n\t\t\t\t: undefined;\n\n\t\t\tconst newProjectBundles = await newDb\n\t\t\t\t?.selectFrom(\"bundle\")\n\t\t\t\t.selectAll()\n\t\t\t\t.execute();\n\n\t\t\tconst newProjectMessages = await newDb\n\t\t\t\t?.selectFrom(\"message\")\n\t\t\t\t.selectAll()\n\t\t\t\t.execute();\n\t\t\tconst newProjectVariants = await newDb\n\t\t\t\t?.selectFrom(\"variant\")\n\t\t\t\t.selectAll()\n\t\t\t\t.execute();\n\n\t\t\tfor (const bundle of newProjectBundles ?? []) {\n\t\t\t\tconst oldBundle = await oldDb\n\t\t\t\t\t?.selectFrom(\"bundle\")\n\t\t\t\t\t.selectAll()\n\t\t\t\t\t.where(\"id\", \"=\", bundle.id)\n\t\t\t\t\t.executeTakeFirst();\n\t\t\t\tresult.push(\n\t\t\t\t\t...(await inlangLixPluginV1.diff.bundle({\n\t\t\t\t\t\told: oldBundle,\n\t\t\t\t\t\tneu: bundle,\n\t\t\t\t\t}))\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (const message of newProjectMessages ?? []) {\n\t\t\t\tconst oldMessage = await oldDb\n\t\t\t\t\t?.selectFrom(\"message\")\n\t\t\t\t\t.selectAll()\n\t\t\t\t\t.where(\"id\", \"=\", message.id)\n\t\t\t\t\t.executeTakeFirst();\n\n\t\t\t\tresult.push(\n\t\t\t\t\t...(await inlangLixPluginV1.diff.message({\n\t\t\t\t\t\told: oldMessage,\n\t\t\t\t\t\tneu: message,\n\t\t\t\t\t}))\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (const variant of newProjectVariants ?? []) {\n\t\t\t\tconst oldVariant = await oldDb\n\t\t\t\t\t?.selectFrom(\"variant\")\n\t\t\t\t\t.selectAll()\n\t\t\t\t\t.where(\"id\", \"=\", variant.id)\n\t\t\t\t\t.executeTakeFirst();\n\t\t\t\tresult.push(\n\t\t\t\t\t...(await inlangLixPluginV1.diff.variant({\n\t\t\t\t\t\told: oldVariant,\n\t\t\t\t\t\tneu: variant,\n\t\t\t\t\t}))\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\t\tbundle: ({ old, neu }) => diffSnapshot({ old, neu, type: \"bundle\" }),\n\t\tmessage: ({ old, neu }) => diffSnapshot({ old, neu, type: \"message\" }),\n\t\tvariant: ({ old, neu }) => diffSnapshot({ old, neu, type: \"variant\" }),\n\t},\n};\n\nfunction diffSnapshot({\n\told,\n\tneu,\n\ttype,\n}: {\n\told?: Bundle | Message | Variant;\n\tneu?: Bundle | Message | Variant;\n\ttype: \"bundle\" | \"message\" | \"variant\";\n}): DiffReport[] {\n\tif (old === undefined && neu) {\n\t\treturn [{ type, old, neu, operation: \"create\" } satisfies DiffReport];\n\t} else if (old !== undefined && neu === undefined) {\n\t\treturn [{ type, old, neu, operation: \"delete\" } satisfies DiffReport];\n\t} else if (old && neu) {\n\t\tconst hasDiff = JSON.stringify(old) !== JSON.stringify(neu);\n\t\tif (hasDiff) {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\ttype,\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\t// id is required for deletions\n\t\t\t\t\t\tid: old.id ?? neu.id,\n\t\t\t\t\t},\n\t\t\t\t\toperation: \"update\",\n\t\t\t\t\told,\n\t\t\t\t\tneu,\n\t\t\t\t} satisfies DiffReport,\n\t\t\t];\n\t\t}\n\t}\n\treturn [];\n}\n"]}
@@ -1,7 +1,5 @@
1
1
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
2
  // @ts-nocheck
3
-
4
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="83ec7ddc-5f35-51bb-9032-982c307f1378")}catch(e){}}();
5
3
  import { test, expect, describe } from "vitest";
6
4
  import { inlangLixPluginV1 } from "./inlangLixPluginV1.js";
7
5
  import {} from "@lix-js/sdk";
@@ -414,5 +412,4 @@ describe.skip("plugin.diff.variant", () => {
414
412
  ]);
415
413
  });
416
414
  });
417
- //# sourceMappingURL=inlangLixPluginV1.test.js.map
418
- //# debugId=83ec7ddc-5f35-51bb-9032-982c307f1378
415
+ //# sourceMappingURL=inlangLixPluginV1.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inlangLixPluginV1.test.js","sources":["lix-plugin/inlangLixPluginV1.test.ts"],"sourceRoot":"/","sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport { test, expect, describe } from \"vitest\";\nimport { inlangLixPluginV1 } from \"./inlangLixPluginV1.js\";\nimport { type DiffReport } from \"@lix-js/sdk\";\nimport { newProject } from \"../project/newProject.js\";\nimport { loadProjectInMemory } from \"../project/loadProjectInMemory.js\";\nimport { contentFromDatabase } from \"sqlite-wasm-kysely\";\nimport type { Variant } from \"../database/schema.js\";\n\ndescribe.skip(\"plugin.diff.file\", () => {\n\ttest(\"insert of bundle\", async () => {\n\t\tconst neuProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values({\n\t\t\t\tid: \"1\",\n\t\t\t})\n\t\t\t.execute();\n\t\tconst path = \"/db.sqlite\";\n\t\tconst diffReports = await inlangLixPluginV1.diff.file!({\n\t\t\told: undefined,\n\t\t\tneu: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath,\n\t\t\t\tdata: contentFromDatabase(neuProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t});\n\t\texpect(diffReports).toEqual([\n\t\t\t{\n\t\t\t\ttype: \"bundle\",\n\t\t\t\toperation: \"create\",\n\t\t\t\told: undefined,\n\t\t\t\tneu: expect.objectContaining({ id: \"1\" }),\n\t\t\t} satisfies DiffReport,\n\t\t]);\n\t});\n\n\t// reanble with declarations\n\ttest.todo(\"update of bundle\", async () => {\n\t\tconst oldProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait oldProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values([\n\t\t\t\t{\n\t\t\t\t\tid: \"1\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"2\",\n\t\t\t\t},\n\t\t\t])\n\t\t\t.execute();\n\t\tconst neuProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values([\n\t\t\t\t{\n\t\t\t\t\tid: \"1\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"2\",\n\t\t\t\t},\n\t\t\t])\n\t\t\t.execute();\n\n\t\tconst diffReports = await inlangLixPluginV1.diff.file!({\n\t\t\told: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath: \"/db.sqlite\",\n\t\t\t\tdata: contentFromDatabase(oldProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t\tneu: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath: \"/db.sqlite\",\n\t\t\t\tdata: contentFromDatabase(neuProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t});\n\n\t\texpect(diffReports).toEqual([\n\t\t\t{\n\t\t\t\tmeta: {\n\t\t\t\t\tid: \"1\",\n\t\t\t\t},\n\t\t\t\ttype: \"bundle\",\n\t\t\t\toperation: \"update\",\n\t\t\t\told: { id: \"1\" },\n\t\t\t\tneu: { id: \"1\" },\n\t\t\t} satisfies DiffReport,\n\t\t]);\n\t});\n\n\ttest(\"insert of message\", async () => {\n\t\tconst neuProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values({ id: \"unknown\" })\n\t\t\t.execute();\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"message\")\n\t\t\t.values({\n\t\t\t\tid: \"1\",\n\t\t\t\tbundleId: \"unknown\",\n\t\t\t\tlocale: \"en\",\n\t\t\t})\n\t\t\t.execute();\n\t\tconst diffReports = await inlangLixPluginV1.diff.file!({\n\t\t\told: undefined,\n\t\t\tneu: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath: \"/db.sqlite\",\n\t\t\t\tdata: contentFromDatabase(neuProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t});\n\t\texpect(diffReports).toEqual(\n\t\t\texpect.arrayContaining([\n\t\t\t\t{\n\t\t\t\t\ttype: \"message\",\n\t\t\t\t\toperation: \"create\",\n\t\t\t\t\told: undefined,\n\t\t\t\t\tneu: {\n\t\t\t\t\t\tid: \"1\",\n\t\t\t\t\t\tbundleId: \"unknown\",\n\t\t\t\t\t\tselectors: [],\n\t\t\t\t\t\tlocale: \"en\",\n\t\t\t\t\t},\n\t\t\t\t} satisfies DiffReport,\n\t\t\t])\n\t\t);\n\t});\n\n\ttest(\"update of message\", async () => {\n\t\tconst oldProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait oldProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values({ id: \"unknown\" })\n\t\t\t.execute();\n\t\tawait oldProject.db\n\t\t\t.insertInto(\"message\")\n\t\t\t.values([\n\t\t\t\t{\n\t\t\t\t\tid: \"1\",\n\t\t\t\t\tbundleId: \"unknown\",\n\t\t\t\t\tlocale: \"en\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"2\",\n\t\t\t\t\tbundleId: \"unknown\",\n\t\t\t\t\tlocale: \"en\",\n\t\t\t\t},\n\t\t\t])\n\t\t\t.execute();\n\t\tconst neuProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values({ id: \"unknown\" })\n\t\t\t.execute();\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"message\")\n\t\t\t.values([\n\t\t\t\t{\n\t\t\t\t\tid: \"1\",\n\t\t\t\t\tbundleId: \"unknown\",\n\t\t\t\t\tlocale: \"de\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"2\",\n\t\t\t\t\tbundleId: \"unknown\",\n\t\t\t\t\tlocale: \"en\",\n\t\t\t\t},\n\t\t\t])\n\t\t\t.execute();\n\t\tconst diffReports = await inlangLixPluginV1.diff.file!({\n\t\t\told: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath: \"/db.sqlite\",\n\t\t\t\tdata: contentFromDatabase(oldProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t\tneu: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath: \"/db.sqlite\",\n\t\t\t\tdata: contentFromDatabase(neuProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t});\n\t\texpect(diffReports).toEqual(\n\t\t\texpect.arrayContaining([\n\t\t\t\t{\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tid: \"1\",\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"message\",\n\t\t\t\t\toperation: \"update\",\n\t\t\t\t\told: {\n\t\t\t\t\t\tid: \"1\",\n\t\t\t\t\t\tbundleId: \"unknown\",\n\t\t\t\t\t\tselectors: [],\n\t\t\t\t\t\tlocale: \"en\",\n\t\t\t\t\t},\n\t\t\t\t\tneu: {\n\t\t\t\t\t\tid: \"1\",\n\t\t\t\t\t\tbundleId: \"unknown\",\n\t\t\t\t\t\tselectors: [],\n\t\t\t\t\t\tlocale: \"de\",\n\t\t\t\t\t},\n\t\t\t\t} satisfies DiffReport,\n\t\t\t])\n\t\t);\n\t});\n\ttest(\"insert of variant\", async () => {\n\t\tconst neuProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values({ id: \"bundle1\" })\n\t\t\t.execute();\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"message\")\n\t\t\t.values({ id: \"1\", bundleId: \"bundle1\", locale: \"en\" })\n\t\t\t.execute();\n\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"variant\")\n\t\t\t.values({\n\t\t\t\tid: \"1\",\n\t\t\t\tmessageId: \"1\",\n\t\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t\t\tmatches: [],\n\t\t\t})\n\t\t\t.execute();\n\t\tconst diffReports = await inlangLixPluginV1.diff.file!({\n\t\t\told: undefined,\n\t\t\tneu: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath: \"/db.sqlite\",\n\t\t\t\tdata: contentFromDatabase(neuProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t});\n\t\texpect(diffReports).toEqual(\n\t\t\texpect.arrayContaining([\n\t\t\t\t{\n\t\t\t\t\ttype: \"variant\",\n\t\t\t\t\toperation: \"create\",\n\t\t\t\t\told: undefined,\n\t\t\t\t\tneu: {\n\t\t\t\t\t\tid: \"1\",\n\t\t\t\t\t\tmessageId: \"1\",\n\t\t\t\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t\t\t\t\tmatches: [],\n\t\t\t\t\t},\n\t\t\t\t} satisfies DiffReport,\n\t\t\t])\n\t\t);\n\t});\n\ttest(\"update of variant\", async () => {\n\t\tconst oldProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait oldProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values({ id: \"bundle1\" })\n\t\t\t.execute();\n\t\tawait oldProject.db\n\t\t\t.insertInto(\"message\")\n\t\t\t.values({ id: \"1\", bundleId: \"bundle1\", locale: \"en\" })\n\t\t\t.execute();\n\t\tawait oldProject.db\n\t\t\t.insertInto(\"variant\")\n\t\t\t.values([\n\t\t\t\t{\n\t\t\t\t\tid: \"1\",\n\t\t\t\t\tmessageId: \"1\",\n\t\t\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t\t\t\tmatches: [],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"2\",\n\t\t\t\t\tmessageId: \"1\",\n\t\t\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t\t\t\tmatches: [],\n\t\t\t\t},\n\t\t\t])\n\t\t\t.execute();\n\t\tconst neuProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values({ id: \"bundle1\" })\n\t\t\t.execute();\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"message\")\n\t\t\t.values({ id: \"1\", bundleId: \"bundle1\", locale: \"en\" })\n\t\t\t.execute();\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"variant\")\n\t\t\t.values([\n\t\t\t\t{\n\t\t\t\t\tid: \"1\",\n\t\t\t\t\tmessageId: \"1\",\n\t\t\t\t\tpattern: [{ type: \"text\", value: \"hello world from Berlin\" }],\n\t\t\t\t\tmatches: [],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"2\",\n\t\t\t\t\tmessageId: \"1\",\n\t\t\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t\t\t\tmatches: [],\n\t\t\t\t},\n\t\t\t])\n\t\t\t.execute();\n\t\tconst diffReports = await inlangLixPluginV1.diff.file!({\n\t\t\told: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath: \"/db.sqlite\",\n\t\t\t\tdata: contentFromDatabase(oldProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t\tneu: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath: \"/db.sqlite\",\n\t\t\t\tdata: contentFromDatabase(neuProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t});\n\t\texpect(diffReports).toEqual([\n\t\t\t{\n\t\t\t\tmeta: {\n\t\t\t\t\tid: \"1\",\n\t\t\t\t},\n\t\t\t\toperation: \"update\",\n\t\t\t\ttype: \"variant\",\n\t\t\t\told: {\n\t\t\t\t\tid: \"1\",\n\t\t\t\t\tmessageId: \"1\",\n\t\t\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t\t\t\tmatches: [],\n\t\t\t\t},\n\t\t\t\tneu: {\n\t\t\t\t\tid: \"1\",\n\t\t\t\t\tmessageId: \"1\",\n\t\t\t\t\tpattern: [{ type: \"text\", value: \"hello world from Berlin\" }],\n\t\t\t\t\tmatches: [],\n\t\t\t\t},\n\t\t\t} satisfies DiffReport,\n\t\t]);\n\t});\n\n\t// https://github.com/opral/lix-sdk/issues/33\n\ttest(\"it should generate changes after the first change\", async () => {\n\t\tconst project = await loadProjectInMemory({ blob: await newProject() });\n\n\t\tconst initialChanges = await project.lix.db\n\t\t\t.selectFrom(\"change\")\n\t\t\t.selectAll()\n\t\t\t.execute();\n\t\texpect(initialChanges.length).toEqual(0);\n\n\t\tawait project.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values({\n\t\t\t\tid: \"1\",\n\t\t\t})\n\t\t\t.execute();\n\n\t\t// FIXME: how to await inlang sdk persisting the inlang db to lix?\n\t\tawait new Promise((resolve) => setTimeout(resolve, 500));\n\n\t\tawait project.lix.settled();\n\n\t\tconst changes = await project.lix.db\n\t\t\t.selectFrom(\"change\")\n\t\t\t.selectAll()\n\t\t\t.execute();\n\n\t\texpect(changes.length).toBe(1);\n\t\texpect(changes[0]?.value?.id).toBe(\"1\");\n\t\texpect(changes[0]?.operation).toBe(\"create\");\n\t});\n});\n\ndescribe.skip(\"plugin.diff.variant\", () => {\n\ttest(\"old and neu are the same should not report a diff\", async () => {\n\t\tconst old: Variant = {\n\t\t\tid: \"1\",\n\t\t\tmatches: [],\n\t\t\tmessageId: \"5\",\n\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t};\n\t\tconst neu: Variant = {\n\t\t\tid: \"1\",\n\t\t\tmatches: [],\n\t\t\tmessageId: \"5\",\n\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t};\n\t\tconst diff = await inlangLixPluginV1.diff.variant({ old, neu });\n\t\texpect(diff).toEqual([]);\n\t});\n\n\ttest(\"old and neu are different should yield a diff report\", async () => {\n\t\tconst old: Variant = {\n\t\t\tid: \"1\",\n\t\t\tmatches: [],\n\t\t\tmessageId: \"5\",\n\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t};\n\t\tconst neu: Variant = {\n\t\t\tid: \"1\",\n\t\t\tmatches: [],\n\t\t\tmessageId: \"5\",\n\t\t\tpattern: [{ type: \"text\", value: \"hello world from Berlin\" }],\n\t\t};\n\t\tconst diff = await inlangLixPluginV1.diff.variant({ old, neu });\n\t\texpect(diff).toEqual([\n\t\t\t{\n\t\t\t\tmeta: { id: \"1\" },\n\t\t\t\toperation: \"update\",\n\t\t\t\ttype: \"variant\",\n\t\t\t\tneu,\n\t\t\t\told,\n\t\t\t} satisfies DiffReport,\n\t\t]);\n\t});\n\n\ttest(\"old is undefined and neu is defined should return a diff report for the new value\", async () => {\n\t\tconst old = undefined;\n\t\tconst neu: Variant = {\n\t\t\tid: \"1\",\n\t\t\tmatches: [],\n\t\t\tmessageId: \"5\",\n\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t};\n\t\tconst diff = await inlangLixPluginV1.diff.variant({ old, neu });\n\t\texpect(diff).toEqual([\n\t\t\t{ operation: \"create\", type: \"variant\", neu, old } satisfies DiffReport,\n\t\t]);\n\t});\n});\n"],"names":[],"mappings":"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","debug_id":"83ec7ddc-5f35-51bb-9032-982c307f1378"}
1
+ {"version":3,"file":"inlangLixPluginV1.test.js","sourceRoot":"/","sources":["lix-plugin/inlangLixPluginV1.test.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc;AAEd,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAmB,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACtC,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3E,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC;YACP,EAAE,EAAE,GAAG;SACP,CAAC;aACD,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,YAAY,CAAC;QAC1B,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAK,CAAC;YACtD,GAAG,EAAE,SAAS;YACd,GAAG,EAAE;gBACJ,EAAE,EAAE,MAAM;gBACV,IAAI;gBACJ,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC7C,QAAQ,EAAE,EAAE;aACZ;SACD,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;YAC3B;gBACC,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,QAAQ;gBACnB,GAAG,EAAE,SAAS;gBACd,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;aACpB;SACtB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,4BAA4B;IAC5B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3E,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC;YACP;gBACC,EAAE,EAAE,GAAG;aACP;YACD;gBACC,EAAE,EAAE,GAAG;aACP;SACD,CAAC;aACD,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3E,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC;YACP;gBACC,EAAE,EAAE,GAAG;aACP;YACD;gBACC,EAAE,EAAE,GAAG;aACP;SACD,CAAC;aACD,OAAO,EAAE,CAAC;QAEZ,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAK,CAAC;YACtD,GAAG,EAAE;gBACJ,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC7C,QAAQ,EAAE,EAAE;aACZ;YACD,GAAG,EAAE;gBACJ,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC7C,QAAQ,EAAE,EAAE;aACZ;SACD,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;YAC3B;gBACC,IAAI,EAAE;oBACL,EAAE,EAAE,GAAG;iBACP;gBACD,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,QAAQ;gBACnB,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;gBAChB,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;aACK;SACtB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3E,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;aACzB,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,SAAS,CAAC;aACrB,MAAM,CAAC;YACP,EAAE,EAAE,GAAG;YACP,QAAQ,EAAE,SAAS;YACnB,MAAM,EAAE,IAAI;SACZ,CAAC;aACD,OAAO,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAK,CAAC;YACtD,GAAG,EAAE,SAAS;YACd,GAAG,EAAE;gBACJ,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC7C,QAAQ,EAAE,EAAE;aACZ;SACD,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAC1B,MAAM,CAAC,eAAe,CAAC;YACtB;gBACC,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,QAAQ;gBACnB,GAAG,EAAE,SAAS;gBACd,GAAG,EAAE;oBACJ,EAAE,EAAE,GAAG;oBACP,QAAQ,EAAE,SAAS;oBACnB,SAAS,EAAE,EAAE;oBACb,MAAM,EAAE,IAAI;iBACZ;aACoB;SACtB,CAAC,CACF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3E,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;aACzB,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,SAAS,CAAC;aACrB,MAAM,CAAC;YACP;gBACC,EAAE,EAAE,GAAG;gBACP,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,IAAI;aACZ;YACD;gBACC,EAAE,EAAE,GAAG;gBACP,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,IAAI;aACZ;SACD,CAAC;aACD,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3E,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;aACzB,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,SAAS,CAAC;aACrB,MAAM,CAAC;YACP;gBACC,EAAE,EAAE,GAAG;gBACP,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,IAAI;aACZ;YACD;gBACC,EAAE,EAAE,GAAG;gBACP,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,IAAI;aACZ;SACD,CAAC;aACD,OAAO,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAK,CAAC;YACtD,GAAG,EAAE;gBACJ,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC7C,QAAQ,EAAE,EAAE;aACZ;YACD,GAAG,EAAE;gBACJ,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC7C,QAAQ,EAAE,EAAE;aACZ;SACD,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAC1B,MAAM,CAAC,eAAe,CAAC;YACtB;gBACC,IAAI,EAAE;oBACL,EAAE,EAAE,GAAG;iBACP;gBACD,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,QAAQ;gBACnB,GAAG,EAAE;oBACJ,EAAE,EAAE,GAAG;oBACP,QAAQ,EAAE,SAAS;oBACnB,SAAS,EAAE,EAAE;oBACb,MAAM,EAAE,IAAI;iBACZ;gBACD,GAAG,EAAE;oBACJ,EAAE,EAAE,GAAG;oBACP,QAAQ,EAAE,SAAS;oBACnB,SAAS,EAAE,EAAE;oBACb,MAAM,EAAE,IAAI;iBACZ;aACoB;SACtB,CAAC,CACF,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3E,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;aACzB,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,SAAS,CAAC;aACrB,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;aACtD,OAAO,EAAE,CAAC;QAEZ,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,SAAS,CAAC;aACrB,MAAM,CAAC;YACP,EAAE,EAAE,GAAG;YACP,SAAS,EAAE,GAAG;YACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;YACjD,OAAO,EAAE,EAAE;SACX,CAAC;aACD,OAAO,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAK,CAAC;YACtD,GAAG,EAAE,SAAS;YACd,GAAG,EAAE;gBACJ,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC7C,QAAQ,EAAE,EAAE;aACZ;SACD,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAC1B,MAAM,CAAC,eAAe,CAAC;YACtB;gBACC,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,QAAQ;gBACnB,GAAG,EAAE,SAAS;gBACd,GAAG,EAAE;oBACJ,EAAE,EAAE,GAAG;oBACP,SAAS,EAAE,GAAG;oBACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;oBACjD,OAAO,EAAE,EAAE;iBACX;aACoB;SACtB,CAAC,CACF,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3E,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;aACzB,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,SAAS,CAAC;aACrB,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;aACtD,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,SAAS,CAAC;aACrB,MAAM,CAAC;YACP;gBACC,EAAE,EAAE,GAAG;gBACP,SAAS,EAAE,GAAG;gBACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;gBACjD,OAAO,EAAE,EAAE;aACX;YACD;gBACC,EAAE,EAAE,GAAG;gBACP,SAAS,EAAE,GAAG;gBACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;gBACjD,OAAO,EAAE,EAAE;aACX;SACD,CAAC;aACD,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,UAAU,EAAE,EAAE,CAAC,CAAC;QAC3E,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;aACzB,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,SAAS,CAAC;aACrB,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;aACtD,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,CAAC,EAAE;aACjB,UAAU,CAAC,SAAS,CAAC;aACrB,MAAM,CAAC;YACP;gBACC,EAAE,EAAE,GAAG;gBACP,SAAS,EAAE,GAAG;gBACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC;gBAC7D,OAAO,EAAE,EAAE;aACX;YACD;gBACC,EAAE,EAAE,GAAG;gBACP,SAAS,EAAE,GAAG;gBACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;gBACjD,OAAO,EAAE,EAAE;aACX;SACD,CAAC;aACD,OAAO,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAK,CAAC;YACtD,GAAG,EAAE;gBACJ,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC7C,QAAQ,EAAE,EAAE;aACZ;YACD,GAAG,EAAE;gBACJ,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC7C,QAAQ,EAAE,EAAE;aACZ;SACD,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;YAC3B;gBACC,IAAI,EAAE;oBACL,EAAE,EAAE,GAAG;iBACP;gBACD,SAAS,EAAE,QAAQ;gBACnB,IAAI,EAAE,SAAS;gBACf,GAAG,EAAE;oBACJ,EAAE,EAAE,GAAG;oBACP,SAAS,EAAE,GAAG;oBACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;oBACjD,OAAO,EAAE,EAAE;iBACX;gBACD,GAAG,EAAE;oBACJ,EAAE,EAAE,GAAG;oBACP,SAAS,EAAE,GAAG;oBACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC;oBAC7D,OAAO,EAAE,EAAE;iBACX;aACoB;SACtB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,6CAA6C;IAC7C,IAAI,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,UAAU,EAAE,EAAE,CAAC,CAAC;QAExE,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE;aACzC,UAAU,CAAC,QAAQ,CAAC;aACpB,SAAS,EAAE;aACX,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEzC,MAAM,OAAO,CAAC,EAAE;aACd,UAAU,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC;YACP,EAAE,EAAE,GAAG;SACP,CAAC;aACD,OAAO,EAAE,CAAC;QAEZ,kEAAkE;QAClE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAEzD,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAE5B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE;aAClC,UAAU,CAAC,QAAQ,CAAC;aACpB,SAAS,EAAE;aACX,OAAO,EAAE,CAAC;QAEZ,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACzC,IAAI,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,GAAG,GAAY;YACpB,EAAE,EAAE,GAAG;YACP,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,GAAG;YACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;SACjD,CAAC;QACF,MAAM,GAAG,GAAY;YACpB,EAAE,EAAE,GAAG;YACP,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,GAAG;YACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;SACjD,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,GAAG,GAAY;YACpB,EAAE,EAAE,GAAG;YACP,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,GAAG;YACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;SACjD,CAAC;QACF,MAAM,GAAG,GAAY;YACpB,EAAE,EAAE,GAAG;YACP,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,GAAG;YACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC;SAC7D,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YACpB;gBACC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;gBACjB,SAAS,EAAE,QAAQ;gBACnB,IAAI,EAAE,SAAS;gBACf,GAAG;gBACH,GAAG;aACkB;SACtB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACpG,MAAM,GAAG,GAAG,SAAS,CAAC;QACtB,MAAM,GAAG,GAAY;YACpB,EAAE,EAAE,GAAG;YACP,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,GAAG;YACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;SACjD,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YACpB,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAuB;SACvE,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport { test, expect, describe } from \"vitest\";\nimport { inlangLixPluginV1 } from \"./inlangLixPluginV1.js\";\nimport { type DiffReport } from \"@lix-js/sdk\";\nimport { newProject } from \"../project/newProject.js\";\nimport { loadProjectInMemory } from \"../project/loadProjectInMemory.js\";\nimport { contentFromDatabase } from \"sqlite-wasm-kysely\";\nimport type { Variant } from \"../database/schema.js\";\n\ndescribe.skip(\"plugin.diff.file\", () => {\n\ttest(\"insert of bundle\", async () => {\n\t\tconst neuProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values({\n\t\t\t\tid: \"1\",\n\t\t\t})\n\t\t\t.execute();\n\t\tconst path = \"/db.sqlite\";\n\t\tconst diffReports = await inlangLixPluginV1.diff.file!({\n\t\t\told: undefined,\n\t\t\tneu: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath,\n\t\t\t\tdata: contentFromDatabase(neuProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t});\n\t\texpect(diffReports).toEqual([\n\t\t\t{\n\t\t\t\ttype: \"bundle\",\n\t\t\t\toperation: \"create\",\n\t\t\t\told: undefined,\n\t\t\t\tneu: expect.objectContaining({ id: \"1\" }),\n\t\t\t} satisfies DiffReport,\n\t\t]);\n\t});\n\n\t// reanble with declarations\n\ttest.todo(\"update of bundle\", async () => {\n\t\tconst oldProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait oldProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values([\n\t\t\t\t{\n\t\t\t\t\tid: \"1\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"2\",\n\t\t\t\t},\n\t\t\t])\n\t\t\t.execute();\n\t\tconst neuProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values([\n\t\t\t\t{\n\t\t\t\t\tid: \"1\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"2\",\n\t\t\t\t},\n\t\t\t])\n\t\t\t.execute();\n\n\t\tconst diffReports = await inlangLixPluginV1.diff.file!({\n\t\t\told: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath: \"/db.sqlite\",\n\t\t\t\tdata: contentFromDatabase(oldProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t\tneu: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath: \"/db.sqlite\",\n\t\t\t\tdata: contentFromDatabase(neuProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t});\n\n\t\texpect(diffReports).toEqual([\n\t\t\t{\n\t\t\t\tmeta: {\n\t\t\t\t\tid: \"1\",\n\t\t\t\t},\n\t\t\t\ttype: \"bundle\",\n\t\t\t\toperation: \"update\",\n\t\t\t\told: { id: \"1\" },\n\t\t\t\tneu: { id: \"1\" },\n\t\t\t} satisfies DiffReport,\n\t\t]);\n\t});\n\n\ttest(\"insert of message\", async () => {\n\t\tconst neuProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values({ id: \"unknown\" })\n\t\t\t.execute();\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"message\")\n\t\t\t.values({\n\t\t\t\tid: \"1\",\n\t\t\t\tbundleId: \"unknown\",\n\t\t\t\tlocale: \"en\",\n\t\t\t})\n\t\t\t.execute();\n\t\tconst diffReports = await inlangLixPluginV1.diff.file!({\n\t\t\told: undefined,\n\t\t\tneu: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath: \"/db.sqlite\",\n\t\t\t\tdata: contentFromDatabase(neuProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t});\n\t\texpect(diffReports).toEqual(\n\t\t\texpect.arrayContaining([\n\t\t\t\t{\n\t\t\t\t\ttype: \"message\",\n\t\t\t\t\toperation: \"create\",\n\t\t\t\t\told: undefined,\n\t\t\t\t\tneu: {\n\t\t\t\t\t\tid: \"1\",\n\t\t\t\t\t\tbundleId: \"unknown\",\n\t\t\t\t\t\tselectors: [],\n\t\t\t\t\t\tlocale: \"en\",\n\t\t\t\t\t},\n\t\t\t\t} satisfies DiffReport,\n\t\t\t])\n\t\t);\n\t});\n\n\ttest(\"update of message\", async () => {\n\t\tconst oldProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait oldProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values({ id: \"unknown\" })\n\t\t\t.execute();\n\t\tawait oldProject.db\n\t\t\t.insertInto(\"message\")\n\t\t\t.values([\n\t\t\t\t{\n\t\t\t\t\tid: \"1\",\n\t\t\t\t\tbundleId: \"unknown\",\n\t\t\t\t\tlocale: \"en\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"2\",\n\t\t\t\t\tbundleId: \"unknown\",\n\t\t\t\t\tlocale: \"en\",\n\t\t\t\t},\n\t\t\t])\n\t\t\t.execute();\n\t\tconst neuProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values({ id: \"unknown\" })\n\t\t\t.execute();\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"message\")\n\t\t\t.values([\n\t\t\t\t{\n\t\t\t\t\tid: \"1\",\n\t\t\t\t\tbundleId: \"unknown\",\n\t\t\t\t\tlocale: \"de\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"2\",\n\t\t\t\t\tbundleId: \"unknown\",\n\t\t\t\t\tlocale: \"en\",\n\t\t\t\t},\n\t\t\t])\n\t\t\t.execute();\n\t\tconst diffReports = await inlangLixPluginV1.diff.file!({\n\t\t\told: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath: \"/db.sqlite\",\n\t\t\t\tdata: contentFromDatabase(oldProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t\tneu: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath: \"/db.sqlite\",\n\t\t\t\tdata: contentFromDatabase(neuProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t});\n\t\texpect(diffReports).toEqual(\n\t\t\texpect.arrayContaining([\n\t\t\t\t{\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tid: \"1\",\n\t\t\t\t\t},\n\t\t\t\t\ttype: \"message\",\n\t\t\t\t\toperation: \"update\",\n\t\t\t\t\told: {\n\t\t\t\t\t\tid: \"1\",\n\t\t\t\t\t\tbundleId: \"unknown\",\n\t\t\t\t\t\tselectors: [],\n\t\t\t\t\t\tlocale: \"en\",\n\t\t\t\t\t},\n\t\t\t\t\tneu: {\n\t\t\t\t\t\tid: \"1\",\n\t\t\t\t\t\tbundleId: \"unknown\",\n\t\t\t\t\t\tselectors: [],\n\t\t\t\t\t\tlocale: \"de\",\n\t\t\t\t\t},\n\t\t\t\t} satisfies DiffReport,\n\t\t\t])\n\t\t);\n\t});\n\ttest(\"insert of variant\", async () => {\n\t\tconst neuProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values({ id: \"bundle1\" })\n\t\t\t.execute();\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"message\")\n\t\t\t.values({ id: \"1\", bundleId: \"bundle1\", locale: \"en\" })\n\t\t\t.execute();\n\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"variant\")\n\t\t\t.values({\n\t\t\t\tid: \"1\",\n\t\t\t\tmessageId: \"1\",\n\t\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t\t\tmatches: [],\n\t\t\t})\n\t\t\t.execute();\n\t\tconst diffReports = await inlangLixPluginV1.diff.file!({\n\t\t\told: undefined,\n\t\t\tneu: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath: \"/db.sqlite\",\n\t\t\t\tdata: contentFromDatabase(neuProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t});\n\t\texpect(diffReports).toEqual(\n\t\t\texpect.arrayContaining([\n\t\t\t\t{\n\t\t\t\t\ttype: \"variant\",\n\t\t\t\t\toperation: \"create\",\n\t\t\t\t\told: undefined,\n\t\t\t\t\tneu: {\n\t\t\t\t\t\tid: \"1\",\n\t\t\t\t\t\tmessageId: \"1\",\n\t\t\t\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t\t\t\t\tmatches: [],\n\t\t\t\t\t},\n\t\t\t\t} satisfies DiffReport,\n\t\t\t])\n\t\t);\n\t});\n\ttest(\"update of variant\", async () => {\n\t\tconst oldProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait oldProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values({ id: \"bundle1\" })\n\t\t\t.execute();\n\t\tawait oldProject.db\n\t\t\t.insertInto(\"message\")\n\t\t\t.values({ id: \"1\", bundleId: \"bundle1\", locale: \"en\" })\n\t\t\t.execute();\n\t\tawait oldProject.db\n\t\t\t.insertInto(\"variant\")\n\t\t\t.values([\n\t\t\t\t{\n\t\t\t\t\tid: \"1\",\n\t\t\t\t\tmessageId: \"1\",\n\t\t\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t\t\t\tmatches: [],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"2\",\n\t\t\t\t\tmessageId: \"1\",\n\t\t\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t\t\t\tmatches: [],\n\t\t\t\t},\n\t\t\t])\n\t\t\t.execute();\n\t\tconst neuProject = await loadProjectInMemory({ blob: await newProject() });\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values({ id: \"bundle1\" })\n\t\t\t.execute();\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"message\")\n\t\t\t.values({ id: \"1\", bundleId: \"bundle1\", locale: \"en\" })\n\t\t\t.execute();\n\t\tawait neuProject.db\n\t\t\t.insertInto(\"variant\")\n\t\t\t.values([\n\t\t\t\t{\n\t\t\t\t\tid: \"1\",\n\t\t\t\t\tmessageId: \"1\",\n\t\t\t\t\tpattern: [{ type: \"text\", value: \"hello world from Berlin\" }],\n\t\t\t\t\tmatches: [],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"2\",\n\t\t\t\t\tmessageId: \"1\",\n\t\t\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t\t\t\tmatches: [],\n\t\t\t\t},\n\t\t\t])\n\t\t\t.execute();\n\t\tconst diffReports = await inlangLixPluginV1.diff.file!({\n\t\t\told: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath: \"/db.sqlite\",\n\t\t\t\tdata: contentFromDatabase(oldProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t\tneu: {\n\t\t\t\tid: \"uuid\",\n\t\t\t\tpath: \"/db.sqlite\",\n\t\t\t\tdata: contentFromDatabase(neuProject._sqlite),\n\t\t\t\tmetadata: {},\n\t\t\t},\n\t\t});\n\t\texpect(diffReports).toEqual([\n\t\t\t{\n\t\t\t\tmeta: {\n\t\t\t\t\tid: \"1\",\n\t\t\t\t},\n\t\t\t\toperation: \"update\",\n\t\t\t\ttype: \"variant\",\n\t\t\t\told: {\n\t\t\t\t\tid: \"1\",\n\t\t\t\t\tmessageId: \"1\",\n\t\t\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t\t\t\tmatches: [],\n\t\t\t\t},\n\t\t\t\tneu: {\n\t\t\t\t\tid: \"1\",\n\t\t\t\t\tmessageId: \"1\",\n\t\t\t\t\tpattern: [{ type: \"text\", value: \"hello world from Berlin\" }],\n\t\t\t\t\tmatches: [],\n\t\t\t\t},\n\t\t\t} satisfies DiffReport,\n\t\t]);\n\t});\n\n\t// https://github.com/opral/lix-sdk/issues/33\n\ttest(\"it should generate changes after the first change\", async () => {\n\t\tconst project = await loadProjectInMemory({ blob: await newProject() });\n\n\t\tconst initialChanges = await project.lix.db\n\t\t\t.selectFrom(\"change\")\n\t\t\t.selectAll()\n\t\t\t.execute();\n\t\texpect(initialChanges.length).toEqual(0);\n\n\t\tawait project.db\n\t\t\t.insertInto(\"bundle\")\n\t\t\t.values({\n\t\t\t\tid: \"1\",\n\t\t\t})\n\t\t\t.execute();\n\n\t\t// FIXME: how to await inlang sdk persisting the inlang db to lix?\n\t\tawait new Promise((resolve) => setTimeout(resolve, 500));\n\n\t\tawait project.lix.settled();\n\n\t\tconst changes = await project.lix.db\n\t\t\t.selectFrom(\"change\")\n\t\t\t.selectAll()\n\t\t\t.execute();\n\n\t\texpect(changes.length).toBe(1);\n\t\texpect(changes[0]?.value?.id).toBe(\"1\");\n\t\texpect(changes[0]?.operation).toBe(\"create\");\n\t});\n});\n\ndescribe.skip(\"plugin.diff.variant\", () => {\n\ttest(\"old and neu are the same should not report a diff\", async () => {\n\t\tconst old: Variant = {\n\t\t\tid: \"1\",\n\t\t\tmatches: [],\n\t\t\tmessageId: \"5\",\n\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t};\n\t\tconst neu: Variant = {\n\t\t\tid: \"1\",\n\t\t\tmatches: [],\n\t\t\tmessageId: \"5\",\n\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t};\n\t\tconst diff = await inlangLixPluginV1.diff.variant({ old, neu });\n\t\texpect(diff).toEqual([]);\n\t});\n\n\ttest(\"old and neu are different should yield a diff report\", async () => {\n\t\tconst old: Variant = {\n\t\t\tid: \"1\",\n\t\t\tmatches: [],\n\t\t\tmessageId: \"5\",\n\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t};\n\t\tconst neu: Variant = {\n\t\t\tid: \"1\",\n\t\t\tmatches: [],\n\t\t\tmessageId: \"5\",\n\t\t\tpattern: [{ type: \"text\", value: \"hello world from Berlin\" }],\n\t\t};\n\t\tconst diff = await inlangLixPluginV1.diff.variant({ old, neu });\n\t\texpect(diff).toEqual([\n\t\t\t{\n\t\t\t\tmeta: { id: \"1\" },\n\t\t\t\toperation: \"update\",\n\t\t\t\ttype: \"variant\",\n\t\t\t\tneu,\n\t\t\t\told,\n\t\t\t} satisfies DiffReport,\n\t\t]);\n\t});\n\n\ttest(\"old is undefined and neu is defined should return a diff report for the new value\", async () => {\n\t\tconst old = undefined;\n\t\tconst neu: Variant = {\n\t\t\tid: \"1\",\n\t\t\tmatches: [],\n\t\t\tmessageId: \"5\",\n\t\t\tpattern: [{ type: \"text\", value: \"hello world\" }],\n\t\t};\n\t\tconst diff = await inlangLixPluginV1.diff.variant({ old, neu });\n\t\texpect(diff).toEqual([\n\t\t\t{ operation: \"create\", type: \"variant\", neu, old } satisfies DiffReport,\n\t\t]);\n\t});\n});\n"]}
@@ -1,7 +1,5 @@
1
1
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
2
  // @ts-nocheck
3
-
4
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="35241927-b1e4-59dd-84b1-367e90e05274")}catch(e){}}();
5
3
  import { merge } from "@lix-js/sdk";
6
4
  import { test, expect } from "vitest";
7
5
  import { loadProjectInMemory } from "../project/loadProjectInMemory.js";
@@ -116,5 +114,4 @@ test.skip("it should update the variant to the source's value", async () => {
116
114
  .executeTakeFirstOrThrow();
117
115
  expect(variant).toEqual(expect.objectContaining(changesOnlyInSource[0]?.value));
118
116
  });
119
- //# sourceMappingURL=merge.test.js.map
120
- //# debugId=35241927-b1e4-59dd-84b1-367e90e05274
117
+ //# sourceMappingURL=merge.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge.test.js","sources":["lix-plugin/merge.test.ts"],"sourceRoot":"/","sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport { merge, type NewChange } from \"@lix-js/sdk\";\nimport { test, expect } from \"vitest\";\nimport { loadProjectInMemory } from \"../project/loadProjectInMemory.js\";\nimport { newProject } from \"../project/newProject.js\";\nimport { inlangLixPluginV1 } from \"./inlangLixPluginV1.js\";\nimport type { NewBundle, NewMessage, NewVariant } from \"../database/schema.js\";\n\ntest.skip(\"it should update the variant to the source's value\", async () => {\n\tconst target = await loadProjectInMemory({ blob: await newProject() });\n\tconst source = await loadProjectInMemory({ blob: await target.toBlob() });\n\n\tconst dbFile = await target.lix.db\n\t\t.selectFrom(\"file\")\n\t\t.select(\"id\")\n\t\t.where(\"path\", \"=\", \"/db.sqlite\")\n\t\t.executeTakeFirstOrThrow();\n\n\tconst commonChanges: NewChange[] = [\n\t\t{\n\t\t\tid: \"d92cdc2e-74cc-494c-8d51-958216272a17\",\n\t\t\tparent_id: undefined,\n\t\t\ttype: \"bundle\",\n\t\t\tfile_id: dbFile.id,\n\t\t\tplugin_key: inlangLixPluginV1[\"key\"],\n\t\t\toperation: \"create\",\n\t\t\tvalue: {\n\t\t\t\tid: \"even_hour_mule_drum\",\n\t\t\t} satisfies NewBundle,\n\t\t\tcommit_id: \"c8ad005b-a834-4ca3-84fb-9627546f2eba\",\n\t\t},\n\t\t{\n\t\t\tid: \"24f74fec-fc8a-4c68-b31c-d126417ce3af\",\n\t\t\tparent_id: undefined,\n\t\t\ttype: \"message\",\n\t\t\tfile_id: dbFile.id,\n\t\t\tplugin_key: inlangLixPluginV1[\"key\"],\n\t\t\toperation: \"create\",\n\t\t\tvalue: {\n\t\t\t\tid: \"c2684c3d-3e14-47e4-96b7-8d33579bb7e9\",\n\t\t\t\tbundleId: \"even_hour_mule_drum\",\n\t\t\t\tlocale: \"en\",\n\t\t\t\tselectors: [],\n\t\t\t} satisfies NewMessage,\n\t\t\tcommit_id: \"c8ad005b-a834-4ca3-84fb-9627546f2eba\",\n\t\t},\n\t\t{\n\t\t\tid: \"aaf0ec32-0c7f-4d07-af8c-922ce382aef1\",\n\t\t\tparent_id: undefined,\n\t\t\ttype: \"variant\",\n\t\t\tfile_id: dbFile.id,\n\t\t\tplugin_key: inlangLixPluginV1[\"key\"],\n\t\t\toperation: \"create\",\n\t\t\tvalue: {\n\t\t\t\tid: \"6a860f96-0cf3-477c-80ad-7893d8fde852\",\n\t\t\t\tmessageId: \"c2684c3d-3e14-47e4-96b7-8d33579bb7e9\",\n\t\t\t\tmatches: [],\n\t\t\t\tpattern: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\tvalue: \"My Awesome Todo App\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t} satisfies NewVariant,\n\t\t\tcommit_id: \"c8ad005b-a834-4ca3-84fb-9627546f2eba\",\n\t\t},\n\t];\n\n\tconst changesOnlyInTarget: NewChange[] = [];\n\tconst changesOnlyInSource: NewChange[] = [\n\t\t{\n\t\t\tid: \"01c059f9-8476-4aaa-aa6d-53ea3158b374\",\n\t\t\tparent_id: \"aaf0ec32-0c7f-4d07-af8c-922ce382aef1\",\n\t\t\ttype: \"variant\",\n\t\t\tfile_id: dbFile.id,\n\t\t\tplugin_key: inlangLixPluginV1[\"key\"],\n\t\t\toperation: \"update\",\n\t\t\tvalue: {\n\t\t\t\tid: \"6a860f96-0cf3-477c-80ad-7893d8fde852\",\n\t\t\t\tmessageId: \"c2684c3d-3e14-47e4-96b7-8d33579bb7e9\",\n\t\t\t\tmatches: [],\n\t\t\t\tpattern: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\tvalue: \"My app is buggy\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t} satisfies NewVariant,\n\t\t\tmeta: {\n\t\t\t\tid: \"6a860f96-0cf3-477c-80ad-7893d8fde852\",\n\t\t\t},\n\t\t\tcommit_id: \"df455c78-b5ed-4df0-9259-7bb694c9d755\",\n\t\t},\n\t];\n\n\tawait source.lix.db\n\t\t.insertInto(\"change\")\n\t\t.values([...commonChanges, ...changesOnlyInSource])\n\t\t.execute();\n\n\tawait target.lix.db\n\t\t.insertInto(\"change\")\n\t\t.values([...commonChanges, ...changesOnlyInTarget])\n\t\t.execute();\n\n\tawait merge({ sourceLix: source.lix, targetLix: target.lix });\n\n\tawait target.lix.settled();\n\n\t// need to reload project to re-initialize the state\n\tconst mergedProject = await loadProjectInMemory({\n\t\tblob: await target.toBlob(),\n\t});\n\n\tconst changes = await mergedProject.lix.db\n\t\t.selectFrom(\"change\")\n\t\t.selectAll()\n\t\t.execute();\n\n\texpect(changes).lengthOf(4);\n\n\tconst variant = await mergedProject.db\n\t\t.selectFrom(\"variant\")\n\t\t.selectAll()\n\t\t.where(\"id\", \"=\", \"6a860f96-0cf3-477c-80ad-7893d8fde852\")\n\t\t.executeTakeFirstOrThrow();\n\n\texpect(variant).toEqual(\n\t\texpect.objectContaining(changesOnlyInSource[0]?.value)\n\t);\n});\n"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc;;;AAEd,OAAO,EAAE,KAAK,EAAkB,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D,IAAI,CAAC,IAAI,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;IAC1E,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,UAAU,EAAE,EAAE,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE1E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE;SAChC,UAAU,CAAC,MAAM,CAAC;SAClB,MAAM,CAAC,IAAI,CAAC;SACZ,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,CAAC;SAChC,uBAAuB,EAAE,CAAC;IAE5B,MAAM,aAAa,GAAgB;QAClC;YACC,EAAE,EAAE,sCAAsC;YAC1C,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,MAAM,CAAC,EAAE;YAClB,UAAU,EAAE,iBAAiB,CAAC,KAAK,CAAC;YACpC,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE;gBACN,EAAE,EAAE,qBAAqB;aACL;YACrB,SAAS,EAAE,sCAAsC;SACjD;QACD;YACC,EAAE,EAAE,sCAAsC;YAC1C,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,MAAM,CAAC,EAAE;YAClB,UAAU,EAAE,iBAAiB,CAAC,KAAK,CAAC;YACpC,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE;gBACN,EAAE,EAAE,sCAAsC;gBAC1C,QAAQ,EAAE,qBAAqB;gBAC/B,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,EAAE;aACQ;YACtB,SAAS,EAAE,sCAAsC;SACjD;QACD;YACC,EAAE,EAAE,sCAAsC;YAC1C,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,MAAM,CAAC,EAAE;YAClB,UAAU,EAAE,iBAAiB,CAAC,KAAK,CAAC;YACpC,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE;gBACN,EAAE,EAAE,sCAAsC;gBAC1C,SAAS,EAAE,sCAAsC;gBACjD,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,qBAAqB;qBAC5B;iBACD;aACoB;YACtB,SAAS,EAAE,sCAAsC;SACjD;KACD,CAAC;IAEF,MAAM,mBAAmB,GAAgB,EAAE,CAAC;IAC5C,MAAM,mBAAmB,GAAgB;QACxC;YACC,EAAE,EAAE,sCAAsC;YAC1C,SAAS,EAAE,sCAAsC;YACjD,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,MAAM,CAAC,EAAE;YAClB,UAAU,EAAE,iBAAiB,CAAC,KAAK,CAAC;YACpC,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE;gBACN,EAAE,EAAE,sCAAsC;gBAC1C,SAAS,EAAE,sCAAsC;gBACjD,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,iBAAiB;qBACxB;iBACD;aACoB;YACtB,IAAI,EAAE;gBACL,EAAE,EAAE,sCAAsC;aAC1C;YACD,SAAS,EAAE,sCAAsC;SACjD;KACD,CAAC;IAEF,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE;SACjB,UAAU,CAAC,QAAQ,CAAC;SACpB,MAAM,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,mBAAmB,CAAC,CAAC;SAClD,OAAO,EAAE,CAAC;IAEZ,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE;SACjB,UAAU,CAAC,QAAQ,CAAC;SACpB,MAAM,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,mBAAmB,CAAC,CAAC;SAClD,OAAO,EAAE,CAAC;IAEZ,MAAM,KAAK,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAE9D,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAE3B,oDAAoD;IACpD,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC;QAC/C,IAAI,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE;KAC3B,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,EAAE;SACxC,UAAU,CAAC,QAAQ,CAAC;SACpB,SAAS,EAAE;SACX,OAAO,EAAE,CAAC;IAEZ,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5B,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,EAAE;SACpC,UAAU,CAAC,SAAS,CAAC;SACrB,SAAS,EAAE;SACX,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,sCAAsC,CAAC;SACxD,uBAAuB,EAAE,CAAC;IAE5B,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACtB,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CACtD,CAAC;AACH,CAAC,CAAC,CAAC","debug_id":"35241927-b1e4-59dd-84b1-367e90e05274"}
1
+ {"version":3,"file":"merge.test.js","sourceRoot":"/","sources":["lix-plugin/merge.test.ts"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport { merge, type NewChange } from \"@lix-js/sdk\";\nimport { test, expect } from \"vitest\";\nimport { loadProjectInMemory } from \"../project/loadProjectInMemory.js\";\nimport { newProject } from \"../project/newProject.js\";\nimport { inlangLixPluginV1 } from \"./inlangLixPluginV1.js\";\nimport type { NewBundle, NewMessage, NewVariant } from \"../database/schema.js\";\n\ntest.skip(\"it should update the variant to the source's value\", async () => {\n\tconst target = await loadProjectInMemory({ blob: await newProject() });\n\tconst source = await loadProjectInMemory({ blob: await target.toBlob() });\n\n\tconst dbFile = await target.lix.db\n\t\t.selectFrom(\"file\")\n\t\t.select(\"id\")\n\t\t.where(\"path\", \"=\", \"/db.sqlite\")\n\t\t.executeTakeFirstOrThrow();\n\n\tconst commonChanges: NewChange[] = [\n\t\t{\n\t\t\tid: \"d92cdc2e-74cc-494c-8d51-958216272a17\",\n\t\t\tparent_id: undefined,\n\t\t\ttype: \"bundle\",\n\t\t\tfile_id: dbFile.id,\n\t\t\tplugin_key: inlangLixPluginV1[\"key\"],\n\t\t\toperation: \"create\",\n\t\t\tvalue: {\n\t\t\t\tid: \"even_hour_mule_drum\",\n\t\t\t} satisfies NewBundle,\n\t\t\tcommit_id: \"c8ad005b-a834-4ca3-84fb-9627546f2eba\",\n\t\t},\n\t\t{\n\t\t\tid: \"24f74fec-fc8a-4c68-b31c-d126417ce3af\",\n\t\t\tparent_id: undefined,\n\t\t\ttype: \"message\",\n\t\t\tfile_id: dbFile.id,\n\t\t\tplugin_key: inlangLixPluginV1[\"key\"],\n\t\t\toperation: \"create\",\n\t\t\tvalue: {\n\t\t\t\tid: \"c2684c3d-3e14-47e4-96b7-8d33579bb7e9\",\n\t\t\t\tbundleId: \"even_hour_mule_drum\",\n\t\t\t\tlocale: \"en\",\n\t\t\t\tselectors: [],\n\t\t\t} satisfies NewMessage,\n\t\t\tcommit_id: \"c8ad005b-a834-4ca3-84fb-9627546f2eba\",\n\t\t},\n\t\t{\n\t\t\tid: \"aaf0ec32-0c7f-4d07-af8c-922ce382aef1\",\n\t\t\tparent_id: undefined,\n\t\t\ttype: \"variant\",\n\t\t\tfile_id: dbFile.id,\n\t\t\tplugin_key: inlangLixPluginV1[\"key\"],\n\t\t\toperation: \"create\",\n\t\t\tvalue: {\n\t\t\t\tid: \"6a860f96-0cf3-477c-80ad-7893d8fde852\",\n\t\t\t\tmessageId: \"c2684c3d-3e14-47e4-96b7-8d33579bb7e9\",\n\t\t\t\tmatches: [],\n\t\t\t\tpattern: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\tvalue: \"My Awesome Todo App\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t} satisfies NewVariant,\n\t\t\tcommit_id: \"c8ad005b-a834-4ca3-84fb-9627546f2eba\",\n\t\t},\n\t];\n\n\tconst changesOnlyInTarget: NewChange[] = [];\n\tconst changesOnlyInSource: NewChange[] = [\n\t\t{\n\t\t\tid: \"01c059f9-8476-4aaa-aa6d-53ea3158b374\",\n\t\t\tparent_id: \"aaf0ec32-0c7f-4d07-af8c-922ce382aef1\",\n\t\t\ttype: \"variant\",\n\t\t\tfile_id: dbFile.id,\n\t\t\tplugin_key: inlangLixPluginV1[\"key\"],\n\t\t\toperation: \"update\",\n\t\t\tvalue: {\n\t\t\t\tid: \"6a860f96-0cf3-477c-80ad-7893d8fde852\",\n\t\t\t\tmessageId: \"c2684c3d-3e14-47e4-96b7-8d33579bb7e9\",\n\t\t\t\tmatches: [],\n\t\t\t\tpattern: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\tvalue: \"My app is buggy\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t} satisfies NewVariant,\n\t\t\tmeta: {\n\t\t\t\tid: \"6a860f96-0cf3-477c-80ad-7893d8fde852\",\n\t\t\t},\n\t\t\tcommit_id: \"df455c78-b5ed-4df0-9259-7bb694c9d755\",\n\t\t},\n\t];\n\n\tawait source.lix.db\n\t\t.insertInto(\"change\")\n\t\t.values([...commonChanges, ...changesOnlyInSource])\n\t\t.execute();\n\n\tawait target.lix.db\n\t\t.insertInto(\"change\")\n\t\t.values([...commonChanges, ...changesOnlyInTarget])\n\t\t.execute();\n\n\tawait merge({ sourceLix: source.lix, targetLix: target.lix });\n\n\tawait target.lix.settled();\n\n\t// need to reload project to re-initialize the state\n\tconst mergedProject = await loadProjectInMemory({\n\t\tblob: await target.toBlob(),\n\t});\n\n\tconst changes = await mergedProject.lix.db\n\t\t.selectFrom(\"change\")\n\t\t.selectAll()\n\t\t.execute();\n\n\texpect(changes).lengthOf(4);\n\n\tconst variant = await mergedProject.db\n\t\t.selectFrom(\"variant\")\n\t\t.selectAll()\n\t\t.where(\"id\", \"=\", \"6a860f96-0cf3-477c-80ad-7893d8fde852\")\n\t\t.executeTakeFirstOrThrow();\n\n\texpect(variant).toEqual(\n\t\texpect.objectContaining(changesOnlyInSource[0]?.value)\n\t);\n});\n"]}
@@ -1,7 +1,5 @@
1
1
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
2
  // @ts-nocheck
3
-
4
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="83e7ae0e-e607-5d89-8023-87b74e4c9b67")}catch(e){}}();
5
3
  import { test, expect } from "vitest";
6
4
  import { newProject } from "../project/newProject.js";
7
5
  import { loadProjectInMemory } from "../project/loadProjectInMemory.js";
@@ -172,5 +170,4 @@ test.skip("it should resolve a conflict with the selected change", async () => {
172
170
  "peters-change",
173
171
  ]);
174
172
  });
175
- //# sourceMappingURL=resolveConflictBySelecting.test.js.map
176
- //# debugId=83e7ae0e-e607-5d89-8023-87b74e4c9b67
173
+ //# sourceMappingURL=resolveConflictBySelecting.test.js.map