@inlang/sdk 0.26.5 → 0.28.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 (60) hide show
  1. package/dist/adapter/solidAdapter.test.js +52 -4
  2. package/dist/api.d.ts +5 -0
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/createMessageLintReportsQuery.d.ts +1 -1
  5. package/dist/createMessageLintReportsQuery.d.ts.map +1 -1
  6. package/dist/createMessageLintReportsQuery.js +30 -22
  7. package/dist/createMessagesQuery.d.ts.map +1 -1
  8. package/dist/createMessagesQuery.js +24 -1
  9. package/dist/createMessagesQuery.test.js +46 -2
  10. package/dist/createNodeishFsWithAbsolutePaths.d.ts +3 -3
  11. package/dist/createNodeishFsWithAbsolutePaths.d.ts.map +1 -1
  12. package/dist/createNodeishFsWithAbsolutePaths.js +9 -1
  13. package/dist/createNodeishFsWithAbsolutePaths.test.js +7 -1
  14. package/dist/createNodeishFsWithWatcher.d.ts +3 -3
  15. package/dist/createNodeishFsWithWatcher.d.ts.map +1 -1
  16. package/dist/createNodeishFsWithWatcher.js +3 -0
  17. package/dist/errors.d.ts +14 -0
  18. package/dist/errors.d.ts.map +1 -1
  19. package/dist/errors.js +12 -0
  20. package/dist/loadProject.d.ts.map +1 -1
  21. package/dist/loadProject.js +474 -39
  22. package/dist/loadProject.test.js +93 -14
  23. package/dist/messages/variant.test.js +3 -0
  24. package/dist/resolve-modules/plugins/resolvePlugins.test.js +4 -2
  25. package/dist/storage/helper.d.ts +5 -0
  26. package/dist/storage/helper.d.ts.map +1 -0
  27. package/dist/storage/helper.js +35 -0
  28. package/dist/storage/human-id/human-readable-id.d.ts +3 -0
  29. package/dist/storage/human-id/human-readable-id.d.ts.map +1 -0
  30. package/dist/storage/human-id/human-readable-id.js +20 -0
  31. package/dist/storage/human-id/words.d.ts +5 -0
  32. package/dist/storage/human-id/words.d.ts.map +1 -0
  33. package/dist/storage/human-id/words.js +1032 -0
  34. package/dist/storage/human-id/words.test.d.ts +2 -0
  35. package/dist/storage/human-id/words.test.d.ts.map +1 -0
  36. package/dist/storage/human-id/words.test.js +25 -0
  37. package/dist/test-utilities/createMessage.d.ts +1 -0
  38. package/dist/test-utilities/createMessage.d.ts.map +1 -1
  39. package/dist/test-utilities/createMessage.js +1 -0
  40. package/dist/test-utilities/createMessage.test.js +70 -55
  41. package/package.json +16 -7
  42. package/src/adapter/solidAdapter.test.ts +76 -4
  43. package/src/api.ts +6 -0
  44. package/src/createMessageLintReportsQuery.ts +47 -35
  45. package/src/createMessagesQuery.test.ts +54 -2
  46. package/src/createMessagesQuery.ts +30 -1
  47. package/src/createNodeishFsWithAbsolutePaths.test.ts +10 -3
  48. package/src/createNodeishFsWithAbsolutePaths.ts +14 -5
  49. package/src/createNodeishFsWithWatcher.ts +6 -3
  50. package/src/errors.ts +20 -0
  51. package/src/loadProject.test.ts +108 -14
  52. package/src/loadProject.ts +657 -60
  53. package/src/messages/variant.test.ts +3 -0
  54. package/src/resolve-modules/plugins/resolvePlugins.test.ts +4 -2
  55. package/src/storage/helper.ts +48 -0
  56. package/src/storage/human-id/human-readable-id.ts +27 -0
  57. package/src/storage/human-id/words.test.ts +27 -0
  58. package/src/storage/human-id/words.ts +1035 -0
  59. package/src/test-utilities/createMessage.test.ts +72 -54
  60. package/src/test-utilities/createMessage.ts +1 -0
