@inlang/sdk 0.35.5 → 0.35.7

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 (106) hide show
  1. package/dist/api.d.ts +2 -13
  2. package/dist/api.d.ts.map +1 -1
  3. package/dist/createNewProject.test.js +1 -3
  4. package/dist/loadProject.d.ts.map +1 -1
  5. package/dist/loadProject.js +67 -32
  6. package/dist/loadProject.test.js +6 -2
  7. package/dist/persistence/batchedIO.d.ts +11 -0
  8. package/dist/persistence/batchedIO.d.ts.map +1 -0
  9. package/dist/persistence/batchedIO.js +49 -0
  10. package/dist/persistence/batchedIO.test.d.ts +2 -0
  11. package/dist/persistence/batchedIO.test.d.ts.map +1 -0
  12. package/dist/persistence/batchedIO.test.js +56 -0
  13. package/dist/persistence/filelock/acquireFileLock.d.ts.map +1 -1
  14. package/dist/persistence/filelock/acquireFileLock.js +3 -1
  15. package/dist/persistence/filelock/releaseLock.d.ts.map +1 -1
  16. package/dist/persistence/filelock/releaseLock.js +2 -1
  17. package/dist/persistence/store.d.ts +107 -0
  18. package/dist/persistence/store.d.ts.map +1 -0
  19. package/dist/persistence/store.js +99 -0
  20. package/dist/persistence/store.test.d.ts +2 -0
  21. package/dist/persistence/store.test.d.ts.map +1 -0
  22. package/dist/persistence/store.test.js +79 -0
  23. package/dist/persistence/storeApi.d.ts +22 -0
  24. package/dist/persistence/storeApi.d.ts.map +1 -0
  25. package/dist/persistence/storeApi.js +1 -0
  26. package/dist/reactivity/solid.test.js +1 -6
  27. package/dist/resolve-modules/plugins/resolvePlugins.d.ts.map +1 -1
  28. package/dist/resolve-modules/plugins/resolvePlugins.js +3 -10
  29. package/dist/test-utilities/sleep.d.ts +4 -0
  30. package/dist/test-utilities/sleep.d.ts.map +1 -0
  31. package/dist/test-utilities/sleep.js +9 -0
  32. package/dist/v2/helper.d.ts +131 -0
  33. package/dist/v2/helper.d.ts.map +1 -0
  34. package/dist/v2/helper.js +75 -0
  35. package/dist/v2/helper.test.d.ts +2 -0
  36. package/dist/v2/helper.test.d.ts.map +1 -0
  37. package/dist/v2/{createMessageBundle.test.js → helper.test.js} +1 -1
  38. package/dist/v2/index.d.ts +2 -0
  39. package/dist/v2/index.d.ts.map +1 -1
  40. package/dist/v2/index.js +2 -1
  41. package/dist/v2/mocks/index.d.ts +3 -0
  42. package/dist/v2/mocks/index.d.ts.map +1 -0
  43. package/dist/v2/mocks/index.js +2 -0
  44. package/dist/v2/mocks/multipleMatcher/bundle.d.ts +3 -0
  45. package/dist/v2/mocks/multipleMatcher/bundle.d.ts.map +1 -0
  46. package/dist/v2/mocks/multipleMatcher/bundle.js +194 -0
  47. package/dist/v2/mocks/multipleMatcher/bundle.test.d.ts +2 -0
  48. package/dist/v2/mocks/multipleMatcher/bundle.test.d.ts.map +1 -0
  49. package/dist/v2/mocks/multipleMatcher/bundle.test.js +10 -0
  50. package/dist/v2/mocks/plural/bundle.d.ts +1 -1
  51. package/dist/v2/mocks/plural/bundle.d.ts.map +1 -1
  52. package/dist/v2/mocks/plural/bundle.js +1 -1
  53. package/dist/v2/mocks/plural/bundle.test.js +6 -6
  54. package/dist/v2/shim.d.ts +12 -0
  55. package/dist/v2/shim.d.ts.map +1 -0
  56. package/dist/v2/shim.js +151 -0
  57. package/dist/v2/shim.test.d.ts +2 -0
  58. package/dist/v2/shim.test.d.ts.map +1 -0
  59. package/dist/v2/shim.test.js +49 -0
  60. package/dist/v2/stubQueryApi.d.ts +9 -0
  61. package/dist/v2/stubQueryApi.d.ts.map +1 -0
  62. package/dist/v2/stubQueryApi.js +38 -0
  63. package/dist/v2/types.d.ts +110 -0
  64. package/dist/v2/types.d.ts.map +1 -1
  65. package/dist/v2/types.js +9 -0
  66. package/package.json +6 -5
  67. package/src/api.ts +2 -13
  68. package/src/createNewProject.test.ts +1 -4
  69. package/src/loadProject.test.ts +6 -2
  70. package/src/loadProject.ts +86 -45
  71. package/src/persistence/batchedIO.test.ts +63 -0
  72. package/src/persistence/batchedIO.ts +64 -0
  73. package/src/persistence/filelock/acquireFileLock.ts +5 -2
  74. package/src/persistence/filelock/releaseLock.ts +2 -1
  75. package/src/persistence/store.test.ts +102 -0
  76. package/src/persistence/store.ts +119 -0
  77. package/src/persistence/storeApi.ts +19 -0
  78. package/src/reactivity/solid.test.ts +1 -8
  79. package/src/resolve-modules/plugins/resolvePlugins.ts +4 -13
  80. package/src/test-utilities/sleep.ts +11 -0
  81. package/src/v2/{createMessageBundle.test.ts → helper.test.ts} +1 -1
  82. package/src/v2/helper.ts +98 -0
  83. package/src/v2/index.ts +2 -0
  84. package/src/v2/mocks/index.ts +2 -0
  85. package/src/v2/mocks/multipleMatcher/bundle.test.ts +11 -0
  86. package/src/v2/mocks/multipleMatcher/bundle.ts +196 -0
  87. package/src/v2/mocks/plural/bundle.test.ts +6 -6
  88. package/src/v2/mocks/plural/bundle.ts +1 -1
  89. package/src/v2/shim.test.ts +56 -0
  90. package/src/v2/shim.ts +173 -0
  91. package/src/v2/stubQueryApi.ts +43 -0
  92. package/src/v2/types.ts +17 -0
  93. package/dist/persistence/plugin.d.ts +0 -31
  94. package/dist/persistence/plugin.d.ts.map +0 -1
  95. package/dist/persistence/plugin.js +0 -42
  96. package/dist/persistence/plugin.test.d.ts +0 -2
  97. package/dist/persistence/plugin.test.d.ts.map +0 -1
  98. package/dist/persistence/plugin.test.js +0 -49
  99. package/dist/v2/createMessageBundle.d.ts +0 -25
  100. package/dist/v2/createMessageBundle.d.ts.map +0 -1
  101. package/dist/v2/createMessageBundle.js +0 -36
  102. package/dist/v2/createMessageBundle.test.d.ts +0 -2
  103. package/dist/v2/createMessageBundle.test.d.ts.map +0 -1
  104. package/src/persistence/plugin.test.ts +0 -60
  105. package/src/persistence/plugin.ts +0 -56
  106. package/src/v2/createMessageBundle.ts +0 -43
