@inlang/sdk 0.34.3 → 0.34.4
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.
- package/LICENSE +201 -0
- package/dist/adapter/solidAdapter.test.js +1 -1
- package/dist/createMessagesQuery.d.ts +14 -2
- package/dist/createMessagesQuery.d.ts.map +1 -1
- package/dist/createMessagesQuery.js +338 -6
- package/dist/createMessagesQuery.test.js +133 -88
- package/dist/createNodeishFsWithWatcher.d.ts +1 -0
- package/dist/createNodeishFsWithWatcher.d.ts.map +1 -1
- package/dist/createNodeishFsWithWatcher.js +2 -2
- package/dist/createNodeishFsWithWatcher.test.js +8 -0
- package/dist/loadProject.d.ts.map +1 -1
- package/dist/loadProject.js +21 -487
- package/dist/persistence/filelock/acquireFileLock.d.ts +3 -0
- package/dist/persistence/filelock/acquireFileLock.d.ts.map +1 -0
- package/dist/persistence/filelock/acquireFileLock.js +109 -0
- package/dist/persistence/filelock/releaseLock.d.ts +3 -0
- package/dist/persistence/filelock/releaseLock.d.ts.map +1 -0
- package/dist/persistence/filelock/releaseLock.js +23 -0
- package/package.json +5 -5
- package/src/adapter/solidAdapter.test.ts +1 -1
- package/src/createMessagesQuery.test.ts +147 -109
- package/src/createMessagesQuery.ts +477 -8
- package/src/createNodeishFsWithWatcher.test.ts +13 -0
- package/src/createNodeishFsWithWatcher.ts +2 -2
- package/src/loadProject.ts +20 -666
- package/src/persistence/filelock/acquireFileLock.ts +124 -0
- package/src/persistence/filelock/releaseLock.ts +28 -0
|
@@ -2,20 +2,72 @@
|
|
|
2
2
|
import { describe, it, expect } from "vitest";
|
|
3
3
|
import { createMessagesQuery } from "./createMessagesQuery.js";
|
|
4
4
|
import { createEffect, createRoot, createSignal } from "./reactivity/solid.js";
|
|
5
|
+
import { Message } from "@inlang/message";
|
|
5
6
|
import { createMessage } from "./test-utilities/createMessage.js";
|
|
7
|
+
import { createNodeishMemoryFs } from "@lix-js/fs";
|
|
6
8
|
const createChangeListener = async (cb) => createEffect(cb);
|
|
7
9
|
const nextTick = () => new Promise((resolve) => setTimeout(resolve, 0));
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
11
|
+
const awaitableCreateMessageQuery = async (_messages) => {
|
|
12
|
+
const fs = createNodeishMemoryFs();
|
|
13
|
+
const settings = {
|
|
14
|
+
sourceLanguageTag: "en",
|
|
15
|
+
languageTags: ["en"],
|
|
16
|
+
modules: ["plugin.js", "lintRule.js"],
|
|
17
|
+
messageLintRuleLevels: {
|
|
18
|
+
"messageLintRule.project.missingTranslation": "error",
|
|
19
|
+
},
|
|
20
|
+
"plugin.project.i18next": {
|
|
21
|
+
pathPattern: "./examples/example01/{languageTag}.json",
|
|
22
|
+
variableReferencePattern: ["{", "}"],
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
let messages = _messages();
|
|
26
|
+
const resolvedModules = {
|
|
27
|
+
meta: [],
|
|
28
|
+
plugins: [],
|
|
29
|
+
messageLintRules: [],
|
|
30
|
+
resolvedPluginApi: {
|
|
31
|
+
loadMessages: (() => {
|
|
32
|
+
return messages;
|
|
33
|
+
}),
|
|
34
|
+
saveMessages: ((newMessages) => {
|
|
35
|
+
messages = newMessages;
|
|
36
|
+
}),
|
|
37
|
+
customApi: {},
|
|
38
|
+
},
|
|
39
|
+
errors: [],
|
|
40
|
+
};
|
|
41
|
+
return new Promise((res, rej) => {
|
|
42
|
+
const query = createMessagesQuery({
|
|
43
|
+
projectPath: "",
|
|
44
|
+
nodeishFs: fs,
|
|
45
|
+
settings: () => settings,
|
|
46
|
+
resolvedModules: () => resolvedModules,
|
|
47
|
+
onInitialMessageLoadResult: (error) => {
|
|
48
|
+
if (error) {
|
|
49
|
+
rej(error);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
res(query);
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
onLoadMessageResult: () => { },
|
|
56
|
+
onSaveMessageResult: () => { },
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
describe("create", async () => {
|
|
61
|
+
it("should create a message", async () => {
|
|
62
|
+
const query = await awaitableCreateMessageQuery(() => []);
|
|
11
63
|
expect(query.get({ where: { id: "first-message" } })).toBeUndefined();
|
|
12
64
|
const mockMessage = createMessage("first-message", { en: "Hello World" });
|
|
13
65
|
const created = query.create({ data: mockMessage });
|
|
14
66
|
expect(query.get({ where: { id: "first-message" } })).toEqual(mockMessage);
|
|
15
67
|
expect(created).toBe(true);
|
|
16
68
|
});
|
|
17
|
-
it("query.getByDefaultAlias should return a message with a default alias", () => {
|
|
18
|
-
const query =
|
|
69
|
+
it("query.getByDefaultAlias should return a message with a default alias", async () => {
|
|
70
|
+
const query = await awaitableCreateMessageQuery(() => []);
|
|
19
71
|
expect(query.get({ where: { id: "first-message" } })).toBeUndefined();
|
|
20
72
|
const mockMessage = createMessage("first-message", { en: "Hello World" });
|
|
21
73
|
mockMessage.alias = { default: "first-message-alias" };
|
|
@@ -24,8 +76,10 @@ describe("create", () => {
|
|
|
24
76
|
expect(query.getByDefaultAlias("first-message-alias")).toEqual(mockMessage);
|
|
25
77
|
expect(created).toBe(true);
|
|
26
78
|
});
|
|
27
|
-
it("should return false if message with id already exists", () => {
|
|
28
|
-
const query =
|
|
79
|
+
it("should return false if message with id already exists", async () => {
|
|
80
|
+
const query = await awaitableCreateMessageQuery(() => [
|
|
81
|
+
createMessage("first-message", { en: "Hello World" }),
|
|
82
|
+
]);
|
|
29
83
|
expect(query.get({ where: { id: "first-message" } })).toBeDefined();
|
|
30
84
|
const mockMessage = createMessage("first-message", { en: "Some Text" });
|
|
31
85
|
query.create({ data: mockMessage });
|
|
@@ -33,21 +87,30 @@ describe("create", () => {
|
|
|
33
87
|
expect(created).toBe(false);
|
|
34
88
|
});
|
|
35
89
|
});
|
|
36
|
-
describe("get", () => {
|
|
37
|
-
it("should return undefined if a message does not exist", () => {
|
|
38
|
-
const query =
|
|
90
|
+
describe("get", async () => {
|
|
91
|
+
it("should return undefined if a message does not exist", async () => {
|
|
92
|
+
const query = await awaitableCreateMessageQuery(() => [
|
|
93
|
+
createMessage("first-message", { en: "Hello World" }),
|
|
94
|
+
]);
|
|
39
95
|
const message = query.get({ where: { id: "none-existent-message" } });
|
|
40
96
|
expect(message).toBeUndefined();
|
|
41
97
|
});
|
|
42
|
-
it("should return an object, not an array", () => {
|
|
43
|
-
const query =
|
|
98
|
+
it("should return an object, not an array", async () => {
|
|
99
|
+
const query = await awaitableCreateMessageQuery(() => [
|
|
100
|
+
createMessage("first-message", { en: "Hello World" }),
|
|
101
|
+
]);
|
|
102
|
+
expect(query.get({ where: { id: "first-message" } })).toBeDefined();
|
|
103
|
+
const mockMessageInit = createMessage("first-message", { en: "Hello World" });
|
|
104
|
+
query.create({ data: mockMessageInit });
|
|
44
105
|
const message = query.get({ where: { id: "first-message" } });
|
|
45
106
|
expect(message).toBeDefined();
|
|
46
107
|
expect(Array.isArray(message)).toBe(false);
|
|
47
108
|
});
|
|
48
109
|
// todo: improve the readonly type
|
|
49
|
-
it.skip("mutating the returned value should not affect subsequent return values", () => {
|
|
50
|
-
const query =
|
|
110
|
+
it.skip("mutating the returned value should not affect subsequent return values", async () => {
|
|
111
|
+
const query = await awaitableCreateMessageQuery(() => [
|
|
112
|
+
createMessage("first-message", { en: "Hello World" }),
|
|
113
|
+
]);
|
|
51
114
|
const message1 = query.get({ where: { id: "first-message" } });
|
|
52
115
|
message1.variants.find((v) => v.languageTag === "en").pattern[0].value =
|
|
53
116
|
"Hello World 2";
|
|
@@ -56,14 +119,14 @@ describe("get", () => {
|
|
|
56
119
|
expect(message2.variants.find((v) => v.languageTag === "en").pattern[0].value).toBe("Hello World");
|
|
57
120
|
});
|
|
58
121
|
});
|
|
59
|
-
describe("getAll", () => {
|
|
60
|
-
it("should return an empty array if no messages exist", () => {
|
|
61
|
-
const query =
|
|
122
|
+
describe("getAll", async () => {
|
|
123
|
+
it("should return an empty array if no messages exist", async () => {
|
|
124
|
+
const query = await awaitableCreateMessageQuery(() => []);
|
|
62
125
|
const messages = query.getAll();
|
|
63
126
|
expect(Object.values(messages)).toEqual([]);
|
|
64
127
|
});
|
|
65
|
-
it("should return all message objects", () => {
|
|
66
|
-
const query =
|
|
128
|
+
it("should return all message objects", async () => {
|
|
129
|
+
const query = await awaitableCreateMessageQuery(() => []);
|
|
67
130
|
const mockMessage1 = createMessage("first-message", { en: "Hello World" });
|
|
68
131
|
const mockMessage2 = createMessage("second-message", { en: "Hello World 2" });
|
|
69
132
|
query.create({ data: mockMessage1 });
|
|
@@ -72,8 +135,10 @@ describe("getAll", () => {
|
|
|
72
135
|
expect(Object.values(messages)).toEqual([mockMessage1, mockMessage2]);
|
|
73
136
|
});
|
|
74
137
|
// todo: improve the readonly type
|
|
75
|
-
it.skip("mutating the returned value should not affect subsequent return values", () => {
|
|
76
|
-
const query =
|
|
138
|
+
it.skip("mutating the returned value should not affect subsequent return values", async () => {
|
|
139
|
+
const query = await awaitableCreateMessageQuery(() => [
|
|
140
|
+
createMessage("first-message", { en: "Hello World" }),
|
|
141
|
+
]);
|
|
77
142
|
const messages1 = query.getAll();
|
|
78
143
|
Object.values(messages1)[0].variants.find((v) => v.languageTag === "en")
|
|
79
144
|
.pattern[0].value = "Hello World 2";
|
|
@@ -81,34 +146,41 @@ describe("getAll", () => {
|
|
|
81
146
|
.pattern[0].value).toBe("Hello World");
|
|
82
147
|
});
|
|
83
148
|
});
|
|
84
|
-
describe("update", () => {
|
|
85
|
-
it("should update a message", () => {
|
|
86
|
-
const query =
|
|
149
|
+
describe("update", async () => {
|
|
150
|
+
it("should update a message", async () => {
|
|
151
|
+
const query = await awaitableCreateMessageQuery(() => [
|
|
152
|
+
createMessage("first-message", { en: "Hello World" }),
|
|
153
|
+
]);
|
|
87
154
|
expect(query.get({ where: { id: "first-message" } })).toBeDefined();
|
|
88
155
|
const mockMessage = createMessage("first-message", { en: "Hello World 2" });
|
|
89
156
|
const updated = query.update({ where: { id: "first-message" }, data: mockMessage });
|
|
90
157
|
expect(query.get({ where: { id: "first-message" } })).toEqual(mockMessage);
|
|
91
158
|
expect(updated).toBe(true);
|
|
92
159
|
});
|
|
93
|
-
it("should return false if message with id does not exist exists", () => {
|
|
94
|
-
const query =
|
|
160
|
+
it("should return false if message with id does not exist exists", async () => {
|
|
161
|
+
const query = await awaitableCreateMessageQuery(() => []);
|
|
95
162
|
expect(query.get({ where: { id: "first-message" } })).toBeUndefined();
|
|
96
163
|
const mockMessage = createMessage("first-message", { en: "Hello World" });
|
|
97
164
|
const updated = query.update({ where: { id: "first-message" }, data: mockMessage });
|
|
98
165
|
expect(updated).toBe(false);
|
|
99
166
|
});
|
|
100
167
|
});
|
|
101
|
-
describe("upsert", () => {
|
|
102
|
-
it("should create a message if not present yet", () => {
|
|
103
|
-
const query =
|
|
168
|
+
describe("upsert", async () => {
|
|
169
|
+
it("should create a message if not present yet", async () => {
|
|
170
|
+
const query = await awaitableCreateMessageQuery(() => []);
|
|
104
171
|
expect(query.get({ where: { id: "first-message" } })).toBeUndefined();
|
|
105
172
|
const mockMessage = createMessage("first-message", { en: "Hello World" });
|
|
106
173
|
const upserted = query.upsert({ where: { id: "first-message" }, data: mockMessage });
|
|
107
174
|
expect(query.get({ where: { id: "first-message" } })).toEqual(mockMessage);
|
|
108
175
|
expect(upserted).toBe(true);
|
|
109
176
|
});
|
|
110
|
-
it("should update message if id already exists", () => {
|
|
111
|
-
const query =
|
|
177
|
+
it("should update message if id already exists", async () => {
|
|
178
|
+
const query = await awaitableCreateMessageQuery(() => [
|
|
179
|
+
createMessage("first-message", { en: "Hello World" }),
|
|
180
|
+
]);
|
|
181
|
+
expect(query.get({ where: { id: "first-message" } })).toBeDefined();
|
|
182
|
+
const mockMessageInit = createMessage("first-message", { en: "Hello World" });
|
|
183
|
+
query.create({ data: mockMessageInit });
|
|
112
184
|
expect(query.get({ where: { id: "first-message" } })).toBeDefined();
|
|
113
185
|
const mockMessage = createMessage("first-message", { en: "Hello World 2" });
|
|
114
186
|
const upserted = query.upsert({ where: { id: "first-message" }, data: mockMessage });
|
|
@@ -116,26 +188,28 @@ describe("upsert", () => {
|
|
|
116
188
|
expect(upserted).toBe(true);
|
|
117
189
|
});
|
|
118
190
|
});
|
|
119
|
-
describe("delete", () => {
|
|
120
|
-
it("should delete a message", () => {
|
|
121
|
-
const query =
|
|
191
|
+
describe("delete", async () => {
|
|
192
|
+
it("should delete a message", async () => {
|
|
193
|
+
const query = await awaitableCreateMessageQuery(() => [
|
|
194
|
+
createMessage("first-message", { en: "Hello World" }),
|
|
195
|
+
]);
|
|
122
196
|
expect(query.get({ where: { id: "first-message" } })).toBeDefined();
|
|
123
197
|
const deleted = query.delete({ where: { id: "first-message" } });
|
|
124
198
|
expect(query.get({ where: { id: "first-message" } })).toBeUndefined();
|
|
125
199
|
expect(deleted).toBe(true);
|
|
126
200
|
});
|
|
127
|
-
it("should return false if message with id does not exist", () => {
|
|
128
|
-
const query =
|
|
201
|
+
it("should return false if message with id does not exist", async () => {
|
|
202
|
+
const query = await awaitableCreateMessageQuery(() => []);
|
|
129
203
|
expect(query.get({ where: { id: "first-message" } })).toBeUndefined();
|
|
130
204
|
const deleted = query.delete({ where: { id: "first-message" } });
|
|
131
205
|
expect(deleted).toBe(false);
|
|
132
206
|
});
|
|
133
207
|
});
|
|
134
|
-
describe("reactivity", () => {
|
|
135
|
-
describe("get", () => {
|
|
208
|
+
describe("reactivity", async () => {
|
|
209
|
+
describe("get", async () => {
|
|
136
210
|
it("should react to `create`", async () => {
|
|
137
211
|
await createRoot(async () => {
|
|
138
|
-
const query =
|
|
212
|
+
const query = await awaitableCreateMessageQuery(() => []);
|
|
139
213
|
// eslint-disable-next-line unicorn/no-null
|
|
140
214
|
let message = null;
|
|
141
215
|
await createChangeListener(() => (message = query.get({ where: { id: "1" } })));
|
|
@@ -149,7 +223,9 @@ describe("reactivity", () => {
|
|
|
149
223
|
});
|
|
150
224
|
it("should react to `update`", async () => {
|
|
151
225
|
await createRoot(async () => {
|
|
152
|
-
const query =
|
|
226
|
+
const query = await awaitableCreateMessageQuery(() => [
|
|
227
|
+
createMessage("1", { en: "before" }),
|
|
228
|
+
]);
|
|
153
229
|
let message;
|
|
154
230
|
await createChangeListener(() => (message = query.get({ where: { id: "1" } })));
|
|
155
231
|
expect(message).toBeDefined();
|
|
@@ -162,7 +238,7 @@ describe("reactivity", () => {
|
|
|
162
238
|
});
|
|
163
239
|
it("should react to `upsert`", async () => {
|
|
164
240
|
await createRoot(async () => {
|
|
165
|
-
const query =
|
|
241
|
+
const query = await awaitableCreateMessageQuery(() => []);
|
|
166
242
|
let message;
|
|
167
243
|
await createChangeListener(() => (message = query.get({ where: { id: "1" } })));
|
|
168
244
|
expect(message).toBeUndefined();
|
|
@@ -177,7 +253,7 @@ describe("reactivity", () => {
|
|
|
177
253
|
});
|
|
178
254
|
it("should react to `delete`", async () => {
|
|
179
255
|
await createRoot(async () => {
|
|
180
|
-
const query =
|
|
256
|
+
const query = await awaitableCreateMessageQuery(() => [createMessage("1", { en: "" })]);
|
|
181
257
|
let message;
|
|
182
258
|
await createChangeListener(() => (message = query.get({ where: { id: "1" } })));
|
|
183
259
|
expect(message).toBeDefined();
|
|
@@ -185,28 +261,12 @@ describe("reactivity", () => {
|
|
|
185
261
|
expect(message).toBeUndefined();
|
|
186
262
|
});
|
|
187
263
|
});
|
|
188
|
-
it("should react to changes to the input `messages`", async () => {
|
|
189
|
-
const [messages, setMessages] = createSignal([]);
|
|
190
|
-
const query = createMessagesQuery(messages);
|
|
191
|
-
// eslint-disable-next-line unicorn/no-null
|
|
192
|
-
let message = null;
|
|
193
|
-
await createChangeListener(() => (message = query.get({ where: { id: "1" } })));
|
|
194
|
-
expect(message).toBeUndefined();
|
|
195
|
-
query.create({ data: createMessage("1", { en: "before" }) });
|
|
196
|
-
expect(message).toBeDefined();
|
|
197
|
-
expect((message.variants.find((variant) => variant.languageTag === "en")?.pattern[0])
|
|
198
|
-
.value).toBe("before");
|
|
199
|
-
setMessages([createMessage("1", { en: "after" })]);
|
|
200
|
-
expect(message).toBeDefined();
|
|
201
|
-
expect((message.variants.find((variant) => variant.languageTag === "en")?.pattern[0])
|
|
202
|
-
.value).toBe("after");
|
|
203
|
-
});
|
|
204
264
|
});
|
|
205
|
-
describe("subscribe", () => {
|
|
206
|
-
describe("get", () => {
|
|
265
|
+
describe("subscribe", async () => {
|
|
266
|
+
describe("get", async () => {
|
|
207
267
|
it("should subscribe to `create`", async () => {
|
|
208
268
|
await createRoot(async () => {
|
|
209
|
-
const query =
|
|
269
|
+
const query = await awaitableCreateMessageQuery(() => []);
|
|
210
270
|
// eslint-disable-next-line unicorn/no-null
|
|
211
271
|
let message = null;
|
|
212
272
|
query.get.subscribe({ where: { id: "1" } }, (v) => {
|
|
@@ -219,10 +279,10 @@ describe("reactivity", () => {
|
|
|
219
279
|
});
|
|
220
280
|
});
|
|
221
281
|
});
|
|
222
|
-
describe("getByDefaultAlias", () => {
|
|
282
|
+
describe("getByDefaultAlias", async () => {
|
|
223
283
|
it("should subscribe to `create`", async () => {
|
|
224
284
|
await createRoot(async () => {
|
|
225
|
-
const query =
|
|
285
|
+
const query = await awaitableCreateMessageQuery(() => []);
|
|
226
286
|
// eslint-disable-next-line unicorn/no-null
|
|
227
287
|
let message = null;
|
|
228
288
|
query.getByDefaultAlias.subscribe("message-alias", (v) => {
|
|
@@ -238,10 +298,10 @@ describe("reactivity", () => {
|
|
|
238
298
|
});
|
|
239
299
|
});
|
|
240
300
|
});
|
|
241
|
-
describe("getAll", () => {
|
|
301
|
+
describe("getAll", async () => {
|
|
242
302
|
it("should react to `create`", async () => {
|
|
243
303
|
await createRoot(async () => {
|
|
244
|
-
const query =
|
|
304
|
+
const query = await awaitableCreateMessageQuery(() => []);
|
|
245
305
|
let messages = undefined;
|
|
246
306
|
await createChangeListener(() => (messages = query.getAll()));
|
|
247
307
|
expect(Object.values(messages)).toHaveLength(0);
|
|
@@ -255,7 +315,9 @@ describe("reactivity", () => {
|
|
|
255
315
|
});
|
|
256
316
|
it("should react to `update`", async () => {
|
|
257
317
|
await createRoot(async () => {
|
|
258
|
-
const query =
|
|
318
|
+
const query = await awaitableCreateMessageQuery(() => [
|
|
319
|
+
createMessage("1", { en: "before" }),
|
|
320
|
+
]);
|
|
259
321
|
let messages = undefined;
|
|
260
322
|
await createChangeListener(() => (messages = query.getAll()));
|
|
261
323
|
expect(Object.values(messages)).toHaveLength(1);
|
|
@@ -269,7 +331,7 @@ describe("reactivity", () => {
|
|
|
269
331
|
});
|
|
270
332
|
it("should react to `upsert`", async () => {
|
|
271
333
|
await createRoot(async () => {
|
|
272
|
-
const query =
|
|
334
|
+
const query = await awaitableCreateMessageQuery(() => []);
|
|
273
335
|
let messages = undefined;
|
|
274
336
|
await createChangeListener(() => (messages = query.getAll()));
|
|
275
337
|
expect(Object.values(messages)).toHaveLength(0);
|
|
@@ -284,7 +346,7 @@ describe("reactivity", () => {
|
|
|
284
346
|
});
|
|
285
347
|
it("should react to `delete`", async () => {
|
|
286
348
|
await createRoot(async () => {
|
|
287
|
-
const query =
|
|
349
|
+
const query = await awaitableCreateMessageQuery(() => [
|
|
288
350
|
createMessage("1", { en: "" }),
|
|
289
351
|
createMessage("2", { en: "" }),
|
|
290
352
|
createMessage("3", { en: "" }),
|
|
@@ -303,26 +365,9 @@ describe("reactivity", () => {
|
|
|
303
365
|
expect(Object.values(messages)).toHaveLength(0);
|
|
304
366
|
});
|
|
305
367
|
});
|
|
306
|
-
it("should react to changes to the input `messages`", async () => {
|
|
307
|
-
const [inputMessages, setMessages] = createSignal([
|
|
308
|
-
createMessage("1", { en: "before" }),
|
|
309
|
-
]);
|
|
310
|
-
const query = createMessagesQuery(inputMessages);
|
|
311
|
-
let messages = undefined;
|
|
312
|
-
await createChangeListener(() => (messages = query.getAll()));
|
|
313
|
-
expect(Object.values(messages)).toHaveLength(1);
|
|
314
|
-
query.create({ data: createMessage("2", { en: "" }) });
|
|
315
|
-
expect(Object.values(messages)).toHaveLength(2);
|
|
316
|
-
expect(Object.values(messages)[0].variants.find((variant) => variant.languageTag === "en")
|
|
317
|
-
.pattern[0].value).toBe("before");
|
|
318
|
-
setMessages([createMessage("1", { en: "after" })]);
|
|
319
|
-
expect(Object.values(messages)).toHaveLength(1);
|
|
320
|
-
expect(Object.values(messages)[0].variants.find((variant) => variant.languageTag === "en")
|
|
321
|
-
.pattern[0].value).toBe("after");
|
|
322
|
-
});
|
|
323
368
|
it("should not mutate messages signal outside the query when using the query", async () => {
|
|
324
369
|
const [inputMessages] = createSignal([createMessage("1", { en: "before" })]);
|
|
325
|
-
const query =
|
|
370
|
+
const query = await awaitableCreateMessageQuery(inputMessages);
|
|
326
371
|
let messages = undefined;
|
|
327
372
|
await createChangeListener(() => (messages = query.getAll()));
|
|
328
373
|
expect(Object.values(messages)).toHaveLength(1);
|
|
@@ -333,8 +378,8 @@ describe("reactivity", () => {
|
|
|
333
378
|
});
|
|
334
379
|
it("instances should not share state", async () => {
|
|
335
380
|
await createRoot(async () => {
|
|
336
|
-
const query1 =
|
|
337
|
-
const query2 =
|
|
381
|
+
const query1 = await awaitableCreateMessageQuery(() => [createMessage("1", { en: "before" })]);
|
|
382
|
+
const query2 = await awaitableCreateMessageQuery(() => []);
|
|
338
383
|
// eslint-disable-next-line unicorn/no-null
|
|
339
384
|
let message1 = null;
|
|
340
385
|
await createChangeListener(() => (message1 = query1.get({ where: { id: "1" } })));
|
|
@@ -8,5 +8,6 @@ import type { NodeishFilesystem } from "@lix-js/fs";
|
|
|
8
8
|
export declare const createNodeishFsWithWatcher: (args: {
|
|
9
9
|
nodeishFs: NodeishFilesystem;
|
|
10
10
|
updateMessages: () => void;
|
|
11
|
+
abortController: AbortController;
|
|
11
12
|
}) => NodeishFilesystem;
|
|
12
13
|
//# 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,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,SAAU;IAChD,SAAS,EAAE,iBAAiB,CAAA;IAC5B,cAAc,EAAE,MAAM,IAAI,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;IAC1B,eAAe,EAAE,eAAe,CAAA;CAChC,KAAG,iBAgDH,CAAA"}
|
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
export const createNodeishFsWithWatcher = (args) => {
|
|
8
8
|
const pathList = [];
|
|
9
9
|
const makeWatcher = (path) => {
|
|
10
|
-
|
|
10
|
+
;
|
|
11
11
|
(async () => {
|
|
12
12
|
try {
|
|
13
13
|
const watcher = args.nodeishFs.watch(path, {
|
|
14
|
-
signal: abortController.signal,
|
|
14
|
+
signal: args.abortController.signal,
|
|
15
15
|
persistent: false,
|
|
16
16
|
});
|
|
17
17
|
if (watcher) {
|
|
@@ -4,11 +4,13 @@ import { createNodeishFsWithWatcher } from "./createNodeishFsWithWatcher.js";
|
|
|
4
4
|
describe("watcher", () => {
|
|
5
5
|
it("should trigger the update function when file changes", async () => {
|
|
6
6
|
let counter = 0;
|
|
7
|
+
const abortController = new AbortController();
|
|
7
8
|
const fs = createNodeishFsWithWatcher({
|
|
8
9
|
nodeishFs: createNodeishMemoryFs(),
|
|
9
10
|
updateMessages: () => {
|
|
10
11
|
counter++;
|
|
11
12
|
},
|
|
13
|
+
abortController,
|
|
12
14
|
});
|
|
13
15
|
// establish watcher
|
|
14
16
|
await fs.writeFile("file.txt", "a");
|
|
@@ -28,5 +30,11 @@ describe("watcher", () => {
|
|
|
28
30
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
29
31
|
//check if update function was called
|
|
30
32
|
expect(counter).toBe(2);
|
|
33
|
+
abortController.abort();
|
|
34
|
+
// change file
|
|
35
|
+
await fs.writeFile("file.txt", "b");
|
|
36
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
37
|
+
//check if update function was called - should not since signalled
|
|
38
|
+
expect(counter).toBe(2);
|
|
31
39
|
});
|
|
32
40
|
});
|
|
@@ -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;
|
|
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;AAkBhF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAahD;;;;;;;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,CAiOzB;AA+GD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAQtE"}
|