@uncefact/untp-utils 0.3.0 → 0.4.0
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 -13
- package/build/artefacts/detect-version-from-context.d.ts +7 -2
- package/build/artefacts/detect-version-from-context.js +17 -6
- package/build/artefacts/detect-version-from-context.js.map +1 -1
- package/build/artefacts/detect-version-from-context.test.js +59 -0
- package/build/artefacts/detect-version-from-context.test.js.map +1 -1
- package/build/artefacts/urls.d.ts +2 -1
- package/build/artefacts/urls.js +9 -5
- package/build/artefacts/urls.js.map +1 -1
- package/build/artefacts/urls.test.js +54 -0
- package/build/artefacts/urls.test.js.map +1 -1
- package/build/bundle/lookup.test.js +8 -8
- package/build/bundle/lookup.test.js.map +1 -1
- package/build/bundle/public.d.ts +7 -3
- package/build/bundle/public.js +7 -3
- package/build/bundle/public.js.map +1 -1
- package/build/bundle/public.test.js +6 -0
- package/build/bundle/public.test.js.map +1 -1
- package/build/common/canonical-json.d.ts +10 -0
- package/build/common/canonical-json.js +29 -0
- package/build/common/canonical-json.js.map +1 -0
- package/build/common/canonical-json.test.d.ts +1 -0
- package/build/common/canonical-json.test.js +20 -0
- package/build/common/canonical-json.test.js.map +1 -0
- package/build/common/index.d.ts +1 -0
- package/build/common/index.js +1 -0
- package/build/common/index.js.map +1 -1
- package/build/conformity-vocabulary/codes.d.ts +4 -0
- package/build/conformity-vocabulary/codes.js +4 -0
- package/build/conformity-vocabulary/codes.js.map +1 -1
- package/build/conformity-vocabulary/parse-conformity-scheme.test.js +150 -0
- package/build/conformity-vocabulary/parse-conformity-scheme.test.js.map +1 -1
- package/build/conformity-vocabulary/parsers/v0-7-0.parser.js +225 -0
- package/build/conformity-vocabulary/parsers/v0-7-0.parser.js.map +1 -1
- package/build/conformity-vocabulary/types.d.ts +69 -15
- package/build/conformity-vocabulary/validate-conformity-claim.d.ts +17 -11
- package/build/conformity-vocabulary/validate-conformity-claim.js +118 -13
- package/build/conformity-vocabulary/validate-conformity-claim.js.map +1 -1
- package/build/conformity-vocabulary/validate-conformity-claim.test.js +265 -0
- package/build/conformity-vocabulary/validate-conformity-claim.test.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -14,19 +14,19 @@ The package root exports only `StructuredError`, the base class every
|
|
|
14
14
|
sub-entry throws from. Each capability is imported from its own subpath so a
|
|
15
15
|
consumer only pulls in the dependencies it needs.
|
|
16
16
|
|
|
17
|
-
| Subpath | Provides
|
|
18
|
-
| -------------------------------------------- |
|
|
19
|
-
| `@uncefact/untp-utils/multibase-digest` | `MultibaseDigest`: encode, decode and verify multibase-encoded multihashes.
|
|
20
|
-
| `@uncefact/untp-utils/common` |
|
|
21
|
-
| `@uncefact/untp-utils/artefacts` | UNTP schema, context and docs URL helpers, and `detectVersionFromContext`.
|
|
22
|
-
| `@uncefact/untp-utils/conformity-vocabulary` | Parses a UNTP conformity scheme or catalogue and validates a conformity claim against it.
|
|
23
|
-
| `@uncefact/untp-utils/validation` | Validates a payload against JSON Schema and expands it as JSON-LD, both guarded against SSRF.
|
|
24
|
-
| `@uncefact/untp-utils/loaders` | The schema and JSON-LD document loaders `validation` runs on.
|
|
25
|
-
| `@uncefact/untp-utils/resolvers` | IP-pinned document fetching with a conditional-fetch skip chain.
|
|
26
|
-
| `@uncefact/untp-utils/node` | `validatePublicUrl`, the SSRF guard the other sub-entries fetch through, with its `isPrivateHostname`, `isPrivateIpv4` and `isPrivateIpv6` predicates and its error classes.
|
|
27
|
-
| `@uncefact/untp-utils/cache` | `createInMemoryTtlCache`, a bounded in-memory TTL cache.
|
|
28
|
-
| `@uncefact/untp-utils/bundled-artefacts` | The bundled UNTP and VCDM schemas and contexts, keyed by published URL.
|
|
29
|
-
| `@uncefact/untp-utils/http-headers` | HTTP header parsing, and the default `User-Agent` guarded fetches send.
|
|
17
|
+
| Subpath | Provides |
|
|
18
|
+
| -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
19
|
+
| `@uncefact/untp-utils/multibase-digest` | `MultibaseDigest`: encode, decode and verify multibase-encoded multihashes. |
|
|
20
|
+
| `@uncefact/untp-utils/common` | Document-field readers (`asDateTime`, `asNonEmptyString`, `makeRequireString`), `evaluateValidityWindow` and `ValidityWindowOutcome`, and `canonicalJson` for deterministic JSON serialisation. |
|
|
21
|
+
| `@uncefact/untp-utils/artefacts` | UNTP schema, context and docs URL helpers, the `isV070OrAbove` version predicate, and `detectVersionFromContext`. |
|
|
22
|
+
| `@uncefact/untp-utils/conformity-vocabulary` | Parses a UNTP conformity scheme or catalogue, including `ConformityScore`, `ConformityScoringFramework` and `ConformityRequiredPerformance`, and validates a conformity claim against it, covering score-code membership and `ConformityReferenceResolution` catalogue tier references. |
|
|
23
|
+
| `@uncefact/untp-utils/validation` | Validates a payload against JSON Schema and expands it as JSON-LD, both guarded against SSRF. |
|
|
24
|
+
| `@uncefact/untp-utils/loaders` | The schema and JSON-LD document loaders `validation` runs on. |
|
|
25
|
+
| `@uncefact/untp-utils/resolvers` | IP-pinned document fetching with a conditional-fetch skip chain. |
|
|
26
|
+
| `@uncefact/untp-utils/node` | `validatePublicUrl`, the SSRF guard the other sub-entries fetch through, with its `isPrivateHostname`, `isPrivateIpv4` and `isPrivateIpv6` predicates and its error classes. |
|
|
27
|
+
| `@uncefact/untp-utils/cache` | `createInMemoryTtlCache`, a bounded in-memory TTL cache. |
|
|
28
|
+
| `@uncefact/untp-utils/bundled-artefacts` | The bundled UNTP and VCDM schemas and contexts, keyed by published URL. |
|
|
29
|
+
| `@uncefact/untp-utils/http-headers` | HTTP header parsing, and the default `User-Agent` guarded fetches send. |
|
|
30
30
|
|
|
31
31
|
Every sub-entry throws a typed error class on failure rather than returning
|
|
32
32
|
an outcome object. See [RELEASE_NOTES.md](./RELEASE_NOTES.md) for what each
|
|
@@ -21,8 +21,13 @@ export interface DetectVersionFromContextOptions {
|
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
23
|
* Derives the spec version from a UNTP document's `@context` by looking for a
|
|
24
|
-
* path segment shaped `/{major}.{minor}.{patch}[-prerelease]
|
|
25
|
-
* UNTP context URL.
|
|
24
|
+
* path segment shaped `/{major}.{minor}.{patch}[-prerelease]` inside a known
|
|
25
|
+
* UNTP context URL. Only the part of the URL before any `?` or `#` is read, so
|
|
26
|
+
* a version-shaped string inside a query or fragment never supplies the
|
|
27
|
+
* version, while a version that a query or fragment immediately follows still
|
|
28
|
+
* does. Within that part the segment must be bounded on the left by `/` and on
|
|
29
|
+
* the right by `/` or the end of the string. The published schema decides the
|
|
30
|
+
* exact context string that the document must use.
|
|
26
31
|
*
|
|
27
32
|
* Works for any UNTP artefact that publishes a versioned context: credentials
|
|
28
33
|
* (DPP, DCC, DFR, DIA, DTE), conformity schemes, identifier scheme registers,
|
|
@@ -7,14 +7,24 @@
|
|
|
7
7
|
export const UNTP_CONTEXT_DOMAINS = ['vocabulary.uncefact.org', 'test.uncefact.org'];
|
|
8
8
|
/**
|
|
9
9
|
* A version segment in a UNTP-published context path. Matches a path segment
|
|
10
|
-
* shaped `/{major}.{minor}.{patch}[-prerelease]
|
|
11
|
-
*
|
|
10
|
+
* shaped `/{major}.{minor}.{patch}[-prerelease]` when it is bounded on the
|
|
11
|
+
* left by `/` and on the right by `/` or the end of the string. It is applied
|
|
12
|
+
* to the part of the URL before any `?` or `#`, so query and fragment parts
|
|
13
|
+
* never supply the version. The pre-release suffix captures common forms (`-rc1`, `-alpha.2`,
|
|
14
|
+
* `-2024-05-21`, etc.).
|
|
15
|
+
* This identifies only the version; the published schema decides the exact
|
|
16
|
+
* context string.
|
|
12
17
|
*/
|
|
13
|
-
const UNTP_VERSION_PATH_SEGMENT = /\/(\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?)
|
|
18
|
+
const UNTP_VERSION_PATH_SEGMENT = /\/(\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?)(?=\/|$)/;
|
|
14
19
|
/**
|
|
15
20
|
* Derives the spec version from a UNTP document's `@context` by looking for a
|
|
16
|
-
* path segment shaped `/{major}.{minor}.{patch}[-prerelease]
|
|
17
|
-
* UNTP context URL.
|
|
21
|
+
* path segment shaped `/{major}.{minor}.{patch}[-prerelease]` inside a known
|
|
22
|
+
* UNTP context URL. Only the part of the URL before any `?` or `#` is read, so
|
|
23
|
+
* a version-shaped string inside a query or fragment never supplies the
|
|
24
|
+
* version, while a version that a query or fragment immediately follows still
|
|
25
|
+
* does. Within that part the segment must be bounded on the left by `/` and on
|
|
26
|
+
* the right by `/` or the end of the string. The published schema decides the
|
|
27
|
+
* exact context string that the document must use.
|
|
18
28
|
*
|
|
19
29
|
* Works for any UNTP artefact that publishes a versioned context: credentials
|
|
20
30
|
* (DPP, DCC, DFR, DIA, DTE), conformity schemes, identifier scheme registers,
|
|
@@ -46,7 +56,8 @@ export function detectVersionFromContext(doc, options = {}) {
|
|
|
46
56
|
if (!matchesDomain(url)) {
|
|
47
57
|
continue;
|
|
48
58
|
}
|
|
49
|
-
const
|
|
59
|
+
const path = url.split(/[?#]/, 1)[0];
|
|
60
|
+
const match = path.match(UNTP_VERSION_PATH_SEGMENT);
|
|
50
61
|
if (match) {
|
|
51
62
|
return match[1];
|
|
52
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-version-from-context.js","sourceRoot":"","sources":["../../src/artefacts/detect-version-from-context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,yBAAyB,EAAE,mBAAmB,CAAU,CAAC;AAE9F
|
|
1
|
+
{"version":3,"file":"detect-version-from-context.js","sourceRoot":"","sources":["../../src/artefacts/detect-version-from-context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,yBAAyB,EAAE,mBAAmB,CAAU,CAAC;AAE9F;;;;;;;;;GASG;AACH,MAAM,yBAAyB,GAAG,+CAA+C,CAAC;AAiBlF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,wBAAwB,CACtC,GAAY,EACZ,UAA2C,EAAE;IAE7C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,YAAY,GAAI,GAAgC,CAAC,UAAU,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACpD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAgB;IAC7C,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA0B;IACpD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -15,6 +15,61 @@ describe('detectVersionFromContext', () => {
|
|
|
15
15
|
const doc = { '@context': 'https://vocabulary.uncefact.org/untp/0.7.0-rc.1/context/' };
|
|
16
16
|
expect(detectVersionFromContext(doc)).toBe('0.7.0-rc.1');
|
|
17
17
|
});
|
|
18
|
+
it('returns the version when it is the terminal path segment without a trailing slash', () => {
|
|
19
|
+
const doc = { '@context': 'https://test.uncefact.org/vocabulary/untp/dpp/0.5.0' };
|
|
20
|
+
expect(detectVersionFromContext(doc)).toBe('0.5.0');
|
|
21
|
+
});
|
|
22
|
+
it('recognises a terminal pre-release version without a trailing slash', () => {
|
|
23
|
+
const doc = { '@context': 'https://vocabulary.uncefact.org/untp/0.7.0-rc.1' };
|
|
24
|
+
expect(detectVersionFromContext(doc)).toBe('0.7.0-rc.1');
|
|
25
|
+
});
|
|
26
|
+
it('uses the first version-shaped path segment', () => {
|
|
27
|
+
// The first version-shaped segment wins when a later path segment also looks like a version.
|
|
28
|
+
const doc = { '@context': 'https://vocabulary.uncefact.org/untp/0.6.0/dpp/0.7.0/' };
|
|
29
|
+
expect(detectVersionFromContext(doc)).toBe('0.6.0');
|
|
30
|
+
});
|
|
31
|
+
it('ignores a version-shaped path in a query', () => {
|
|
32
|
+
const doc = { '@context': 'https://vocabulary.uncefact.org/untp/context?path=/0.7.0' };
|
|
33
|
+
expect(detectVersionFromContext(doc)).toBeUndefined();
|
|
34
|
+
});
|
|
35
|
+
it('ignores a version-shaped path in a fragment', () => {
|
|
36
|
+
const doc = { '@context': 'https://vocabulary.uncefact.org/untp/context#path=/0.7.0' };
|
|
37
|
+
expect(detectVersionFromContext(doc)).toBeUndefined();
|
|
38
|
+
});
|
|
39
|
+
it('uses a genuine pathname version after a query-only context entry', () => {
|
|
40
|
+
const doc = {
|
|
41
|
+
'@context': [
|
|
42
|
+
'https://vocabulary.uncefact.org/untp/context?path=/0.7.0',
|
|
43
|
+
'https://vocabulary.uncefact.org/untp/0.6.0/context/',
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
expect(detectVersionFromContext(doc)).toBe('0.6.0');
|
|
47
|
+
});
|
|
48
|
+
it('recognises a version bounded by a query string', () => {
|
|
49
|
+
const doc = { '@context': 'https://test.uncefact.org/vocabulary/untp/dpp/0.5.0?format=json' };
|
|
50
|
+
expect(detectVersionFromContext(doc)).toBe('0.5.0');
|
|
51
|
+
});
|
|
52
|
+
it('recognises a version bounded by a fragment', () => {
|
|
53
|
+
const doc = { '@context': 'https://test.uncefact.org/vocabulary/untp/dpp/0.5.0#context' };
|
|
54
|
+
expect(detectVersionFromContext(doc)).toBe('0.5.0');
|
|
55
|
+
});
|
|
56
|
+
it('rejects a version with a trailing dot', () => {
|
|
57
|
+
const doc = { '@context': 'https://test.uncefact.org/vocabulary/untp/dpp/0.5.0./' };
|
|
58
|
+
expect(detectVersionFromContext(doc)).toBeUndefined();
|
|
59
|
+
});
|
|
60
|
+
it('rejects a four-part version', () => {
|
|
61
|
+
const doc = { '@context': 'https://test.uncefact.org/vocabulary/untp/dpp/0.5.0.1/' };
|
|
62
|
+
expect(detectVersionFromContext(doc)).toBeUndefined();
|
|
63
|
+
});
|
|
64
|
+
it('does not detect a filename-shaped version on an unrelated domain', () => {
|
|
65
|
+
const doc = { '@context': 'https://example.org/untp/0.5.0-rc.1.jsonld' };
|
|
66
|
+
expect(detectVersionFromContext(doc)).toBeUndefined();
|
|
67
|
+
});
|
|
68
|
+
it('keeps the complete filename-shaped suffix when the domain is recognised', () => {
|
|
69
|
+
// SemVer permits dotted prerelease identifiers, so the detector cannot tell a filename extension from a prerelease part; no published UNTP context has this shape.
|
|
70
|
+
const doc = { '@context': 'https://vocabulary.uncefact.org/untp/0.5.0-rc.1.jsonld' };
|
|
71
|
+
expect(detectVersionFromContext(doc)).toBe('0.5.0-rc.1.jsonld');
|
|
72
|
+
});
|
|
18
73
|
it('recognises the test.uncefact.org domain', () => {
|
|
19
74
|
const doc = { '@context': 'https://test.uncefact.org/untp/0.7.0/context/' };
|
|
20
75
|
expect(detectVersionFromContext(doc)).toBe('0.7.0');
|
|
@@ -23,6 +78,10 @@ describe('detectVersionFromContext', () => {
|
|
|
23
78
|
const doc = { '@context': ['https://schema.org/', 'https://example.com/0.7.0/'] };
|
|
24
79
|
expect(detectVersionFromContext(doc)).toBeUndefined();
|
|
25
80
|
});
|
|
81
|
+
it('does not recognise a filename-embedded version', () => {
|
|
82
|
+
const doc = { '@context': 'https://aatp.foodagility.com/context/aatp-dlp-context-0.4.0.jsonld' };
|
|
83
|
+
expect(detectVersionFromContext(doc, { domain: 'aatp.foodagility.com' })).toBeUndefined();
|
|
84
|
+
});
|
|
26
85
|
it('skips non-string entries within an array @context', () => {
|
|
27
86
|
const doc = {
|
|
28
87
|
'@context': [{ '@vocab': 'https://example.com/' }, 'https://vocabulary.uncefact.org/untp/0.7.0/context/'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-version-from-context.test.js","sourceRoot":"","sources":["../../src/artefacts/detect-version-from-context.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"detect-version-from-context.test.js","sourceRoot":"","sources":["../../src/artefacts/detect-version-from-context.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,7 +74,8 @@ export interface UntpArtefactUrls {
|
|
|
74
74
|
* `ConformityScheme`). Must be a recognised type.
|
|
75
75
|
* @param version - Semantic version of the artefact (e.g. `0.7.0`).
|
|
76
76
|
* @returns The {@link UntpArtefactUrls} appropriate for the version.
|
|
77
|
-
* @throws {Error} When `type` is not a recognised UNTP artefact type
|
|
77
|
+
* @throws {Error} When `type` is not a recognised UNTP artefact type, or when `type` is
|
|
78
|
+
* `ConformityScheme` and `version` is before 0.7.0.
|
|
78
79
|
*/
|
|
79
80
|
export declare function buildUntpArtefactUrls(type: string, version: string): UntpArtefactUrls;
|
|
80
81
|
/**
|
package/build/artefacts/urls.js
CHANGED
|
@@ -91,10 +91,10 @@ const DOCS_VERSION_FALLBACKS = {
|
|
|
91
91
|
* @throws {Error} When `type` is not a recognised UNTP artefact type.
|
|
92
92
|
*/
|
|
93
93
|
export function buildSpecificationPageUrl(type, version) {
|
|
94
|
-
|
|
95
|
-
if (!slug) {
|
|
94
|
+
if (!Object.hasOwn(UNTP_SPECIFICATION_PAGE_SLUGS, type)) {
|
|
96
95
|
throw new Error(`Unknown UNTP artefact type "${type}". Expected one of: ${Object.keys(UNTP_SPECIFICATION_PAGE_SLUGS).join(', ')}.`);
|
|
97
96
|
}
|
|
97
|
+
const slug = UNTP_SPECIFICATION_PAGE_SLUGS[type];
|
|
98
98
|
const docsVersion = DOCS_VERSION_FALLBACKS[version] ?? version;
|
|
99
99
|
if (docsVersion === CURRENT_UNTP_DOCS_VERSION) {
|
|
100
100
|
return `${DOCS_BASE}/specification/${slug}`;
|
|
@@ -111,13 +111,17 @@ export function buildSpecificationPageUrl(type, version) {
|
|
|
111
111
|
* `ConformityScheme`). Must be a recognised type.
|
|
112
112
|
* @param version - Semantic version of the artefact (e.g. `0.7.0`).
|
|
113
113
|
* @returns The {@link UntpArtefactUrls} appropriate for the version.
|
|
114
|
-
* @throws {Error} When `type` is not a recognised UNTP artefact type
|
|
114
|
+
* @throws {Error} When `type` is not a recognised UNTP artefact type, or when `type` is
|
|
115
|
+
* `ConformityScheme` and `version` is before 0.7.0.
|
|
115
116
|
*/
|
|
116
117
|
export function buildUntpArtefactUrls(type, version) {
|
|
117
|
-
|
|
118
|
-
if (!shortCode) {
|
|
118
|
+
if (!Object.hasOwn(UNTP_SHORT_CREDENTIAL_TYPES, type)) {
|
|
119
119
|
throw new Error(`Unknown UNTP artefact type "${type}". Expected one of: ${Object.keys(UNTP_SHORT_CREDENTIAL_TYPES).join(', ')}.`);
|
|
120
120
|
}
|
|
121
|
+
const shortCode = UNTP_SHORT_CREDENTIAL_TYPES[type];
|
|
122
|
+
if (type === 'ConformityScheme' && !isV070OrAbove(version)) {
|
|
123
|
+
throw new Error(`ConformityScheme has no artefacts for versions before UNTP 0.7.0 and "${version}" is not a UNTP 0.7.0 or later version.`);
|
|
124
|
+
}
|
|
121
125
|
if (isV070OrAbove(version)) {
|
|
122
126
|
const fileName = UNTP_CORE_SCHEMA_FILENAMES[type];
|
|
123
127
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urls.js","sourceRoot":"","sources":["../../src/artefacts/urls.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,GAAG,2CAA2C,CAAC;AAChE,MAAM,qBAAqB,GAAG,yCAAyC,CAAC;AACxE,MAAM,oBAAoB,GAAG,sCAAsC,CAAC;AAEpE,6FAA6F;AAC7F,MAAM,CAAC,MAAM,2BAA2B,GAA2B;IACjE,sBAAsB,EAAE,KAAK;IAC7B,2BAA2B,EAAE,KAAK;IAClC,wBAAwB,EAAE,KAAK;IAC/B,qBAAqB,EAAE,KAAK;IAC5B,qBAAqB,EAAE,KAAK;IAC5B,gBAAgB,EAAE,KAAK;CACxB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAA2B;IAChE,sBAAsB,EAAE,wBAAwB;IAChD,2BAA2B,EAAE,sBAAsB;IACnD,wBAAwB,EAAE,0BAA0B;IACpD,qBAAqB,EAAE,uBAAuB;IAC9C,qBAAqB,EAAE,uBAAuB;IAC9C,gBAAgB,EAAE,kBAAkB;CACrC,CAAC;AAEF,MAAM,SAAS,GAAG,6BAA6B,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAA2B;IACnE,sBAAsB,EAAE,wBAAwB;IAChD,2BAA2B,EAAE,sBAAsB;IACnD,wBAAwB,EAAE,2BAA2B;IACrD,qBAAqB,EAAE,uBAAuB;IAC9C,qBAAqB,EAAE,uBAAuB;IAC9C,gBAAgB,EAAE,6BAA6B;CAChD,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,OAAO,CAAC;AAEjD;;;;GAIG;AACH,MAAM,sBAAsB,GAA2B;IACrD,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAY,EAAE,OAAe;IACrE,
|
|
1
|
+
{"version":3,"file":"urls.js","sourceRoot":"","sources":["../../src/artefacts/urls.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,53 @@
|
|
|
1
1
|
import { buildUntpArtefactUrls, buildSpecificationPageUrl, UNTP_SHORT_CREDENTIAL_TYPES, UNTP_CORE_SCHEMA_FILENAMES, UNTP_SPECIFICATION_PAGE_SLUGS, buildLinkSetSchemaUrl, } from './urls';
|
|
2
2
|
describe('buildUntpArtefactUrls', () => {
|
|
3
|
+
// Every URL below is the one recorded in artefacts/manifest.json.
|
|
4
|
+
const legacyArtefactUrls = [
|
|
5
|
+
[
|
|
6
|
+
'DigitalProductPassport',
|
|
7
|
+
'https://test.uncefact.org/vocabulary/untp/dpp/untp-dpp-schema-0.6.0.json',
|
|
8
|
+
'https://test.uncefact.org/vocabulary/untp/dpp/0.6.0/context/',
|
|
9
|
+
],
|
|
10
|
+
[
|
|
11
|
+
'DigitalConformityCredential',
|
|
12
|
+
'https://test.uncefact.org/vocabulary/untp/dcc/untp-dcc-schema-0.6.0.json',
|
|
13
|
+
'https://test.uncefact.org/vocabulary/untp/dcc/0.6.0/context/',
|
|
14
|
+
],
|
|
15
|
+
[
|
|
16
|
+
'DigitalTraceabilityEvent',
|
|
17
|
+
'https://test.uncefact.org/vocabulary/untp/dte/untp-dte-schema-0.6.0.json',
|
|
18
|
+
'https://test.uncefact.org/vocabulary/untp/dte/0.6.0/context/',
|
|
19
|
+
],
|
|
20
|
+
[
|
|
21
|
+
'DigitalFacilityRecord',
|
|
22
|
+
'https://test.uncefact.org/vocabulary/untp/dfr/untp-dfr-schema-0.6.0.json',
|
|
23
|
+
'https://test.uncefact.org/vocabulary/untp/dfr/0.6.0/context/',
|
|
24
|
+
],
|
|
25
|
+
[
|
|
26
|
+
'DigitalIdentityAnchor',
|
|
27
|
+
'https://test.uncefact.org/vocabulary/untp/dia/untp-dia-schema-0.6.0.json',
|
|
28
|
+
'https://test.uncefact.org/vocabulary/untp/dia/0.6.0/context/',
|
|
29
|
+
],
|
|
30
|
+
];
|
|
31
|
+
const artefactSchemaUrls = {
|
|
32
|
+
DigitalProductPassport: 'https://untp.unece.org/artefacts/schema/v0.7.0/dpp/DigitalProductPassport.json',
|
|
33
|
+
DigitalConformityCredential: 'https://untp.unece.org/artefacts/schema/v0.7.0/dcc/ConformityCredential.json',
|
|
34
|
+
DigitalTraceabilityEvent: 'https://untp.unece.org/artefacts/schema/v0.7.0/dte/DigitalTraceabilityEvent.json',
|
|
35
|
+
DigitalFacilityRecord: 'https://untp.unece.org/artefacts/schema/v0.7.0/dfr/DigitalFacilityRecord.json',
|
|
36
|
+
DigitalIdentityAnchor: 'https://untp.unece.org/artefacts/schema/v0.7.0/dia/DigitalIdentityAnchor.json',
|
|
37
|
+
ConformityScheme: 'https://untp.unece.org/artefacts/schema/v0.7.0/cvc/ConformityScheme.json',
|
|
38
|
+
};
|
|
39
|
+
it.each(legacyArtefactUrls)('keeps the legacy URL stable for %s', (type, schemaUrl, contextUrl) => {
|
|
40
|
+
expect(buildUntpArtefactUrls(type, '0.6.0')).toEqual({
|
|
41
|
+
schemaUrl,
|
|
42
|
+
contextUrl,
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
it.each(['0.6.0', 'draft'])('rejects a ConformityScheme version that has no artefacts: %s', (version) => {
|
|
46
|
+
expect(() => buildUntpArtefactUrls('ConformityScheme', version)).toThrow(`ConformityScheme has no artefacts for versions before UNTP 0.7.0 and "${version}" is not a UNTP 0.7.0 or later version.`);
|
|
47
|
+
});
|
|
48
|
+
it.each(Object.entries(artefactSchemaUrls))('keeps the artefacts URL byte-identical for %s', (type, schemaUrl) => {
|
|
49
|
+
expect(buildUntpArtefactUrls(type, '0.7.0').schemaUrl).toBe(schemaUrl);
|
|
50
|
+
});
|
|
3
51
|
describe('v0.6.x (legacy layout)', () => {
|
|
4
52
|
it('builds the legacy per-credential-type schema and context URLs', () => {
|
|
5
53
|
expect(buildUntpArtefactUrls('DigitalProductPassport', '0.6.1')).toEqual({
|
|
@@ -55,6 +103,9 @@ describe('buildUntpArtefactUrls', () => {
|
|
|
55
103
|
it('throws with a helpful message listing the supported types', () => {
|
|
56
104
|
expect(() => buildUntpArtefactUrls('DigitalLivestockPassport', '0.7.0')).toThrow(/Unknown UNTP artefact type/);
|
|
57
105
|
});
|
|
106
|
+
it('rejects inherited object keys', () => {
|
|
107
|
+
expect(() => buildUntpArtefactUrls('toString', '0.7.0')).toThrow('Unknown UNTP artefact type "toString"');
|
|
108
|
+
});
|
|
58
109
|
});
|
|
59
110
|
describe('exported maps', () => {
|
|
60
111
|
it('the short-code and schema-filename maps agree on the set of supported types', () => {
|
|
@@ -84,6 +135,9 @@ describe('buildSpecificationPageUrl', () => {
|
|
|
84
135
|
it('throws for an unknown artefact type', () => {
|
|
85
136
|
expect(() => buildSpecificationPageUrl('DigitalLivestockPassport', '0.7.0')).toThrow(/Unknown UNTP artefact type/);
|
|
86
137
|
});
|
|
138
|
+
it('rejects inherited object keys', () => {
|
|
139
|
+
expect(() => buildSpecificationPageUrl('toString', '0.7.0')).toThrow('Unknown UNTP artefact type "toString"');
|
|
140
|
+
});
|
|
87
141
|
it('keeps the slug set aligned with the short-code map', () => {
|
|
88
142
|
expect(Object.keys(UNTP_SPECIFICATION_PAGE_SLUGS).sort()).toEqual(Object.keys(UNTP_SHORT_CREDENTIAL_TYPES).sort());
|
|
89
143
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urls.test.js","sourceRoot":"","sources":["../../src/artefacts/urls.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"urls.test.js","sourceRoot":"","sources":["../../src/artefacts/urls.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { findBundledArtefact, normaliseArtefactUrl } from './lookup.js';
|
|
2
|
+
// The refresh script is plain ESM JavaScript outside `src/`, so it is loaded
|
|
3
|
+
// at runtime rather than imported statically (tsc's rootDir is `src`).
|
|
4
|
+
const scriptUrl = new URL('../../scripts/refresh-artefacts.mjs', import.meta.url).href;
|
|
5
|
+
const { canonicalise } = (await import(scriptUrl));
|
|
2
6
|
describe('normaliseArtefactUrl', () => {
|
|
3
7
|
it.each([
|
|
4
8
|
['https://vocabulary.uncefact.org/untp/0.7.0/context/', 'https://vocabulary.uncefact.org/untp/0.7.0/context'],
|
|
@@ -47,22 +51,18 @@ describe('findBundledArtefact', () => {
|
|
|
47
51
|
});
|
|
48
52
|
});
|
|
49
53
|
describe('bundle integrity', () => {
|
|
54
|
+
it('uses the producer serialisation for integer-like keys so checker ordering cannot drift', () => {
|
|
55
|
+
expect(JSON.stringify(canonicalise({ '2': 'two', '10': 'ten' }))).toBe('{"2":"two","10":"ten"}');
|
|
56
|
+
});
|
|
50
57
|
it('serves every artefact with the content hash the manifest records', async () => {
|
|
51
58
|
const { readFile } = await import('node:fs/promises');
|
|
52
59
|
const { createHash } = await import('node:crypto');
|
|
53
60
|
const manifest = JSON.parse(await readFile(new URL('../../artefacts/manifest.json', import.meta.url), 'utf8'));
|
|
54
|
-
const sortKeys = (value) => Array.isArray(value)
|
|
55
|
-
? value.map(sortKeys)
|
|
56
|
-
: value !== null && typeof value === 'object'
|
|
57
|
-
? Object.fromEntries(Object.keys(value)
|
|
58
|
-
.sort()
|
|
59
|
-
.map((key) => [key, sortKeys(value[key])]))
|
|
60
|
-
: value;
|
|
61
61
|
for (const { url, sha256 } of manifest.artefacts) {
|
|
62
62
|
const served = await findBundledArtefact(url);
|
|
63
63
|
expect(served).toBeDefined();
|
|
64
64
|
expect(createHash('sha256')
|
|
65
|
-
.update(JSON.stringify(
|
|
65
|
+
.update(JSON.stringify(canonicalise(served)))
|
|
66
66
|
.digest('hex')).toBe(sha256);
|
|
67
67
|
}
|
|
68
68
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lookup.test.js","sourceRoot":"","sources":["../../src/bundle/lookup.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"lookup.test.js","sourceRoot":"","sources":["../../src/bundle/lookup.test.ts"],"names":[],"mappings":"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"}
|
package/build/bundle/public.d.ts
CHANGED
|
@@ -8,13 +8,17 @@ export declare function bundledUntpVersions(): Promise<readonly string[]>;
|
|
|
8
8
|
/**
|
|
9
9
|
* The bundled JSON Schema for a UNTP credential type and version, for example
|
|
10
10
|
* `bundledSchema('DigitalProductPassport', '0.6.0')`, or `undefined` when the
|
|
11
|
-
* bundle does not carry
|
|
12
|
-
* `
|
|
11
|
+
* bundle does not carry a version that has a published artefact; throws for a
|
|
12
|
+
* `ConformityScheme` below UNTP 0.7.0 because no artefact was ever published for
|
|
13
|
+
* one. `type` accepts the names `buildUntpArtefactUrls` accepts.
|
|
13
14
|
*/
|
|
14
15
|
export declare function bundledSchema(type: string, version: string): Promise<Record<string, unknown> | undefined>;
|
|
15
16
|
/**
|
|
16
17
|
* The bundled JSON-LD context a UNTP credential type declares at a version:
|
|
17
|
-
* the per-type context before 0.7.0, the unified UNTP context from 0.7.0
|
|
18
|
+
* the per-type context before 0.7.0, the unified UNTP context from 0.7.0, or
|
|
19
|
+
* `undefined` when the bundle does not carry a version that has a published
|
|
20
|
+
* artefact; throws for a `ConformityScheme` below UNTP 0.7.0 because no artefact
|
|
21
|
+
* was ever published for one.
|
|
18
22
|
*/
|
|
19
23
|
export declare function bundledContext(type: string, version: string): Promise<Record<string, unknown> | undefined>;
|
|
20
24
|
/** The bundled Identity Resolver link set schema for a UNTP version (published from 0.7.0). */
|
package/build/bundle/public.js
CHANGED
|
@@ -24,8 +24,9 @@ export async function bundledUntpVersions() {
|
|
|
24
24
|
/**
|
|
25
25
|
* The bundled JSON Schema for a UNTP credential type and version, for example
|
|
26
26
|
* `bundledSchema('DigitalProductPassport', '0.6.0')`, or `undefined` when the
|
|
27
|
-
* bundle does not carry
|
|
28
|
-
* `
|
|
27
|
+
* bundle does not carry a version that has a published artefact; throws for a
|
|
28
|
+
* `ConformityScheme` below UNTP 0.7.0 because no artefact was ever published for
|
|
29
|
+
* one. `type` accepts the names `buildUntpArtefactUrls` accepts.
|
|
29
30
|
*/
|
|
30
31
|
export async function bundledSchema(type, version) {
|
|
31
32
|
const { buildUntpArtefactUrls } = await import('../artefacts/urls.js');
|
|
@@ -33,7 +34,10 @@ export async function bundledSchema(type, version) {
|
|
|
33
34
|
}
|
|
34
35
|
/**
|
|
35
36
|
* The bundled JSON-LD context a UNTP credential type declares at a version:
|
|
36
|
-
* the per-type context before 0.7.0, the unified UNTP context from 0.7.0
|
|
37
|
+
* the per-type context before 0.7.0, the unified UNTP context from 0.7.0, or
|
|
38
|
+
* `undefined` when the bundle does not carry a version that has a published
|
|
39
|
+
* artefact; throws for a `ConformityScheme` below UNTP 0.7.0 because no artefact
|
|
40
|
+
* was ever published for one.
|
|
37
41
|
*/
|
|
38
42
|
export async function bundledContext(type, version) {
|
|
39
43
|
const { buildUntpArtefactUrls } = await import('../artefacts/urls.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/bundle/public.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGtD,sHAAsH;AACtH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IACzD,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7D,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/bundle/public.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGtD,sHAAsH;AACtH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IACzD,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7D,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,OAAe;IAC/D,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACvE,OAAO,mBAAmB,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,OAAe;IAChE,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACvE,OAAO,mBAAmB,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;AAC9E,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAe;IACxD,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACvE,OAAO,mBAAmB,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAY;IACnD,OAAO,mBAAmB,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAY;IAClD,KAAK,OAAO,CAAC;IACb,OAAO,mBAAmB,CACxB,oGAAoG,CACrG,CAAC;AACJ,CAAC"}
|
|
@@ -25,6 +25,12 @@ describe('bundled-artefacts public entry', () => {
|
|
|
25
25
|
it('rejects an unknown credential type the way the URL builder does', async () => {
|
|
26
26
|
await expect(bundledSchema('NotAType', '0.7.0')).rejects.toThrow(/Unknown UNTP artefact type/);
|
|
27
27
|
});
|
|
28
|
+
it('throws when a bundled ConformityScheme schema is requested before UNTP 0.7.0', async () => {
|
|
29
|
+
await expect(bundledSchema('ConformityScheme', '0.6.0')).rejects.toThrow('ConformityScheme has no artefacts for versions before UNTP 0.7.0 and "0.6.0" is not a UNTP 0.7.0 or later version.');
|
|
30
|
+
});
|
|
31
|
+
it('throws when a bundled ConformityScheme context is requested before UNTP 0.7.0', async () => {
|
|
32
|
+
await expect(bundledContext('ConformityScheme', '0.6.0')).rejects.toThrow('ConformityScheme has no artefacts for versions before UNTP 0.7.0 and "0.6.0" is not a UNTP 0.7.0 or later version.');
|
|
33
|
+
});
|
|
28
34
|
it('returns the link set schema and the VCDM pair by version', async () => {
|
|
29
35
|
expect(await bundledLinkSetSchema('0.7.0')).toBeDefined();
|
|
30
36
|
expect(await bundledLinkSetSchema('0.6.0')).toBeUndefined();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.test.js","sourceRoot":"","sources":["../../src/bundle/public.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"public.test.js","sourceRoot":"","sources":["../../src/bundle/public.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialises JSON-compatible values in a deterministic RFC 8785-style form:
|
|
3
|
+
* object keys are sorted by code unit, whitespace is omitted, arrays retain
|
|
4
|
+
* their order, scalar values use `JSON.stringify`, object keys with undefined
|
|
5
|
+
* values are omitted as `JSON.stringify` does, and a top-level undefined
|
|
6
|
+
* throws.
|
|
7
|
+
*
|
|
8
|
+
* @see https://www.rfc-editor.org/rfc/rfc8785
|
|
9
|
+
*/
|
|
10
|
+
export declare function canonicalJson(value: unknown): string;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialises JSON-compatible values in a deterministic RFC 8785-style form:
|
|
3
|
+
* object keys are sorted by code unit, whitespace is omitted, arrays retain
|
|
4
|
+
* their order, scalar values use `JSON.stringify`, object keys with undefined
|
|
5
|
+
* values are omitted as `JSON.stringify` does, and a top-level undefined
|
|
6
|
+
* throws.
|
|
7
|
+
*
|
|
8
|
+
* @see https://www.rfc-editor.org/rfc/rfc8785
|
|
9
|
+
*/
|
|
10
|
+
export function canonicalJson(value) {
|
|
11
|
+
if (value === undefined)
|
|
12
|
+
throw new TypeError('Top-level undefined cannot be canonicalised');
|
|
13
|
+
if (Array.isArray(value)) {
|
|
14
|
+
return `[${value.map((item) => (item === undefined ? 'null' : canonicalJson(item))).join(',')}]`;
|
|
15
|
+
}
|
|
16
|
+
if (value !== null && typeof value === 'object') {
|
|
17
|
+
const record = value;
|
|
18
|
+
return `{${Object.keys(record)
|
|
19
|
+
.filter((key) => record[key] !== undefined)
|
|
20
|
+
.sort()
|
|
21
|
+
.map((key) => `${JSON.stringify(key)}:${canonicalJson(record[key])}`)
|
|
22
|
+
.join(',')}}`;
|
|
23
|
+
}
|
|
24
|
+
const serialised = JSON.stringify(value);
|
|
25
|
+
if (serialised === undefined)
|
|
26
|
+
throw new TypeError('Value cannot be canonicalised as JSON');
|
|
27
|
+
return serialised;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=canonical-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical-json.js","sourceRoot":"","sources":["../../src/common/canonical-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;IAC5F,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACnG,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;aAC3B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;aAC1C,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;aACpE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAClB,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,UAAU,KAAK,SAAS;QAAE,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;IAC3F,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { canonicalJson } from './canonical-json';
|
|
2
|
+
describe('canonicalJson', () => {
|
|
3
|
+
it('sorts keys, removes whitespace and preserves nested structure', () => {
|
|
4
|
+
// Catches a regression that only sorts top-level keys or retains whitespace.
|
|
5
|
+
expect(canonicalJson({ z: { b: 2, a: 1 }, a: [3, { d: 4, c: 5 }] })).toBe('{"a":[3,{"c":5,"d":4}],"z":{"a":1,"b":2}}');
|
|
6
|
+
});
|
|
7
|
+
it('omits undefined object properties and writes undefined array items as null', () => {
|
|
8
|
+
// Catches a regression that serialises undefined object values or rejects array holes.
|
|
9
|
+
expect(canonicalJson({ keep: true, omit: undefined, values: [undefined, 'x'] })).toBe('{"keep":true,"values":[null,"x"]}');
|
|
10
|
+
});
|
|
11
|
+
it('preserves array order, unicode and JSON number spelling', () => {
|
|
12
|
+
// Catches a regression that sorts arrays, escapes unicode unnecessarily or changes numbers.
|
|
13
|
+
expect(canonicalJson({ values: ['z', 'ä', 'a'], number: 1.5, negativeZero: -0 })).toBe('{"negativeZero":0,"number":1.5,"values":["z","ä","a"]}');
|
|
14
|
+
});
|
|
15
|
+
it('rejects top-level undefined', () => {
|
|
16
|
+
// Catches a regression that silently turns an absent top-level value into JSON null.
|
|
17
|
+
expect(() => canonicalJson(undefined)).toThrow(TypeError);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=canonical-json.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical-json.test.js","sourceRoot":"","sources":["../../src/common/canonical-json.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,6EAA6E;QAC7E,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CACvE,2CAA2C,CAC5C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,uFAAuF;QACvF,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CACnF,mCAAmC,CACpC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,4FAA4F;QAC5F,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CACpF,wDAAwD,CACzD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,qFAAqF;QACrF,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/build/common/index.d.ts
CHANGED