mirror of
https://github.com/zkldi/Tachi.git
synced 2026-10-04 12:58:11 +03:00
fix: make seeds test pass and refactor all require to import
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
function FindChartWithPTDFVersion(collection, songID, playtype, difficulty, version) {
|
||||
export function FindChartWithPTDFVersion(collection, songID, playtype, difficulty, version) {
|
||||
return collection.find(
|
||||
(chart) =>
|
||||
chart.song.id === songID &&
|
||||
@@ -8,11 +8,6 @@ function FindChartWithPTDFVersion(collection, songID, playtype, difficulty, vers
|
||||
);
|
||||
}
|
||||
|
||||
function FindSongWithTitle(collection, title) {
|
||||
export function FindSongWithTitle(collection, title) {
|
||||
return collection.find((e) => e.title === title || e.altTitles.includes(title));
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
FindChartWithPTDFVersion,
|
||||
FindSongWithTitle,
|
||||
};
|
||||
|
||||
@@ -5,12 +5,15 @@
|
||||
// This script is for importing the collections *immediately* into
|
||||
// any old mongo instance.
|
||||
|
||||
const { execSync } = require("child_process");
|
||||
const { Command } = require("commander");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
import { execSync } from "child_process";
|
||||
import { Command } from "commander";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const logger = require("./log");
|
||||
import { log as logger } from "./log.ts";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
const program = new Command();
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { EfficientInPlaceDeepmerge, MutateCollection } = require("./util");
|
||||
import { EfficientInPlaceDeepmerge, MutateCollection } from "./util.js";
|
||||
|
||||
function DoesMatchCriteria(element, mutation) {
|
||||
for (const [key, value] of Object.entries(mutation.match)) {
|
||||
@@ -10,7 +10,7 @@ function DoesMatchCriteria(element, mutation) {
|
||||
return true;
|
||||
}
|
||||
|
||||
function ApplyMutations(name, mutations) {
|
||||
export function ApplyMutations(name, mutations) {
|
||||
MutateCollection(name, (collection) => {
|
||||
for (const element of collection) {
|
||||
for (const mutation of mutations) {
|
||||
@@ -23,7 +23,3 @@ function ApplyMutations(name, mutations) {
|
||||
return collection;
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
ApplyMutations,
|
||||
};
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"name": "tachi-seeds-scripts",
|
||||
"type": "module",
|
||||
"version": "0.1.0-see-project-root",
|
||||
"private": true,
|
||||
"description": "Scripts for dealing with tachi-seeds.",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { IterateCollections } = require("../util");
|
||||
import { IterateCollections } from "../util.js";
|
||||
|
||||
IterateCollections((data, filename) => {
|
||||
if (!filename.startsWith("songs-") && !filename.startsWith("charts-")) {
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
const crypto = require("crypto");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
import crypto from "crypto";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const { ReadCollection, WriteCollection } = require("../util");
|
||||
import { ReadCollection, WriteCollection } from "../util.js";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const COLLECTIONS_DIR = path.join(__dirname, "../../../db/seeds");
|
||||
|
||||
const NOW = Date.now();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { MutateCollection } = require("../util");
|
||||
import { MutateCollection } from "../util.js";
|
||||
|
||||
// This is an example SINGLE-USE script. It does something quickly and ad-hoc,
|
||||
// that is of absolutely no interest to anyone else.
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const { FormatGame } = require("../../common/src");
|
||||
import { FormatGame } from "../../common/src/index.ts";
|
||||
|
||||
const { CreateFolderID, MutateCollection } = require("../util");
|
||||
import { CreateFolderID, MutateCollection } from "../util.js";
|
||||
|
||||
module.exports = function AddLevelVersionFolders(name, game, playtypes, version, levels) {
|
||||
export default function AddLevelVersionFolders(name, game, playtypes, version, levels) {
|
||||
const ptFolders = {};
|
||||
|
||||
MutateCollection("folders.json", (folders) => {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { CreateFolderID, MutateCollection } = require("../util");
|
||||
import { CreateFolderID, MutateCollection } from "../util.js";
|
||||
|
||||
// Change these for whatever table you are adding.
|
||||
const GAME = "ddr";
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const { FindChartWithPTDFVersion } = require("../../../finders");
|
||||
const { ApplyMutations } = require("../../../mutations");
|
||||
const { ReadCollection } = require("../../../util");
|
||||
import { FindChartWithPTDFVersion } from "../../../finders.js";
|
||||
import { ApplyMutations } from "../../../mutations.js";
|
||||
import { ReadCollection } from "../../../util.js";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
const MANUAL_TITLE_MAP = {
|
||||
// Zero idea
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
const { Command } = require("commander");
|
||||
const fetch = require("node-fetch");
|
||||
import { Command } from "commander";
|
||||
import fetch from "node-fetch";
|
||||
|
||||
const { MutateCollection } = require("../../util");
|
||||
import { MutateCollection } from "../../util.js";
|
||||
|
||||
const program = new Command();
|
||||
program
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
const { Command } = require("commander");
|
||||
const { XMLParser } = require("fast-xml-parser");
|
||||
const fs = require("fs");
|
||||
const { GAME_PT_CONFIGS } = require("../../../common/src");
|
||||
import { Command } from "commander";
|
||||
import fs from "fs";
|
||||
import { XMLParser } from "fast-xml-parser";
|
||||
|
||||
const { MutateCollection } = require("../../util");
|
||||
import { GAME_PT_CONFIGS } from "../../../common/src/index.ts";
|
||||
import { MutateCollection } from "../../util.js";
|
||||
|
||||
const program = new Command();
|
||||
program
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const { Command } = require("commander");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
import { Command } from "commander";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
|
||||
const { MutateCollection } = require("../../util");
|
||||
import { MutateCollection } from "../../util.js";
|
||||
|
||||
const program = new Command();
|
||||
program.option("-i, --input <sieglinde output/folder>");
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { CreateFolderID, MutateCollection } = require("../../util");
|
||||
import { CreateFolderID, MutateCollection } from "../../util.js";
|
||||
|
||||
const PLAYTYPES = ["SP", "DP"];
|
||||
const VERSIONS = ["world", "konaste", "a3", "a20plus", "a20", "a"];
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
const logger = require("../log");
|
||||
const { CreateFolderID, MutateCollection, ReadCollection, WriteCollection } = require("../util");
|
||||
import { log as logger } from "../log.ts";
|
||||
import {
|
||||
CreateFolderID,
|
||||
MutateCollection,
|
||||
ReadCollection,
|
||||
WriteCollection,
|
||||
} from "../util.js";
|
||||
|
||||
|
||||
const translateMap = new Map();
|
||||
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
const logger = require("../log");
|
||||
const { CreateGoalID, MutateCollection, ReadCollection, WriteCollection } = require("../util");
|
||||
import { log as logger } from "../log.ts";
|
||||
import {
|
||||
CreateGoalID,
|
||||
MutateCollection,
|
||||
ReadCollection,
|
||||
WriteCollection,
|
||||
} from "../util.js";
|
||||
|
||||
|
||||
const translateMap = new Map();
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { PrettyVersions } = require("tachi-common/config/versions");
|
||||
import { PrettyVersions } from "tachi-common/config/versions";
|
||||
|
||||
const { CreateFolderID, MutateCollection } = require("../../util");
|
||||
import { CreateFolderID, MutateCollection } from "../../util.js";
|
||||
|
||||
function CreateFolder(criteria, playtype, title) {
|
||||
const f = {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { MutateCollection } = require("../../util");
|
||||
import { MutateCollection } from "../../util.js";
|
||||
|
||||
// this script will add "newVersion" to all charts that are in "baseVersion"
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
const { Command } = require("commander");
|
||||
const { XMLParser } = require("fast-xml-parser");
|
||||
const fs = require("fs");
|
||||
import { Command } from "commander";
|
||||
import { XMLParser } from "fast-xml-parser";
|
||||
import fs from "fs";
|
||||
|
||||
const { CreateChartID, MutateCollection } = require("../../util");
|
||||
import { CreateChartID, MutateCollection } from "../../util.js";
|
||||
|
||||
const program = new Command();
|
||||
program
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { CreateChartID, MutateCollection } = require("../../util");
|
||||
import { CreateChartID, MutateCollection } from "../../util.js";
|
||||
|
||||
const inGameID = 80052;
|
||||
const tachiSongID = 2353;
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const { FindChartWithPTDFVersion, FindSongWithTitle } = require("../../../finders");
|
||||
const { ApplyMutations } = require("../../../mutations");
|
||||
const { ReadCollection } = require("../../../util");
|
||||
import { FindChartWithPTDFVersion, FindSongWithTitle } from "../../../finders.js";
|
||||
import { ApplyMutations } from "../../../mutations.js";
|
||||
import { ReadCollection } from "../../../util.js";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
const songs = ReadCollection("songs-iidx.json");
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { MutateCollection } = require("../../util");
|
||||
import { MutateCollection } from "../../util.js";
|
||||
|
||||
function idMatch(idSet, inGameID) {
|
||||
if (Array.isArray(inGameID)) {
|
||||
@@ -15,7 +15,7 @@ function idMatch(idSet, inGameID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
module.exports = (idSet) =>
|
||||
export default (idSet) =>
|
||||
MutateCollection("charts-iidx.json", (charts) => {
|
||||
for (const chart of charts) {
|
||||
if (
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { MutateCollection } = require("../../util");
|
||||
import { MutateCollection } from "../../util.js";
|
||||
|
||||
// This is the numerical ID of the song we want to add to the Infinitas table
|
||||
// Make sure to double check if it's using legacy charts for some stupid reason
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { CreateChartID, MutateCollection } = require("../../util");
|
||||
import { CreateChartID, MutateCollection } from "../../util.js";
|
||||
|
||||
const inGameID = 25021;
|
||||
const tachiSongID = 1728;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { MutateCollection } = require("../../util");
|
||||
import { MutateCollection } from "../../util.js";
|
||||
|
||||
// This is the numerical ID of the song we want to add to the Infinitas table
|
||||
// Make sure to double check if it's using legacy charts for some stupid reason
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
const { Command } = require("commander");
|
||||
const fs = require("fs");
|
||||
const fetch = require("node-fetch");
|
||||
const path = require("path");
|
||||
import { Command } from "commander";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import fetch from "node-fetch";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const logger = require("../../log");
|
||||
const { MutateCollection, ReadCollection } = require("../../util");
|
||||
import { log as logger } from "../../log.ts";
|
||||
import { MutateCollection, ReadCollection } from "../../util.js";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
const program = new Command();
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { CreateFolderID, MutateCollection } = require("../../util");
|
||||
import { CreateFolderID, MutateCollection } from "../../util.js";
|
||||
|
||||
const folders = [];
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
const { Command } = require("commander");
|
||||
const { readFileSync } = require("fs");
|
||||
import { Command } from "commander";
|
||||
import { readFileSync } from "fs";
|
||||
|
||||
const {
|
||||
import {
|
||||
CreateChartID,
|
||||
GetFreshSongIDGenerator,
|
||||
MutateCollection,
|
||||
ReadCollection,
|
||||
WriteCollection,
|
||||
} = require("../../util");
|
||||
} from "../../util.js";
|
||||
|
||||
const program = new Command();
|
||||
program.requiredOption("-i, --input <file.json>");
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const { CreateFolderID, MutateCollection } = require("../../util");
|
||||
import { CreateFolderID, MutateCollection } from "../../util.js";
|
||||
|
||||
// Change these for whatever table you are adding.
|
||||
const GAME = "maimaidx";
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
const { GetGamePTConfig } = require("../../../common/src");
|
||||
import { Command } from "commander";
|
||||
|
||||
const { CreateFolderID, MutateCollection } = require("../../util");
|
||||
import { GetGamePTConfig } from "../../../common/src/index.ts";
|
||||
import { CreateFolderID, MutateCollection } from "../../util.js";
|
||||
|
||||
const tableMainFolders = [];
|
||||
const tableAllFolders = [];
|
||||
|
||||
const { Command } = require("commander");
|
||||
|
||||
const program = new Command();
|
||||
program.requiredOption("-v, --version <version>");
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
const { Command } = require("commander");
|
||||
const fs = require("fs");
|
||||
import { Command } from "commander";
|
||||
import fs from "fs";
|
||||
|
||||
const {
|
||||
import {
|
||||
CreateChartID,
|
||||
GetFreshSongIDGenerator: GetFreshScoreIDGenerator,
|
||||
ReadCollection,
|
||||
WriteCollection,
|
||||
} = require("../../util");
|
||||
} from "../../util.js";
|
||||
|
||||
const program = new Command();
|
||||
program.requiredOption("-f, --file <mxb-json>");
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
const { Command } = require("commander");
|
||||
const crypto = require("crypto");
|
||||
const { XMLParser } = require("fast-xml-parser");
|
||||
const fs = require("fs");
|
||||
const iconv = require("iconv-lite");
|
||||
const path = require("path");
|
||||
import { Command } from "commander";
|
||||
import crypto from "crypto";
|
||||
import { XMLParser } from "fast-xml-parser";
|
||||
import fs from "fs";
|
||||
import iconv from "iconv-lite";
|
||||
import path from "path";
|
||||
|
||||
const program = new Command();
|
||||
program
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
/* eslint no-labels: "off", require-unicode-regexp: "off", no-irregular-whitespace: "off" */
|
||||
import { Command } from "commander";
|
||||
import { parse } from "csv-parse/sync";
|
||||
import fs from "fs";
|
||||
|
||||
const { Command } = require("commander");
|
||||
const { parse } = require("csv-parse/sync");
|
||||
const fs = require("fs");
|
||||
|
||||
const { MutateCollection, ReadCollection } = require("../../util");
|
||||
import { MutateCollection, ReadCollection } from "../../util.js";
|
||||
|
||||
// The tier lists are available at
|
||||
// https://docs.google.com/spreadsheets/d/1cFltguBvPplBem-x1STHnG3k4TZzFfyNEZ-RwsQszoo/edit
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
const { Command } = require("commander");
|
||||
const Encoding = require("encoding-japanese");
|
||||
const { XMLParser } = require("fast-xml-parser");
|
||||
const fs = require("fs");
|
||||
import { Command } from "commander";
|
||||
import Encoding from "encoding-japanese";
|
||||
import { XMLParser } from "fast-xml-parser";
|
||||
import fs from "fs";
|
||||
|
||||
const { CreateChartID, ReadCollection, WriteCollection } = require("../../util");
|
||||
import { CreateChartID, ReadCollection, WriteCollection } from "../../util.js";
|
||||
|
||||
const VERSIONS = {
|
||||
1: "booth",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
const { Command } = require("commander");
|
||||
const fs = require("fs");
|
||||
import { Command } from "commander";
|
||||
import fs from "fs";
|
||||
|
||||
const { CreateChartID, MutateCollection, ReadCollection } = require("../../util");
|
||||
import { CreateChartID, MutateCollection, ReadCollection } from "../../util.js";
|
||||
|
||||
const program = new Command();
|
||||
program.option("-f, --file <zk.json>");
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { Command } = require("commander");
|
||||
import { Command } from "commander";
|
||||
|
||||
const { MutateCollection, ReadCollection, WriteCollection } = require("../util");
|
||||
import { MutateCollection, ReadCollection, WriteCollection } from "../util.js";
|
||||
|
||||
const program = new Command();
|
||||
program.requiredOption("-t, --tableID <tableID>");
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
const { Database } = require("bun:sqlite");
|
||||
const { Command } = require("commander");
|
||||
const fs = require("fs");
|
||||
import { Database } from "bun:sqlite";
|
||||
import { Command } from "commander";
|
||||
import fs from "fs";
|
||||
|
||||
const {
|
||||
import {
|
||||
CreateChartID,
|
||||
GetFreshSongIDGenerator,
|
||||
ReadCollection,
|
||||
WriteCollection,
|
||||
} = require("../../util");
|
||||
} from "../../util.js";
|
||||
|
||||
const program = new Command();
|
||||
program.requiredOption("-d, --db <maps.db>");
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
const { Command } = require("commander");
|
||||
const { GetGamePTConfig } = require("../../../common/src");
|
||||
import { Command } from "commander";
|
||||
import { GetGamePTConfig } from "../../../common/src/index.ts";
|
||||
|
||||
import { CreateFolderID, MutateCollection } from "../../util.js";
|
||||
|
||||
const { CreateFolderID, MutateCollection } = require("../../util");
|
||||
|
||||
const LEVELS = [
|
||||
"1",
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
const { Command } = require("commander");
|
||||
const fs = require("fs");
|
||||
import { Command } from "commander";
|
||||
import fs from "fs";
|
||||
|
||||
const {
|
||||
import {
|
||||
CreateChartID,
|
||||
GetFreshSongIDGenerator,
|
||||
MutateCollection,
|
||||
ReadCollection,
|
||||
} = require("../../util");
|
||||
} from "../../util.js";
|
||||
|
||||
const getNewSongID = GetFreshSongIDGenerator("wacca");
|
||||
const waccaDiffIndex = ["NORMAL", "HARD", "EXPERT", "INFERNO"];
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const { spawnSync } = require("child_process");
|
||||
import { spawnSync } from "child_process";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
function ChartSort(a, b) {
|
||||
// sink all 2dxtra charts to the bottom
|
||||
@@ -76,6 +77,10 @@ function BMSCourseSort(a, b) {
|
||||
*/
|
||||
function SortSeeds(options = {}) {
|
||||
const { skipBiomeFormat = false } = options;
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
|
||||
const collectionsDir = path.join(__dirname, "../../db/seeds");
|
||||
const collections = fs.readdirSync(collectionsDir).filter((name) => name.endsWith(".json"));
|
||||
|
||||
@@ -140,8 +145,11 @@ function SortObjectKeys(object) {
|
||||
return newObject;
|
||||
}
|
||||
|
||||
if (require.main === module) {
|
||||
const __resolvedMain =
|
||||
process.argv[1] !== undefined ? path.resolve(process.argv[1]) : "";
|
||||
|
||||
if (__resolvedMain === fileURLToPath(import.meta.url)) {
|
||||
SortSeeds();
|
||||
}
|
||||
|
||||
module.exports = SortSeeds;
|
||||
export default SortSeeds;
|
||||
|
||||
@@ -1,25 +1,32 @@
|
||||
const fjsh = require("fast-json-stable-hash");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
import fjsh from "fast-json-stable-hash";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const {
|
||||
import {
|
||||
CreateChartID,
|
||||
CreateFolderID,
|
||||
CreateQuestID,
|
||||
CreateSongID,
|
||||
CreateTableID,
|
||||
} = require("tachi-common");
|
||||
} from "tachi-common";
|
||||
|
||||
const DeterministicCollectionSort = require("./sort-seeds");
|
||||
import DeterministicCollectionSort from "./sort-seeds.js";
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
|
||||
// Seed JSON lives at repo root: db/seeds/ (was typescript/collections).
|
||||
const COLLECTIONS_DIR = path.join(__dirname, "../../db/seeds");
|
||||
|
||||
/** Third argument to {@link WriteCollection} / {@link MutateCollection}: deterministic sort still runs. */
|
||||
const WRITE_COLLECTION_SKIP_BIOME = Object.freeze({ skipBiomeFormat: true });
|
||||
export const WRITE_COLLECTION_SKIP_BIOME = Object.freeze({ skipBiomeFormat: true });
|
||||
|
||||
/**
|
||||
* @param {(data: unknown, collection: string) => unknown} cb
|
||||
* @param {{ skipBiomeFormat?: boolean }} [writeOptions] forwarded to {@link DeterministicCollectionSort} after loop
|
||||
*/
|
||||
function IterateCollections(cb, writeOptions) {
|
||||
export function IterateCollections(cb, writeOptions) {
|
||||
for (const collection of fs
|
||||
.readdirSync(COLLECTIONS_DIR)
|
||||
.filter((name) => name.endsWith(".json"))) {
|
||||
@@ -34,10 +41,7 @@ function IterateCollections(cb, writeOptions) {
|
||||
DeterministicCollectionSort(writeOptions);
|
||||
}
|
||||
|
||||
// Seed JSON lives at repo root: db/seeds/ (was typescript/collections).
|
||||
const COLLECTIONS_DIR = path.join(__dirname, "../../db/seeds");
|
||||
|
||||
function ReadCollection(name, throwIfNotFound = false) {
|
||||
export function ReadCollection(name, throwIfNotFound = false) {
|
||||
const p = path.join(COLLECTIONS_DIR, name);
|
||||
if (!fs.existsSync(p)) {
|
||||
if (throwIfNotFound) {
|
||||
@@ -57,7 +61,7 @@ function ReadCollection(name, throwIfNotFound = false) {
|
||||
* @param {{ skipBiomeFormat?: boolean }} [writeOptions] pass `{ skipBiomeFormat: true }` to skip
|
||||
* running Biome over all of `db/seeds` after the mandatory deterministic sort pass (much faster).
|
||||
*/
|
||||
function WriteCollection(name, data, writeOptions) {
|
||||
export function WriteCollection(name, data, writeOptions) {
|
||||
fs.writeFileSync(path.join(COLLECTIONS_DIR, name), JSON.stringify(data, null, "\t"));
|
||||
|
||||
DeterministicCollectionSort(writeOptions);
|
||||
@@ -68,7 +72,7 @@ function WriteCollection(name, data, writeOptions) {
|
||||
* @param {(collection: unknown) => unknown} cb
|
||||
* @param {{ skipBiomeFormat?: boolean }} [writeOptions] see {@link WriteCollection}
|
||||
*/
|
||||
function MutateCollection(name, cb, writeOptions) {
|
||||
export function MutateCollection(name, cb, writeOptions) {
|
||||
const data = cb(ReadCollection(name));
|
||||
|
||||
if (data === undefined) {
|
||||
@@ -81,21 +85,21 @@ function MutateCollection(name, cb, writeOptions) {
|
||||
// this api sucks, maybe dont use it
|
||||
//
|
||||
// TODO(zk): remove this and give folders actual readable names
|
||||
function CreateLegacyFolderID(query, game, playtype) {
|
||||
export function CreateLegacyFolderID(query, game, playtype) {
|
||||
return `F${fjsh.hash(Object.assign({ game, playtype }, query), "SHA256")}`;
|
||||
}
|
||||
|
||||
function CreateLegacyFolderIDFromFolder(folder) {
|
||||
export function CreateLegacyFolderIDFromFolder(folder) {
|
||||
return CreateLegacyFolderID(folder.data, folder.game, folder.playtype);
|
||||
}
|
||||
|
||||
function CreateGoalID(charts, criteria, game) {
|
||||
export function CreateGoalID(charts, criteria, game) {
|
||||
return `G${fjsh.hash({ charts, criteria, game }, "sha256")}`;
|
||||
}
|
||||
|
||||
// quick inplace deepmerge hack
|
||||
// probably doesn't work for arrays, i don't care though.
|
||||
function EfficientInPlaceDeepmerge(ref, apply) {
|
||||
export function EfficientInPlaceDeepmerge(ref, apply) {
|
||||
for (const key in apply) {
|
||||
if (typeof apply[key] === "object" && apply[key]) {
|
||||
EfficientInPlaceDeepmerge(ref[key], apply[key]);
|
||||
@@ -105,7 +109,7 @@ function EfficientInPlaceDeepmerge(ref, apply) {
|
||||
}
|
||||
}
|
||||
|
||||
function GetChartCollectionGame(filename) {
|
||||
export function GetChartCollectionGame(filename) {
|
||||
let result = filename.match(/charts-([\w-]+)\.json$/u);
|
||||
|
||||
if (result === null) {
|
||||
@@ -125,28 +129,17 @@ function GetSongCollectionGameGroup(filename) {
|
||||
return result[1];
|
||||
}
|
||||
|
||||
function GetFreshSongIDGenerator(gameGroup) {
|
||||
export function GetFreshSongIDGenerator(gameGroup) {
|
||||
const existing = ReadCollection(`songs-${gameGroup}.json`);
|
||||
let max = existing.reduce((acc, s) => Math.max(acc, s.id ?? 0), 0);
|
||||
return () => ++max;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
export {
|
||||
CreateChartID,
|
||||
CreateFolderID,
|
||||
CreateGoalID,
|
||||
CreateLegacyFolderID,
|
||||
CreateLegacyFolderIDFromFolder,
|
||||
CreateQuestID,
|
||||
CreateSongID,
|
||||
CreateTableID,
|
||||
EfficientInPlaceDeepmerge,
|
||||
GetChartCollectionGame,
|
||||
GetFreshSongIDGenerator,
|
||||
GetSongCollectionGame: GetSongCollectionGameGroup,
|
||||
IterateCollections,
|
||||
MutateCollection,
|
||||
ReadCollection,
|
||||
WRITE_COLLECTION_SKIP_BIOME,
|
||||
WriteCollection,
|
||||
GetSongCollectionGameGroup as GetSongCollectionGame,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user