cantian-mongodb 0.0.29 → 0.0.31
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/migration.js +52 -0
- package/dist/migration.js.map +1 -1
- package/dist/mongoClient.d.ts +2 -1
- package/dist/mongoClient.js.map +1 -1
- package/package.json +1 -1
package/dist/migration.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
1
2
|
import { mongoClient } from './mongoClient.js';
|
|
2
3
|
export function generateIndexName(key) {
|
|
3
4
|
return Object.entries(key)
|
|
@@ -24,6 +25,31 @@ async function migrateSchema(db, collectionName, schema) {
|
|
|
24
25
|
console.info(`Create collection '${collectionName}' successfully with schema: ${JSON.stringify(schema)}`);
|
|
25
26
|
}
|
|
26
27
|
}
|
|
28
|
+
async function migrateSearch(collection, indexes) {
|
|
29
|
+
const remoteIndexMap = {};
|
|
30
|
+
const existingIndexes = collection.listSearchIndexes();
|
|
31
|
+
for await (const existingIndex of existingIndexes) {
|
|
32
|
+
remoteIndexMap[existingIndex.name] = existingIndex;
|
|
33
|
+
}
|
|
34
|
+
for (const localIndex of indexes) {
|
|
35
|
+
if (!localIndex.name) {
|
|
36
|
+
throw new Error(`Index name is required when migrating search indexes for ${collection.collectionName}.`);
|
|
37
|
+
}
|
|
38
|
+
const remoteIndex = remoteIndexMap[localIndex.name];
|
|
39
|
+
if (!remoteIndex) {
|
|
40
|
+
await collection.createSearchIndex(localIndex);
|
|
41
|
+
console.info(`Create the search index ${localIndex.name} for ${collection.collectionName} successfully.`, localIndex);
|
|
42
|
+
}
|
|
43
|
+
else if (!isSameDefinition(remoteIndex.latestDefinition, localIndex.definition)) {
|
|
44
|
+
await collection.dropSearchIndex(remoteIndex.name);
|
|
45
|
+
await collection.createSearchIndex(localIndex);
|
|
46
|
+
console.info(`Update the search index ${localIndex.name} for ${collection.collectionName} successfully.`, localIndex);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
console.info(`The search index ${localIndex.name} for ${collection.collectionName} is already up to date.`, localIndex);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
27
53
|
export const migrate = async (db, model) => {
|
|
28
54
|
const collectionName = model.collection.collectionName;
|
|
29
55
|
await migrateSchema(db, collectionName, model.schema);
|
|
@@ -51,6 +77,9 @@ export const migrate = async (db, model) => {
|
|
|
51
77
|
console.info(`Removed an index from ${collectionName} successfully.`, existingIndex);
|
|
52
78
|
}
|
|
53
79
|
}
|
|
80
|
+
if (model.searchIndexes?.length) {
|
|
81
|
+
await migrateSearch(model.collection, model.searchIndexes);
|
|
82
|
+
}
|
|
54
83
|
};
|
|
55
84
|
export const migrateRemoteHandler = async (event) => {
|
|
56
85
|
const db = mongoClient.db(event.dbName, { ignoreUndefined: true });
|
|
@@ -63,4 +92,27 @@ export const migrateRemoteHandler = async (event) => {
|
|
|
63
92
|
});
|
|
64
93
|
}
|
|
65
94
|
};
|
|
95
|
+
function pickDefinedFields(def, template) {
|
|
96
|
+
if (Array.isArray(template)) {
|
|
97
|
+
return template.map((t, i) => pickDefinedFields(def?.[i], t));
|
|
98
|
+
}
|
|
99
|
+
else if (template && typeof template === 'object') {
|
|
100
|
+
const result = {};
|
|
101
|
+
for (const key of Object.keys(template)) {
|
|
102
|
+
result[key] = pickDefinedFields(def?.[key], template[key]);
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
return def;
|
|
107
|
+
}
|
|
108
|
+
function isSameDefinition(remoteDef, localDef) {
|
|
109
|
+
const filteredRemote = pickDefinedFields(remoteDef, localDef);
|
|
110
|
+
try {
|
|
111
|
+
assert.deepStrictEqual(filteredRemote, localDef);
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
66
118
|
//# sourceMappingURL=migration.js.map
|
package/dist/migration.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../src/migration.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../src/migration.ts"],"names":[],"mappings":"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"}
|
package/dist/mongoClient.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { JSONSchema } from 'json-schema-to-ts';
|
|
2
|
-
import { Collection, CreateIndexesOptions, MongoClient } from 'mongodb';
|
|
2
|
+
import { Collection, CreateIndexesOptions, MongoClient, SearchIndexDescription } from 'mongodb';
|
|
3
3
|
export type Index = {
|
|
4
4
|
key: any;
|
|
5
5
|
options?: CreateIndexesOptions;
|
|
@@ -7,6 +7,7 @@ export type Index = {
|
|
|
7
7
|
export type Model = {
|
|
8
8
|
schema: JSONSchema;
|
|
9
9
|
indexes?: Index[];
|
|
10
|
+
searchIndexes?: SearchIndexDescription[];
|
|
10
11
|
collection: Collection;
|
|
11
12
|
};
|
|
12
13
|
export declare const mongoClient: MongoClient;
|
package/dist/mongoClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongoClient.js","sourceRoot":"","sources":["../src/mongoClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAoC,WAAW,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"mongoClient.js","sourceRoot":"","sources":["../src/mongoClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAoC,WAAW,EAAE,QAAQ,EAA0B,MAAM,SAAS,CAAC;AAW1G,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;IAClE,gBAAgB,EAAE,IAAI;IACtB,eAAe,EAAE,KAAK;IACtB,kBAAkB,EAAE,KAAK;IACzB,SAAS,EAAE;QACT,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,WAAW,EAAE;KAC7C;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC"}
|