@@ -17,6 +17,10 @@ const config = {
17
17
  variableReferencePattern: ["{", "}"],
18
18
  },
19
19
  };
20
+ const configWithAliases = {
21
+ ...config,
22
+ experimental: { aliases: true },
23
+ };
20
24
  const mockPlugin = {
21
25
  id: "plugin.project.i18next",
22
26
  description: { en: "Mock plugin description" },
@@ -28,6 +32,7 @@ const mockPlugin = {
28
32
  const exampleMessages = [
29
33
  {
30
34
  id: "a",
35
+ alias: {},
31
36
  selectors: [],
32
37
  variants: [
33
38
  {
@@ -44,6 +49,7 @@ const exampleMessages = [
44
49
  },
45
50
  {
46
51
  id: "b",
52
+ alias: {},
47
53
  selectors: [],
48
54
  variants: [
49
55
  {
@@ -159,19 +165,19 @@ describe("messages", () => {
159
165
  repo,
160
166
  _import: mockImport,
161
167
  }), { from });
162
- let counter = 0;
168
+ let effectOnMessagesCounter = 0;
163
169
  createEffect(() => {
164
170
  project.query.messages.getAll();
165
- counter += 1;
171
+ effectOnMessagesCounter += 1;
166
172
  });
167
173
  expect(Object.values(project.query.messages.getAll()).length).toBe(2);
168
174
  project.setSettings({ ...project.settings(), languageTags: ["en"] });
169
175
  // TODO: how can we await `setConfig` correctly
170
176
  await new Promise((resolve) => setTimeout(resolve, 510));
171
- expect(counter).toBe(1); // 2 times because effect creation + set
177
+ expect(effectOnMessagesCounter).toBe(1); // 2 times because effect creation + set
172
178
  expect(Object.values(project.query.messages.getAll()).length).toBe(2);
173
179
  });
174
- it("should react to changes in messages", async () => {
180
+ it("should react to message udpate", async () => {
175
181
  const repo = await mockRepo();
176
182
  const fs = repo.nodeishFs;
177
183
  await fs.mkdir("/user/project.inlang.inlang", { recursive: true });
@@ -209,6 +215,48 @@ describe("messages", () => {
209
215
  ],
210
216
  },
211
217
  });
218
+ it("should react to message udpate (with aliases)", async () => {
219
+ const repo = await mockRepo();
220
+ const fs = repo.nodeishFs;
221
+ await fs.mkdir("/user/project.inlang.inlang", { recursive: true });
222
+ await fs.writeFile("/user/project.inlang.inlang/settings.json", JSON.stringify(configWithAliases));
223
+ const project = solidAdapter(await loadProject({
224
+ projectPath: "/user/project.inlang.inlang",
225
+ repo,
226
+ _import: $import,
227
+ }), { from });
228
+ let counter = 0;
229
+ createEffect(() => {
230
+ project.query.messages.getAll();
231
+ counter += 1;
232
+ });
233
+ const messagesBefore = project.query.messages.getAll;
234
+ expect(Object.values(messagesBefore()).length).toBe(2);
235
+ expect((Object.values(messagesBefore())[0]?.variants.find((variant) => variant.languageTag === "en")?.pattern[0]).value).toBe("test");
236
+ project.query.messages.update({
237
+ where: { id: "raw_tapir_pause_grateful" },
238
+ // TODO: use `createMessage` utility
239
+ data: {
240
+ ...exampleMessages[0],
241
+ variants: [
242
+ {
243
+ languageTag: "en",
244
+ match: [],
245
+ pattern: [
246
+ {
247
+ type: "Text",
248
+ value: "test2",
249
+ },
250
+ ],
251
+ },
252
+ ],
253
+ },
254
+ });
255
+ expect(counter).toBe(2); // 2 times because effect creation + set
256
+ const messagesAfter = project.query.messages.getAll;
257
+ expect(Object.values(messagesAfter()).length).toBe(2);
258
+ expect((Object.values(messagesAfter())[0]?.variants.find((variant) => variant.languageTag === "en")?.pattern[0]).value).toBe("test2");
259
+ });
212
260
  expect(counter).toBe(2); // 2 times because effect creation + set
213
261
  const messagesAfter = project.query.messages.getAll;
214
262
  expect(Object.values(messagesAfter()).length).toBe(2);
package/dist/api.d.ts CHANGED
@@ -11,6 +11,7 @@ export type InstalledPlugin = {
11
11
  * The module which the plugin is installed from.
12
12
  */
13
13
  module: string;
14
+ settingsSchema: Plugin["settingsSchema"];
14
15
  };
15
16
  export type InstalledMessageLintRule = {
16
17
  id: MessageLintRule["id"];
@@ -21,6 +22,7 @@ export type InstalledMessageLintRule = {
21
22
  */
22
23
  module: string;
23
24
  level: MessageLintLevel;
25
+ settingsSchema: MessageLintRule["settingsSchema"];
24
26
  };
25
27
  export type InlangProject = {
26
28
  /**
@@ -59,6 +61,9 @@ export type MessageQueryApi = {
59
61
  };
60
62
  }, callback: (message: Message) => void) => void;
61
63
  };
64
+ getByDefaultAlias: ((alias: Message["alias"]["default"]) => Readonly<Message>) & {
65
+ subscribe: (alias: Message["alias"]["default"], callback: (message: Message) => void) => void;
66
+ };
62
67
  includedMessageIds: Subscribable<Message["id"][]>;
63
68
  getAll: Subscribable<Readonly<Message[]>>;
64
69
  update: (args: {
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,5 @@ import type { resolveModules } from "./resolve-modules/index.js";
4
4
  /**
5
5
  * Creates a reactive query API for messages.
6
6
  */
7
- export declare function createMessageLintReportsQuery(messagesQuery: MessageQueryApi, settings: () => ProjectSettings, installedMessageLintRules: () => Array<InstalledMessageLintRule>, resolvedModules: () => Awaited<ReturnType<typeof resolveModules>> | undefined, hasWatcher: boolean): InlangProject["query"]["messageLintReports"];
7
+ export declare function createMessageLintReportsQuery(messagesQuery: MessageQueryApi, settings: () => ProjectSettings, installedMessageLintRules: () => Array<InstalledMessageLintRule>, resolvedModules: () => Awaited<ReturnType<typeof resolveModules>> | undefined): InlangProject["query"]["messageLintReports"];
8
8
  //# sourceMappingURL=createMessageLintReportsQuery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createMessageLintReportsQuery.d.ts","sourceRoot":"","sources":["../src/createMessageLintReportsQuery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,aAAa,EACb,wBAAwB,EAExB,eAAe,EACf,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAOhE;;GAEG;AACH,wBAAgB,6BAA6B,CAC5C,aAAa,EAAE,eAAe,EAC9B,QAAQ,EAAE,MAAM,eAAe,EAC/B,yBAAyB,EAAE,MAAM,KAAK,CAAC,wBAAwB,CAAC,EAChE,eAAe,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,GAAG,SAAS,EAC7E,UAAU,EAAE,OAAO,GACjB,aAAa,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,CA2E9C"}
1
+ {"version":3,"file":"createMessageLintReportsQuery.d.ts","sourceRoot":"","sources":["../src/createMessageLintReportsQuery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,aAAa,EACb,wBAAwB,EAExB,eAAe,EACf,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAMhE;;GAEG;AACH,wBAAgB,6BAA6B,CAC5C,aAAa,EAAE,eAAe,EAC9B,QAAQ,EAAE,MAAM,eAAe,EAC/B,yBAAyB,EAAE,MAAM,KAAK,CAAC,wBAAwB,CAAC,EAChE,eAAe,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,GAAG,SAAS,GAC3E,aAAa,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAyF9C"}
@@ -1,12 +1,11 @@
1
1
  import { createSubscribable } from "./loadProject.js";
2
2
  import { lintSingleMessage } from "./lint/index.js";
3
3
  import { ReactiveMap } from "./reactivity/map.js";
4
- import { debounce } from "throttle-debounce";
5
- import { createEffect } from "./reactivity/solid.js";
4
+ import { createRoot, createEffect } from "./reactivity/solid.js";
6
5
  /**
7
6
  * Creates a reactive query API for messages.
8
7
  */
9
- export function createMessageLintReportsQuery(messagesQuery, settings, installedMessageLintRules, resolvedModules, hasWatcher) {
8
+ export function createMessageLintReportsQuery(messagesQuery, settings, installedMessageLintRules, resolvedModules) {
10
9
  // @ts-expect-error
11
10
  const index = new ReactiveMap();
12
11
  const modules = resolvedModules();
@@ -19,25 +18,23 @@ export function createMessageLintReportsQuery(messagesQuery, settings, installed
19
18
  };
20
19
  };
21
20
  const messages = messagesQuery.getAll();
21
+ const trackedMessages = new Map();
22
22
  createEffect(() => {
23
+ const currentMessageIds = new Set(messagesQuery.includedMessageIds());
24
+ const deletedTrackedMessages = [...trackedMessages].filter((tracked) => !currentMessageIds.has(tracked[0]));
23
25
  if (rulesArray) {
24
- for (const messageId of messagesQuery.includedMessageIds()) {
25
- createEffect(() => {
26
- const message = messagesQuery.get({ where: { id: messageId } });
27
- if (hasWatcher) {
28
- lintSingleMessage({
29
- rules: rulesArray,
30
- settings: settingsObject(),
31
- messages: messages,
32
- message: message,
33
- }).then((report) => {
34
- if (report.errors.length === 0 && index.get(messageId) !== report.data) {
35
- index.set(messageId, report.data);
26
+ for (const messageId of currentMessageIds) {
27
+ if (!trackedMessages.has(messageId)) {
28
+ createRoot((dispose) => {
29
+ createEffect(() => {
30
+ const message = messagesQuery.get({ where: { id: messageId } });
31
+ if (!message) {
32
+ return;
33
+ }
34
+ if (!trackedMessages?.has(messageId)) {
35
+ // initial effect execution - add dispose function
36
+ trackedMessages?.set(messageId, dispose);
36
37
  }
37
- });
38
- }
39
- else {
40
- debounce(500, (message) => {
41
38
  lintSingleMessage({
42
39
  rules: rulesArray,
43
40
  settings: settingsObject(),
@@ -48,9 +45,20 @@ export function createMessageLintReportsQuery(messagesQuery, settings, installed
48
45
  index.set(messageId, report.data);
49
46
  }
50
47
  });
51
- }, { atBegin: false })(message);
52
- }
53
- });
48
+ });
49
+ });
50
+ }
51
+ }
52
+ for (const deletedMessage of deletedTrackedMessages) {
53
+ const deletedMessageId = deletedMessage[0];
54
+ // call dispose to cleanup the effect
55
+ const messageEffectDisposeFunction = trackedMessages.get(deletedMessageId);
56
+ if (messageEffectDisposeFunction) {
57
+ messageEffectDisposeFunction();
58
+ trackedMessages.delete(deletedMessageId);
59
+ // remove lint report result
60
+ index.delete(deletedMessageId);
61
+ }
54
62
  }
55
63
  }
56
64
  });
@@ -1 +1 @@
1
- {"version":3,"file":"createMessagesQuery.d.ts","sourceRoot":"","sources":["../src/createMessagesQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAI9C,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,UAAU,CAAA;AAE9D;;GAEG;AACH,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC,GAC5B,aAAa,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAoDpC"}
1
+ {"version":3,"file":"createMessagesQuery.d.ts","sourceRoot":"","sources":["../src/createMessagesQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAI9C,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,UAAU,CAAA;AAE9D;;GAEG;AACH,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC,GAC5B,aAAa,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAiFpC"}
@@ -7,23 +7,39 @@ import { createSubscribable } from "./loadProject.js";
7
7
  export function createMessagesQuery(messages) {
8
8
  // @ts-expect-error
9
9
  const index = new ReactiveMap();
10
+ // Map default alias to message
11
+ // Assumes that aliases are only created and deleted, not updated
12
+ // TODO #2346 - handle updates to aliases
13
+ // TODO #2346 - refine to hold messageId[], if default alias is not unique
14
+ // @ts-expect-error
15
+ const defaultAliasIndex = new ReactiveMap();
10
16
  createEffect(() => {
11
17
  index.clear();
12
18
  for (const message of structuredClone(messages())) {
13
19
  index.set(message.id, message);
20
+ if ("default" in message.alias) {
21
+ defaultAliasIndex.set(message.alias.default, message);
22
+ }
14
23
  }
15
24
  });
16
25
  const get = (args) => index.get(args.where.id);
26
+ const getByDefaultAlias = (alias) => defaultAliasIndex.get(alias);
17
27
  return {
18
28
  create: ({ data }) => {
19
29
  if (index.has(data.id))
20
30
  return false;
21
31
  index.set(data.id, data);
32
+ if ("default" in data.alias) {
33
+ defaultAliasIndex.set(data.alias.default, data);
34
+ }
22
35
  return true;
23
36
  },
24
37
  get: Object.assign(get, {
25
38
  subscribe: (args, callback) => createSubscribable(() => get(args)).subscribe(callback),
26
39
  }),
40
+ getByDefaultAlias: Object.assign(getByDefaultAlias, {
41
+ subscribe: (alias, callback) => createSubscribable(() => getByDefaultAlias(alias)).subscribe(callback),
42
+ }),
27
43
  includedMessageIds: createSubscribable(() => {
28
44
  return [...index.keys()];
29
45
  }),
@@ -41,6 +57,9 @@ export function createMessagesQuery(messages) {
41
57
  const message = index.get(where.id);
42
58
  if (message === undefined) {
43
59
  index.set(where.id, data);
60
+ if ("default" in data.alias) {
61
+ defaultAliasIndex.set(data.alias.default, data);
62
+ }
44
63
  }
45
64
  else {
46
65
  index.set(where.id, { ...message, ...data });
@@ -48,8 +67,12 @@ export function createMessagesQuery(messages) {
48
67
  return true;
49
68
  },
50
69
  delete: ({ where }) => {
51
- if (!index.has(where.id))
70
+ const message = index.get(where.id);
71
+ if (message === undefined)
52
72
  return false;
73
+ if ("default" in message.alias) {
74
+ defaultAliasIndex.delete(message.alias.default);
75
+ }
53
76
  index.delete(where.id);
54
77
  return true;
55
78
  },
@@ -4,6 +4,7 @@ import { createMessagesQuery } from "./createMessagesQuery.js";
4
4
  import { createEffect, createRoot, createSignal } from "./reactivity/solid.js";
5
5
  import { createMessage } from "./test-utilities/createMessage.js";
6
6
  const createChangeListener = async (cb) => createEffect(cb);
7
+ const nextTick = () => new Promise((resolve) => setTimeout(resolve, 0));
7
8
  describe("create", () => {
8
9
  it("should create a message", () => {
9
10
  const query = createMessagesQuery(() => []);
@@ -13,6 +14,16 @@ describe("create", () => {
13
14
  expect(query.get({ where: { id: "first-message" } })).toEqual(mockMessage);
14
15
  expect(created).toBe(true);
15
16
  });
17
+ it("query.getByDefaultAlias should return a message with a default alias", () => {
18
+ const query = createMessagesQuery(() => []);
19
+ expect(query.get({ where: { id: "first-message" } })).toBeUndefined();
20
+ const mockMessage = createMessage("first-message", { en: "Hello World" });
21
+ mockMessage.alias = { default: "first-message-alias" };
22
+ const created = query.create({ data: mockMessage });
23
+ expect(query.get({ where: { id: "first-message" } })).toEqual(mockMessage);
24
+ expect(query.getByDefaultAlias("first-message-alias")).toEqual(mockMessage);
25
+ expect(created).toBe(true);
26
+ });
16
27
  it("should return false if message with id already exists", () => {
17
28
  const query = createMessagesQuery(() => [createMessage("first-message", { en: "Hello World" })]);
18
29
  expect(query.get({ where: { id: "first-message" } })).toBeDefined();
@@ -191,8 +202,41 @@ describe("reactivity", () => {
191
202
  .value).toBe("after");
192
203
  });
193
204
  });
194
- describe.todo("subscribe", () => {
195
- // TODO: add tests for `subscribe`
205
+ describe("subscribe", () => {
206
+ describe("get", () => {
207
+ it("should subscribe to `create`", async () => {
208
+ await createRoot(async () => {
209
+ const query = createMessagesQuery(() => []);
210
+ // eslint-disable-next-line unicorn/no-null
211
+ let message = null;
212
+ query.get.subscribe({ where: { id: "1" } }, (v) => {
213
+ void (message = v);
214
+ });
215
+ await nextTick();
216
+ expect(message).toBeUndefined();
217
+ query.create({ data: createMessage("1", { en: "before" }) });
218
+ expect(message).toBeDefined();
219
+ });
220
+ });
221
+ });
222
+ describe("getByDefaultAlias", () => {
223
+ it("should subscribe to `create`", async () => {
224
+ await createRoot(async () => {
225
+ const query = createMessagesQuery(() => []);
226
+ // eslint-disable-next-line unicorn/no-null
227
+ let message = null;
228
+ query.getByDefaultAlias.subscribe("message-alias", (v) => {
229
+ void (message = v);
230
+ });
231
+ await nextTick(); // required for effect to run on reactive map
232
+ expect(message).toBeUndefined();
233
+ const mockMessage = createMessage("1", { en: "before" });
234
+ mockMessage.alias = { default: "message-alias" };
235
+ query.create({ data: mockMessage });
236
+ expect(message).toBeDefined();
237
+ });
238
+ });
239
+ });
196
240
  });
197
241
  describe("getAll", () => {
198
242
  it("should react to `create`", async () => {
@@ -1,4 +1,4 @@
1
- import type { NodeishFilesystemSubset } from "@inlang/plugin";
1
+ import { type NodeishFilesystem } from "@lix-js/fs";
2
2
  /**
3
3
  * Wraps the nodeish filesystem subset with a function that intercepts paths
4
4
  * and prepends the base path.
@@ -7,6 +7,6 @@ import type { NodeishFilesystemSubset } from "@inlang/plugin";
7
7
  */
8
8
  export declare const createNodeishFsWithAbsolutePaths: (args: {
9
9
  projectPath: string;
10
- nodeishFs: NodeishFilesystemSubset;
11
- }) => NodeishFilesystemSubset;
10
+ nodeishFs: NodeishFilesystem;
11
+ }) => NodeishFilesystem;
12
12
  //# sourceMappingURL=createNodeishFsWithAbsolutePaths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createNodeishFsWithAbsolutePaths.d.ts","sourceRoot":"","sources":["../src/createNodeishFsWithAbsolutePaths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAI7D;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,SAAU;IACtD,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,uBAAuB,CAAA;CAClC,KAAG,uBA6BH,CAAA"}
1
+ {"version":3,"file":"createNodeishFsWithAbsolutePaths.d.ts","sourceRoot":"","sources":["../src/createNodeishFsWithAbsolutePaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAGlE;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,SAAU;IACtD,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,iBAAiB,CAAA;CAC5B,KAAG,iBAuCH,CAAA"}
@@ -23,8 +23,16 @@ export const createNodeishFsWithAbsolutePaths = (args) => {
23
23
  // @ts-expect-error
24
24
  readFile: (path, options) => args.nodeishFs.readFile(makeAbsolute(path), options),
25
25
  readdir: (path) => args.nodeishFs.readdir(makeAbsolute(path)),
26
- mkdir: (path) => args.nodeishFs.mkdir(makeAbsolute(path)),
26
+ mkdir: (path, options) => args.nodeishFs.mkdir(makeAbsolute(path), options),
27
27
  writeFile: (path, data) => args.nodeishFs.writeFile(makeAbsolute(path), data),
28
+ stat: (path) => args.nodeishFs.stat(makeAbsolute(path)),
29
+ rm: (path) => args.nodeishFs.rm(makeAbsolute(path)),
30
+ rmdir: (path) => args.nodeishFs.rmdir(makeAbsolute(path)),
28
31
  watch: (path, options) => args.nodeishFs.watch(makeAbsolute(path), options),
32
+ // This might be surprising when symlinks were intended to be relative
33
+ symlink: (target, path) => args.nodeishFs.symlink(makeAbsolute(target), makeAbsolute(path)),
34
+ unlink: (path) => args.nodeishFs.unlink(makeAbsolute(path)),
35
+ readlink: (path) => args.nodeishFs.readlink(makeAbsolute(path)),
36
+ lstat: (path) => args.nodeishFs.lstat(makeAbsolute(path)),
29
37
  };
30
38
  };
@@ -19,8 +19,15 @@ it("intercepts paths correctly for readFile", async () => {
19
19
  readFile: vi.fn(),
20
20
  readdir: vi.fn(),
21
21
  mkdir: vi.fn(),
22
+ rmdir: vi.fn(),
22
23
  writeFile: vi.fn(),
23
24
  watch: vi.fn(),
25
+ rm: vi.fn(),
26
+ stat: vi.fn(),
27
+ lstat: vi.fn(),
28
+ symlink: vi.fn(),
29
+ unlink: vi.fn(),
30
+ readlink: vi.fn(),
24
31
  };
25
32
  const interceptedFs = createNodeishFsWithAbsolutePaths({
26
33
  projectPath,
@@ -28,7 +35,6 @@ it("intercepts paths correctly for readFile", async () => {
28
35
  });
29
36
  for (const [path, expectedPath] of filePaths) {
30
37
  for (const fn of Object.keys(mockNodeishFs)) {
31
- // @ts-expect-error
32
38
  await interceptedFs[fn](path);
33
39
  // @ts-expect-error
34
40
  // expect the first argument to be the expectedPath
@@ -1,4 +1,4 @@
1
- import type { NodeishFilesystemSubset } from "@inlang/plugin";
1
+ import type { NodeishFilesystem } from "@lix-js/fs";
2
2
  /**
3
3
  * Wraps the nodeish filesystem subset with a function that intercepts paths
4
4
  * and prepends the base path.
@@ -6,7 +6,7 @@ import type { NodeishFilesystemSubset } from "@inlang/plugin";
6
6
  * The paths are resolved from the `projectPath` argument.
7
7
  */
8
8
  export declare const createNodeishFsWithWatcher: (args: {
9
- nodeishFs: NodeishFilesystemSubset;
9
+ nodeishFs: NodeishFilesystem;
10
10
  updateMessages: () => void;
11
- }) => NodeishFilesystemSubset;
11
+ }) => NodeishFilesystem;
12
12
  //# sourceMappingURL=createNodeishFsWithWatcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createNodeishFsWithWatcher.d.ts","sourceRoot":"","sources":["../src/createNodeishFsWithWatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAE7D;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,SAAU;IAChD,SAAS,EAAE,uBAAuB,CAAA;IAClC,cAAc,EAAE,MAAM,IAAI,CAAA;CAC1B,KAAG,uBA8CH,CAAA"}
1
+ {"version":3,"file":"createNodeishFsWithWatcher.d.ts","sourceRoot":"","sources":["../src/createNodeishFsWithWatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,SAAU;IAChD,SAAS,EAAE,iBAAiB,CAAA;IAC5B,cAAc,EAAE,MAAM,IAAI,CAAA;CAC1B,KAAG,iBAiDH,CAAA"}
@@ -44,9 +44,12 @@ export const createNodeishFsWithWatcher = (args) => {
44
44
  return {
45
45
  // @ts-expect-error
46
46
  readFile: (path, options) => readFileAndExtractPath(path, options),
47
+ rm: args.nodeishFs.rm,
47
48
  readdir: args.nodeishFs.readdir,
48
49
  mkdir: args.nodeishFs.mkdir,
50
+ rmdir: args.nodeishFs.rmdir,
49
51
  writeFile: args.nodeishFs.writeFile,
50
52
  watch: args.nodeishFs.watch,
53
+ stat: args.nodeishFs.stat,
51
54
  };
52
55
  };
package/dist/errors.d.ts CHANGED
@@ -31,4 +31,18 @@ export declare class PluginLoadMessagesError extends Error {
31
31
  cause: ErrorOptions["cause"];
32
32
  });
33
33
  }
34
+ export declare class LoadMessageError extends Error {
35
+ constructor(options: {
36
+ path: string;
37
+ messageId: string;
38
+ cause: ErrorOptions["cause"];
39
+ });
40
+ }
41
+ export declare class SaveMessageError extends Error {
42
+ constructor(options: {
43
+ path: string;
44
+ messageId: string;
45
+ cause: ErrorOptions["cause"];
46
+ });
47
+ }
34
48
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D,qBAAa,0BAA2B,SAAQ,KAAK;gBACxC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE;CAI1D;AAED,qBAAa,2BAA4B,SAAQ,KAAK;gBACzC,OAAO,EAAE;QAAE,MAAM,EAAE,UAAU,EAAE,CAAA;KAAE;CAU7C;AAED,qBAAa,kCAAmC,SAAQ,KAAK;gBAChD,OAAO,EAAE;QAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;CAOnE;AAED,qBAAa,gCAAiC,SAAQ,KAAK;gBAC9C,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;CAIpE;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBACrC,OAAO,EAAE;QAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;KAAE;CAIrD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBACrC,OAAO,EAAE;QAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;KAAE;CAIrD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D,qBAAa,0BAA2B,SAAQ,KAAK;gBACxC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE;CAI1D;AAED,qBAAa,2BAA4B,SAAQ,KAAK;gBACzC,OAAO,EAAE;QAAE,MAAM,EAAE,UAAU,EAAE,CAAA;KAAE;CAU7C;AAED,qBAAa,kCAAmC,SAAQ,KAAK;gBAChD,OAAO,EAAE;QAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;CAOnE;AAED,qBAAa,gCAAiC,SAAQ,KAAK;gBAC9C,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;CAIpE;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBACrC,OAAO,EAAE;QAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;KAAE;CAIrD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBACrC,OAAO,EAAE;QAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;KAAE;CAIrD;AAED,qBAAa,gBAAiB,SAAQ,KAAK;gBAC9B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;KAAE;CAOtF;AAED,qBAAa,gBAAiB,SAAQ,KAAK;gBAC9B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;KAAE;CAOtF"}
package/dist/errors.js CHANGED
@@ -38,3 +38,15 @@ export class PluginLoadMessagesError extends Error {
38
38
  this.name = "PluginLoadMessagesError";
39
39
  }
40
40
  }
41
+ export class LoadMessageError extends Error {
42
+ constructor(options) {
43
+ super(`An error occured when loading message ${options.messageId} from path ${options.path} caused by ${options.cause}.`, options);
44
+ this.name = "LoadMessageError";
45
+ }
46
+ }
47
+ export class SaveMessageError extends Error {
48
+ constructor(options) {
49
+ super(`An error occured when loading message ${options.messageId} from path ${options.path} caused by ${options.cause}.`, options);
50
+ this.name = "SaveMessageError";
51
+ }
52
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"loadProject.d.ts","sourceRoot":"","sources":["../src/loadProject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,aAAa,EAGb,YAAY,EACZ,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,4BAA4B,CAAA;AAuBhF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAMhD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACvC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,cAAc,CAAA;CACxB,GAAG,OAAO,CAAC,aAAa,CAAC,CAgRzB;AAwHD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAQtE"}
1
+ {"version":3,"file":"loadProject.d.ts","sourceRoot":"","sources":["../src/loadProject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,aAAa,EAGb,YAAY,EACZ,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,4BAA4B,CAAA;AAyBhF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAgChD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACvC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,cAAc,CAAA;CACxB,GAAG,OAAO,CAAC,aAAa,CAAC,CAuYzB;AAsHD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAQtE"}