@prisma/migrate 6.19.0-integration-engines-6-19-0-30-push-otuqumlrponx-17ff4a7bd0bffdf0b40b58a399869660f7f0e368.1 → 6.19.0-integration-feat-remove-library-engine.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/dist/Migrate.js +3 -3
- package/dist/bin.js +27 -28
- package/dist/{chunk-J33EXHZB.js → chunk-2Z63R7HP.js} +10 -12
- package/dist/{chunk-F2XCBEZ4.js → chunk-3VYHMV3C.js} +10 -12
- package/dist/{chunk-Z27SI4AV.js → chunk-43R3GFIU.js} +4 -4
- package/dist/{chunk-3AKRTEIK.js → chunk-45NSU26W.js} +7 -7
- package/dist/{chunk-OP2BDF75.js → chunk-FRY7T46S.js} +10 -11
- package/dist/{chunk-O35BTK6Y.js → chunk-JVGKTJYZ.js} +5 -5
- package/dist/{chunk-VV4M6AN7.js → chunk-JX2HIV7V.js} +10 -10
- package/dist/{chunk-PHXLQVPT.js → chunk-L7EZFBB4.js} +40 -68
- package/dist/{chunk-R4IWP35Z.js → chunk-L7EZXEMS.js} +6 -6
- package/dist/{chunk-NB4FRYRQ.js → chunk-LNQIFWXN.js} +5 -5
- package/dist/{chunk-ZTIS675B.js → chunk-O57XJHDD.js} +64 -76
- package/dist/{chunk-BHJMJSM4.js → chunk-PJYHZKCF.js} +6 -6
- package/dist/{chunk-6ORQRJLP.js → chunk-QZUMMKCI.js} +16 -47
- package/dist/{chunk-VU5BLQUI.js → chunk-T2ACIU5M.js} +14 -8
- package/dist/{chunk-7TVX3D4W.js → chunk-TCBZUTEL.js} +27 -65
- package/dist/{chunk-TW22Y3AA.js → chunk-URVKYSZJ.js} +7 -7
- package/dist/{chunk-D6LYHB65.js → chunk-V5D5NSLS.js} +33 -25
- package/dist/{chunk-D4TRX77Y.js → chunk-W2NKGYXF.js} +7 -9
- package/dist/{chunk-QVMYNWAN.js → chunk-XA2JOJS2.js} +157 -70
- package/dist/commands/DbDrop.js +2 -2
- package/dist/commands/DbExecute.js +4 -4
- package/dist/commands/DbPull.js +5 -6
- package/dist/commands/DbPush.js +4 -4
- package/dist/commands/DbSeed.js +3 -3
- package/dist/commands/MigrateDeploy.js +4 -4
- package/dist/commands/MigrateDev.js +5 -5
- package/dist/commands/MigrateDiff.js +4 -4
- package/dist/commands/MigrateReset.js +5 -5
- package/dist/commands/MigrateResolve.js +4 -4
- package/dist/commands/MigrateStatus.js +4 -4
- package/dist/index.js +31 -32
- package/dist/internals/src/cli/getSchema.d.ts +1 -15
- package/dist/migrate/src/Migrate.d.ts +1 -2
- package/dist/migrate/src/utils/seed.d.ts +0 -6
- package/dist/open-GFNXULGD.js +593 -0
- package/dist/utils/getDatabaseVersionSafe.js +4 -4
- package/dist/utils/introspectSql.js +4 -4
- package/dist/utils/seed.js +2 -3
- package/dist/utils/setupCockroach.js +2 -2
- package/dist/utils/setupMSSQL.js +30734 -30124
- package/dist/utils/setupMongo.js +2048 -768
- package/dist/utils/setupPostgres.js +2 -2
- package/dist/utils/spinner.js +3 -3
- package/package.json +11 -11
- package/dist/chunk-RR6BKMNO.js +0 -80
- package/dist/migrate/src/utils/replaceOrAddDatasource.d.ts +0 -2
- package/dist/migrate/src/utils/replaceOrAddDatasource.test.d.ts +0 -1
- package/dist/utils/replaceOrAddDatasource.js +0 -25
- package/dist/utils/replaceOrAddDatasource.test.js +0 -207
|
@@ -33,12 +33,12 @@ __export(setupPostgres_exports, {
|
|
|
33
33
|
tearDownPostgres: () => tearDownPostgres
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(setupPostgres_exports);
|
|
36
|
-
var
|
|
36
|
+
var import_chunk_XA2JOJS2 = require("../chunk-XA2JOJS2.js");
|
|
37
37
|
var import_chunk_2ESYSVXG = require("../chunk-2ESYSVXG.js");
|
|
38
38
|
var import_promises = __toESM(require("node:fs/promises"));
|
|
39
39
|
var import_node_path = __toESM(require("node:path"));
|
|
40
40
|
var import_internals = require("@prisma/internals");
|
|
41
|
-
var import_pg = (0, import_chunk_2ESYSVXG.__toESM)((0,
|
|
41
|
+
var import_pg = (0, import_chunk_2ESYSVXG.__toESM)((0, import_chunk_XA2JOJS2.require_lib)());
|
|
42
42
|
async function setupPostgres(options) {
|
|
43
43
|
const { connectionString } = options;
|
|
44
44
|
const { dirname } = options;
|
package/dist/utils/spinner.js
CHANGED
|
@@ -18,10 +18,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var spinner_exports = {};
|
|
20
20
|
__export(spinner_exports, {
|
|
21
|
-
createSpinner: () =>
|
|
21
|
+
createSpinner: () => import_chunk_T2ACIU5M.createSpinner
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(spinner_exports);
|
|
24
|
-
var
|
|
25
|
-
var
|
|
24
|
+
var import_chunk_T2ACIU5M = require("../chunk-T2ACIU5M.js");
|
|
25
|
+
var import_chunk_JX2HIV7V = require("../chunk-JX2HIV7V.js");
|
|
26
26
|
var import_chunk_3WDCTXHL = require("../chunk-3WDCTXHL.js");
|
|
27
27
|
var import_chunk_2ESYSVXG = require("../chunk-2ESYSVXG.js");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma/migrate",
|
|
3
|
-
"version": "6.19.0-integration-
|
|
3
|
+
"version": "6.19.0-integration-feat-remove-library-engine.4",
|
|
4
4
|
"description": "This package is intended for Prisma's internal use",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/migrate/src/index.d.ts",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"@swc/core": "1.11.5",
|
|
22
22
|
"@swc/jest": "0.2.37",
|
|
23
23
|
"@types/jest": "29.5.14",
|
|
24
|
-
"@types/node": "
|
|
24
|
+
"@types/node": "~20.19.24",
|
|
25
25
|
"@types/pg": "8.11.11",
|
|
26
26
|
"@types/prompts": "2.4.9",
|
|
27
27
|
"@types/sqlite3": "3.1.11",
|
|
@@ -44,21 +44,21 @@
|
|
|
44
44
|
"tempy": "1.0.1",
|
|
45
45
|
"ts-pattern": "5.6.2",
|
|
46
46
|
"typescript": "5.4.5",
|
|
47
|
-
"@prisma/adapter-libsql": "6.19.0-integration-
|
|
47
|
+
"@prisma/adapter-libsql": "6.19.0-integration-feat-remove-library-engine.4"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
50
|
"@prisma/internals": "*"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@prisma/engines-version": "6.19.0-
|
|
53
|
+
"@prisma/engines-version": "6.19.0-29.next-ac95b5893b3c05bf39a2431fc1a748dd46152ab4",
|
|
54
54
|
"prompts": "2.4.2",
|
|
55
|
-
"@prisma/client-generator-registry": "6.19.0-integration-
|
|
56
|
-
"@prisma/
|
|
57
|
-
"@prisma/
|
|
58
|
-
"@prisma/get-platform": "6.19.0-integration-
|
|
59
|
-
"@prisma/
|
|
60
|
-
"@prisma/
|
|
61
|
-
"@prisma/internals": "6.19.0-integration-
|
|
55
|
+
"@prisma/client-generator-registry": "6.19.0-integration-feat-remove-library-engine.4",
|
|
56
|
+
"@prisma/debug": "6.19.0-integration-feat-remove-library-engine.4",
|
|
57
|
+
"@prisma/generator": "6.19.0-integration-feat-remove-library-engine.4",
|
|
58
|
+
"@prisma/get-platform": "6.19.0-integration-feat-remove-library-engine.4",
|
|
59
|
+
"@prisma/config": "6.19.0-integration-feat-remove-library-engine.4",
|
|
60
|
+
"@prisma/driver-adapter-utils": "6.19.0-integration-feat-remove-library-engine.4",
|
|
61
|
+
"@prisma/internals": "6.19.0-integration-feat-remove-library-engine.4"
|
|
62
62
|
},
|
|
63
63
|
"files": [
|
|
64
64
|
"README.md",
|
package/dist/chunk-RR6BKMNO.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var chunk_RR6BKMNO_exports = {};
|
|
20
|
-
__export(chunk_RR6BKMNO_exports, {
|
|
21
|
-
replaceOrAddDatasource: () => replaceOrAddDatasource
|
|
22
|
-
});
|
|
23
|
-
module.exports = __toCommonJS(chunk_RR6BKMNO_exports);
|
|
24
|
-
var import_internals = require("@prisma/internals");
|
|
25
|
-
function replaceOrAddDatasource(newDatasource, files) {
|
|
26
|
-
let replaced = false;
|
|
27
|
-
const result = files.map(([path, content]) => {
|
|
28
|
-
const replaceResult = replaceDatasourceSingle(newDatasource, content);
|
|
29
|
-
if (replaceResult.replaced) {
|
|
30
|
-
replaced = true;
|
|
31
|
-
}
|
|
32
|
-
return [path, replaceResult.content];
|
|
33
|
-
});
|
|
34
|
-
if (!replaced) {
|
|
35
|
-
appendToFirstFile(newDatasource, result);
|
|
36
|
-
}
|
|
37
|
-
return result;
|
|
38
|
-
}
|
|
39
|
-
function appendToFirstFile(newDatasource, files) {
|
|
40
|
-
const firstFile = files[0];
|
|
41
|
-
(0, import_internals.assertAlways)(firstFile, "There always should be at least on file in the schema");
|
|
42
|
-
firstFile[1] = `${newDatasource}
|
|
43
|
-
${firstFile[1]}`;
|
|
44
|
-
}
|
|
45
|
-
function replaceDatasourceSingle(newDatasource, content) {
|
|
46
|
-
const lines = content.split(/\r\n|\r|\n/g);
|
|
47
|
-
const existingDatasource = findDatasource(lines);
|
|
48
|
-
if (!existingDatasource) {
|
|
49
|
-
return { replaced: false, content };
|
|
50
|
-
}
|
|
51
|
-
lines.splice(existingDatasource.startLine, existingDatasource.endLine - existingDatasource.startLine + 1);
|
|
52
|
-
const noDatasource = lines.join("\n").trim();
|
|
53
|
-
return { replaced: true, content: `${newDatasource}
|
|
54
|
-
|
|
55
|
-
${noDatasource}` };
|
|
56
|
-
}
|
|
57
|
-
function findDatasource(lines) {
|
|
58
|
-
if (lines.length <= 2) {
|
|
59
|
-
return void 0;
|
|
60
|
-
}
|
|
61
|
-
const startLine = lines.findIndex((line) => {
|
|
62
|
-
const lineTrimmed = line.trim();
|
|
63
|
-
return lineTrimmed.startsWith("datasource") && lineTrimmed.endsWith("{");
|
|
64
|
-
});
|
|
65
|
-
if (startLine === -1) {
|
|
66
|
-
return void 0;
|
|
67
|
-
}
|
|
68
|
-
let endLine = -1;
|
|
69
|
-
for (let index = startLine; index < lines.length; index++) {
|
|
70
|
-
const lineTrimmed = lines[index].trim();
|
|
71
|
-
if (lineTrimmed.endsWith("}") && !lineTrimmed.startsWith("//")) {
|
|
72
|
-
endLine = index;
|
|
73
|
-
break;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
if (endLine === -1) {
|
|
77
|
-
return void 0;
|
|
78
|
-
}
|
|
79
|
-
return { startLine, endLine };
|
|
80
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var replaceOrAddDatasource_exports = {};
|
|
20
|
-
__export(replaceOrAddDatasource_exports, {
|
|
21
|
-
replaceOrAddDatasource: () => import_chunk_RR6BKMNO.replaceOrAddDatasource
|
|
22
|
-
});
|
|
23
|
-
module.exports = __toCommonJS(replaceOrAddDatasource_exports);
|
|
24
|
-
var import_chunk_RR6BKMNO = require("../chunk-RR6BKMNO.js");
|
|
25
|
-
var import_chunk_2ESYSVXG = require("../chunk-2ESYSVXG.js");
|
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var import_chunk_RR6BKMNO = require("../chunk-RR6BKMNO.js");
|
|
3
|
-
var import_chunk_2ESYSVXG = require("../chunk-2ESYSVXG.js");
|
|
4
|
-
var replacement = `datasource new {
|
|
5
|
-
provider = "sqlite"
|
|
6
|
-
url = "file:new.db"
|
|
7
|
-
}`;
|
|
8
|
-
test("single file, with existing datasource", () => {
|
|
9
|
-
const result = (0, import_chunk_RR6BKMNO.replaceOrAddDatasource)(replacement, [
|
|
10
|
-
[
|
|
11
|
-
"a.prisma",
|
|
12
|
-
`
|
|
13
|
-
datasource db {
|
|
14
|
-
provider = "postgresql"
|
|
15
|
-
url = "postgresql://example.com/db"
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
model A {
|
|
19
|
-
id Int @id
|
|
20
|
-
}
|
|
21
|
-
`
|
|
22
|
-
]
|
|
23
|
-
]);
|
|
24
|
-
expect(result).toMatchInlineSnapshot(`
|
|
25
|
-
[
|
|
26
|
-
[
|
|
27
|
-
"a.prisma",
|
|
28
|
-
"datasource new {
|
|
29
|
-
provider = "sqlite"
|
|
30
|
-
url = "file:new.db"
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
model A {
|
|
34
|
-
id Int @id
|
|
35
|
-
}",
|
|
36
|
-
],
|
|
37
|
-
]
|
|
38
|
-
`);
|
|
39
|
-
});
|
|
40
|
-
test("single file, with no datasource", () => {
|
|
41
|
-
const result = (0, import_chunk_RR6BKMNO.replaceOrAddDatasource)(replacement, [
|
|
42
|
-
[
|
|
43
|
-
"a.prisma",
|
|
44
|
-
`
|
|
45
|
-
model A {
|
|
46
|
-
id Int @id
|
|
47
|
-
}
|
|
48
|
-
`
|
|
49
|
-
]
|
|
50
|
-
]);
|
|
51
|
-
expect(result).toMatchInlineSnapshot(`
|
|
52
|
-
[
|
|
53
|
-
[
|
|
54
|
-
"a.prisma",
|
|
55
|
-
"datasource new {
|
|
56
|
-
provider = "sqlite"
|
|
57
|
-
url = "file:new.db"
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
model A {
|
|
61
|
-
id Int @id
|
|
62
|
-
}
|
|
63
|
-
",
|
|
64
|
-
],
|
|
65
|
-
]
|
|
66
|
-
`);
|
|
67
|
-
});
|
|
68
|
-
test("single file, empty", () => {
|
|
69
|
-
const result = (0, import_chunk_RR6BKMNO.replaceOrAddDatasource)(replacement, [["a.prisma", ""]]);
|
|
70
|
-
expect(result).toMatchInlineSnapshot(`
|
|
71
|
-
[
|
|
72
|
-
[
|
|
73
|
-
"a.prisma",
|
|
74
|
-
"datasource new {
|
|
75
|
-
provider = "sqlite"
|
|
76
|
-
url = "file:new.db"
|
|
77
|
-
}
|
|
78
|
-
",
|
|
79
|
-
],
|
|
80
|
-
]
|
|
81
|
-
`);
|
|
82
|
-
});
|
|
83
|
-
test("single file, with existing datasource and commented out closing bracket", () => {
|
|
84
|
-
const result = (0, import_chunk_RR6BKMNO.replaceOrAddDatasource)(replacement, [
|
|
85
|
-
[
|
|
86
|
-
"a.prisma",
|
|
87
|
-
`
|
|
88
|
-
datasource db {
|
|
89
|
-
provider = "postgresql"
|
|
90
|
-
url = "postgresql://example.com/db"
|
|
91
|
-
// }
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
model A {
|
|
95
|
-
id Int @id
|
|
96
|
-
}
|
|
97
|
-
`
|
|
98
|
-
]
|
|
99
|
-
]);
|
|
100
|
-
expect(result).toMatchInlineSnapshot(`
|
|
101
|
-
[
|
|
102
|
-
[
|
|
103
|
-
"a.prisma",
|
|
104
|
-
"datasource new {
|
|
105
|
-
provider = "sqlite"
|
|
106
|
-
url = "file:new.db"
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
model A {
|
|
110
|
-
id Int @id
|
|
111
|
-
}",
|
|
112
|
-
],
|
|
113
|
-
]
|
|
114
|
-
`);
|
|
115
|
-
});
|
|
116
|
-
test("multiple files, with existing datasource", () => {
|
|
117
|
-
const result = (0, import_chunk_RR6BKMNO.replaceOrAddDatasource)(replacement, [
|
|
118
|
-
[
|
|
119
|
-
"a.prisma",
|
|
120
|
-
`
|
|
121
|
-
model A {
|
|
122
|
-
id Int @id
|
|
123
|
-
}
|
|
124
|
-
`
|
|
125
|
-
],
|
|
126
|
-
[
|
|
127
|
-
"b.prisma",
|
|
128
|
-
`
|
|
129
|
-
datasource db {
|
|
130
|
-
provider = "postgresql"
|
|
131
|
-
url = "postgresql://example.com/db"
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
model B {
|
|
135
|
-
id Int @id
|
|
136
|
-
}
|
|
137
|
-
`
|
|
138
|
-
]
|
|
139
|
-
]);
|
|
140
|
-
expect(result).toMatchInlineSnapshot(`
|
|
141
|
-
[
|
|
142
|
-
[
|
|
143
|
-
"a.prisma",
|
|
144
|
-
"
|
|
145
|
-
model A {
|
|
146
|
-
id Int @id
|
|
147
|
-
}
|
|
148
|
-
",
|
|
149
|
-
],
|
|
150
|
-
[
|
|
151
|
-
"b.prisma",
|
|
152
|
-
"datasource new {
|
|
153
|
-
provider = "sqlite"
|
|
154
|
-
url = "file:new.db"
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
model B {
|
|
158
|
-
id Int @id
|
|
159
|
-
}",
|
|
160
|
-
],
|
|
161
|
-
]
|
|
162
|
-
`);
|
|
163
|
-
});
|
|
164
|
-
test("multiple files, no datasource", () => {
|
|
165
|
-
const result = (0, import_chunk_RR6BKMNO.replaceOrAddDatasource)(replacement, [
|
|
166
|
-
[
|
|
167
|
-
"a.prisma",
|
|
168
|
-
`
|
|
169
|
-
model A {
|
|
170
|
-
id Int @id
|
|
171
|
-
}
|
|
172
|
-
`
|
|
173
|
-
],
|
|
174
|
-
[
|
|
175
|
-
"b.prisma",
|
|
176
|
-
`
|
|
177
|
-
model B {
|
|
178
|
-
id Int @id
|
|
179
|
-
}
|
|
180
|
-
`
|
|
181
|
-
]
|
|
182
|
-
]);
|
|
183
|
-
expect(result).toMatchInlineSnapshot(`
|
|
184
|
-
[
|
|
185
|
-
[
|
|
186
|
-
"a.prisma",
|
|
187
|
-
"datasource new {
|
|
188
|
-
provider = "sqlite"
|
|
189
|
-
url = "file:new.db"
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
model A {
|
|
193
|
-
id Int @id
|
|
194
|
-
}
|
|
195
|
-
",
|
|
196
|
-
],
|
|
197
|
-
[
|
|
198
|
-
"b.prisma",
|
|
199
|
-
"
|
|
200
|
-
model B {
|
|
201
|
-
id Int @id
|
|
202
|
-
}
|
|
203
|
-
",
|
|
204
|
-
],
|
|
205
|
-
]
|
|
206
|
-
`);
|
|
207
|
-
});
|