@datasworn-community/build-tools 0.2.2 → 0.2.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/cli/datasworn-build.js +12 -2
- package/dist/cli/datasworn-build.js.map +1 -1
- package/dist/config.d.ts +3 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/content-package-builder.d.ts +54 -0
- package/dist/content-package-builder.d.ts.map +1 -0
- package/dist/content-package-builder.js +159 -0
- package/dist/content-package-builder.js.map +1 -0
- package/dist/id-references.d.ts +20 -0
- package/dist/id-references.d.ts.map +1 -0
- package/dist/id-references.js +96 -0
- package/dist/id-references.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/rules-package-builder.d.ts +14 -0
- package/dist/rules-package-builder.d.ts.map +1 -1
- package/dist/rules-package-builder.js +14 -1
- package/dist/rules-package-builder.js.map +1 -1
- package/package.json +6 -3
- package/schema-source/builders/IdBuilder.ts +849 -0
- package/schema-source/schema/common/Id.ts +3 -1
- package/schema-source/schema/delve/common.ts +3 -1
- package/schema-source/schema/generic/CollectableNode.ts +3 -1
- package/schema-source/schema/generic/CollectionNode.ts +3 -1
- package/schema-source/schema/generic/EmbedOnlyNode.ts +3 -1
- package/schema-source/schema/generic/NonCollectableNode.ts +3 -1
- package/schema-source/schema/generic/PrimaryTypeNode.ts +3 -1
- package/schema-source/schema/rules/TagRule.ts +3 -1
- package/schema-source/schema/utils/EmbeddedNode.ts +3 -1
- package/schema-source/schema/utils/string.ts +2 -2
- package/schema-source/scripts/augmentations.ts +70 -0
- package/schema-source/scripts/codegen/schemaToTsDeclaration.ts +290 -0
- package/schema-source/scripts/codegen/tsDocTags.ts +75 -0
- package/schema-source/scripts/codegen/writeTypescriptTypes.ts +35 -0
- package/schema-source/scripts/const.ts +40 -2
- package/schema-source/scripts/datasworn/sort.ts +80 -0
- package/schema-source/scripts/json-typedef/typedef.ts +1138 -0
- package/schema-source/scripts/json-typedef/utils.ts +349 -0
- package/schema-source/scripts/schema/buildSchema.ts +109 -0
- package/schema-source/scripts/utils/Log.ts +15 -0
- package/schema-source/scripts/utils/readWrite.ts +180 -0
- package/schema-source/scripts/validation/ajv.ts +29 -0
- package/schema-source/scripts/validation/formats.ts +6 -0
- package/schema-source/scripts/validation/keywords.ts +36 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
3
|
import { readBuildConfig } from '../config.js';
|
|
4
|
+
import { buildContentPackages } from '../content-package-builder.js';
|
|
4
5
|
import { buildRulesPackage } from '../rules-package-builder.js';
|
|
5
6
|
import { hasArg, readArg } from './args.js';
|
|
6
7
|
function usage() {
|
|
@@ -12,6 +13,9 @@ function usage() {
|
|
|
12
13
|
const args = process.argv.slice(2);
|
|
13
14
|
if (hasArg(args, '--help') || hasArg(args, '-h'))
|
|
14
15
|
usage();
|
|
16
|
+
function isMultiPackageConfig(config) {
|
|
17
|
+
return 'packages' in config;
|
|
18
|
+
}
|
|
15
19
|
const configPath = readArg(args, '--config');
|
|
16
20
|
let config;
|
|
17
21
|
if (configPath != null) {
|
|
@@ -28,6 +32,12 @@ else {
|
|
|
28
32
|
usage();
|
|
29
33
|
config = { id, type, source, outDir };
|
|
30
34
|
}
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
if (isMultiPackageConfig(config)) {
|
|
36
|
+
const result = await buildContentPackages(config);
|
|
37
|
+
console.log(`Built ${result.results.length} package(s) in dependency order: ${result.buildOrder.join(', ')}`);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
const result = await buildRulesPackage(config);
|
|
41
|
+
console.log(`Built ${config.id} from ${result.files.length} file(s): ${result.outFile}`);
|
|
42
|
+
}
|
|
33
43
|
//# sourceMappingURL=datasworn-build.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasworn-build.js","sourceRoot":"","sources":["../../src/cli/datasworn-build.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EACN,iBAAiB,EAEjB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE3C,SAAS,KAAK;IACb,OAAO,CAAC,KAAK,CAAC;;iGAEkF,CAAC,CAAA;IACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAChB,CAAC;AAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAClC,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;IAAE,KAAK,EAAE,CAAA;AAEzD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;AAC5C,IAAI,
|
|
1
|
+
{"version":3,"file":"datasworn-build.js","sourceRoot":"","sources":["../../src/cli/datasworn-build.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EACN,oBAAoB,EAEpB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACN,iBAAiB,EAEjB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE3C,SAAS,KAAK;IACb,OAAO,CAAC,KAAK,CAAC;;iGAEkF,CAAC,CAAA;IACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAChB,CAAC;AAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAClC,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;IAAE,KAAK,EAAE,CAAA;AAEzD,SAAS,oBAAoB,CAC5B,MAAyD;IAEzD,OAAO,UAAU,IAAI,MAAM,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;AAC5C,IAAI,MAAyD,CAAA;AAE7D,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;IACxB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAA;IACpF,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAA;AAC3C,CAAC;KAAM,CAAC;IACP,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAChC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAoC,CAAA;IACvE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;IAEzC,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;QAAE,KAAK,EAAE,CAAA;IACzD,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;AACtC,CAAC;AAED,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAA;IACjD,OAAO,CAAC,GAAG,CACV,SAAS,MAAM,CAAC,OAAO,CAAC,MAAM,oCAAoC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChG,CAAA;AACF,CAAC;KAAM,CAAC;IACP,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAC9C,OAAO,CAAC,GAAG,CACV,SAAS,MAAM,CAAC,EAAE,SAAS,MAAM,CAAC,KAAK,CAAC,MAAM,aAAa,MAAM,CAAC,OAAO,EAAE,CAC3E,CAAA;AACF,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { MultiPackageBuildConfig } from './content-package-builder.js';
|
|
1
2
|
import type { RulesPackageBuildConfig } from './rules-package-builder.js';
|
|
2
|
-
export
|
|
3
|
+
export type DataswornBuildConfig = RulesPackageBuildConfig | MultiPackageBuildConfig;
|
|
4
|
+
export declare function readBuildConfig(configPath: string): Promise<DataswornBuildConfig>;
|
|
3
5
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAA;AAEzE,wBAAsB,eAAe,CACpC,UAAU,EAAE,MAAM,GAChB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAC3E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAA;AAEzE,MAAM,MAAM,oBAAoB,GAC7B,uBAAuB,GACvB,uBAAuB,CAAA;AAE1B,wBAAsB,eAAe,CACpC,UAAU,EAAE,MAAM,GAChB,OAAO,CAAC,oBAAoB,CAAC,CAM/B"}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAA;AASvB,MAAM,CAAC,KAAK,UAAU,eAAe,CACpC,UAAkB;IAElB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAEnE,OAAO,KAA6B,CAAA;AACrC,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type RulesPackageBuildConfig, type RulesPackageBuildResult } from './rules-package-builder.js';
|
|
2
|
+
interface PackageJson {
|
|
3
|
+
name: string;
|
|
4
|
+
version: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
type: 'module';
|
|
7
|
+
main: string;
|
|
8
|
+
types: string;
|
|
9
|
+
exports: Record<string, unknown>;
|
|
10
|
+
files: string[];
|
|
11
|
+
dependencies: Record<string, string>;
|
|
12
|
+
license?: string;
|
|
13
|
+
private?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface ContentPackageDependencyConfig {
|
|
16
|
+
/** Rules package ID referenced by this package. */
|
|
17
|
+
id: string;
|
|
18
|
+
/** Published npm package name for dependency metadata and installed preload. */
|
|
19
|
+
packageName: string;
|
|
20
|
+
/** Schema line accepted by this package, for example `0.2`. */
|
|
21
|
+
schemaLine: string;
|
|
22
|
+
}
|
|
23
|
+
export interface ContentPackageBuildConfig extends RulesPackageBuildConfig {
|
|
24
|
+
/** Published npm package name, for example `@datasworn-community/starforged`. */
|
|
25
|
+
packageName: string;
|
|
26
|
+
/** Schema line this dataset targets, for example `0.2`. */
|
|
27
|
+
schemaLine: string;
|
|
28
|
+
/** Full package version. Release workflows normally fill this in. */
|
|
29
|
+
version?: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
license?: string;
|
|
32
|
+
private?: boolean;
|
|
33
|
+
/** Cross-package Datasworn package dependencies. */
|
|
34
|
+
dependencies?: string[];
|
|
35
|
+
/** Metadata for dependencies that may be published as sibling packages. */
|
|
36
|
+
publishDependencies?: ContentPackageDependencyConfig[];
|
|
37
|
+
}
|
|
38
|
+
export interface MultiPackageBuildConfig {
|
|
39
|
+
outDir?: string;
|
|
40
|
+
packageOutDir?: string;
|
|
41
|
+
packages: ContentPackageBuildConfig[];
|
|
42
|
+
}
|
|
43
|
+
export interface ContentPackageBuildResult extends RulesPackageBuildResult {
|
|
44
|
+
config: ContentPackageBuildConfig;
|
|
45
|
+
packageDir: string;
|
|
46
|
+
packageJson: PackageJson;
|
|
47
|
+
}
|
|
48
|
+
export interface MultiPackageBuildResult {
|
|
49
|
+
results: ContentPackageBuildResult[];
|
|
50
|
+
buildOrder: string[];
|
|
51
|
+
}
|
|
52
|
+
export declare function buildContentPackages(config: MultiPackageBuildConfig): Promise<MultiPackageBuildResult>;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=content-package-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-package-builder.d.ts","sourceRoot":"","sources":["../src/content-package-builder.ts"],"names":[],"mappings":"AAMA,OAAO,EAEN,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,MAAM,4BAA4B,CAAA;AAInC,UAAU,WAAW;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,8BAA8B;IAC9C,mDAAmD;IACnD,EAAE,EAAE,MAAM,CAAA;IACV,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAA;IACnB,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,yBAA0B,SAAQ,uBAAuB;IACzE,iFAAiF;IACjF,WAAW,EAAE,MAAM,CAAA;IACnB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAA;IAClB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,8BAA8B,EAAE,CAAA;CACtD;AAED,MAAM,WAAW,uBAAuB;IACvC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,yBAAyB,EAAE,CAAA;CACrC;AAED,MAAM,WAAW,yBAA0B,SAAQ,uBAAuB;IACzE,MAAM,EAAE,yBAAyB,CAAA;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,WAAW,CAAA;CACxB;AAED,MAAM,WAAW,uBAAuB;IACvC,OAAO,EAAE,yBAAyB,EAAE,CAAA;IACpC,UAAU,EAAE,MAAM,EAAE,CAAA;CACpB;AAiMD,wBAAsB,oBAAoB,CACzC,MAAM,EAAE,uBAAuB,GAC7B,OAAO,CAAC,uBAAuB,CAAC,CA4BlC"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { DATASWORN_SCHEMA_VERSION } from '@datasworn-community/core';
|
|
5
|
+
import { buildRulesPackage } from './rules-package-builder.js';
|
|
6
|
+
const require = createRequire(import.meta.url);
|
|
7
|
+
function currentSchemaLine() {
|
|
8
|
+
const [major, minor] = DATASWORN_SCHEMA_VERSION.split('.');
|
|
9
|
+
return `${major}.${minor}`;
|
|
10
|
+
}
|
|
11
|
+
function dependencyRange(schemaLine) {
|
|
12
|
+
return `^${schemaLine}.0`;
|
|
13
|
+
}
|
|
14
|
+
function packageVersion(config) {
|
|
15
|
+
return config.version ?? `${config.schemaLine}.0`;
|
|
16
|
+
}
|
|
17
|
+
function assertSchemaLine(config) {
|
|
18
|
+
if (!/^\d+\.\d+$/.test(config.schemaLine))
|
|
19
|
+
throw new Error(`${config.id}: schemaLine must look like "0.2"`);
|
|
20
|
+
const activeSchemaLine = currentSchemaLine();
|
|
21
|
+
if (config.schemaLine !== activeSchemaLine)
|
|
22
|
+
throw new Error(`${config.id}: schemaLine ${config.schemaLine} does not match installed core schema line ${activeSchemaLine}`);
|
|
23
|
+
const version = packageVersion(config);
|
|
24
|
+
if (!version.startsWith(`${config.schemaLine}.`))
|
|
25
|
+
throw new Error(`${config.id}: package version ${version} must stay on schema line ${config.schemaLine}`);
|
|
26
|
+
}
|
|
27
|
+
function assertNoDuplicatePackageIds(packages) {
|
|
28
|
+
const seen = new Set();
|
|
29
|
+
for (const config of packages) {
|
|
30
|
+
if (seen.has(config.id))
|
|
31
|
+
throw new Error(`Duplicate package id: ${config.id}`);
|
|
32
|
+
seen.add(config.id);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function topologicalPackageOrder(packages) {
|
|
36
|
+
assertNoDuplicatePackageIds(packages);
|
|
37
|
+
const byId = new Map(packages.map((config) => [config.id, config]));
|
|
38
|
+
const visiting = new Set();
|
|
39
|
+
const visited = new Set();
|
|
40
|
+
const ordered = [];
|
|
41
|
+
function visit(config, ancestry) {
|
|
42
|
+
if (visited.has(config.id))
|
|
43
|
+
return;
|
|
44
|
+
if (visiting.has(config.id))
|
|
45
|
+
throw new Error(`Circular package dependency: ${[...ancestry, config.id].join(' -> ')}`);
|
|
46
|
+
visiting.add(config.id);
|
|
47
|
+
for (const dependencyId of config.dependencies ?? []) {
|
|
48
|
+
const dependency = byId.get(dependencyId);
|
|
49
|
+
if (dependency != null)
|
|
50
|
+
visit(dependency, [...ancestry, config.id]);
|
|
51
|
+
}
|
|
52
|
+
visiting.delete(config.id);
|
|
53
|
+
visited.add(config.id);
|
|
54
|
+
ordered.push(config);
|
|
55
|
+
}
|
|
56
|
+
for (const config of packages)
|
|
57
|
+
visit(config, []);
|
|
58
|
+
return ordered;
|
|
59
|
+
}
|
|
60
|
+
function dependencyMetadata(config, builtPackages) {
|
|
61
|
+
const explicit = new Map((config.publishDependencies ?? []).map((dependency) => [
|
|
62
|
+
dependency.id,
|
|
63
|
+
dependency
|
|
64
|
+
]));
|
|
65
|
+
return (config.dependencies ?? []).map((dependencyId) => {
|
|
66
|
+
const built = builtPackages.get(dependencyId);
|
|
67
|
+
if (built != null)
|
|
68
|
+
return {
|
|
69
|
+
id: dependencyId,
|
|
70
|
+
packageName: built.config.packageName,
|
|
71
|
+
schemaLine: built.config.schemaLine
|
|
72
|
+
};
|
|
73
|
+
const dependency = explicit.get(dependencyId);
|
|
74
|
+
if (dependency == null)
|
|
75
|
+
throw new Error(`${config.id}: dependency ${dependencyId} is neither built in this repo nor listed in publishDependencies`);
|
|
76
|
+
return dependency;
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
async function loadInstalledDependency(dependency) {
|
|
80
|
+
const jsonPath = require.resolve(`${dependency.packageName}/json/${dependency.id}.json`, { paths: [process.cwd()] });
|
|
81
|
+
return JSON.parse(await readFile(jsonPath, 'utf8'));
|
|
82
|
+
}
|
|
83
|
+
async function preloadedDependencies(config, builtPackages) {
|
|
84
|
+
const dependencies = [];
|
|
85
|
+
for (const dependency of dependencyMetadata(config, builtPackages)) {
|
|
86
|
+
const built = builtPackages.get(dependency.id);
|
|
87
|
+
dependencies.push(built?.data ?? (await loadInstalledDependency(dependency)));
|
|
88
|
+
}
|
|
89
|
+
return dependencies;
|
|
90
|
+
}
|
|
91
|
+
function packageJsonFor(config, dependencies) {
|
|
92
|
+
const packageDependencies = Object.fromEntries([
|
|
93
|
+
['@datasworn-community/core', dependencyRange(config.schemaLine)],
|
|
94
|
+
...dependencies.map((dependency) => [
|
|
95
|
+
dependency.packageName,
|
|
96
|
+
dependencyRange(dependency.schemaLine)
|
|
97
|
+
])
|
|
98
|
+
].sort(([left], [right]) => left.localeCompare(right, 'en-US')));
|
|
99
|
+
return {
|
|
100
|
+
name: config.packageName,
|
|
101
|
+
version: packageVersion(config),
|
|
102
|
+
description: config.description,
|
|
103
|
+
type: 'module',
|
|
104
|
+
main: './index.js',
|
|
105
|
+
types: './index.d.ts',
|
|
106
|
+
exports: {
|
|
107
|
+
'.': {
|
|
108
|
+
types: './index.d.ts',
|
|
109
|
+
default: './index.js'
|
|
110
|
+
},
|
|
111
|
+
'./json/*': './json/*',
|
|
112
|
+
'./package.json': './package.json'
|
|
113
|
+
},
|
|
114
|
+
files: ['index.js', 'index.d.ts', 'json'],
|
|
115
|
+
dependencies: packageDependencies,
|
|
116
|
+
license: config.license,
|
|
117
|
+
private: config.private
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function stableJson(value) {
|
|
121
|
+
return `${JSON.stringify(value, undefined, 2)}\n`;
|
|
122
|
+
}
|
|
123
|
+
async function writePublishableArtifacts(config, result, builtPackages, packageOutDir) {
|
|
124
|
+
const dependencies = dependencyMetadata(config, builtPackages);
|
|
125
|
+
const packageJson = packageJsonFor(config, dependencies);
|
|
126
|
+
const packageDir = path.join(packageOutDir, config.id);
|
|
127
|
+
const jsonDir = path.join(packageDir, 'json');
|
|
128
|
+
await mkdir(jsonDir, { recursive: true });
|
|
129
|
+
await Promise.all([
|
|
130
|
+
writeFile(path.join(packageDir, 'package.json'), stableJson(packageJson)),
|
|
131
|
+
writeFile(path.join(packageDir, 'index.js'), `import data from './json/${config.id}.json' with { type: 'json' }\n\nexport { data }\nexport default data\n`),
|
|
132
|
+
writeFile(path.join(packageDir, 'index.d.ts'), "import type { Datasworn } from '@datasworn-community/core'\n\ndeclare const data: Datasworn.RulesPackage\nexport { data }\nexport default data\n"),
|
|
133
|
+
writeFile(path.join(jsonDir, `${config.id}.json`), stableJson(result.data))
|
|
134
|
+
]);
|
|
135
|
+
return { ...result, config, packageDir, packageJson };
|
|
136
|
+
}
|
|
137
|
+
export async function buildContentPackages(config) {
|
|
138
|
+
const outDir = config.outDir ?? 'datasworn';
|
|
139
|
+
const packageOutDir = config.packageOutDir ?? 'dist/packages';
|
|
140
|
+
const ordered = topologicalPackageOrder(config.packages);
|
|
141
|
+
const builtPackages = new Map();
|
|
142
|
+
const results = [];
|
|
143
|
+
for (const packageConfig of ordered) {
|
|
144
|
+
assertSchemaLine(packageConfig);
|
|
145
|
+
const dependencies = await preloadedDependencies(packageConfig, builtPackages);
|
|
146
|
+
const result = await buildRulesPackage(packageConfig, {
|
|
147
|
+
outDir,
|
|
148
|
+
dependencies
|
|
149
|
+
});
|
|
150
|
+
const publishable = await writePublishableArtifacts(packageConfig, result, builtPackages, packageOutDir);
|
|
151
|
+
builtPackages.set(packageConfig.id, publishable);
|
|
152
|
+
results.push(publishable);
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
results,
|
|
156
|
+
buildOrder: ordered.map((packageConfig) => packageConfig.id)
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=content-package-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-package-builder.js","sourceRoot":"","sources":["../src/content-package-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { IdParser } from '@datasworn-community/core';
|
|
2
|
+
/** Collect every Datasworn ID reference embedded in `data`. */
|
|
3
|
+
export declare function extractIdRefs(data: unknown): Set<string>;
|
|
4
|
+
export interface IdRefReport {
|
|
5
|
+
/** References that resolve to at least one node in the tree. */
|
|
6
|
+
valid: Set<string>;
|
|
7
|
+
/** Strings that look like IDs but cannot be parsed. */
|
|
8
|
+
invalid: Set<string>;
|
|
9
|
+
/** Parseable IDs that match no node in the tree. */
|
|
10
|
+
unreachable: Set<string>;
|
|
11
|
+
}
|
|
12
|
+
type Tree = Parameters<IdParser['getMatches']>[0];
|
|
13
|
+
/**
|
|
14
|
+
* Validate every ID reference in `data` against `tree`, partitioning them into
|
|
15
|
+
* valid / invalid / unreachable. `tree` should contain the package being built
|
|
16
|
+
* plus any preloaded dependency packages.
|
|
17
|
+
*/
|
|
18
|
+
export declare function validateIdRefs(data: unknown, tree: Tree): IdRefReport;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=id-references.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id-references.d.ts","sourceRoot":"","sources":["../src/id-references.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAwEpD,+DAA+D;AAC/D,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CASxD;AAED,MAAM,WAAW,WAAW;IAC3B,gEAAgE;IAChE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAClB,uDAAuD;IACvD,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACpB,oDAAoD;IACpD,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACxB;AAED,KAAK,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAsBjD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,WAAW,CAIrE"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { IdParser } from '@datasworn-community/core';
|
|
2
|
+
/**
|
|
3
|
+
* Collects the Datasworn ID references embedded in a built rules package and
|
|
4
|
+
* validates that each one resolves against a tree. Ported from the upstream
|
|
5
|
+
* `pkg-core/Validators/Text.ts` (`forEachIdRef`) and
|
|
6
|
+
* `RulesPackageBuilder.validateIdRef`, adapted onto the published core
|
|
7
|
+
* `IdParser`. Used to verify cross-package references (e.g. an expansion that
|
|
8
|
+
* points at IDs defined by the ruleset it depends on) actually resolve.
|
|
9
|
+
*/
|
|
10
|
+
// The `_id` key holds a node's own identity, not a reference to another node.
|
|
11
|
+
const IdKey = '_id';
|
|
12
|
+
// Keys whose string values are free text / URLs and never bare ID references.
|
|
13
|
+
const plainTextKeys = new Set(['label', '_comment', 'name', 'title', 'category']);
|
|
14
|
+
const urlKeys = new Set(['url', 'license', 'icon']);
|
|
15
|
+
const nonTextKeys = new Set(['dice']);
|
|
16
|
+
// Matches a `typeId:path` Datasworn ID (or wildcard) wherever it appears —
|
|
17
|
+
// standalone, inside a markdown link, or inside a `{{macro>id}}`.
|
|
18
|
+
const idLike = /(?<typeId>[a-z\d_.]{3,}|\*{1,2}):(?<path>(?:[a-z_]+|\*{1,2})(?:\/(?:[a-z\d_.]+|\*{1,2})+)+|\*{2})/g;
|
|
19
|
+
function forEachPrimitiveValue(value, key, fn) {
|
|
20
|
+
switch (typeof value) {
|
|
21
|
+
case 'undefined':
|
|
22
|
+
break;
|
|
23
|
+
case 'boolean':
|
|
24
|
+
case 'number':
|
|
25
|
+
case 'string':
|
|
26
|
+
fn(value, key);
|
|
27
|
+
break;
|
|
28
|
+
case 'object':
|
|
29
|
+
if (value === null)
|
|
30
|
+
fn(null, key);
|
|
31
|
+
else if (Array.isArray(value))
|
|
32
|
+
value.forEach((item, index) => forEachPrimitiveValue(item, index, fn));
|
|
33
|
+
else
|
|
34
|
+
for (const [childKey, childValue] of Object.entries(value))
|
|
35
|
+
forEachPrimitiveValue(childValue, childKey, fn);
|
|
36
|
+
break;
|
|
37
|
+
default:
|
|
38
|
+
throw new Error(`Unrecognized value type: ${typeof value}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function needsIdValidation(key, value) {
|
|
42
|
+
if (!(typeof key === 'number' || typeof key === 'string'))
|
|
43
|
+
return false;
|
|
44
|
+
if (typeof value !== 'string')
|
|
45
|
+
return false;
|
|
46
|
+
if (key === IdKey ||
|
|
47
|
+
plainTextKeys.has(key) ||
|
|
48
|
+
urlKeys.has(key) ||
|
|
49
|
+
nonTextKeys.has(key) ||
|
|
50
|
+
!value.includes('/') ||
|
|
51
|
+
!value.includes(':'))
|
|
52
|
+
return false;
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
/** Collect every Datasworn ID reference embedded in `data`. */
|
|
56
|
+
export function extractIdRefs(data) {
|
|
57
|
+
const ids = new Set();
|
|
58
|
+
forEachPrimitiveValue(data, undefined, (value, key) => {
|
|
59
|
+
if (!needsIdValidation(key, value))
|
|
60
|
+
return;
|
|
61
|
+
for (const match of value.matchAll(idLike))
|
|
62
|
+
ids.add(match[0]);
|
|
63
|
+
});
|
|
64
|
+
return ids;
|
|
65
|
+
}
|
|
66
|
+
function emptyReport() {
|
|
67
|
+
return { valid: new Set(), invalid: new Set(), unreachable: new Set() };
|
|
68
|
+
}
|
|
69
|
+
function classifyIdRef(id, tree, report) {
|
|
70
|
+
if (report.valid.has(id) || report.invalid.has(id) || report.unreachable.has(id))
|
|
71
|
+
return;
|
|
72
|
+
let parsed;
|
|
73
|
+
try {
|
|
74
|
+
parsed = IdParser.parse(id);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
report.invalid.add(id);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (parsed.getMatches(tree, () => true).size > 0)
|
|
81
|
+
report.valid.add(id);
|
|
82
|
+
else
|
|
83
|
+
report.unreachable.add(id);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Validate every ID reference in `data` against `tree`, partitioning them into
|
|
87
|
+
* valid / invalid / unreachable. `tree` should contain the package being built
|
|
88
|
+
* plus any preloaded dependency packages.
|
|
89
|
+
*/
|
|
90
|
+
export function validateIdRefs(data, tree) {
|
|
91
|
+
const report = emptyReport();
|
|
92
|
+
for (const id of extractIdRefs(data))
|
|
93
|
+
classifyIdRef(id, tree, report);
|
|
94
|
+
return report;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=id-references.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id-references.js","sourceRoot":"","sources":["../src/id-references.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { buildRulesPackage, type BuildRulesPackageOptions, type RulesPackageBuildConfig, type RulesPackageBuildResult } from './rules-package-builder.js';
|
|
2
|
+
export { buildContentPackages, type ContentPackageBuildConfig, type ContentPackageBuildResult, type ContentPackageDependencyConfig, type MultiPackageBuildConfig, type MultiPackageBuildResult } from './content-package-builder.js';
|
|
2
3
|
export { loadCoreSchema, loadCoreSchemas, resolveCoreSchemaPath, type CoreSchemaFileName } from './schema.js';
|
|
3
4
|
export { createDataswornValidator, createDataswornValidators, type SchemaValidator } from './validators.js';
|
|
5
|
+
export { extractIdRefs, validateIdRefs, type IdRefReport } from './id-references.js';
|
|
4
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACN,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,MAAM,aAAa,CAAA;AACpB,OAAO,EACN,wBAAwB,EACxB,yBAAyB,EACzB,KAAK,eAAe,EACpB,MAAM,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACN,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACN,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,MAAM,aAAa,CAAA;AACpB,OAAO,EACN,wBAAwB,EACxB,yBAAyB,EACzB,KAAK,eAAe,EACpB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACN,aAAa,EACb,cAAc,EACd,KAAK,WAAW,EAChB,MAAM,oBAAoB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { buildRulesPackage } from './rules-package-builder.js';
|
|
2
|
+
export { buildContentPackages } from './content-package-builder.js';
|
|
2
3
|
export { loadCoreSchema, loadCoreSchemas, resolveCoreSchemaPath } from './schema.js';
|
|
3
4
|
export { createDataswornValidator, createDataswornValidators } from './validators.js';
|
|
5
|
+
export { extractIdRefs, validateIdRefs } from './id-references.js';
|
|
4
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EAIjB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACN,cAAc,EACd,eAAe,EACf,qBAAqB,EAErB,MAAM,aAAa,CAAA;AACpB,OAAO,EACN,wBAAwB,EACxB,yBAAyB,EAEzB,MAAM,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EAIjB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACN,oBAAoB,EAMpB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACN,cAAc,EACd,eAAe,EACf,qBAAqB,EAErB,MAAM,aAAa,CAAA;AACpB,OAAO,EACN,wBAAwB,EACxB,yBAAyB,EAEzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACN,aAAa,EACb,cAAc,EAEd,MAAM,oBAAoB,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type Datasworn, type DataswornSource } from '@datasworn-community/core';
|
|
2
|
+
import { type IdRefReport } from './id-references.js';
|
|
2
3
|
import { type DataswornValidators } from './validators.js';
|
|
3
4
|
export interface RulesPackageBuildConfig {
|
|
4
5
|
id: string;
|
|
@@ -8,15 +9,28 @@ export interface RulesPackageBuildConfig {
|
|
|
8
9
|
paths?: {
|
|
9
10
|
source: string;
|
|
10
11
|
};
|
|
12
|
+
/**
|
|
13
|
+
* IDs of other rules packages this one references (e.g. an expansion's
|
|
14
|
+
* ruleset). The multi-package builder preloads their built output so
|
|
15
|
+
* cross-package ID references resolve; declaration order does not matter.
|
|
16
|
+
*/
|
|
17
|
+
dependencies?: string[];
|
|
11
18
|
}
|
|
12
19
|
export interface BuildRulesPackageOptions {
|
|
13
20
|
outDir?: string;
|
|
14
21
|
validators?: DataswornValidators<Datasworn.RulesPackage, DataswornSource.RulesPackage>;
|
|
22
|
+
/**
|
|
23
|
+
* Already-built dependency packages to include in the ID-reference
|
|
24
|
+
* validation tree, so references from this package into them resolve.
|
|
25
|
+
*/
|
|
26
|
+
dependencies?: readonly Datasworn.RulesPackage[];
|
|
15
27
|
}
|
|
16
28
|
export interface RulesPackageBuildResult {
|
|
17
29
|
data: Datasworn.RulesPackage;
|
|
18
30
|
files: string[];
|
|
19
31
|
outFile: string;
|
|
32
|
+
/** Result of validating this package's ID references against the tree. */
|
|
33
|
+
idRefs: IdRefReport;
|
|
20
34
|
}
|
|
21
35
|
export declare function buildRulesPackage(config: RulesPackageBuildConfig, options?: BuildRulesPackageOptions): Promise<RulesPackageBuildResult>;
|
|
22
36
|
//# sourceMappingURL=rules-package-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules-package-builder.d.ts","sourceRoot":"","sources":["../src/rules-package-builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAGN,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,MAAM,2BAA2B,CAAA;AAGlC,OAAO,EAEN,KAAK,mBAAmB,EACxB,MAAM,iBAAiB,CAAA;AAExB,MAAM,WAAW,uBAAuB;IACvC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAA;KACd,CAAA;
|
|
1
|
+
{"version":3,"file":"rules-package-builder.d.ts","sourceRoot":"","sources":["../src/rules-package-builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAGN,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,MAAM,2BAA2B,CAAA;AAGlC,OAAO,EAEN,KAAK,WAAW,EAChB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAEN,KAAK,mBAAmB,EACxB,MAAM,iBAAiB,CAAA;AAExB,MAAM,WAAW,uBAAuB;IACvC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAA;KACd,CAAA;IACD;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,wBAAwB;IACxC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,mBAAmB,CAC/B,SAAS,CAAC,YAAY,EACtB,eAAe,CAAC,YAAY,CAC5B,CAAA;IACD;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,SAAS,CAAC,YAAY,EAAE,CAAA;CAChD;AAED,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,SAAS,CAAC,YAAY,CAAA;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,0EAA0E;IAC1E,MAAM,EAAE,WAAW,CAAA;CACnB;AAoED,wBAAsB,iBAAiB,CACtC,MAAM,EAAE,uBAAuB,EAC/B,OAAO,GAAE,wBAA6B,GACpC,OAAO,CAAC,uBAAuB,CAAC,CAiDlC"}
|
|
@@ -2,6 +2,7 @@ import { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { DATASWORN_SCHEMA_VERSION, IdParser } from '@datasworn-community/core';
|
|
4
4
|
import YAML from 'yaml';
|
|
5
|
+
import { validateIdRefs } from './id-references.js';
|
|
5
6
|
import { createDataswornValidators } from './validators.js';
|
|
6
7
|
const sourceExtensions = new Set(['.json', '.yaml', '.yml']);
|
|
7
8
|
function isObject(value) {
|
|
@@ -75,10 +76,22 @@ export async function buildRulesPackage(config, options = {}) {
|
|
|
75
76
|
}
|
|
76
77
|
const data = merged;
|
|
77
78
|
validators.output(data);
|
|
79
|
+
// Validate ID references against a tree of this package plus any preloaded
|
|
80
|
+
// dependencies. This catches cross-package references (e.g. an expansion
|
|
81
|
+
// pointing at its ruleset) that AJV structural validation cannot.
|
|
82
|
+
const tree = {
|
|
83
|
+
[normalizedConfig.id]: data
|
|
84
|
+
};
|
|
85
|
+
for (const dependency of options.dependencies ?? [])
|
|
86
|
+
tree[dependency._id] = dependency;
|
|
87
|
+
const idRefs = validateIdRefs(data, tree);
|
|
88
|
+
const unresolved = [...idRefs.invalid, ...idRefs.unreachable];
|
|
89
|
+
if (unresolved.length > 0)
|
|
90
|
+
throw new Error(`${normalizedConfig.id}: ${unresolved.length} unresolved ID reference(s):\n ${unresolved.join('\n ')}`);
|
|
78
91
|
const packageOutDir = path.join(outDir, normalizedConfig.id);
|
|
79
92
|
const outFile = path.join(packageOutDir, `${normalizedConfig.id}.json`);
|
|
80
93
|
await mkdir(packageOutDir, { recursive: true });
|
|
81
94
|
await writeFile(outFile, `${JSON.stringify(sortValue(data), undefined, 2)}\n`);
|
|
82
|
-
return { data, files, outFile };
|
|
95
|
+
return { data, files, outFile, idRefs };
|
|
83
96
|
}
|
|
84
97
|
//# sourceMappingURL=rules-package-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules-package-builder.js","sourceRoot":"","sources":["../src/rules-package-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACtE,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EACN,wBAAwB,EACxB,QAAQ,EAGR,MAAM,2BAA2B,CAAA;AAClC,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,EACN,yBAAyB,EAEzB,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"rules-package-builder.js","sourceRoot":"","sources":["../src/rules-package-builder.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@datasworn-community/build-tools",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "Build and migration tools for Datasworn source packages.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -49,10 +49,13 @@
|
|
|
49
49
|
"yaml": "^2.9.0"
|
|
50
50
|
},
|
|
51
51
|
"peerDependencies": {
|
|
52
|
-
"@datasworn-community/core": "0.2.
|
|
52
|
+
"@datasworn-community/core": "0.2.4"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@datasworn-community/core": "0.2.
|
|
55
|
+
"@datasworn-community/core": "0.2.4",
|
|
56
|
+
"json-schema": "^0.4.0",
|
|
57
|
+
"json-schema-library": "^11.4.1",
|
|
58
|
+
"type-fest": "^5.6.0"
|
|
56
59
|
},
|
|
57
60
|
"bugs": {
|
|
58
61
|
"url": "https://github.com/datasworn-community/datasworn/issues"
|