@@ -1,42 +0,0 @@
1
- import { getDirname } from "@lix-js/fs";
2
- import { normalizeMessage } from "../storage/helper.js";
3
- import _debug from "debug";
4
- const debug = _debug("sdk:persistence");
5
- export const pluginId = "plugin.sdk.persistence";
6
- export async function loadMessages(args) {
7
- let result = [];
8
- const pathPattern = args.settings[pluginId]?.pathPattern;
9
- debug("loadMessages", pathPattern);
10
- try {
11
- const file = await args.nodeishFs.readFile(pathPattern, { encoding: "utf-8" });
12
- result = JSON.parse(file);
13
- }
14
- catch (error) {
15
- if (error?.code !== "ENOENT") {
16
- debug("loadMessages", error);
17
- throw error;
18
- }
19
- }
20
- return result;
21
- }
22
- export async function saveMessages(args) {
23
- const pathPattern = args.settings[pluginId]?.pathPattern;
24
- debug("saveMessages", pathPattern);
25
- try {
26
- await createDirectoryIfNotExits(getDirname(pathPattern), args.nodeishFs);
27
- await args.nodeishFs.writeFile(pathPattern,
28
- // 2 spaces indentation
29
- JSON.stringify(args.messages.map(normalizeMessage), undefined, 2));
30
- }
31
- catch (error) {
32
- debug("saveMessages", error);
33
- }
34
- }
35
- async function createDirectoryIfNotExits(path, nodeishFs) {
36
- try {
37
- await nodeishFs.mkdir(path, { recursive: true });
38
- }
39
- catch {
40
- // assume that the directory already exists
41
- }
42
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=plugin.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.test.d.ts","sourceRoot":"","sources":["../../src/persistence/plugin.test.ts"],"names":[],"mappings":""}
@@ -1,49 +0,0 @@
1
- import { test, expect } from "vitest";
2
- import { createMessage, createNodeishMemoryFs } from "../test-utilities/index.js";
3
- import { normalizeMessage } from "../storage/helper.js";
4
- import { pluginId } from "./plugin.js";
5
- const mockMessages = [
6
- createMessage("first_message", {
7
- en: "If this fails I will be sad",
8
- }),
9
- createMessage("second_message", {
10
- en: "Let's see if this works",
11
- de: "Mal sehen ob das funktioniert",
12
- }),
13
- ];
14
- // the test ensures:
15
- // - messages can be loaded
16
- // - messages can be saved
17
- // - after loading and saving messages, the state is the same as before (roundtrip)
18
- test("roundtrip (saving/loading messages)", async () => {
19
- const { loadMessages, saveMessages } = await import("./plugin.js");
20
- const fs = createNodeishMemoryFs();
21
- const projectDir = "/test/project.inlang";
22
- const pathPattern = projectDir + "/messages.json";
23
- const persistedMessages = JSON.stringify(mockMessages.map(normalizeMessage), undefined, 2);
24
- const settings = {
25
- sourceLanguageTag: "en",
26
- languageTags: ["en", "de"],
27
- modules: [],
28
- [pluginId]: { pathPattern },
29
- };
30
- await fs.mkdir(projectDir, { recursive: true });
31
- await fs.writeFile(pathPattern, persistedMessages);
32
- const firstMessageLoad = await loadMessages({
33
- settings,
34
- nodeishFs: fs,
35
- });
36
- expect(firstMessageLoad).toStrictEqual(mockMessages);
37
- await saveMessages({
38
- settings,
39
- nodeishFs: fs,
40
- messages: firstMessageLoad,
41
- });
42
- const afterRoundtrip = await fs.readFile(pathPattern, { encoding: "utf-8" });
43
- expect(afterRoundtrip).toStrictEqual(persistedMessages);
44
- const messagesAfterRoundtrip = await loadMessages({
45
- settings,
46
- nodeishFs: fs,
47
- });
48
- expect(messagesAfterRoundtrip).toStrictEqual(firstMessageLoad);
49
- });
@@ -1,25 +0,0 @@
1
- import { LanguageTag, MessageBundle, Message } from "./types.js";
2
- /**
3
- * create v2 MessageBundle
4
- * @example createMessageBundle({
5
- * id: "greeting",
6
- * messages: [
7
- * createMessage({locale: "en", text: "Hello world!"})
8
- * createMessage({locale: "de", text: "Hallo Welt!"})
9
- * ]
10
- * })
11
- */
12
- export declare function createMessageBundle(args: {
13
- id: string;
14
- messages: Message[];
15
- alias?: MessageBundle["alias"];
16
- }): MessageBundle;
17
- /**
18
- * create v2 Messsage AST with text-only pattern
19
- * @example createMessage({locale: "en", text: "Hello world"})
20
- */
21
- export declare function createMessage(args: {
22
- locale: LanguageTag;
23
- text: string;
24
- }): Message;
25
- //# sourceMappingURL=createMessageBundle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createMessageBundle.d.ts","sourceRoot":"","sources":["../../src/v2/createMessageBundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAQ,MAAM,YAAY,CAAA;AAEtE;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACzC,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;CAC9B,GAAG,aAAa,CAMhB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAOlF"}
@@ -1,36 +0,0 @@
1
- import { LanguageTag, MessageBundle, Message, Text } from "./types.js";
2
- /**
3
- * create v2 MessageBundle
4
- * @example createMessageBundle({
5
- * id: "greeting",
6
- * messages: [
7
- * createMessage({locale: "en", text: "Hello world!"})
8
- * createMessage({locale: "de", text: "Hallo Welt!"})
9
- * ]
10
- * })
11
- */
12
- export function createMessageBundle(args) {
13
- return {
14
- id: args.id,
15
- alias: args.alias ?? {},
16
- messages: args.messages,
17
- };
18
- }
19
- /**
20
- * create v2 Messsage AST with text-only pattern
21
- * @example createMessage({locale: "en", text: "Hello world"})
22
- */
23
- export function createMessage(args) {
24
- return {
25
- locale: args.locale,
26
- declarations: [],
27
- selectors: [],
28
- variants: [{ match: [], pattern: [toTextElement(args.text ?? "")] }],
29
- };
30
- }
31
- function toTextElement(text) {
32
- return {
33
- type: "text",
34
- value: text,
35
- };
36
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=createMessageBundle.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createMessageBundle.test.d.ts","sourceRoot":"","sources":["../../src/v2/createMessageBundle.test.ts"],"names":[],"mappings":""}
@@ -1,60 +0,0 @@
1
- import { test, expect } from "vitest"
2
- import { createMessage, createNodeishMemoryFs } from "../test-utilities/index.js"
3
- import { normalizeMessage } from "../storage/helper.js"
4
- import { pluginId } from "./plugin.js"
5
-
6
- const mockMessages = [
7
- createMessage("first_message", {
8
- en: "If this fails I will be sad",
9
- }),
10
- createMessage("second_message", {
11
- en: "Let's see if this works",
12
- de: "Mal sehen ob das funktioniert",
13
- }),
14
- ]
15
-
16
- // the test ensures:
17
- // - messages can be loaded
18
- // - messages can be saved
19
- // - after loading and saving messages, the state is the same as before (roundtrip)
20
- test("roundtrip (saving/loading messages)", async () => {
21
- const { loadMessages, saveMessages } = await import("./plugin.js")
22
- const fs = createNodeishMemoryFs()
23
- const projectDir = "/test/project.inlang"
24
- const pathPattern = projectDir + "/messages.json"
25
- const persistedMessages = JSON.stringify(mockMessages.map(normalizeMessage), undefined, 2)
26
-
27
- const settings = {
28
- sourceLanguageTag: "en",
29
- languageTags: ["en", "de"],
30
- modules: [],
31
- [pluginId]: { pathPattern },
32
- }
33
-
34
- await fs.mkdir(projectDir, { recursive: true })
35
- await fs.writeFile(pathPattern, persistedMessages)
36
-
37
- const firstMessageLoad = await loadMessages({
38
- settings,
39
- nodeishFs: fs,
40
- })
41
-
42
- expect(firstMessageLoad).toStrictEqual(mockMessages)
43
-
44
- await saveMessages({
45
- settings,
46
- nodeishFs: fs,
47
- messages: firstMessageLoad,
48
- })
49
-
50
- const afterRoundtrip = await fs.readFile(pathPattern, { encoding: "utf-8" })
51
-
52
- expect(afterRoundtrip).toStrictEqual(persistedMessages)
53
-
54
- const messagesAfterRoundtrip = await loadMessages({
55
- settings,
56
- nodeishFs: fs,
57
- })
58
-
59
- expect(messagesAfterRoundtrip).toStrictEqual(firstMessageLoad)
60
- })
@@ -1,56 +0,0 @@
1
- import type { ProjectSettings, Message } from "@inlang/sdk"
2
- import { getDirname, type NodeishFilesystem } from "@lix-js/fs"
3
- import { normalizeMessage } from "../storage/helper.js"
4
-
5
- import _debug from "debug"
6
- const debug = _debug("sdk:persistence")
7
-
8
- export const pluginId = "plugin.sdk.persistence"
9
-
10
- export async function loadMessages(args: {
11
- settings: ProjectSettings
12
- nodeishFs: NodeishFilesystem
13
- }) {
14
- let result: Message[] = []
15
- const pathPattern = args.settings[pluginId]?.pathPattern as string
16
-
17
- debug("loadMessages", pathPattern)
18
- try {
19
- const file = await args.nodeishFs.readFile(pathPattern, { encoding: "utf-8" })
20
- result = JSON.parse(file)
21
- } catch (error) {
22
- if ((error as any)?.code !== "ENOENT") {
23
- debug("loadMessages", error)
24
- throw error
25
- }
26
- }
27
- return result
28
- }
29
-
30
- export async function saveMessages(args: {
31
- settings: ProjectSettings
32
- nodeishFs: NodeishFilesystem
33
- messages: Message[]
34
- }) {
35
- const pathPattern = args.settings[pluginId]?.pathPattern as string
36
-
37
- debug("saveMessages", pathPattern)
38
- try {
39
- await createDirectoryIfNotExits(getDirname(pathPattern), args.nodeishFs)
40
- await args.nodeishFs.writeFile(
41
- pathPattern,
42
- // 2 spaces indentation
43
- JSON.stringify(args.messages.map(normalizeMessage), undefined, 2)
44
- )
45
- } catch (error) {
46
- debug("saveMessages", error)
47
- }
48
- }
49
-
50
- async function createDirectoryIfNotExits(path: string, nodeishFs: NodeishFilesystem) {
51
- try {
52
- await nodeishFs.mkdir(path, { recursive: true })
53
- } catch {
54
- // assume that the directory already exists
55
- }
56
- }
@@ -1,43 +0,0 @@
1
- import { LanguageTag, MessageBundle, Message, Text } from "./types.js"
2
-
3
- /**
4
- * create v2 MessageBundle
5
- * @example createMessageBundle({
6
- * id: "greeting",
7
- * messages: [
8
- * createMessage({locale: "en", text: "Hello world!"})
9
- * createMessage({locale: "de", text: "Hallo Welt!"})
10
- * ]
11
- * })
12
- */
13
- export function createMessageBundle(args: {
14
- id: string
15
- messages: Message[]
16
- alias?: MessageBundle["alias"]
17
- }): MessageBundle {
18
- return {
19
- id: args.id,
20
- alias: args.alias ?? {},
21
- messages: args.messages,
22
- }
23
- }
24
-
25
- /**
26
- * create v2 Messsage AST with text-only pattern
27
- * @example createMessage({locale: "en", text: "Hello world"})
28
- */
29
- export function createMessage(args: { locale: LanguageTag; text: string }): Message {
30
- return {
31
- locale: args.locale,
32
- declarations: [],
33
- selectors: [],
34
- variants: [{ match: [], pattern: [toTextElement(args.text ?? "")] }],
35
- }
36
- }
37
-
38
- function toTextElement(text: string): Text {
39
- return {
40
- type: "text",
41
- value: text,
42
- }
43
- }