@inlang/sdk 2.4.8 → 2.4.10
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/dist/database/jsonPlugin.d.ts +11 -0
- package/dist/database/jsonPlugin.d.ts.map +1 -0
- package/dist/database/jsonPlugin.js +197 -0
- package/dist/database/jsonPlugin.js.map +1 -0
- package/dist/import-export/upsertBundleNestedMatchByProperties.d.ts.map +1 -1
- package/dist/migrations/v2/createMessageV1.d.ts.map +1 -1
- package/dist/project/fs-sync.playground.test.d.ts +2 -0
- package/dist/project/fs-sync.playground.test.d.ts.map +1 -0
- package/dist/project/fs-sync.playground.test.js +535 -0
- package/dist/project/fs-sync.playground.test.js.map +1 -0
- package/dist/project/loadProjectFromDirectory.d.ts.map +1 -1
- package/dist/project/loadProjectFromDirectory.js +7 -3
- package/dist/project/loadProjectFromDirectory.js.map +1 -1
- package/dist/project/saveProjectToDirectory.d.ts.map +1 -1
- package/dist/project/saveProjectToDirectory.js +25 -18
- package/dist/project/saveProjectToDirectory.js.map +1 -1
- package/dist/query-utilities/insertBundleNested.d.ts.map +1 -1
- package/dist/query-utilities/selectBundleNested.d.ts.map +1 -1
- package/dist/query-utilities/updateBundleNested.d.ts.map +1 -1
- package/dist/query-utilities/upsertBundleNested.d.ts.map +1 -1
- package/dist/schema-definitions/bundle.d.ts +22 -0
- package/dist/schema-definitions/bundle.d.ts.map +1 -0
- package/dist/schema-definitions/bundle.js +18 -0
- package/dist/schema-definitions/bundle.js.map +1 -0
- package/dist/schema-definitions/bundle.test.d.ts +2 -0
- package/dist/schema-definitions/bundle.test.d.ts.map +1 -0
- package/dist/schema-definitions/bundle.test.js +23 -0
- package/dist/schema-definitions/bundle.test.js.map +1 -0
- package/dist/schema-definitions/index.d.ts +4 -0
- package/dist/schema-definitions/index.d.ts.map +1 -0
- package/dist/schema-definitions/index.js +4 -0
- package/dist/schema-definitions/index.js.map +1 -0
- package/dist/schema-definitions/message.d.ts +35 -0
- package/dist/schema-definitions/message.d.ts.map +1 -0
- package/dist/schema-definitions/message.js +26 -0
- package/dist/schema-definitions/message.js.map +1 -0
- package/dist/schema-definitions/message.test.d.ts +2 -0
- package/dist/schema-definitions/message.test.d.ts.map +1 -0
- package/dist/schema-definitions/message.test.js +45 -0
- package/dist/schema-definitions/message.test.js.map +1 -0
- package/dist/schema-definitions/variant.d.ts +35 -0
- package/dist/schema-definitions/variant.d.ts.map +1 -0
- package/dist/schema-definitions/variant.js +26 -0
- package/dist/schema-definitions/variant.js.map +1 -0
- package/dist/schema-definitions/variant.test.d.ts +2 -0
- package/dist/schema-definitions/variant.test.d.ts.map +1 -0
- package/dist/schema-definitions/variant.test.js +67 -0
- package/dist/schema-definitions/variant.test.js.map +1 -0
- package/dist/services/env-variables/index.d.ts +2 -2
- package/dist/services/env-variables/index.js +3 -3
- package/dist/services/env-variables/index.js.map +1 -1
- package/dist/services/telemetry/capture.d.ts.map +1 -1
- package/dist/utilities/detectJsonFormatting.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/project/loadProjectFromDirectory.ts +10 -5
- package/src/project/saveProjectToDirectory.ts +33 -24
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type KyselyPlugin, type PluginTransformQueryArgs, type PluginTransformResultArgs, type QueryResult, type RootOperationNode, type UnknownRow } from "kysely";
|
|
2
|
+
import type { Lix } from "@lix-js/sdk";
|
|
3
|
+
export declare class JsonPlugin implements KyselyPlugin {
|
|
4
|
+
#private;
|
|
5
|
+
constructor(args: {
|
|
6
|
+
engine: NonNullable<Lix["engine"]>;
|
|
7
|
+
});
|
|
8
|
+
transformQuery(args: PluginTransformQueryArgs): RootOperationNode;
|
|
9
|
+
transformResult(args: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=jsonPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonPlugin.d.ts","sourceRoot":"/","sources":["database/jsonPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,YAAY,EAEjB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAIf,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAUvC,qBAAa,UAAW,YAAW,YAAY;;gBAKlC,IAAI,EAAE;QAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;KAAE;IAIxD,cAAc,CAAC,IAAI,EAAE,wBAAwB,GAAG,iBAAiB;IAW3D,eAAe,CACpB,IAAI,EAAE,yBAAyB,GAC7B,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;CA0DnC"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { OperationNodeTransformer, } from "kysely";
|
|
2
|
+
const textDecoder = new TextDecoder();
|
|
3
|
+
const TABLE_NAME_MAP = {
|
|
4
|
+
bundle: "inlang_bundle",
|
|
5
|
+
message: "inlang_message",
|
|
6
|
+
variant: "inlang_variant",
|
|
7
|
+
};
|
|
8
|
+
export class JsonPlugin {
|
|
9
|
+
#serializeJsonTransformer = new SerializeJsonTransformer();
|
|
10
|
+
#renameTableTransformer = new RenameTableTransformer(TABLE_NAME_MAP);
|
|
11
|
+
#engine;
|
|
12
|
+
constructor(args) {
|
|
13
|
+
this.#engine = args.engine;
|
|
14
|
+
}
|
|
15
|
+
transformQuery(args) {
|
|
16
|
+
const renamed = this.#renameTableTransformer.transformNode(args.node);
|
|
17
|
+
if (renamed.kind === "InsertQueryNode" ||
|
|
18
|
+
renamed.kind === "UpdateQueryNode") {
|
|
19
|
+
return this.#serializeJsonTransformer.transformNode(renamed);
|
|
20
|
+
}
|
|
21
|
+
return renamed;
|
|
22
|
+
}
|
|
23
|
+
async transformResult(args) {
|
|
24
|
+
for (const row of args.result.rows) {
|
|
25
|
+
for (const key of Object.keys(row)) {
|
|
26
|
+
const value = row[key];
|
|
27
|
+
const parsed = this.#parseValue(value);
|
|
28
|
+
if (parsed !== undefined && parsed !== value) {
|
|
29
|
+
row[key] = parsed;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return args.result;
|
|
34
|
+
}
|
|
35
|
+
#parseValue(value) {
|
|
36
|
+
if (value === null || value === undefined) {
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
if (value instanceof ArrayBuffer) {
|
|
40
|
+
return this.#parseFromBuffer(new Uint8Array(value));
|
|
41
|
+
}
|
|
42
|
+
if (ArrayBuffer.isView(value)) {
|
|
43
|
+
const view = value;
|
|
44
|
+
return this.#parseFromBuffer(new Uint8Array(view.buffer, view.byteOffset, view.byteLength));
|
|
45
|
+
}
|
|
46
|
+
if (typeof value === "string") {
|
|
47
|
+
return parseJsonString(value);
|
|
48
|
+
}
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
#parseFromBuffer(buffer) {
|
|
52
|
+
try {
|
|
53
|
+
const rows = this.#engine.sqlite.exec("SELECT json(?)", {
|
|
54
|
+
returnValue: "resultRows",
|
|
55
|
+
bind: [buffer],
|
|
56
|
+
});
|
|
57
|
+
const first = rows?.[0];
|
|
58
|
+
const serialized = Array.isArray(first) ? first[0] : first;
|
|
59
|
+
if (typeof serialized === "string") {
|
|
60
|
+
return JSON.parse(serialized);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// fall back to decoding as UTF-8 below
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
return JSON.parse(textDecoder.decode(buffer));
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return buffer;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
class SerializeJsonTransformer extends OperationNodeTransformer {
|
|
75
|
+
transformOnConflict(node) {
|
|
76
|
+
return super.transformOnConflict({
|
|
77
|
+
...node,
|
|
78
|
+
updates: node.updates?.map((updateItem) => {
|
|
79
|
+
if (updateItem.kind !== "ColumnUpdateNode") {
|
|
80
|
+
return updateItem;
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
kind: "ColumnUpdateNode",
|
|
84
|
+
column: updateItem.column,
|
|
85
|
+
value: this.transformValue(updateItem.value),
|
|
86
|
+
};
|
|
87
|
+
}),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
transformValue(node) {
|
|
91
|
+
const serialized = maybeSerializeJson(node.value);
|
|
92
|
+
if (serialized === node.value) {
|
|
93
|
+
return node;
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
...node,
|
|
97
|
+
value: serialized,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
transformValueList(node) {
|
|
101
|
+
return {
|
|
102
|
+
...node,
|
|
103
|
+
values: node.values.map((listNodeItem) => {
|
|
104
|
+
if (listNodeItem.kind !== "ValueNode") {
|
|
105
|
+
return listNodeItem;
|
|
106
|
+
}
|
|
107
|
+
const valueNode = listNodeItem;
|
|
108
|
+
const serialized = maybeSerializeJson(valueNode.value);
|
|
109
|
+
if (serialized === valueNode.value) {
|
|
110
|
+
return valueNode;
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
...valueNode,
|
|
114
|
+
value: serialized,
|
|
115
|
+
};
|
|
116
|
+
}),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
transformValues(node) {
|
|
120
|
+
return super.transformValues({
|
|
121
|
+
...node,
|
|
122
|
+
values: node.values.map((valueItemNode) => {
|
|
123
|
+
if (valueItemNode.kind !== "PrimitiveValueListNode") {
|
|
124
|
+
return valueItemNode;
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
kind: "ValueListNode",
|
|
128
|
+
values: valueItemNode.values.map((value) => ({
|
|
129
|
+
kind: "ValueNode",
|
|
130
|
+
value,
|
|
131
|
+
})),
|
|
132
|
+
};
|
|
133
|
+
}),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
class RenameTableTransformer extends OperationNodeTransformer {
|
|
138
|
+
#map;
|
|
139
|
+
constructor(map) {
|
|
140
|
+
super();
|
|
141
|
+
this.#map = map;
|
|
142
|
+
}
|
|
143
|
+
transformNode(node) {
|
|
144
|
+
const transformed = super.transformNode(node);
|
|
145
|
+
if (transformed?.kind === "TableNode") {
|
|
146
|
+
const identifier = transformed.table?.identifier?.name;
|
|
147
|
+
const schema = transformed.table?.schema?.name;
|
|
148
|
+
const mapped = identifier ? this.#map[identifier] : undefined;
|
|
149
|
+
if (mapped) {
|
|
150
|
+
const tableNode = schema !== undefined
|
|
151
|
+
? {
|
|
152
|
+
kind: "SchemableIdentifierNode",
|
|
153
|
+
schema: { kind: "IdentifierNode", name: schema },
|
|
154
|
+
identifier: { kind: "IdentifierNode", name: mapped },
|
|
155
|
+
}
|
|
156
|
+
: {
|
|
157
|
+
kind: "SchemableIdentifierNode",
|
|
158
|
+
identifier: { kind: "IdentifierNode", name: mapped },
|
|
159
|
+
};
|
|
160
|
+
return {
|
|
161
|
+
kind: "TableNode",
|
|
162
|
+
table: tableNode,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return transformed;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
function maybeSerializeJson(value) {
|
|
170
|
+
if (ArrayBuffer.isView(value) || value instanceof ArrayBuffer) {
|
|
171
|
+
return value;
|
|
172
|
+
}
|
|
173
|
+
if (value === null || value === undefined) {
|
|
174
|
+
return value;
|
|
175
|
+
}
|
|
176
|
+
if (typeof value === "object") {
|
|
177
|
+
return JSON.stringify(value);
|
|
178
|
+
}
|
|
179
|
+
return value;
|
|
180
|
+
}
|
|
181
|
+
function parseJsonString(value) {
|
|
182
|
+
const trimmed = value.trim();
|
|
183
|
+
if (!trimmed) {
|
|
184
|
+
return value;
|
|
185
|
+
}
|
|
186
|
+
const firstChar = trimmed[0];
|
|
187
|
+
if (firstChar !== "{" && firstChar !== "[" && firstChar !== '"') {
|
|
188
|
+
return value;
|
|
189
|
+
}
|
|
190
|
+
try {
|
|
191
|
+
return JSON.parse(trimmed);
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
return value;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=jsonPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonPlugin.js","sourceRoot":"/","sources":["database/jsonPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tOperationNodeTransformer,\n\ttype KyselyPlugin,\n\ttype OnConflictNode,\n\ttype PluginTransformQueryArgs,\n\ttype PluginTransformResultArgs,\n\ttype QueryResult,\n\ttype RootOperationNode,\n\ttype UnknownRow,\n\ttype ValueListNode,\n\ttype ValueNode,\n\ttype ValuesNode,\n} from \"kysely\";\nimport type { Lix } from \"@lix-js/sdk\";\n\nconst textDecoder = new TextDecoder();\n\nconst TABLE_NAME_MAP: Record<string, string> = {\n\tbundle: \"inlang_bundle\",\n\tmessage: \"inlang_message\",\n\tvariant: \"inlang_variant\",\n};\n\nexport class JsonPlugin implements KyselyPlugin {\n\t#serializeJsonTransformer = new SerializeJsonTransformer();\n\t#renameTableTransformer = new RenameTableTransformer(TABLE_NAME_MAP);\n\t#engine: NonNullable<Lix[\"engine\"]>;\n\n\tconstructor(args: { engine: NonNullable<Lix[\"engine\"]> }) {\n\t\tthis.#engine = args.engine;\n\t}\n\n\ttransformQuery(args: PluginTransformQueryArgs): RootOperationNode {\n\t\tconst renamed = this.#renameTableTransformer.transformNode(args.node);\n\t\tif (\n\t\t\trenamed.kind === \"InsertQueryNode\" ||\n\t\t\trenamed.kind === \"UpdateQueryNode\"\n\t\t) {\n\t\t\treturn this.#serializeJsonTransformer.transformNode(renamed);\n\t\t}\n\t\treturn renamed;\n\t}\n\n\tasync transformResult(\n\t\targs: PluginTransformResultArgs\n\t): Promise<QueryResult<UnknownRow>> {\n\t\tfor (const row of args.result.rows) {\n\t\t\tfor (const key of Object.keys(row)) {\n\t\t\t\tconst value = (row as Record<string, unknown>)[key];\n\t\t\t\tconst parsed = this.#parseValue(value);\n\t\t\t\tif (parsed !== undefined && parsed !== value) {\n\t\t\t\t\t(row as Record<string, unknown>)[key] = parsed;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn args.result;\n\t}\n\n\t#parseValue(value: unknown): unknown {\n\t\tif (value === null || value === undefined) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (value instanceof ArrayBuffer) {\n\t\t\treturn this.#parseFromBuffer(new Uint8Array(value));\n\t\t}\n\n\t\tif (ArrayBuffer.isView(value)) {\n\t\t\tconst view = value as ArrayBufferView;\n\t\t\treturn this.#parseFromBuffer(\n\t\t\t\tnew Uint8Array(view.buffer, view.byteOffset, view.byteLength)\n\t\t\t);\n\t\t}\n\n\t\tif (typeof value === \"string\") {\n\t\t\treturn parseJsonString(value);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\t#parseFromBuffer(buffer: Uint8Array): unknown {\n\t\ttry {\n\t\t\tconst rows = this.#engine.sqlite.exec(\"SELECT json(?)\", {\n\t\t\t\treturnValue: \"resultRows\",\n\t\t\t\tbind: [buffer],\n\t\t\t});\n\t\t\tconst first = rows?.[0];\n\t\t\tconst serialized = Array.isArray(first) ? first[0] : first;\n\t\t\tif (typeof serialized === \"string\") {\n\t\t\t\treturn JSON.parse(serialized);\n\t\t\t}\n\t\t} catch {\n\t\t\t// fall back to decoding as UTF-8 below\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.parse(textDecoder.decode(buffer));\n\t\t} catch {\n\t\t\treturn buffer;\n\t\t}\n\t}\n}\n\nclass SerializeJsonTransformer extends OperationNodeTransformer {\n\tprotected override transformOnConflict(node: OnConflictNode): OnConflictNode {\n\t\treturn super.transformOnConflict({\n\t\t\t...node,\n\t\t\tupdates: node.updates?.map((updateItem) => {\n\t\t\t\tif (updateItem.kind !== \"ColumnUpdateNode\") {\n\t\t\t\t\treturn updateItem;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"ColumnUpdateNode\",\n\t\t\t\t\tcolumn: updateItem.column,\n\t\t\t\t\tvalue: this.transformValue(updateItem.value as ValueNode),\n\t\t\t\t};\n\t\t\t}),\n\t\t});\n\t}\n\n\tprotected override transformValue(node: ValueNode): ValueNode {\n\t\tconst serialized = maybeSerializeJson(node.value);\n\t\tif (serialized === node.value) {\n\t\t\treturn node;\n\t\t}\n\t\treturn {\n\t\t\t...node,\n\t\t\tvalue: serialized,\n\t\t};\n\t}\n\n\tprotected override transformValueList(node: ValueListNode): ValueListNode {\n\t\treturn {\n\t\t\t...node,\n\t\t\tvalues: node.values.map((listNodeItem) => {\n\t\t\t\tif (listNodeItem.kind !== \"ValueNode\") {\n\t\t\t\t\treturn listNodeItem;\n\t\t\t\t}\n\t\t\t\tconst valueNode = listNodeItem as ValueNode;\n\t\t\t\tconst serialized = maybeSerializeJson(valueNode.value);\n\t\t\t\tif (serialized === valueNode.value) {\n\t\t\t\t\treturn valueNode;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\t...valueNode,\n\t\t\t\t\tvalue: serialized,\n\t\t\t\t};\n\t\t\t}),\n\t\t};\n\t}\n\n\toverride transformValues(node: ValuesNode): ValuesNode {\n\t\treturn super.transformValues({\n\t\t\t...node,\n\t\t\tvalues: node.values.map((valueItemNode) => {\n\t\t\t\tif (valueItemNode.kind !== \"PrimitiveValueListNode\") {\n\t\t\t\t\treturn valueItemNode;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"ValueListNode\",\n\t\t\t\t\tvalues: valueItemNode.values.map(\n\t\t\t\t\t\t(value) =>\n\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\tkind: \"ValueNode\",\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t}) as ValueNode\n\t\t\t\t\t),\n\t\t\t\t} satisfies ValueListNode;\n\t\t\t}),\n\t\t});\n\t}\n}\n\nclass RenameTableTransformer extends OperationNodeTransformer {\n\t#map: Record<string, string>;\n\n\tconstructor(map: Record<string, string>) {\n\t\tsuper();\n\t\tthis.#map = map;\n\t}\n\n\toverride transformNode(node: any): any {\n\t\tconst transformed = super.transformNode(node);\n\t\tif (transformed?.kind === \"TableNode\") {\n\t\t\tconst identifier = transformed.table?.identifier?.name;\n\t\t\tconst schema = transformed.table?.schema?.name;\n\t\t\tconst mapped = identifier ? this.#map[identifier] : undefined;\n\t\t\tif (mapped) {\n\t\t\t\tconst tableNode =\n\t\t\t\t\tschema !== undefined\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tkind: \"SchemableIdentifierNode\",\n\t\t\t\t\t\t\t\tschema: { kind: \"IdentifierNode\", name: schema },\n\t\t\t\t\t\t\t\tidentifier: { kind: \"IdentifierNode\", name: mapped },\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tkind: \"SchemableIdentifierNode\",\n\t\t\t\t\t\t\t\tidentifier: { kind: \"IdentifierNode\", name: mapped },\n\t\t\t\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"TableNode\",\n\t\t\t\t\ttable: tableNode,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn transformed;\n\t}\n}\n\nfunction maybeSerializeJson(value: unknown): unknown {\n\tif (ArrayBuffer.isView(value) || value instanceof ArrayBuffer) {\n\t\treturn value;\n\t}\n\tif (value === null || value === undefined) {\n\t\treturn value;\n\t}\n\tif (typeof value === \"object\") {\n\t\treturn JSON.stringify(value);\n\t}\n\treturn value;\n}\n\nfunction parseJsonString(value: string): unknown {\n\tconst trimmed = value.trim();\n\tif (!trimmed) {\n\t\treturn value;\n\t}\n\n\tconst firstChar = trimmed[0];\n\tif (firstChar !== \"{\" && firstChar !== \"[\" && firstChar !== '\"') {\n\t\treturn value;\n\t}\n\n\ttry {\n\t\treturn JSON.parse(trimmed);\n\t} catch {\n\t\treturn value;\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upsertBundleNestedMatchByProperties.d.ts","sourceRoot":"/","sources":["import-export/upsertBundleNestedMatchByProperties.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EACX,oBAAoB,EACpB,eAAe,EACf,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,mCAAmC,
|
|
1
|
+
{"version":3,"file":"upsertBundleNestedMatchByProperties.d.ts","sourceRoot":"/","sources":["import-export/upsertBundleNestedMatchByProperties.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EACX,oBAAoB,EACpB,eAAe,EACf,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,mCAAmC,GAC/C,IAAI,MAAM,CAAC,oBAAoB,CAAC,EAChC,QAAQ,eAAe,KACrB,OAAO,CAAC,IAAI,CAgEd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMessageV1.d.ts","sourceRoot":"/","sources":["migrations/v2/createMessageV1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,SAAS,EACT,MAAM,8CAA8C,CAAC;AAEtD;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"createMessageV1.d.ts","sourceRoot":"/","sources":["migrations/v2/createMessageV1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,SAAS,EACT,MAAM,8CAA8C,CAAC;AAEtD;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,GAC3B,IAAI,MAAM,EACV,UAAU,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;;;;;;;;;;;;;;;CAmBtB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-sync.playground.test.d.ts","sourceRoot":"/","sources":["project/fs-sync.playground.test.ts"],"names":[],"mappings":""}
|