@lix-js/sdk 0.4.1 → 0.4.3
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/README.md +285 -35
- package/dist/database/init-db.test.js +1 -1
- package/dist/database/init-db.test.js.map +1 -1
- package/dist/database/nano-id.d.ts.map +1 -1
- package/dist/database/nano-id.js +24 -1
- package/dist/database/nano-id.js.map +1 -1
- package/dist/database/nano-id.test.js +26 -1
- package/dist/database/nano-id.test.js.map +1 -1
- package/dist/file/validate-file-path.js +1 -1
- package/dist/file/validate-file-path.js.map +1 -1
- package/dist/file-queue/file-handlers.d.ts.map +1 -1
- package/dist/file-queue/file-handlers.js +14 -19
- package/dist/file-queue/file-handlers.js.map +1 -1
- package/dist/services/env-variables/index.js +1 -1
- package/package.json +3 -3
- package/src/database/init-db.test.ts +2 -2
- package/src/database/nano-id.test.ts +28 -1
- package/src/database/nano-id.ts +26 -1
- package/src/file/validate-file-path.ts +1 -1
- package/src/file-queue/file-handlers.ts +8 -13
package/README.md
CHANGED
|
@@ -1,22 +1,293 @@
|
|
|
1
|
+
> [!NOTE]
|
|
2
|
+
> The readme is mirrored from [opral/lix-sdk](https://github.com/opral/lix-sdk). The source code is in the [opral/monorepo](https://github.com/opral/monorepo/tree/main/packages/lix-sdk).
|
|
3
|
+
|
|
4
|
+
> [!NOTE]
|
|
5
|
+
> This repository serves as an issue tracker and documentation storage. The source code is in [opral/monorepo](https://github.com/opral/monorepo/tree/main/packages/lix-sdk).
|
|
6
|
+
|
|
1
7
|
# Lix SDK
|
|
2
8
|
|
|
3
|
-
|
|
4
|
-
|
|
9
|
+
[](https://www.npmjs.com/package/@lix-js/sdk) [](https://discord.gg/xjQA897RyK)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+

|
|
13
|
+
|
|
14
|
+
## Introduction
|
|
15
|
+
|
|
16
|
+
Lix is a change control system that runs in the browser and an SDK to build web apps.
|
|
17
|
+
|
|
18
|
+
A change control system allows storing, tracking, querying, and reviewing changes in different file formats, e.g., `.xlsx`, `.sqlite`, or `.inlang`. Compared to a version control system, a change control system understands “what” changed in a file, e.g., cell C43 in the financials spreadsheet changed.
|
|
19
|
+
|
|
20
|
+
Lix is not a git replacement, nor is it designed for software engineering. The goal is to bring change control workflows to industries other than software engineering like health, finance, policy making, design, etc.
|
|
21
|
+
|
|
22
|
+
Try a [demo lix app](https://lix.opral.com/app/fm).
|
|
23
|
+
|
|
24
|
+
## Features
|
|
25
|
+
|
|
26
|
+
- **📌 Versioning**: The possibility to create divergent states (branches in Git).
|
|
27
|
+
- **⚡ CI/CD**: Automations as we know them from software engineering.
|
|
28
|
+
- **🔀 Change Proposals**: (WIP [#242](https://github.com/opral/lix-sdk/issues/242)) Similar workflow to pull requests in Git.
|
|
29
|
+
- **🤝 Collaboration**: Lix comes with built-in sync, enabling asynchronous (Git-like) and real-time collaboration (Google Docs-like) capabilities.
|
|
30
|
+
- **✅ Validation Rules**: (WIP [#239](https://github.com/opral/lix-sdk/issues/239)) Define and enforce validation rules for your data.
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Good to know
|
|
34
|
+
|
|
35
|
+
- 🔍 **Everything is SQL**: Querying lix happens via SQL. No new query language to learn. The lix SDK conveniently exposes [Kysely](https://kysely.dev/), a type-safe SQL query builder.
|
|
36
|
+
- 🌐 **Browser-based**: Lix targets the browser as target platform. Node/unix dependencies are ruled out.
|
|
37
|
+
|
|
38
|
+
## Getting Started
|
|
39
|
+
|
|
40
|
+
> [!TIP]
|
|
41
|
+
> The documentation is a work in progress. If you have any questions, please open issues in the [GitHub repository](https://github.com/opral/lix-sdk).
|
|
42
|
+
|
|
43
|
+
> [!NOTE]
|
|
44
|
+
> The getting started uses a JSON file but you can store any file in lix, even a SQLite database, as long as a plugin for the file format is provided.
|
|
45
|
+
|
|
46
|
+
### Installation
|
|
47
|
+
|
|
48
|
+
Install the Lix SDK package:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npm install @lix-js/sdk
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Open a lix
|
|
55
|
+
|
|
56
|
+
> [!NOTE]
|
|
57
|
+
> We plan to have locally installed plugins in the future with no need to provide them upfront, see [#241](https://github.com/opral/lix-sdk/issues/241).
|
|
58
|
+
|
|
59
|
+
Create and open a new Lix file:
|
|
60
|
+
|
|
61
|
+
```javascript
|
|
62
|
+
import { newLixFile, openLixInMemory } from "@lix-js/sdk";
|
|
63
|
+
import { plugin as jsonPlugin } from "@lix-js/plugin-json";
|
|
64
|
+
|
|
65
|
+
// Create a new empty Lix file
|
|
66
|
+
const lixFile = await newLixFile();
|
|
67
|
+
|
|
68
|
+
// Open the Lix file in memory
|
|
69
|
+
const lix = await openLixInMemory({
|
|
70
|
+
blob: lixFile,
|
|
71
|
+
providePlugins: [jsonPlugin],
|
|
72
|
+
});
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Insert files
|
|
76
|
+
|
|
77
|
+
Inserting an examplary JSON file into lix:
|
|
78
|
+
|
|
79
|
+
```javascript
|
|
80
|
+
const json = {
|
|
81
|
+
name: "Hello World",
|
|
82
|
+
version: "1.0.0",
|
|
83
|
+
settings: {
|
|
84
|
+
enableFeatureX: true,
|
|
85
|
+
maxUsers: 10,
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
// Insert the file
|
|
90
|
+
const file = await lix.db
|
|
91
|
+
.insertInto("file")
|
|
92
|
+
.values({
|
|
93
|
+
path: "/example.json",
|
|
94
|
+
data: new TextEncoder().encode(JSON.stringify(json)),
|
|
95
|
+
})
|
|
96
|
+
.returningAll()
|
|
97
|
+
.executeTakeFirstOrThrow();
|
|
98
|
+
|
|
99
|
+
console.log("JSON file inserted with ID:", file.id);
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Update Files
|
|
103
|
+
|
|
104
|
+
Let's update our JSON file with some changes:
|
|
105
|
+
|
|
106
|
+
```diff
|
|
107
|
+
{
|
|
108
|
+
name: "Hello World",
|
|
109
|
+
- version: "1.0.0",
|
|
110
|
+
+ version: "1.1.0",
|
|
111
|
+
settings: {
|
|
112
|
+
enableFeatureX: true,
|
|
113
|
+
- maxUsers: 10,
|
|
114
|
+
+ maxUsers: 20,
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
```javascript
|
|
120
|
+
// updating the json from the previous example
|
|
121
|
+
json["version"] = "1.1.0";
|
|
122
|
+
json["settings"]["maxUsers"] = 20;
|
|
123
|
+
|
|
124
|
+
// Update the file
|
|
125
|
+
await lix.db
|
|
126
|
+
.updateTable("file")
|
|
127
|
+
.set({
|
|
128
|
+
data: new TextEncoder().encode(JSON.stringify(updatedJson)),
|
|
129
|
+
})
|
|
130
|
+
.where("path", "=", "/example.json")
|
|
131
|
+
.execute();
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Lix detect changes in file updates via the [file-queue](https://github.com/opral/monorepo/tree/main/packages/lix-sdk/src/file-queue) and the provided plugin which detects changes.
|
|
136
|
+
|
|
137
|
+
### Query Changes
|
|
138
|
+
|
|
139
|
+
Now we can query the changes that were made to the JSON file:
|
|
5
140
|
|
|
6
|
-
|
|
141
|
+
```javascript
|
|
142
|
+
// Get all changes for this file
|
|
143
|
+
const changes = await lix.db
|
|
144
|
+
.selectFrom("change")
|
|
145
|
+
.where("file_id", "=", file.id)
|
|
146
|
+
.innerJoin("snapshot", "snapshot.id", "change.snapshot_id")
|
|
147
|
+
.execute();
|
|
7
148
|
|
|
8
|
-
|
|
149
|
+
console.log("Changes for the JSON file:", changes);
|
|
150
|
+
```
|
|
9
151
|
|
|
10
|
-
|
|
152
|
+
### Create and switch a version
|
|
11
153
|
|
|
12
|
-
|
|
154
|
+
```javascript
|
|
155
|
+
const versionB = await createVersion({ lix, name: "B" });
|
|
13
156
|
|
|
14
|
-
|
|
157
|
+
// Create a new version based on the parent version
|
|
158
|
+
await switchVersion({ lix, to: versionB });
|
|
15
159
|
|
|
16
|
-
|
|
160
|
+
console.log("New version created:", versionB.id);
|
|
161
|
+
```
|
|
17
162
|
|
|
163
|
+
### Querying changes in a specific version
|
|
18
164
|
|
|
19
|
-
|
|
165
|
+
We'll update the JSON again by bumping the version to 1.2.0 with a new maxUsers count of 30:
|
|
166
|
+
|
|
167
|
+
```diff
|
|
168
|
+
{
|
|
169
|
+
name: "Hello World",
|
|
170
|
+
- version: "1.1.0",
|
|
171
|
+
+ version: "1.2.0",
|
|
172
|
+
settings: {
|
|
173
|
+
enableFeatureX: true,
|
|
174
|
+
- maxUsers: 20,
|
|
175
|
+
+ maxUsers: 30,
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Querying changes in a specific version is simple by using the `changeInVersion()` filter:
|
|
181
|
+
|
|
182
|
+
```javascript
|
|
183
|
+
import { createChange } from "@lix-js/sdk";
|
|
184
|
+
|
|
185
|
+
const changes = await lix.db
|
|
186
|
+
.selectFrom("change")
|
|
187
|
+
.where("file_id", "=", file.id)
|
|
188
|
+
.where(changeInVersion(versionB))
|
|
189
|
+
.innerJoin("snapshot", "snapshot.id", "change.snapshot_id")
|
|
190
|
+
.execute();
|
|
191
|
+
|
|
192
|
+
console.log(
|
|
193
|
+
`Changes for the JSON file in version ${versionB.name}:`, changes
|
|
194
|
+
);
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Querying a file
|
|
198
|
+
|
|
199
|
+
The file table is derived from the changes in the current version. Hence, querying the file after updating the json in the previous step will return the updated file:
|
|
200
|
+
|
|
201
|
+
```ts
|
|
202
|
+
const file = await lix.db
|
|
203
|
+
.selectFrom("file")
|
|
204
|
+
.where("path", "=", "/example.json")
|
|
205
|
+
.selectAll()
|
|
206
|
+
.executeTakeFirstOrThrow();
|
|
207
|
+
|
|
208
|
+
console.log(file)
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
```json
|
|
212
|
+
{
|
|
213
|
+
"name": "Hello World",
|
|
214
|
+
"version": "1.2.0",
|
|
215
|
+
"settings": {
|
|
216
|
+
"enableFeatureX": true,
|
|
217
|
+
"maxUsers": 30,
|
|
218
|
+
},
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Switch Back
|
|
223
|
+
|
|
224
|
+
Switch back to version A and you will see that the changes of version B are not present:
|
|
225
|
+
|
|
226
|
+
```javascript
|
|
227
|
+
await switchVersion({ lix, to: versionA })
|
|
228
|
+
|
|
229
|
+
console.log("Switched to version: main");
|
|
230
|
+
|
|
231
|
+
// Get the file data in this version
|
|
232
|
+
const originalFile = lix.db
|
|
233
|
+
.selectFrom("file")
|
|
234
|
+
.where("path", "=", "/example.json")
|
|
235
|
+
.selectAll()
|
|
236
|
+
.executeTakeFirstOrThrow();
|
|
237
|
+
|
|
238
|
+
const originalContent = JSON.parse(originalFile.content);
|
|
239
|
+
console.log("Original content in main version:", originalContent);
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
```json
|
|
243
|
+
{
|
|
244
|
+
"name": "Hello World",
|
|
245
|
+
"version": "1.1.0",
|
|
246
|
+
"settings": {
|
|
247
|
+
"enableFeatureX": true,
|
|
248
|
+
"maxUsers": 20,
|
|
249
|
+
},
|
|
250
|
+
}
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Merge Changes
|
|
254
|
+
|
|
255
|
+
Merge changes from version B into version A:
|
|
256
|
+
|
|
257
|
+
```javascript
|
|
258
|
+
await mergeVersion({lix, sourceVersion: versionB, targetVersion: versionA});
|
|
259
|
+
|
|
260
|
+
// Check the merged state
|
|
261
|
+
const file_after_merge = lix.db
|
|
262
|
+
.selectFrom("file")
|
|
263
|
+
.where("id", "=", file.id)
|
|
264
|
+
.select("data")
|
|
265
|
+
.executeTakeFirstOrThrow();
|
|
266
|
+
|
|
267
|
+
console.log("File state after merge:", JSON.parse(file_after_merge.data));
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
```json
|
|
271
|
+
{
|
|
272
|
+
"name": "Hello World",
|
|
273
|
+
"version": "1.2.0",
|
|
274
|
+
"settings": {
|
|
275
|
+
"enableFeatureX": true,
|
|
276
|
+
"maxUsers": 30,
|
|
277
|
+
},
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## Plugins
|
|
282
|
+
|
|
283
|
+
Lix uses plugins to understand and track changes in different file formats. Documentation is work in progress. Find example plugins here:
|
|
284
|
+
|
|
285
|
+
- [JSON Plugin](https://github.com/opral/monorepo/tree/main/packages/lix-plugin-json)
|
|
286
|
+
- [CSV plugin](https://github.com/opral/monorepo/tree/main/packages/lix-plugin-csv)
|
|
287
|
+
|
|
288
|
+
## Building apps
|
|
289
|
+
|
|
290
|
+
### Example use cases
|
|
20
291
|
|
|
21
292
|
Apps that revolve around changes are prime use cases to be built on lix. Having an “edit -> review -> automate” workflow is a good indicator for an app that revolves around changes:
|
|
22
293
|
|
|
@@ -26,43 +297,22 @@ Apps that revolve around changes are prime use cases to be built on lix. Having
|
|
|
26
297
|
- spreadsheets (Excel, Google Sheets)
|
|
27
298
|
- CAD software (Fusion 360, Autodesk)
|
|
28
299
|
- data science (Jupyter Notebooks)
|
|
29
|
-
- dashboards (Analytics, Infrastructure)
|
|
300
|
+
- dashboards (Analytics, Infrastructure)
|
|
30
301
|
|
|
31
|
-
|
|
302
|
+
### Advantages
|
|
32
303
|
|
|
33
304
|
Developing a web app with lix is reduced to providing a user interface that opens and saves a file.
|
|
34
305
|
|
|
35
|
-

|
|
36
307
|
|
|
37
308
|
Backend features like auth, permissions, change control, and automations are solved on a file rather than an application-specific level. Lix knows who the actors are (auth), allows actors to conduct changes (permissions), is aware of how data changes over time (change history), can merge changes (collaboration), and uses the knowledge of changes to trigger automations (automation pipelines).
|
|
38
309
|
|
|
39
|
-

|
|
40
311
|
|
|
41
312
|
In contrast, cloud-based apps are substantially more difficult to build because they require:
|
|
42
313
|
|
|
43
314
|
- Auth (could be solved with a backend as a service)
|
|
44
315
|
- Integrations (no interop between apps)
|
|
45
316
|
- Ensure data privacy and security
|
|
46
|
-
- Scaling complexity of storing all customer data
|
|
317
|
+
- Scaling complexity of storing all customer data
|
|
47
318
|
- Replicating change control features like history, branching, etc.
|
|
48
|
-
|
|
49
|
-
### Capabilities
|
|
50
|
-
|
|
51
|
-
#### Interop
|
|
52
|
-
|
|
53
|
-
Lix apps operate on (open) files. Any app can open the files and process the data. The need for integrations that transfer data from cloud app A to cloud app B is redundant. App 1 and app 2 can provide different UIs or services while operating on the same data.
|
|
54
|
-
|
|
55
|
-

|
|
56
|
-
|
|
57
|
-
#### Collaboration via change proposals
|
|
58
|
-
|
|
59
|
-
Lix brings versions and change requests, thereby enabling permissionless collaboration in file formats other than source code. We will see an “open-sourceification” of music, video, architecture, public policy making, fashion, and who knows, maybe even automobiles.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-

|
|
63
|
-
|
|
64
|
-
#### Automation
|
|
65
|
-
|
|
66
|
-
Lix can trigger automations based on changes in files. This is a powerful feature that allows for a new class of apps that are not possible with cloud-based apps.
|
|
67
|
-
|
|
68
|
-

|
|
@@ -359,7 +359,7 @@ test("invalid file paths should be rejected", async () => {
|
|
|
359
359
|
data: new Uint8Array(),
|
|
360
360
|
})
|
|
361
361
|
.returningAll()
|
|
362
|
-
.execute()).rejects.
|
|
362
|
+
.execute()).rejects.toThrowError("File path must start with a slash");
|
|
363
363
|
});
|
|
364
364
|
test("vector clock functions", async () => {
|
|
365
365
|
const sqlite = await createInMemoryDatabase({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-db.test.js","sourceRoot":"","sources":["../../src/database/init-db.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,6CAA6C;AAC7C,8DAA8D;AAC9D,EAAE;AACF,qEAAqE;AACrE,EAAE;AACF,0DAA0D;AAC1D,mCAAmC;AACnC,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;IACzD,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC;IAEtC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,EAAE;SACvB,UAAU,CAAC,MAAM,CAAC;SAClB,MAAM,CAAC;QACP,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,IAAI,UAAU,EAAE;KACtB,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;IACpD,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,MAAM,GAAG,MAAM,EAAE;SACrB,UAAU,CAAC,QAAQ,CAAC;SACpB,MAAM,CAAC;QACP,UAAU,EAAE,MAAM;QAClB,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,aAAa;QACzB,WAAW,EAAE,YAAY;KACzB,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;IACxD,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;IAE/B,MAAM,QAAQ,GAAG,MAAM,EAAE;SACvB,UAAU,CAAC,UAAU,CAAC;SACtB,MAAM,CAAC;QACP,OAAO;KACP,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gHAAgH,EAAE,KAAK,IAAI,EAAE;IACjI,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,gBAAgB,GAAG,MAAM,EAAE;SAC/B,UAAU,CAAC,UAAU,CAAC;SACtB,SAAS,EAAE;SACX,OAAO,EAAE,CAAC;IAEZ,MAAM,SAAS,GAAG,MAAM,EAAE;SACxB,UAAU,CAAC,UAAU,CAAC;SACtB,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,CAAC,EAAE,WAAW,EAAE;KAC3B,CAAC;SACD,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;SAClC,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,SAAS,GAAG,MAAM,EAAE;SACxB,UAAU,CAAC,UAAU,CAAC;SACtB,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,CAAC,EAAE,WAAW,EAAE;KAC3B,CAAC;SACD,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAClB,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACvB,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC;KACnC,CAAC,CAAC,CACH;SACA,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC;IAExE,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;IAC5G,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,MAAM,EAAE;SACvB,UAAU,CAAC,UAAU,CAAC;SACtB,MAAM,CAAC;QACP,OAAO,EAAE,IAAI;KACb,CAAC;SACD,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAClB,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACvB,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC;KACnC,CAAC,CAAC,CACH;SACA,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,6CAA6C;AAC7C,IAAI,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;IACxD,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,CAAC,cAAc,CAAC;QACrB,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,CAAC;QACR,sCAAsC;QACtC,KAAK,EAAE,GAAG,EAAE;YACX,sBAAsB;QACvB,CAAC;KACD,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,EAAE;SACnB,UAAU,CAAC,MAAM,CAAC;SAClB,MAAM,CAAC;QACP,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,IAAI,UAAU,EAAE;QACtB,QAAQ,EAAE;YACT,WAAW,EAAE,OAAO;SACpB;KACD,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEjD,MAAM,WAAW,GAAG,MAAM,EAAE;SAC1B,WAAW,CAAC,MAAM,CAAC;SACnB,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC;SAC/B,GAAG,CAAC;QACJ,QAAQ,EAAE;YACT,WAAW,EAAE,gBAAgB;SAC7B;KACD,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAClE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;IAChE,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,MAAM,CACX,EAAE;SACA,UAAU,CAAC,aAAa,CAAC;SACzB,MAAM,CAAC;QACP,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,SAAS;KACnB,CAAC;SACD,YAAY,EAAE;SACd,OAAO,EAAE,CACX,CAAC,OAAO,CAAC,kCAAkC,CAC3C,kHAAkH,CAClH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;IAClD,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,EAAE;SACN,UAAU,CAAC,YAAY,CAAC;SACxB,MAAM,CAAC;QACP,EAAE,EAAE,cAAc;KAClB,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,EAAE;SACN,UAAU,CAAC,QAAQ,CAAC;SACpB,MAAM,CACN,UAAU,CAAC;QACV,EAAE,EAAE,UAAU;KACd,CAAC,CACF;SACA,OAAO,EAAE,CAAC;IAEZ,MAAM,EAAE;SACN,UAAU,CAAC,oBAAoB,CAAC;SAChC,MAAM,CAAC;QACP,aAAa,EAAE,cAAc;QAC7B,SAAS,EAAE,UAAU;KACrB,CAAC;SACD,OAAO,EAAE,CAAC;IAEZ,MAAM,CACL,EAAE;SACA,UAAU,CAAC,oBAAoB,CAAC;SAChC,MAAM,CAAC;QACP,aAAa,EAAE,cAAc;QAC7B,SAAS,EAAE,UAAU;KACrB,CAAC;SACD,YAAY,EAAE;SACd,OAAO,EAAE,CACX,CAAC,OAAO,CAAC,kCAAkC,CAC3C,kKAAkK,CAClK,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;IAChD,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,SAAS,GAAG,MAAM,EAAE;SACxB,UAAU,CAAC,YAAY,CAAC;SACxB,aAAa,EAAE;SACf,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,UAAU,GAAG,MAAM,EAAE;SACzB,UAAU,CAAC,YAAY,CAAC;SACxB,MAAM,CAAC;QACP,aAAa,EAAE,SAAS,CAAC,EAAE;KAC3B,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvC,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,IAAI,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;IAC7C,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,SAAS,GAAG,MAAM,EAAE;SACxB,UAAU,CAAC,YAAY,CAAC;SACxB,aAAa,EAAE;SACf,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,UAAU,GAAG,MAAM,EAAE;SACzB,UAAU,CAAC,YAAY,CAAC;SACxB,MAAM,CAAC;QACP,aAAa,EAAE,SAAS,CAAC,EAAE;KAC3B,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,OAAO,GAAG,MAAM,EAAE;SACtB,UAAU,CAAC,SAAS,CAAC;SACrB,MAAM,CAAC;QACP,aAAa,EAAE,UAAU,CAAC,EAAE;QAC5B,OAAO,EAAE,MAAM;KACf,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;IAChD,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,SAAS,GAAG,MAAM,EAAE;SACxB,UAAU,CAAC,YAAY,CAAC;SACxB,aAAa,EAAE;SACf,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,+DAA+D;AAC/D,IAAI,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;IACzC,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,KAAK,GAAG,MAAM,EAAE;SACpB,UAAU,CAAC,OAAO,CAAC;SACnB,MAAM,CAAC;QACP,IAAI,EAAE,MAAM;KACZ,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;IACtF,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,SAAS,GAAG,MAAM,EAAE;SACxB,UAAU,CAAC,YAAY,CAAC;SACxB,aAAa,EAAE;SACf,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,EAAE;SACN,UAAU,CAAC,YAAY,CAAC;SACxB,MAAM,CAAC;QACP,EAAE,EAAE,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,EAAE;QACnD,EAAE,EAAE,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,EAAE;KACnD,CAAC;SACD,YAAY,EAAE;SACd,OAAO,EAAE,CAAC;IAEZ,MAAM,WAAW,GAAG,MAAM,EAAE;SAC1B,UAAU,CAAC,YAAY,CAAC;SACxB,SAAS,EAAE;SACX,KAAK,CAAC,eAAe,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;SACzC,OAAO,EAAE,CAAC;IAEZ,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;IAC7E,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,GAAG,GAAG,MAAM,EAAE;SAClB,UAAU,CAAC,OAAO,CAAC;SACnB,SAAS,EAAE;SACX,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,CAAC;SAChC,gBAAgB,EAAE,CAAC;IAErB,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC;QACzB,IAAI,EAAE,YAAY;KAClB,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;IACtD,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,OAAO,GAAG,MAAM,EAAE;SACtB,UAAU,CAAC,SAAS,CAAC;SACrB,SAAS,EAAE;SACX,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC;SAC1B,gBAAgB,EAAE,CAAC;IAErB,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;IAC5G,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,UAAU,GAAG,MAAM,EAAE;SACzB,UAAU,CAAC,SAAS,CAAC;SACrB,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;SACxB,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAE7E,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE/B,MAAM,cAAc,GAAG,MAAM,GAAG;SAC9B,UAAU,CAAC,iBAAiB,CAAC;SAC7B,SAAS,EAAE;SACX,OAAO,EAAE,CAAC;IAEZ,MAAM,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;IACxD,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,0DAA0D;IAC1D,MAAM,CAAC,cAAc,CAAC;QACrB,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,CAAC;QACR,sCAAsC;QACtC,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;KACf,CAAC,CAAC;IAEH,MAAM,MAAM,CACX,EAAE;SACA,UAAU,CAAC,MAAM,CAAC;SAClB,MAAM,CAAC;QACP,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,IAAI,UAAU,EAAE;KACtB,CAAC;SACD,YAAY,EAAE;SACd,OAAO,EAAE,CACX,CAAC,OAAO,CAAC,kCAAkC,CAC3C,oNAAoN,CACpN,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;IACzC,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,gBAAgB,GACrB,MAAM,GAAG,CAAA,mEAAmE,CAAC,OAAO,CACnF,EAAE,CACF,CAAC;IACH,MAAM,gBAAgB,GACrB,MAAM,GAAG,CAAA,mEAAmE,CAAC,OAAO,CACnF,EAAE,CACF,CAAC;IAEH,MAAM,CAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAS,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAC1D,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAS,CAAC,SAAS,CAAC,CAC5C,CAAC;IACF,MAAM,CAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAS,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAC5D,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAS,CAAC,MAAM,CAAC,CACzC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;IAC9E,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;QAC3C,QAAQ,EAAE,KAAK;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE9B,MAAM,EAAE;SACN,UAAU,CAAC,QAAQ,CAAC;SACpB,MAAM,CAAC;QACP,UAAU,EAAE,MAAM;QAClB,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,aAAa;QACzB,WAAW,EAAE,YAAY;KACzB,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC;IAE3E,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAEjC,MAAM,EAAE;SACN,UAAU,CAAC,cAAc,CAAC;SAC1B,MAAM,CAAC;QACP,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;QAC9B,UAAU,EAAE,cAAc;QAC1B,SAAS,EAAE,QAAQ;KACnB,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,gBAAgB,GAAG,MAAM,EAAE;SAC/B,UAAU,CAAC,cAAc,CAAC;SAC1B,SAAS,EAAE;SACX,OAAO,EAAE,CAAC;IACZ,MAAM,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAEzC,MAAM,EAAE;SACN,UAAU,CAAC,QAAQ,CAAC;SACpB,MAAM,CAAC;QACP,UAAU,EAAE,MAAM;QAClB,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,aAAa;QACzB,WAAW,EAAE,YAAY;KACzB,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,6BAA6B,GAAG,MAAM,EAAE;SAC5C,UAAU,CAAC,cAAc,CAAC;SAC1B,SAAS,EAAE;SACX,OAAO,EAAE,CAAC;IACZ,MAAM,CAAC,6BAA6B,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAEtD,2BAA2B;IAC3B,yFAAyF;IACzF,OAAO;IACP,MAAM;IACN,2BAA2B;IAC3B,yFAAyF;IACzF,OAAO;IACP,MAAM;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;IACjE,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE;SAC1B,UAAU,CAAC,SAAS,CAAC;SACrB,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;SACxB,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAC;IAE5B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE;SAC1B,UAAU,CAAC,QAAQ,CAAC;SACpB,MAAM,CACN,UAAU,CAAC;QACV,SAAS,EAAE,MAAM;KACjB,CAAC,CACF;SACA,YAAY,EAAE;SACd,OAAO,EAAE,CAAC;IAEZ,MAAM,sBAAsB,CAAC;QAC5B,GAAG;QACH,OAAO;QACP,OAAO;KACP,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAE1E,MAAM,yBAAyB,GAAG,MAAM,GAAG,CAAC,EAAE;SAC5C,UAAU,CAAC,gBAAgB,CAAC;SAC5B,KAAK,CAAC,2BAA2B,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;SACnD,SAAS,EAAE;SACX,OAAO,EAAE,CAAC;IAEZ,MAAM,CAAC,yBAAyB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;IAClG,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC;IAEtC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAEhE,MAAM,WAAW,GAAG;QACnB,UAAU,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;KAC/D,CAAC;IAEX,MAAM,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC;IAEhE,MAAM,aAAa,GAAG;QACrB,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE;QAC5B,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO;QAC/B,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;QACnC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU;KACrC,CAAC;IAEF,MAAM,GAAG,CAAC,EAAE;SACV,UAAU,CAAC,gBAAgB,CAAC;SAC5B,MAAM,CAAC,EAAE,GAAG,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;SACrD,OAAO,EAAE,CAAC;IAEZ,+CAA+C;IAC/C,MAAM,MAAM,CACX,GAAG,CAAC,EAAE;SACJ,UAAU,CAAC,gBAAgB,CAAC;SAC5B,MAAM,CAAC,EAAE,GAAG,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;SACrD,OAAO,EAAE,CACX,CAAC,OAAO,CAAC,kCAAkC,CAC3C,sMAAsM,CACtM,CAAC;IAEF,oCAAoC;IACpC,MAAM,GAAG,CAAC,EAAE;SACV,UAAU,CAAC,gBAAgB,CAAC;SAC5B,MAAM,CAAC,EAAE,GAAG,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;SACrD,OAAO,EAAE,CAAC;AACb,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;IACzE,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,EAAE,CAAC,CAAC;IAEtC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAE9C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE9C,MAAM,MAAM,CACX,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAC3C,wBAAwB,CACxB,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AACrB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"init-db.test.js","sourceRoot":"","sources":["../../src/database/init-db.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nano-id.d.ts","sourceRoot":"","sources":["../../src/database/nano-id.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"nano-id.d.ts","sourceRoot":"","sources":["../../src/database/nano-id.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2EH;;;;;GAKG;AACH,eAAO,MAAM,eAAe,mEACqC,CAAC;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,MACR,CAAC"}
|
package/dist/database/nano-id.js
CHANGED
|
@@ -3,7 +3,30 @@
|
|
|
3
3
|
* browser implementation. The code is licensed under the MIT license.
|
|
4
4
|
*
|
|
5
5
|
*/
|
|
6
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Polyfill for crypto.getRandomValues in environments that don't have it,
|
|
8
|
+
* such as older versions of Node in Stackblitz.
|
|
9
|
+
*
|
|
10
|
+
* This implementation is not cryptographically secure, but is sufficient for ID generation
|
|
11
|
+
* in these environments. In environments with proper crypto support, we'll use the native implementation.
|
|
12
|
+
*
|
|
13
|
+
* See: https://github.com/opral/lix-sdk/issues/258
|
|
14
|
+
*/
|
|
15
|
+
const insecureRandom = (array) => {
|
|
16
|
+
for (let i = 0; i < array.length; i++) {
|
|
17
|
+
array[i] = Math.floor(Math.random() * 256);
|
|
18
|
+
}
|
|
19
|
+
return array;
|
|
20
|
+
};
|
|
21
|
+
// Use crypto.getRandomValues if available, otherwise use our polyfill
|
|
22
|
+
const random = (bytes) => {
|
|
23
|
+
const array = new Uint8Array(bytes);
|
|
24
|
+
if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
|
|
25
|
+
return crypto.getRandomValues(array);
|
|
26
|
+
}
|
|
27
|
+
// Fallback to insecure random number generator if crypto is not available
|
|
28
|
+
return insecureRandom(array);
|
|
29
|
+
};
|
|
7
30
|
const customRandom = (alphabet, defaultSize, getRandom) => {
|
|
8
31
|
// First, a bitmask is necessary to generate the ID. The bitmask makes bytes
|
|
9
32
|
// values closer to the alphabet size. The bitmask calculates the closest
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nano-id.js","sourceRoot":"","sources":["../../src/database/nano-id.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"nano-id.js","sourceRoot":"","sources":["../../src/database/nano-id.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;GAQG;AACH,MAAM,cAAc,GAAG,CAAC,KAAiB,EAAE,EAAE;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,GAAG,CAAC,KAAU,EAAE,EAAE;IAC5B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5D,OAAO,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,0EAA0E;IAC1E,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CACpB,QAAgB,EAChB,WAAmB,EACnB,SAAc,EACb,EAAE;IACH,4EAA4E;IAC5E,yEAAyE;IACzE,sDAAsD;IACtD,sEAAsE;IACtE,qEAAqE;IACrE,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACvD,wEAAwE;IACxE,yEAAyE;IACzE,mDAAmD;IAEnD,uEAAuE;IACvE,sEAAsE;IACtE,8EAA8E;IAE9E,6DAA6D;IAC7D,kEAAkE;IAClE,sEAAsE;IACtE,4BAA4B;IAE5B,wCAAwC;IACxC,oCAAoC;IACpC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,WAAW,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE9D,OAAO,CAAC,IAAI,GAAG,WAAW,EAAE,EAAE;QAC7B,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,OAAO,IAAI,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9B,8DAA8D;YAC9D,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;YACjB,OAAO,CAAC,EAAE,EAAE,CAAC;gBACZ,uEAAuE;gBACvE,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACtC,IAAI,EAAE,CAAC,MAAM,IAAI,IAAI;oBAAE,OAAO,EAAE,CAAC;YAClC,CAAC;QACF,CAAC;IACF,CAAC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CACtD,YAAY,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAC3B,gEAAgE,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAClB,cAAc,CAAC,eAAe,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { expect, test } from "vitest";
|
|
1
|
+
import { expect, test, vi } from "vitest";
|
|
2
2
|
import { _nanoIdAlphabet, nanoid } from "./nano-id.js";
|
|
3
3
|
test("length is obeyed", () => {
|
|
4
4
|
const id = nanoid(10);
|
|
@@ -10,4 +10,29 @@ test("the alphabet does not contain underscores `_` because they are not URL saf
|
|
|
10
10
|
test("the alphabet does not contain dashes `-` because they break selecting the ID from the URL in the browser", () => {
|
|
11
11
|
expect(_nanoIdAlphabet).not.toContain("-");
|
|
12
12
|
});
|
|
13
|
+
/**
|
|
14
|
+
* Test the crypto polyfill that was added to fix environments without crypto support
|
|
15
|
+
* like older versions of Node in Stackblitz.
|
|
16
|
+
*
|
|
17
|
+
* See: https://github.com/opral/lix-sdk/issues/258
|
|
18
|
+
*/
|
|
19
|
+
test("polyfill works when crypto is not available", () => {
|
|
20
|
+
// Store original crypto
|
|
21
|
+
const originalCrypto = global.crypto;
|
|
22
|
+
// Mock crypto as undefined to test the polyfill
|
|
23
|
+
vi.stubGlobal("crypto", undefined);
|
|
24
|
+
try {
|
|
25
|
+
const id = nanoid(10);
|
|
26
|
+
expect(id.length).toBe(10);
|
|
27
|
+
expect(typeof id).toBe("string");
|
|
28
|
+
// Check that it only contains characters from our alphabet
|
|
29
|
+
for (let i = 0; i < id.length; i++) {
|
|
30
|
+
expect(_nanoIdAlphabet).toContain(id[i]);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
// Restore original crypto
|
|
35
|
+
vi.stubGlobal("crypto", originalCrypto);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
13
38
|
//# sourceMappingURL=nano-id.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nano-id.test.js","sourceRoot":"","sources":["../../src/database/nano-id.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"nano-id.test.js","sourceRoot":"","sources":["../../src/database/nano-id.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEvD,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACtB,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6EAA6E,EAAE,GAAG,EAAE;IACxF,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0GAA0G,EAAE,GAAG,EAAE;IACrH,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACxD,wBAAwB;IACxB,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IAErC,gDAAgD;IAChD,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAEnC,IAAI,CAAC;QACJ,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACtB,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,2DAA2D;QAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;IACF,CAAC;YAAS,CAAC;QACV,0BAA0B;QAC1B,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACzC,CAAC;AACF,CAAC,CAAC,CAAC"}
|
|
@@ -14,7 +14,7 @@ export function validateFilePath(path) {
|
|
|
14
14
|
throw new Error("File path must not be empty.");
|
|
15
15
|
}
|
|
16
16
|
if (path[0] !== "/") {
|
|
17
|
-
throw new Error("File path must start with a slash.\n\
|
|
17
|
+
throw new Error("File path must start with a slash.\n\nFiles must start with a root slash to identify the path as root.");
|
|
18
18
|
}
|
|
19
19
|
// validate middle
|
|
20
20
|
// validate ending
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-file-path.js","sourceRoot":"","sources":["../../src/file/validate-file-path.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,qBAAqB;IAErB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACd,
|
|
1
|
+
{"version":3,"file":"validate-file-path.js","sourceRoot":"","sources":["../../src/file/validate-file-path.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,qBAAqB;IAErB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACd,wGAAwG,CACxG,CAAC;IACH,CAAC;IAED,kBAAkB;IAElB,kBAAkB;IAElB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACd,yIAAyI,CACzI,CAAC;IACH,CAAC;IAED,mBAAmB;IAEnB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACd,4IAA4I,CAC5I,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACd,6FAA6F,CAC7F,CAAC;IACH,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC3C,IAAI,CAAC;QACJ,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-handlers.d.ts","sourceRoot":"","sources":["../../src/file-queue/file-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"file-handlers.d.ts","sourceRoot":"","sources":["../../src/file-queue/file-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAsB9C,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC5C,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC;IAC3C,cAAc,EAAE,cAAc,CAAC;CAC/B,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFhB;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC5C,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC;IAC3C,cAAc,EAAE,cAAc,CAAC;CAC/B,GAAG,OAAO,CAAC,IAAI,CAAC,CA0FhB;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC5C,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC;IAC3C,cAAc,EAAE,cAAc,CAAC;CAC/B,GAAG,OAAO,CAAC,IAAI,CAAC,CA0ChB"}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
import { sql } from "kysely";
|
|
2
2
|
import { createChange } from "../change/create-change.js";
|
|
3
3
|
import { changeIsLeafInVersion } from "../query-filter/change-is-leaf-in-version.js";
|
|
4
|
-
// start a new normalize path function that has the absolute minimum implementation.
|
|
5
|
-
function normalizePath(path) {
|
|
6
|
-
if (!path.startsWith("/")) {
|
|
7
|
-
return "/" + path;
|
|
8
|
-
}
|
|
9
|
-
return path;
|
|
10
|
-
}
|
|
11
4
|
async function glob(args) {
|
|
12
5
|
const result = await sql `SELECT CASE WHEN ${args.path} GLOB ${args.glob} THEN 1 ELSE 0 END AS matches`.execute(args.lix.db);
|
|
13
6
|
// Extract the result from the response
|
|
@@ -24,12 +17,13 @@ export async function handleFileInsert(args) {
|
|
|
24
17
|
throw new Error("Both before and after paths are null");
|
|
25
18
|
}
|
|
26
19
|
for (const plugin of plugins) {
|
|
27
|
-
// glob expressions
|
|
28
|
-
if (!
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
20
|
+
// glob expressions and paths should be properly normalized
|
|
21
|
+
if (!plugin.detectChangesGlob ||
|
|
22
|
+
!(await glob({
|
|
23
|
+
lix: args.lix,
|
|
24
|
+
path,
|
|
25
|
+
glob: plugin.detectChangesGlob,
|
|
26
|
+
}))) {
|
|
33
27
|
break;
|
|
34
28
|
}
|
|
35
29
|
if (plugin.detectChanges === undefined) {
|
|
@@ -95,12 +89,13 @@ export async function handleFileUpdate(args) {
|
|
|
95
89
|
throw new Error("Both before and after paths are null");
|
|
96
90
|
}
|
|
97
91
|
for (const plugin of plugins) {
|
|
98
|
-
// glob expressions
|
|
99
|
-
if (!
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
92
|
+
// glob expressions and paths should be properly normalized
|
|
93
|
+
if (!plugin.detectChangesGlob ||
|
|
94
|
+
!(await glob({
|
|
95
|
+
lix: args.lix,
|
|
96
|
+
path,
|
|
97
|
+
glob: plugin.detectChangesGlob,
|
|
98
|
+
}))) {
|
|
104
99
|
break;
|
|
105
100
|
}
|
|
106
101
|
if (plugin.detectChanges === undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-handlers.js","sourceRoot":"","sources":["../../src/file-queue/file-handlers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;
|
|
1
|
+
{"version":3,"file":"file-handlers.js","sourceRoot":"","sources":["../../src/file-queue/file-handlers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lix-js/sdk",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.3",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": "./dist/index.js"
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"js-sha256": "^0.11.0",
|
|
23
23
|
"kysely": "^0.27.4",
|
|
24
24
|
"uuid": "^10.0.0",
|
|
25
|
-
"
|
|
26
|
-
"
|
|
25
|
+
"sqlite-wasm-kysely": "0.3.0",
|
|
26
|
+
"@lix-js/server-api-schema": "0.1.1"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@eslint/js": "^9.12.0",
|
|
@@ -441,8 +441,8 @@ test("invalid file paths should be rejected", async () => {
|
|
|
441
441
|
})
|
|
442
442
|
.returningAll()
|
|
443
443
|
.execute()
|
|
444
|
-
).rejects.
|
|
445
|
-
|
|
444
|
+
).rejects.toThrowError(
|
|
445
|
+
"File path must start with a slash"
|
|
446
446
|
);
|
|
447
447
|
});
|
|
448
448
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { expect, test } from "vitest";
|
|
1
|
+
import { expect, test, vi } from "vitest";
|
|
2
2
|
import { _nanoIdAlphabet, nanoid } from "./nano-id.js";
|
|
3
3
|
|
|
4
4
|
test("length is obeyed", () => {
|
|
@@ -13,3 +13,30 @@ test("the alphabet does not contain underscores `_` because they are not URL saf
|
|
|
13
13
|
test("the alphabet does not contain dashes `-` because they break selecting the ID from the URL in the browser", () => {
|
|
14
14
|
expect(_nanoIdAlphabet).not.toContain("-");
|
|
15
15
|
});
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Test the crypto polyfill that was added to fix environments without crypto support
|
|
19
|
+
* like older versions of Node in Stackblitz.
|
|
20
|
+
*
|
|
21
|
+
* See: https://github.com/opral/lix-sdk/issues/258
|
|
22
|
+
*/
|
|
23
|
+
test("polyfill works when crypto is not available", () => {
|
|
24
|
+
// Store original crypto
|
|
25
|
+
const originalCrypto = global.crypto;
|
|
26
|
+
|
|
27
|
+
// Mock crypto as undefined to test the polyfill
|
|
28
|
+
vi.stubGlobal("crypto", undefined);
|
|
29
|
+
|
|
30
|
+
try {
|
|
31
|
+
const id = nanoid(10);
|
|
32
|
+
expect(id.length).toBe(10);
|
|
33
|
+
expect(typeof id).toBe("string");
|
|
34
|
+
// Check that it only contains characters from our alphabet
|
|
35
|
+
for (let i = 0; i < id.length; i++) {
|
|
36
|
+
expect(_nanoIdAlphabet).toContain(id[i]);
|
|
37
|
+
}
|
|
38
|
+
} finally {
|
|
39
|
+
// Restore original crypto
|
|
40
|
+
vi.stubGlobal("crypto", originalCrypto);
|
|
41
|
+
}
|
|
42
|
+
});
|
package/src/database/nano-id.ts
CHANGED
|
@@ -4,7 +4,32 @@
|
|
|
4
4
|
*
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Polyfill for crypto.getRandomValues in environments that don't have it,
|
|
9
|
+
* such as older versions of Node in Stackblitz.
|
|
10
|
+
*
|
|
11
|
+
* This implementation is not cryptographically secure, but is sufficient for ID generation
|
|
12
|
+
* in these environments. In environments with proper crypto support, we'll use the native implementation.
|
|
13
|
+
*
|
|
14
|
+
* See: https://github.com/opral/lix-sdk/issues/258
|
|
15
|
+
*/
|
|
16
|
+
const insecureRandom = (array: Uint8Array) => {
|
|
17
|
+
for (let i = 0; i < array.length; i++) {
|
|
18
|
+
array[i] = Math.floor(Math.random() * 256);
|
|
19
|
+
}
|
|
20
|
+
return array;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// Use crypto.getRandomValues if available, otherwise use our polyfill
|
|
24
|
+
const random = (bytes: any) => {
|
|
25
|
+
const array = new Uint8Array(bytes);
|
|
26
|
+
if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
|
|
27
|
+
return crypto.getRandomValues(array);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Fallback to insecure random number generator if crypto is not available
|
|
31
|
+
return insecureRandom(array);
|
|
32
|
+
};
|
|
8
33
|
|
|
9
34
|
const customRandom = (
|
|
10
35
|
alphabet: string,
|
|
@@ -18,7 +18,7 @@ export function validateFilePath(path: string): void {
|
|
|
18
18
|
|
|
19
19
|
if (path[0] !== "/") {
|
|
20
20
|
throw new Error(
|
|
21
|
-
"File path must start with a slash.\n\
|
|
21
|
+
"File path must start with a slash.\n\nFiles must start with a root slash to identify the path as root."
|
|
22
22
|
);
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -5,13 +5,6 @@ import { sql } from "kysely";
|
|
|
5
5
|
import { createChange } from "../change/create-change.js";
|
|
6
6
|
import { changeIsLeafInVersion } from "../query-filter/change-is-leaf-in-version.js";
|
|
7
7
|
|
|
8
|
-
// start a new normalize path function that has the absolute minimum implementation.
|
|
9
|
-
function normalizePath(path: string) {
|
|
10
|
-
if (!path.startsWith("/")) {
|
|
11
|
-
return "/" + path;
|
|
12
|
-
}
|
|
13
|
-
return path;
|
|
14
|
-
}
|
|
15
8
|
|
|
16
9
|
async function glob(args: {
|
|
17
10
|
lix: Pick<Lix, "db">;
|
|
@@ -47,12 +40,13 @@ export async function handleFileInsert(args: {
|
|
|
47
40
|
}
|
|
48
41
|
|
|
49
42
|
for (const plugin of plugins) {
|
|
50
|
-
// glob expressions
|
|
43
|
+
// glob expressions and paths should be properly normalized
|
|
51
44
|
if (
|
|
45
|
+
!plugin.detectChangesGlob ||
|
|
52
46
|
!(await glob({
|
|
53
47
|
lix: args.lix,
|
|
54
|
-
path
|
|
55
|
-
glob:
|
|
48
|
+
path,
|
|
49
|
+
glob: plugin.detectChangesGlob,
|
|
56
50
|
}))
|
|
57
51
|
) {
|
|
58
52
|
break;
|
|
@@ -140,12 +134,13 @@ export async function handleFileUpdate(args: {
|
|
|
140
134
|
}
|
|
141
135
|
|
|
142
136
|
for (const plugin of plugins) {
|
|
143
|
-
// glob expressions
|
|
137
|
+
// glob expressions and paths should be properly normalized
|
|
144
138
|
if (
|
|
139
|
+
!plugin.detectChangesGlob ||
|
|
145
140
|
!(await glob({
|
|
146
141
|
lix: args.lix,
|
|
147
|
-
path
|
|
148
|
-
glob:
|
|
142
|
+
path,
|
|
143
|
+
glob: plugin.detectChangesGlob,
|
|
149
144
|
}))
|
|
150
145
|
) {
|
|
151
146
|
break;
|