Changes all documents to have an explicit type

This commit is contained in:
2025-06-27 21:58:58 -07:00
parent 611eaca5b6
commit c00eb1d965
29 changed files with 309 additions and 363 deletions

View File

@@ -0,0 +1,46 @@
/// <reference path="../pb_data/types.d.ts" />
migrate((app) => {
const collection = app.findCollectionByNameOrId("pbc_3332084752")
// update collection data
unmarshal({
"indexes": [
"CREATE INDEX `idx_gxNj5R3hxv` ON `documents` (`type`)"
]
}, collection)
// add field
collection.fields.addAt(3, new Field({
"hidden": false,
"id": "select2363381545",
"maxSelect": 1,
"name": "type",
"presentable": false,
"required": false,
"system": false,
"type": "select",
"values": [
"location",
"monster",
"npc",
"scene",
"secret",
"session",
"treasure"
]
}))
return app.save(collection)
}, (app) => {
const collection = app.findCollectionByNameOrId("pbc_3332084752")
// update collection data
unmarshal({
"indexes": []
}, collection)
// remove field
collection.fields.removeById("select2363381545")
return app.save(collection)
})

View File

@@ -0,0 +1,25 @@
/// <reference path="../pb_data/types.d.ts" />
migrate((app) => {
const collection = app.findCollectionByNameOrId("pbc_3332084752")
// update collection data
unmarshal({
"indexes": [
"CREATE INDEX `idx_gxNj5R3hxv` ON `documents` (`type`)",
"CREATE INDEX `idx_KtpMErDe1C` ON `documents` (`campaign`)"
]
}, collection)
return app.save(collection)
}, (app) => {
const collection = app.findCollectionByNameOrId("pbc_3332084752")
// update collection data
unmarshal({
"indexes": [
"CREATE INDEX `idx_gxNj5R3hxv` ON `documents` (`type`)"
]
}, collection)
return app.save(collection)
})

View File

@@ -0,0 +1,55 @@
const DocType = [
"location",
"monster",
"npc",
"scene",
"secret",
"session",
"treasure",
];
function parseJsonB(data) {
if (typeof data === "string") {
return JSON.parse(data);
} else if (data instanceof Array) {
return JSON.parse(String.fromCharCode.apply(String, data));
}
throw new Error("Unsupported data type for JSON parsing");
}
/// <reference path="../pb_data/types.d.ts" />
migrate(
(app) => {
let documents = app.findAllRecords("documents");
console.log("Records to parse: ", documents.length);
documents: for (const doc of documents) {
if (!doc) continue;
let data = parseJsonB(doc.get("data"));
if (data[""]) {
data = data[""];
}
for (const t of DocType) {
if (data[t]) {
doc.set("type", t);
doc.set("data", data[t]);
app.save(doc);
continue documents;
}
}
throw new Error(`Unrecognized data: ${JSON.stringify(data)}`);
}
},
(app) => {
// add down queries...
let documents = app.findAllRecords("documents");
for (const doc of documents) {
if (!doc) continue;
doc.set("data", { [doc.get("type")]: doc.get("data") });
app.save(doc);
}
},
);