@bitcobblers/wod-wiki-tools 0.37.2137 → 0.37.2139
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/bin/wod.cjs +224 -231
- package/dist/bin/wod.cjs.map +1 -1
- package/dist/bin/wod.mjs +4 -4
- package/dist/{chunk-NATJMTAW.mjs → chunk-CVFMFD7D.mjs} +109 -187
- package/dist/chunk-CVFMFD7D.mjs.map +1 -0
- package/dist/{chunk-GBBJBDLS.mjs → chunk-HRFOKCYI.mjs} +116 -42
- package/dist/chunk-HRFOKCYI.mjs.map +1 -0
- package/dist/{chunk-CYKNTEGY.mjs → chunk-IWT7U3WX.mjs} +8 -3
- package/dist/chunk-IWT7U3WX.mjs.map +1 -0
- package/dist/{chunk-SQAI6B4P.mjs → chunk-JUBKCRNV.mjs} +3 -3
- package/dist/chunk-JUBKCRNV.mjs.map +1 -0
- package/dist/{chunk-MA6BBTWC.mjs → chunk-RWNL6APX.mjs} +3 -3
- package/dist/{chunk-MA6BBTWC.mjs.map → chunk-RWNL6APX.mjs.map} +1 -1
- package/dist/compiler-OXEXGIZG.mjs +9 -0
- package/dist/{compiler-B77PITYH.mjs.map → compiler-OXEXGIZG.mjs.map} +1 -1
- package/dist/index.cjs +224 -231
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +5 -5
- package/dist/{scaffoldCatalog-LQOUCJ4X.mjs → scaffoldCatalog-OIU4FEKJ.mjs} +3 -3
- package/dist/{scaffoldCatalog-LQOUCJ4X.mjs.map → scaffoldCatalog-OIU4FEKJ.mjs.map} +1 -1
- package/dist/{server-JXECWS4A.mjs → server-2DVBA35J.mjs} +4 -4
- package/dist/{server-JXECWS4A.mjs.map → server-2DVBA35J.mjs.map} +1 -1
- package/dist/web/playground/assets/main-2qCz3_0z.js +194 -0
- package/dist/web/playground/assets/main-BUcjhK2w.css +2 -0
- package/dist/web/playground/assets/{statementBuilderFlow-BL8OKlcb.js → statementBuilderFlow-DKhL-YLz.js} +2 -2
- package/dist/web/playground/assets/{vendor-CTANVdPW.js → vendor-DaJxNU_W.js} +19 -19
- package/dist/web/playground/assets/{vendor-codemirror-BlXDdJID.js → vendor-codemirror-BtDM22HA.js} +8 -8
- package/dist/web/playground/index.html +4 -4
- package/dist/web/playground/seed/core/chunks/canvas.a45c409e.json +1 -0
- package/dist/web/playground/seed/core/chunks/efforts.e68f2093.json +1 -0
- package/dist/web/playground/seed/core/chunks/equipment.c4fb1d64.json +1 -0
- package/dist/web/playground/seed/core/chunks/{template.e5e0e82d.json → template.0120276c.json} +1 -1
- package/dist/web/playground/seed/core/manifest.json +24 -10
- package/dist/web/playground/seed/core/report.html +15 -13
- package/dist/web/server/assets/main-BUcjhK2w.css +2 -0
- package/dist/web/server/assets/main-DxsZ-yOz.js +193 -0
- package/dist/web/server/assets/{statementBuilderFlow-xqsK_3T8.js → statementBuilderFlow-CI5vrd60.js} +2 -2
- package/dist/web/server/assets/{vendor-CTANVdPW.js → vendor-DaJxNU_W.js} +19 -19
- package/dist/web/server/assets/{vendor-codemirror-BlXDdJID.js → vendor-codemirror-BtDM22HA.js} +8 -8
- package/dist/web/server/index.html +4 -4
- package/dist/web/server/seed/core/chunks/canvas.a45c409e.json +1 -0
- package/dist/web/server/seed/core/chunks/efforts.e68f2093.json +1 -0
- package/dist/web/server/seed/core/chunks/equipment.c4fb1d64.json +1 -0
- package/dist/web/server/seed/core/chunks/{template.e5e0e82d.json → template.0120276c.json} +1 -1
- package/dist/web/server/seed/core/manifest.json +24 -10
- package/dist/web/server/seed/core/report.html +14 -12
- package/package.json +6 -6
- package/dist/chunk-CYKNTEGY.mjs.map +0 -1
- package/dist/chunk-GBBJBDLS.mjs.map +0 -1
- package/dist/chunk-NATJMTAW.mjs.map +0 -1
- package/dist/chunk-SQAI6B4P.mjs.map +0 -1
- package/dist/compiler-B77PITYH.mjs +0 -9
- package/dist/web/playground/assets/main-CFDrblxn.css +0 -2
- package/dist/web/playground/assets/main-OGIV1avF.js +0 -188
- package/dist/web/playground/seed/core/chunks/canvas.a2e32d8c.json +0 -1
- package/dist/web/server/assets/main-BdUrlkaF.js +0 -187
- package/dist/web/server/assets/main-CFDrblxn.css +0 -2
- package/dist/web/server/seed/core/chunks/canvas.a2e32d8c.json +0 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { createRequire } from 'module';
|
|
2
|
-
import { compileSeedRow, SEED_SCHEMA, writeBuildReport } from './chunk-
|
|
3
|
-
import { VERSION } from './chunk-
|
|
4
|
-
import { openCliDb, nodeFs, sqliteIndexStore, sqliteEffortStore, sqliteBlockStore, sqliteNoteStore, sqliteEventStore, getNoteBundle, getSessionBundle, getEffortBySlug, listTagsByType, nodePath, loadSql, uuid5, CLI_UUID_NAMESPACE, nodeCrypto, stableNoteId, randomId } from './chunk-
|
|
2
|
+
import { compileSeedRow, SEED_SCHEMA, writeBuildReport } from './chunk-CVFMFD7D.mjs';
|
|
3
|
+
import { VERSION } from './chunk-JUBKCRNV.mjs';
|
|
4
|
+
import { openCliDb, nodeFs, sqliteIndexStore, sqliteEffortStore, sqliteBlockStore, sqliteNoteStore, sqliteEventStore, getNoteBundle, getSessionBundle, getEffortBySlug, getEquipmentBySlug, listTagsByType, nodePath, loadSql, uuid5, CLI_UUID_NAMESPACE, nodeCrypto, stableNoteId, randomId } from './chunk-IWT7U3WX.mjs';
|
|
5
5
|
import { __require } from './chunk-6L5ZDZJ7.mjs';
|
|
6
|
-
import { createParser, frozenNow, createCompiler, createMockClock, RuntimeStack, EventBus, ScriptRuntime, createAnalyticsEngineForBlock, StartSessionAction, NextEvent, toStoredOutputStatement, bundledEfforts, parseScript } from '@bitcobblers/wod-wiki-lang';
|
|
7
|
-
import { buildStatementTree, createIRFile, registerLanguagePack, extractNoteIdentity, extractTypedTags, composeNoteMarkdown, sessionToCsv, effortToMarkdown,
|
|
6
|
+
import { createParser, frozenNow, createCompiler, createMockClock, RuntimeStack, EventBus, ScriptRuntime, createAnalyticsEngineForBlock, StartSessionAction, NextEvent, toStoredOutputStatement, bundledEfforts, parseEffortFile, parseEquipmentFile, createReferenceIndex, parseScript, extractStatementRefs } from '@bitcobblers/wod-wiki-lang';
|
|
7
|
+
import { buildStatementTree, createIRFile, registerLanguagePack, extractNoteIdentity, extractTypedTags, composeNoteMarkdown, sessionToCsv, effortToMarkdown, equipmentToMarkdown, equipmentToCsv, csvToEquipmentLabels, csvToSessionRows, isIRFile, inMemoryEventStore, readFrontmatterMeta, assertSeedManifest, seedMetaKey, SEED_SCHEMA as SEED_SCHEMA$1, emptySeedMeta, CANVAS_CHUNK_ID, assertSeedRows, seedNoteId, applySeedChunk } from '@bitcobblers/wod-wiki-engine';
|
|
8
8
|
import { toEventRows, toSummaryEventRows, parseQuery, QueryService, isPipelineQuery, isFindQuery, catalogOfItem } from '@bitcobblers/wod-wiki-wql';
|
|
9
|
-
import { validateNoteBlocks, parseDocumentSections, blockContentId, reconcileNoteBlocks, KNOWN_SECTION_WIDGETS } from '@bitcobblers/wod-wiki-core';
|
|
9
|
+
import { validateNoteBlocks, parseDocumentSections, blockContentId, reconcileNoteBlocks, KNOWN_SECTION_WIDGETS, MetricType } from '@bitcobblers/wod-wiki-core';
|
|
10
10
|
import { rowsEqual } from '@bitcobblers/wod-wiki-storage';
|
|
11
11
|
|
|
12
12
|
if (typeof globalThis.require === 'undefined') {
|
|
@@ -924,23 +924,7 @@ ${escapeCsvField(data.parsed.metric)},${data.scalar},${escapeCsvField(data.unit
|
|
|
924
924
|
return lines.join("\n");
|
|
925
925
|
}
|
|
926
926
|
var registeredWidgets = KNOWN_SECTION_WIDGETS;
|
|
927
|
-
var saveStores = ["notes", "block_revisions", "block_index", "block_efforts", "tags", "note_tags", "sessions"];
|
|
928
|
-
function extractEffortSlugs(statements) {
|
|
929
|
-
const slugs = /* @__PURE__ */ new Set();
|
|
930
|
-
for (const statement of statements) {
|
|
931
|
-
if (statement.exerciseId) {
|
|
932
|
-
slugs.add(statement.exerciseId);
|
|
933
|
-
} else {
|
|
934
|
-
const effortMetric = statement.metrics?.getMetric?.("effort");
|
|
935
|
-
const effort = effortMetric && "effort" in effortMetric ? effortMetric.effort : void 0;
|
|
936
|
-
if (typeof effort === "string") {
|
|
937
|
-
const slug = effort.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
938
|
-
if (slug) slugs.add(slug);
|
|
939
|
-
}
|
|
940
|
-
}
|
|
941
|
-
}
|
|
942
|
-
return [...slugs];
|
|
943
|
-
}
|
|
927
|
+
var saveStores = ["notes", "block_revisions", "block_index", "block_efforts", "block_equipment", "efforts", "equipment", "tags", "note_tags", "sessions"];
|
|
944
928
|
function titleFromLabel(sourceLabel) {
|
|
945
929
|
if (!sourceLabel || sourceLabel === "-") return "stdin";
|
|
946
930
|
const stem = sourceLabel.split("/").pop() ?? sourceLabel;
|
|
@@ -1012,9 +996,19 @@ async function saveSource(db, options, startTime) {
|
|
|
1012
996
|
};
|
|
1013
997
|
const priorRows = await tx.readonly("block_index").getAllFromIndex("by-note", noteId);
|
|
1014
998
|
const priorEfforts = await tx.readonly("block_efforts").getAllFromIndex("by-note", noteId);
|
|
999
|
+
const priorEquipment = await tx.readonly("block_equipment").getAllFromIndex("by-note", noteId);
|
|
1000
|
+
const storedEfforts = await tx.readonly("efforts").getAll();
|
|
1001
|
+
const effortsBySlug = /* @__PURE__ */ new Map();
|
|
1002
|
+
for (const effort of bundledEfforts) effortsBySlug.set(effort.slug, effort);
|
|
1003
|
+
for (const effort of storedEfforts) effortsBySlug.set(effort.slug, effort);
|
|
1004
|
+
const referenceIndex = createReferenceIndex({
|
|
1005
|
+
efforts: [...effortsBySlug.values()],
|
|
1006
|
+
equipment: await tx.readonly("equipment").getAll()
|
|
1007
|
+
});
|
|
1015
1008
|
const priorById = new Map(priorRows.map((row) => [row.id, row]));
|
|
1016
1009
|
const nextRows = [];
|
|
1017
1010
|
const nextEfforts = [];
|
|
1011
|
+
const nextEquipment = [];
|
|
1018
1012
|
for (const [position, block] of Object.values(blocks).sort((a, b) => a.from - b.from).entries()) {
|
|
1019
1013
|
const id = `${noteId}:${block.id}`;
|
|
1020
1014
|
const prior = priorById.get(id);
|
|
@@ -1040,7 +1034,20 @@ async function saveSource(db, options, startTime) {
|
|
|
1040
1034
|
...note.sourceId ? { sourceId: note.sourceId } : {}
|
|
1041
1035
|
});
|
|
1042
1036
|
if (block.kind === "wod") {
|
|
1043
|
-
|
|
1037
|
+
const statements = parseScript(body, { sport: block.sport, dialect: block.dialect, references: referenceIndex }).statements;
|
|
1038
|
+
const refs = extractStatementRefs(statements);
|
|
1039
|
+
const effortSlugs = new Set(refs.efforts);
|
|
1040
|
+
if (effortSlugs.size === 0) {
|
|
1041
|
+
for (const s of statements) {
|
|
1042
|
+
const m = s.metrics?.getMetric?.(MetricType.Effort);
|
|
1043
|
+
const val = typeof m?.value === "string" ? m.value : m && "effort" in m ? String(m.effort) : "";
|
|
1044
|
+
const slug = val.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
1045
|
+
if (slug && !["rest", "amrap", "emom", "tabata", "for-time"].includes(slug)) {
|
|
1046
|
+
effortSlugs.add(slug);
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
for (const effortSlug of effortSlugs) {
|
|
1044
1051
|
const effortId = `${noteId}:${block.id}:${effortSlug}`;
|
|
1045
1052
|
const previous = priorEfforts.find((row) => row.id === effortId);
|
|
1046
1053
|
nextEfforts.push({
|
|
@@ -1053,12 +1060,26 @@ async function saveSource(db, options, startTime) {
|
|
|
1053
1060
|
createdAt: previous?.createdAt ?? now
|
|
1054
1061
|
});
|
|
1055
1062
|
}
|
|
1063
|
+
for (const equipmentSlug of refs.equipment) {
|
|
1064
|
+
const equipmentId = `${noteId}:${block.id}:${equipmentSlug}`;
|
|
1065
|
+
const previous = priorEquipment.find((row) => row.id === equipmentId);
|
|
1066
|
+
nextEquipment.push({
|
|
1067
|
+
...previous,
|
|
1068
|
+
id: equipmentId,
|
|
1069
|
+
noteId,
|
|
1070
|
+
blockId: block.id,
|
|
1071
|
+
blockContentId: fingerprint,
|
|
1072
|
+
equipmentSlug,
|
|
1073
|
+
createdAt: previous?.createdAt ?? now
|
|
1074
|
+
});
|
|
1075
|
+
}
|
|
1056
1076
|
}
|
|
1057
1077
|
}
|
|
1058
1078
|
if (!rowsEqual(existing, note)) await tx.readwrite("notes").put(note);
|
|
1059
1079
|
if (revisions.length) await tx.readwrite("block_revisions").putMany(revisions);
|
|
1060
1080
|
await diffProjection(tx, "block_index", priorRows, nextRows);
|
|
1061
1081
|
await diffProjection(tx, "block_efforts", priorEfforts, nextEfforts);
|
|
1082
|
+
await diffProjection(tx, "block_equipment", priorEquipment, nextEquipment);
|
|
1062
1083
|
const tags = await saveTags(tx, noteId, options.tags, now);
|
|
1063
1084
|
let session;
|
|
1064
1085
|
let revision;
|
|
@@ -1094,6 +1115,7 @@ async function diffProjection(tx, store, previous, next) {
|
|
|
1094
1115
|
if (!rowsEqual(old.get(row.id), row)) {
|
|
1095
1116
|
if (store === "block_index" && "blockVersion" in row) await tx.readwrite("block_index").put(row);
|
|
1096
1117
|
if (store === "block_efforts" && "effortSlug" in row) await tx.readwrite("block_efforts").put(row);
|
|
1118
|
+
if (store === "block_equipment" && "equipmentSlug" in row) await tx.readwrite("block_equipment").put(row);
|
|
1097
1119
|
}
|
|
1098
1120
|
}
|
|
1099
1121
|
}
|
|
@@ -1185,6 +1207,12 @@ async function persistEffort(db, effort) {
|
|
|
1185
1207
|
await sql.putRow(tx, sql.storeDefinition("efforts"), effort);
|
|
1186
1208
|
});
|
|
1187
1209
|
}
|
|
1210
|
+
async function persistEquipment(db, equipment) {
|
|
1211
|
+
const sql = await loadSql();
|
|
1212
|
+
await db.db.transaction(async (tx) => {
|
|
1213
|
+
await sql.putRow(tx, sql.storeDefinition("equipment"), equipment);
|
|
1214
|
+
});
|
|
1215
|
+
}
|
|
1188
1216
|
async function persistTypedTags(db, labels, type) {
|
|
1189
1217
|
return db.storage.transaction(["tags"], "readwrite", async (tx) => {
|
|
1190
1218
|
let added = 0;
|
|
@@ -1207,17 +1235,18 @@ async function importSeedDir(db, dir, sourceId) {
|
|
|
1207
1235
|
const source = sourceId || path.basename(dir);
|
|
1208
1236
|
const manifest = assertSeedManifest(JSON.parse(fs.readFileSync(path.resolve(dir, "manifest.json"), "utf-8")));
|
|
1209
1237
|
const key = seedMetaKey(source);
|
|
1210
|
-
|
|
1211
|
-
|
|
1238
|
+
const stored = await db.storage.readonly("meta").get(key);
|
|
1239
|
+
let expected = stored?.schema === SEED_SCHEMA$1 ? stored : void 0;
|
|
1212
1240
|
let meta = expected ?? emptySeedMeta(key);
|
|
1213
1241
|
if (manifest.version < meta.seedVersion) throw new Error("Seed manifest is older than stored checkpoint");
|
|
1214
|
-
const summary = { sourceId: source, version: manifest.version, notes: 0, efforts: 0, blocks: 0, blockEfforts: 0, deleted: 0, skippedUserOwned: 0 };
|
|
1242
|
+
const summary = { sourceId: source, version: manifest.version, notes: 0, efforts: 0, equipment: 0, blocks: 0, blockEfforts: 0, deleted: 0, skippedUserOwned: 0 };
|
|
1215
1243
|
const metadataChanged = manifest.version !== meta.seedVersion || manifest.builtAt !== meta.builtAt;
|
|
1216
1244
|
const plan = manifest.chunks.filter((c) => metadataChanged || meta.chunks[c.id]?.sha256 !== c.sha256);
|
|
1217
1245
|
plan.sort((a, b) => Number(b.id === CANVAS_CHUNK_ID) - Number(a.id === CANVAS_CHUNK_ID));
|
|
1218
1246
|
const accumulate = (result) => {
|
|
1219
1247
|
summary.notes += result.totalNotes;
|
|
1220
1248
|
summary.efforts += result.totalEfforts;
|
|
1249
|
+
summary.equipment += result.totalEquipment;
|
|
1221
1250
|
summary.blocks += result.totalBlocks;
|
|
1222
1251
|
summary.deleted += result.deleted;
|
|
1223
1252
|
summary.skippedUserOwned += result.skippedUserOwned;
|
|
@@ -1287,6 +1316,7 @@ async function publishCatalogSeed(db, options) {
|
|
|
1287
1316
|
}
|
|
1288
1317
|
const allIndexRows = await db.storage.readonly("block_index").getAll();
|
|
1289
1318
|
const allEffortRows = await db.storage.readonly("block_efforts").getAll();
|
|
1319
|
+
const allEquipmentRows = await db.storage.readonly("block_equipment").getAll();
|
|
1290
1320
|
const indexByNote = /* @__PURE__ */ new Map();
|
|
1291
1321
|
for (const row of allIndexRows) {
|
|
1292
1322
|
const list = indexByNote.get(row.noteId) ?? [];
|
|
@@ -1299,6 +1329,12 @@ async function publishCatalogSeed(db, options) {
|
|
|
1299
1329
|
list.push(row);
|
|
1300
1330
|
effortsByNote.set(row.noteId, list);
|
|
1301
1331
|
}
|
|
1332
|
+
const equipmentByNote = /* @__PURE__ */ new Map();
|
|
1333
|
+
for (const row of allEquipmentRows) {
|
|
1334
|
+
const list = equipmentByNote.get(row.noteId) ?? [];
|
|
1335
|
+
list.push(row);
|
|
1336
|
+
equipmentByNote.set(row.noteId, list);
|
|
1337
|
+
}
|
|
1302
1338
|
const outDir = path.resolve(process.cwd(), options.outDir);
|
|
1303
1339
|
const chunksDir = path.join(outDir, "chunks");
|
|
1304
1340
|
fs.mkdirSync(chunksDir, { recursive: true });
|
|
@@ -1313,6 +1349,7 @@ async function publishCatalogSeed(db, options) {
|
|
|
1313
1349
|
const notePath = note.sourcePath ?? `markdown/collections/${catalogName}/${stem}.md`;
|
|
1314
1350
|
const noteBlockIndex = indexByNote.get(note.id) ?? [];
|
|
1315
1351
|
const noteBlockEfforts = effortsByNote.get(note.id) ?? [];
|
|
1352
|
+
const noteBlockEquipment = equipmentByNote.get(note.id) ?? [];
|
|
1316
1353
|
const blockIndex = noteBlockIndex.length > 0 ? noteBlockIndex.map((b) => ({
|
|
1317
1354
|
...b,
|
|
1318
1355
|
isStatic: true,
|
|
@@ -1332,12 +1369,18 @@ async function publishCatalogSeed(db, options) {
|
|
|
1332
1369
|
isStatic: true,
|
|
1333
1370
|
sourcePath: e.sourcePath ?? notePath
|
|
1334
1371
|
}));
|
|
1372
|
+
const blockEquipment = noteBlockEquipment.map((e) => ({
|
|
1373
|
+
...e,
|
|
1374
|
+
isStatic: true,
|
|
1375
|
+
sourcePath: e.sourcePath ?? notePath
|
|
1376
|
+
}));
|
|
1335
1377
|
chunkRows.push({
|
|
1336
1378
|
path: notePath,
|
|
1337
1379
|
content: note.rawContent,
|
|
1338
1380
|
blocks: note.blocks,
|
|
1339
1381
|
blockIndex,
|
|
1340
|
-
blockEfforts
|
|
1382
|
+
blockEfforts,
|
|
1383
|
+
blockEquipment
|
|
1341
1384
|
});
|
|
1342
1385
|
}
|
|
1343
1386
|
const chunkId = `collection.${catalogName}`;
|
|
@@ -1806,7 +1849,7 @@ async function cliMain(argv = process.argv.slice(2), io = {}) {
|
|
|
1806
1849
|
writeErr("[wod init-catalog] Error: Missing catalog name (a single new directory name)");
|
|
1807
1850
|
return 1;
|
|
1808
1851
|
}
|
|
1809
|
-
const { scaffoldCatalog } = await import('./scaffoldCatalog-
|
|
1852
|
+
const { scaffoldCatalog } = await import('./scaffoldCatalog-OIU4FEKJ.mjs');
|
|
1810
1853
|
try {
|
|
1811
1854
|
const result = scaffoldCatalog(parsed.target);
|
|
1812
1855
|
writeOut(`[wod init-catalog] Created ${result.dir} (${result.files.length} files)`);
|
|
@@ -2017,7 +2060,9 @@ async function cliMain(argv = process.argv.slice(2), io = {}) {
|
|
|
2017
2060
|
writeErr(`[wod ${verb}] Effort not found in ${db.path}: ${id}`);
|
|
2018
2061
|
return 1;
|
|
2019
2062
|
}
|
|
2020
|
-
const
|
|
2063
|
+
const ownerNoteId = typeof effort.ownerNoteId === "string" ? effort.ownerNoteId : `effort/${effort.slug}`;
|
|
2064
|
+
const owner = await db.storage.readonly("notes").get(ownerNoteId);
|
|
2065
|
+
const markdown = owner?.rawContent ?? effortToMarkdown(effort);
|
|
2021
2066
|
const target = parsed.output && parsed.output !== "-" ? parsed.output : `${id}.md`;
|
|
2022
2067
|
if (parsed.output === "-") {
|
|
2023
2068
|
writeOut(markdown);
|
|
@@ -2026,15 +2071,29 @@ async function cliMain(argv = process.argv.slice(2), io = {}) {
|
|
|
2026
2071
|
}
|
|
2027
2072
|
writeOut(`[wod ${verb}] effort ${id} \u2192 ${target}`);
|
|
2028
2073
|
} else {
|
|
2029
|
-
const
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2074
|
+
const equipment = id ? await getEquipmentBySlug(db.db, targetId) : void 0;
|
|
2075
|
+
if (equipment) {
|
|
2076
|
+
const ownerNoteId = typeof equipment.ownerNoteId === "string" ? equipment.ownerNoteId : `equipment/${equipment.slug}`;
|
|
2077
|
+
const owner = await db.storage.readonly("notes").get(ownerNoteId);
|
|
2078
|
+
const markdown = owner?.rawContent ?? equipmentToMarkdown(equipment);
|
|
2079
|
+
const target = parsed.output && parsed.output !== "-" ? parsed.output : `${id}.md`;
|
|
2080
|
+
if (parsed.output === "-") {
|
|
2081
|
+
writeOut(markdown);
|
|
2082
|
+
} else {
|
|
2083
|
+
nodeFs().writeFileSync(target, markdown, "utf-8");
|
|
2084
|
+
}
|
|
2085
|
+
writeOut(`[wod ${verb}] equipment ${id} \u2192 ${target}`);
|
|
2034
2086
|
} else {
|
|
2035
|
-
|
|
2087
|
+
const labels = (await listTagsByType(db.db, "equipment")).map((t) => t.label).sort();
|
|
2088
|
+
const csv = equipmentToCsv(labels);
|
|
2089
|
+
const target = parsed.output && parsed.output !== "-" ? parsed.output : "equipment.csv";
|
|
2090
|
+
if (parsed.output === "-") {
|
|
2091
|
+
writeOut(csv);
|
|
2092
|
+
} else {
|
|
2093
|
+
nodeFs().writeFileSync(target, csv, "utf-8");
|
|
2094
|
+
}
|
|
2095
|
+
writeOut(`[wod ${verb}] equipment \u2192 ${target} (${labels.length} labels)`);
|
|
2036
2096
|
}
|
|
2037
|
-
writeOut(`[wod ${verb}] equipment \u2192 ${target} (${labels.length} labels)`);
|
|
2038
2097
|
}
|
|
2039
2098
|
} finally {
|
|
2040
2099
|
await db.close();
|
|
@@ -2076,7 +2135,7 @@ async function cliMain(argv = process.argv.slice(2), io = {}) {
|
|
|
2076
2135
|
return 0;
|
|
2077
2136
|
}
|
|
2078
2137
|
if (kind === "effort") {
|
|
2079
|
-
const effort =
|
|
2138
|
+
const effort = parseEffortFile(fs.readFileSync(file, "utf-8"));
|
|
2080
2139
|
if (!effort) {
|
|
2081
2140
|
writeErr(`[wod import] Unparseable effort file (need frontmatter id/slug/label + numeric baseAttributes.met): ${file}`);
|
|
2082
2141
|
return 1;
|
|
@@ -2090,6 +2149,21 @@ async function cliMain(argv = process.argv.slice(2), io = {}) {
|
|
|
2090
2149
|
}
|
|
2091
2150
|
return 0;
|
|
2092
2151
|
}
|
|
2152
|
+
if (kind === "equipment" && /\.md$/i.test(file)) {
|
|
2153
|
+
const equipment = parseEquipmentFile(fs.readFileSync(file, "utf-8"));
|
|
2154
|
+
if (!equipment) {
|
|
2155
|
+
writeErr(`[wod import] Unparseable equipment file (need frontmatter type: equipment + id/slug/label): ${file}`);
|
|
2156
|
+
return 1;
|
|
2157
|
+
}
|
|
2158
|
+
const db2 = await openCliDb(cliDb());
|
|
2159
|
+
try {
|
|
2160
|
+
await persistEquipment(db2, { ...equipment, registrySource: "user" });
|
|
2161
|
+
writeOut(`[wod import] equipment ${equipment.slug} \u2014 ${equipment.label} \u2192 ${db2.path}`);
|
|
2162
|
+
} finally {
|
|
2163
|
+
await db2.close();
|
|
2164
|
+
}
|
|
2165
|
+
return 0;
|
|
2166
|
+
}
|
|
2093
2167
|
if (kind === "equipment") {
|
|
2094
2168
|
const labels = csvToEquipmentLabels(fs.readFileSync(file, "utf-8"));
|
|
2095
2169
|
if (labels.length === 0) {
|
|
@@ -2144,7 +2218,7 @@ async function cliMain(argv = process.argv.slice(2), io = {}) {
|
|
|
2144
2218
|
writeErr(`[wod build] No markdown/ corpus under ${root} \u2014 run from the content repo root (or pass its directory).`);
|
|
2145
2219
|
return 1;
|
|
2146
2220
|
}
|
|
2147
|
-
const { generateSeed } = await import('./compiler-
|
|
2221
|
+
const { generateSeed } = await import('./compiler-OXEXGIZG.mjs');
|
|
2148
2222
|
try {
|
|
2149
2223
|
const result = generateSeed({
|
|
2150
2224
|
corpusRoot: root,
|
|
@@ -2214,7 +2288,7 @@ async function cliMain(argv = process.argv.slice(2), io = {}) {
|
|
|
2214
2288
|
}
|
|
2215
2289
|
if (parsed.subcommand === "server" || parsed.subcommand === "serve" || parsed.subcommand === "playground") {
|
|
2216
2290
|
const mode = parsed.subcommand === "playground" ? "playground" : "server";
|
|
2217
|
-
const { runCliServer } = await import('./server-
|
|
2291
|
+
const { runCliServer } = await import('./server-2DVBA35J.mjs');
|
|
2218
2292
|
const options = { env: cliEnv() };
|
|
2219
2293
|
if (mode === "server") options.database = cliDb();
|
|
2220
2294
|
if (parsed.host !== void 0) options.host = parsed.host;
|
|
@@ -2240,5 +2314,5 @@ async function cliMain(argv = process.argv.slice(2), io = {}) {
|
|
|
2240
2314
|
}
|
|
2241
2315
|
|
|
2242
2316
|
export { PackLoadError, ParseSyntaxError, WqlSyntaxError, cliMain, formatExecutionOutput, formatParseOutput, formatQueryOutput, loadCliEnvironment, loadLanguagePack, loadQueryData, parseCliArgs, readStdin, resolveDatabaseConfig, runExecution, runParse, runQueryCli };
|
|
2243
|
-
//# sourceMappingURL=chunk-
|
|
2244
|
-
//# sourceMappingURL=chunk-
|
|
2317
|
+
//# sourceMappingURL=chunk-HRFOKCYI.mjs.map
|
|
2318
|
+
//# sourceMappingURL=chunk-HRFOKCYI.mjs.map
|