@neuledge/context 1.2.0 → 1.2.2
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/README.md +13 -3
- package/dist/cli.d.ts +12 -0
- package/dist/cli.js +123 -37
- package/dist/cli.js.map +1 -1
- package/dist/html.d.ts +8 -0
- package/dist/html.js +10 -3
- package/dist/html.js.map +1 -1
- package/dist/package-builder.d.ts +27 -0
- package/dist/package-builder.js +463 -3
- package/dist/package-builder.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +6 -7
- package/dist/server.js.map +1 -1
- package/dist/store.d.ts +35 -8
- package/dist/store.js +128 -13
- package/dist/store.js.map +1 -1
- package/package.json +1 -1
package/dist/store.d.ts
CHANGED
|
@@ -12,22 +12,49 @@ export interface PackageInfo extends PackageMeta {
|
|
|
12
12
|
}
|
|
13
13
|
/** Create a filesystem-safe filename for an installed package database. */
|
|
14
14
|
export declare function getPackageFileName(name: string, version: string): string;
|
|
15
|
+
/** Identity of an installed package, and the spec users type: `name@version`. */
|
|
16
|
+
export declare function packageKey(pkg: PackageMeta): string;
|
|
17
|
+
/**
|
|
18
|
+
* Match a package against a `--libs` allow-list holding bare names (every
|
|
19
|
+
* installed version) and `name@version` keys (that version only).
|
|
20
|
+
*/
|
|
21
|
+
export declare function isAllowedLibrary(pkg: PackageMeta, allowed: ReadonlySet<string>): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Order two version strings, lowest first.
|
|
24
|
+
*
|
|
25
|
+
* Rules, all chosen so a bare-name lookup lands on the version a user expects:
|
|
26
|
+
* - segments compare as numbers, so `1.15.9` < `1.15.10` (text order gets this
|
|
27
|
+
* backwards — the bug behind #102);
|
|
28
|
+
* - a missing segment counts as zero, so `1.2` and `1.2.0` are the same release;
|
|
29
|
+
* - a prerelease sorts below its release (`2.0.0-rc.1` < `2.0.0`), and two
|
|
30
|
+
* prereleases compare identifier by identifier, numerically where both are
|
|
31
|
+
* numbers, so `rc.10` beats `rc.2`;
|
|
32
|
+
* - build metadata is ignored, since it carries no ordering meaning;
|
|
33
|
+
* - versions with no numeric part (`latest`, `main`) sort below every numeric
|
|
34
|
+
* version, so a floating label never hides a real release;
|
|
35
|
+
* - anything still tied falls back to text, so results never depend on
|
|
36
|
+
* insertion or filesystem order.
|
|
37
|
+
*/
|
|
38
|
+
export declare function compareVersions(a: string, b: string): number;
|
|
15
39
|
/**
|
|
16
40
|
* Registry of documentation packages.
|
|
17
41
|
* Manages an in-memory list of packages without file system operations.
|
|
18
42
|
*/
|
|
19
43
|
export declare class PackageStore {
|
|
20
44
|
private packages;
|
|
21
|
-
/** Add a package to the registry. */
|
|
45
|
+
/** Add a package to the registry. Replaces the same name@version only. */
|
|
22
46
|
add(info: PackageInfo): void;
|
|
23
|
-
/** Remove a package from
|
|
24
|
-
remove(
|
|
25
|
-
/** Get all registered packages. */
|
|
47
|
+
/** Remove a package resolved from `spec` (see `get`). Returns true if removed. */
|
|
48
|
+
remove(spec: string): boolean;
|
|
49
|
+
/** Get all registered packages, grouped by name with the highest version first. */
|
|
26
50
|
list(): PackageInfo[];
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
51
|
+
/**
|
|
52
|
+
* Get a package by spec: `name@version` returns that exact version, a bare
|
|
53
|
+
* `name` returns the highest installed version.
|
|
54
|
+
*/
|
|
55
|
+
get(spec: string): PackageInfo | null;
|
|
56
|
+
/** Open a package database for searching. Accepts the same specs as `get`. */
|
|
57
|
+
openDb(spec: string): DatabaseConnection | null;
|
|
31
58
|
}
|
|
32
59
|
/** Read package info from a database file. */
|
|
33
60
|
export declare function readPackageInfo(packagePath: string): PackageInfo;
|
package/dist/store.js
CHANGED
|
@@ -7,31 +7,146 @@ export function getPackageFileName(name, version) {
|
|
|
7
7
|
const safeVersion = version.replaceAll("/", "__");
|
|
8
8
|
return `${safeName}@${safeVersion}.db`;
|
|
9
9
|
}
|
|
10
|
+
/** Identity of an installed package, and the spec users type: `name@version`. */
|
|
11
|
+
export function packageKey(pkg) {
|
|
12
|
+
return `${pkg.name}@${pkg.version}`;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Match a package against a `--libs` allow-list holding bare names (every
|
|
16
|
+
* installed version) and `name@version` keys (that version only).
|
|
17
|
+
*/
|
|
18
|
+
export function isAllowedLibrary(pkg, allowed) {
|
|
19
|
+
return allowed.has(pkg.name) || allowed.has(packageKey(pkg));
|
|
20
|
+
}
|
|
21
|
+
/** Numeric segments of a version plus its prerelease suffix, or null if not numeric. */
|
|
22
|
+
function parseVersionParts(version) {
|
|
23
|
+
const unprefixed = version.startsWith("v") ? version.slice(1) : version;
|
|
24
|
+
// Build metadata carries no ordering meaning (semver §10), but leaving it on
|
|
25
|
+
// makes the last segment non-numeric, which would drop the whole version into
|
|
26
|
+
// the floating-label bucket below every real release.
|
|
27
|
+
const plus = unprefixed.indexOf("+");
|
|
28
|
+
const core = plus === -1 ? unprefixed : unprefixed.slice(0, plus);
|
|
29
|
+
const dash = core.indexOf("-");
|
|
30
|
+
const segments = (dash === -1 ? core : core.slice(0, dash)).split(".");
|
|
31
|
+
if (!segments.every((s) => /^\d+$/.test(s)))
|
|
32
|
+
return null;
|
|
33
|
+
return {
|
|
34
|
+
numbers: segments.map((s) => Number.parseInt(s, 10)),
|
|
35
|
+
prerelease: dash === -1 ? "" : core.slice(dash + 1),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function compareText(a, b) {
|
|
39
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Order two version strings, lowest first.
|
|
43
|
+
*
|
|
44
|
+
* Rules, all chosen so a bare-name lookup lands on the version a user expects:
|
|
45
|
+
* - segments compare as numbers, so `1.15.9` < `1.15.10` (text order gets this
|
|
46
|
+
* backwards — the bug behind #102);
|
|
47
|
+
* - a missing segment counts as zero, so `1.2` and `1.2.0` are the same release;
|
|
48
|
+
* - a prerelease sorts below its release (`2.0.0-rc.1` < `2.0.0`), and two
|
|
49
|
+
* prereleases compare identifier by identifier, numerically where both are
|
|
50
|
+
* numbers, so `rc.10` beats `rc.2`;
|
|
51
|
+
* - build metadata is ignored, since it carries no ordering meaning;
|
|
52
|
+
* - versions with no numeric part (`latest`, `main`) sort below every numeric
|
|
53
|
+
* version, so a floating label never hides a real release;
|
|
54
|
+
* - anything still tied falls back to text, so results never depend on
|
|
55
|
+
* insertion or filesystem order.
|
|
56
|
+
*/
|
|
57
|
+
export function compareVersions(a, b) {
|
|
58
|
+
const partsA = parseVersionParts(a);
|
|
59
|
+
const partsB = parseVersionParts(b);
|
|
60
|
+
if (!partsA || !partsB) {
|
|
61
|
+
if (partsA)
|
|
62
|
+
return 1;
|
|
63
|
+
if (partsB)
|
|
64
|
+
return -1;
|
|
65
|
+
return compareText(a, b);
|
|
66
|
+
}
|
|
67
|
+
const length = Math.max(partsA.numbers.length, partsB.numbers.length);
|
|
68
|
+
for (let i = 0; i < length; i++) {
|
|
69
|
+
const diff = (partsA.numbers[i] ?? 0) - (partsB.numbers[i] ?? 0);
|
|
70
|
+
if (diff !== 0)
|
|
71
|
+
return diff;
|
|
72
|
+
}
|
|
73
|
+
if (partsA.prerelease !== partsB.prerelease) {
|
|
74
|
+
if (!partsA.prerelease)
|
|
75
|
+
return 1;
|
|
76
|
+
if (!partsB.prerelease)
|
|
77
|
+
return -1;
|
|
78
|
+
return comparePrerelease(partsA.prerelease, partsB.prerelease);
|
|
79
|
+
}
|
|
80
|
+
return compareText(a, b);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Order two prerelease suffixes, lowest first.
|
|
84
|
+
*
|
|
85
|
+
* Dot-separated identifiers, compared one at a time: numeric ones as numbers, so
|
|
86
|
+
* `rc.10` beats `rc.2` — comparing the whole suffix as text reintroduces exactly
|
|
87
|
+
* the inversion #102 was about, one field deeper. A version that runs out of
|
|
88
|
+
* identifiers first sorts lower (`rc` < `rc.1`), per semver §11.
|
|
89
|
+
*/
|
|
90
|
+
function comparePrerelease(a, b) {
|
|
91
|
+
const idsA = a.split(".");
|
|
92
|
+
const idsB = b.split(".");
|
|
93
|
+
for (let i = 0; i < Math.max(idsA.length, idsB.length); i++) {
|
|
94
|
+
const x = idsA[i];
|
|
95
|
+
const y = idsB[i];
|
|
96
|
+
if (x === undefined)
|
|
97
|
+
return -1;
|
|
98
|
+
if (y === undefined)
|
|
99
|
+
return 1;
|
|
100
|
+
const numeric = /^\d+$/.test(x) && /^\d+$/.test(y);
|
|
101
|
+
const diff = numeric ? Number(x) - Number(y) : compareText(x, y);
|
|
102
|
+
if (diff !== 0)
|
|
103
|
+
return diff;
|
|
104
|
+
}
|
|
105
|
+
return 0;
|
|
106
|
+
}
|
|
10
107
|
/**
|
|
11
108
|
* Registry of documentation packages.
|
|
12
109
|
* Manages an in-memory list of packages without file system operations.
|
|
13
110
|
*/
|
|
14
111
|
export class PackageStore {
|
|
112
|
+
// Keyed by `name@version`: several versions of the same package can be
|
|
113
|
+
// installed side by side, and each one has to stay addressable.
|
|
15
114
|
packages = new Map();
|
|
16
|
-
/** Add a package to the registry. */
|
|
115
|
+
/** Add a package to the registry. Replaces the same name@version only. */
|
|
17
116
|
add(info) {
|
|
18
|
-
this.packages.set(info
|
|
117
|
+
this.packages.set(packageKey(info), info);
|
|
19
118
|
}
|
|
20
|
-
/** Remove a package from
|
|
21
|
-
remove(
|
|
22
|
-
|
|
119
|
+
/** Remove a package resolved from `spec` (see `get`). Returns true if removed. */
|
|
120
|
+
remove(spec) {
|
|
121
|
+
const pkg = this.get(spec);
|
|
122
|
+
if (!pkg)
|
|
123
|
+
return false;
|
|
124
|
+
return this.packages.delete(packageKey(pkg));
|
|
23
125
|
}
|
|
24
|
-
/** Get all registered packages. */
|
|
126
|
+
/** Get all registered packages, grouped by name with the highest version first. */
|
|
25
127
|
list() {
|
|
26
|
-
return [...this.packages.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
128
|
+
return [...this.packages.values()].sort((a, b) => a.name.localeCompare(b.name) || compareVersions(b.version, a.version));
|
|
27
129
|
}
|
|
28
|
-
/**
|
|
29
|
-
|
|
30
|
-
|
|
130
|
+
/**
|
|
131
|
+
* Get a package by spec: `name@version` returns that exact version, a bare
|
|
132
|
+
* `name` returns the highest installed version.
|
|
133
|
+
*/
|
|
134
|
+
get(spec) {
|
|
135
|
+
const exact = this.packages.get(spec);
|
|
136
|
+
if (exact)
|
|
137
|
+
return exact;
|
|
138
|
+
let best = null;
|
|
139
|
+
for (const pkg of this.packages.values()) {
|
|
140
|
+
if (pkg.name !== spec)
|
|
141
|
+
continue;
|
|
142
|
+
if (!best || compareVersions(pkg.version, best.version) > 0)
|
|
143
|
+
best = pkg;
|
|
144
|
+
}
|
|
145
|
+
return best;
|
|
31
146
|
}
|
|
32
|
-
/** Open a package database for searching. */
|
|
33
|
-
openDb(
|
|
34
|
-
const pkg = this.
|
|
147
|
+
/** Open a package database for searching. Accepts the same specs as `get`. */
|
|
148
|
+
openDb(spec) {
|
|
149
|
+
const pkg = this.get(spec);
|
|
35
150
|
if (!pkg)
|
|
36
151
|
return null;
|
|
37
152
|
return openDatabase(pkg.path, { readonly: true });
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAA2B,YAAY,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAe/E,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,OAAe;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAClD,OAAO,GAAG,QAAQ,IAAI,WAAW,KAAK,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,YAAY;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|