@agent-teams/engineering-foundation 0.14.0 → 0.15.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/dist/document-authoring/adapters/node/load-validated-document-authoring-profile.d.ts +31 -0
- package/dist/document-authoring/adapters/node/load-validated-document-authoring-profile.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/load-validated-document-authoring-profile.js +47 -0
- package/dist/document-authoring/adapters/node/load-validated-document-authoring-profile.js.map +1 -0
- package/dist/document-authoring/adapters/node/node-authoring-profile-reader.d.ts.map +1 -1
- package/dist/document-authoring/adapters/node/node-authoring-profile-reader.js +14 -39
- package/dist/document-authoring/adapters/node/node-authoring-profile-reader.js.map +1 -1
- package/dist/document-authoring/adapters/node/node-document-contract-validator.d.ts +7 -0
- package/dist/document-authoring/adapters/node/node-document-contract-validator.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-contract-validator.js +179 -0
- package/dist/document-authoring/adapters/node/node-document-contract-validator.js.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-planning-profile-reader.d.ts +10 -0
- package/dist/document-authoring/adapters/node/node-document-planning-profile-reader.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-planning-profile-reader.js +72 -0
- package/dist/document-authoring/adapters/node/node-document-planning-profile-reader.js.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-planning-state-reader.d.ts +10 -0
- package/dist/document-authoring/adapters/node/node-document-planning-state-reader.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-planning-state-reader.js +164 -0
- package/dist/document-authoring/adapters/node/node-document-planning-state-reader.js.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-template-reader.d.ts +10 -0
- package/dist/document-authoring/adapters/node/node-document-template-reader.d.ts.map +1 -0
- package/dist/document-authoring/adapters/node/node-document-template-reader.js +32 -0
- package/dist/document-authoring/adapters/node/node-document-template-reader.js.map +1 -0
- package/dist/document-authoring/application/model/document-planning.d.ts +171 -0
- package/dist/document-authoring/application/model/document-planning.d.ts.map +1 -0
- package/dist/document-authoring/application/model/document-planning.js +2 -0
- package/dist/document-authoring/application/model/document-planning.js.map +1 -0
- package/dist/document-authoring/application/policies/document-logical-preimage.d.ts +14 -0
- package/dist/document-authoring/application/policies/document-logical-preimage.d.ts.map +1 -0
- package/dist/document-authoring/application/policies/document-logical-preimage.js +61 -0
- package/dist/document-authoring/application/policies/document-logical-preimage.js.map +1 -0
- package/dist/document-authoring/application/policies/document-planning-policy-error.d.ts +6 -0
- package/dist/document-authoring/application/policies/document-planning-policy-error.d.ts.map +1 -0
- package/dist/document-authoring/application/policies/document-planning-policy-error.js +9 -0
- package/dist/document-authoring/application/policies/document-planning-policy-error.js.map +1 -0
- package/dist/document-authoring/application/policies/normalize-document-intent.d.ts +3 -0
- package/dist/document-authoring/application/policies/normalize-document-intent.d.ts.map +1 -0
- package/dist/document-authoring/application/policies/normalize-document-intent.js +104 -0
- package/dist/document-authoring/application/policies/normalize-document-intent.js.map +1 -0
- package/dist/document-authoring/application/policies/resolve-document-authoring.d.ts +13 -0
- package/dist/document-authoring/application/policies/resolve-document-authoring.d.ts.map +1 -0
- package/dist/document-authoring/application/policies/resolve-document-authoring.js +154 -0
- package/dist/document-authoring/application/policies/resolve-document-authoring.js.map +1 -0
- package/dist/document-authoring/application/ports/document-contract-validator.d.ts +6 -0
- package/dist/document-authoring/application/ports/document-contract-validator.d.ts.map +1 -0
- package/dist/document-authoring/application/ports/document-contract-validator.js +2 -0
- package/dist/document-authoring/application/ports/document-contract-validator.js.map +1 -0
- package/dist/document-authoring/application/ports/document-planning-profile-reader.d.ts +9 -0
- package/dist/document-authoring/application/ports/document-planning-profile-reader.d.ts.map +1 -0
- package/dist/document-authoring/application/ports/document-planning-profile-reader.js +2 -0
- package/dist/document-authoring/application/ports/document-planning-profile-reader.js.map +1 -0
- package/dist/document-authoring/application/ports/document-planning-state-reader.d.ts +9 -0
- package/dist/document-authoring/application/ports/document-planning-state-reader.d.ts.map +1 -0
- package/dist/document-authoring/application/ports/document-planning-state-reader.js +2 -0
- package/dist/document-authoring/application/ports/document-planning-state-reader.js.map +1 -0
- package/dist/document-authoring/application/ports/document-template-reader.d.ts +9 -0
- package/dist/document-authoring/application/ports/document-template-reader.d.ts.map +1 -0
- package/dist/document-authoring/application/ports/document-template-reader.js +2 -0
- package/dist/document-authoring/application/ports/document-template-reader.js.map +1 -0
- package/dist/document-authoring/application/ports/documentation-catalog-reader.d.ts +11 -0
- package/dist/document-authoring/application/ports/documentation-catalog-reader.d.ts.map +1 -0
- package/dist/document-authoring/application/ports/documentation-catalog-reader.js +2 -0
- package/dist/document-authoring/application/ports/documentation-catalog-reader.js.map +1 -0
- package/dist/document-authoring/application/use-cases/build-documentation-catalog.d.ts +2 -1
- package/dist/document-authoring/application/use-cases/build-documentation-catalog.d.ts.map +1 -1
- package/dist/document-authoring/application/use-cases/build-documentation-catalog.js.map +1 -1
- package/dist/document-authoring/application/use-cases/compile-document-plan.d.ts +6 -0
- package/dist/document-authoring/application/use-cases/compile-document-plan.d.ts.map +1 -0
- package/dist/document-authoring/application/use-cases/compile-document-plan.js +156 -0
- package/dist/document-authoring/application/use-cases/compile-document-plan.js.map +1 -0
- package/dist/document-authoring/application/use-cases/plan-documentation-document.d.ts +66 -0
- package/dist/document-authoring/application/use-cases/plan-documentation-document.d.ts.map +1 -0
- package/dist/document-authoring/application/use-cases/plan-documentation-document.js +276 -0
- package/dist/document-authoring/application/use-cases/plan-documentation-document.js.map +1 -0
- package/dist/document-authoring/document-planning-error.d.ts +6 -0
- package/dist/document-authoring/document-planning-error.d.ts.map +1 -0
- package/dist/document-authoring/document-planning-error.js +9 -0
- package/dist/document-authoring/document-planning-error.js.map +1 -0
- package/dist/document-authoring/index.d.ts +10 -0
- package/dist/document-authoring/index.d.ts.map +1 -1
- package/dist/document-authoring/index.js +72 -0
- package/dist/document-authoring/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { DocumentArtifactType, DocumentCatalogCollection } from "../../application/model/document-planning.js";
|
|
2
|
+
import { readDocumentAuthorityFile } from "./read-document-authority-file.js";
|
|
3
|
+
export interface ValidatedDocumentAuthoringProfile {
|
|
4
|
+
readonly authoring: {
|
|
5
|
+
readonly artifactTypes: readonly DocumentArtifactType[];
|
|
6
|
+
readonly mode: "create-only";
|
|
7
|
+
};
|
|
8
|
+
readonly catalog: {
|
|
9
|
+
readonly collections: readonly DocumentCatalogCollection[];
|
|
10
|
+
readonly excludedPrefixes?: readonly string[];
|
|
11
|
+
readonly metadataSchemaPath: string;
|
|
12
|
+
readonly ownerCatalog: {
|
|
13
|
+
readonly contract: "foundation.owner-map/v1";
|
|
14
|
+
readonly path: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
readonly projectId: string;
|
|
18
|
+
readonly schemaVersion: 1;
|
|
19
|
+
}
|
|
20
|
+
export declare class InvalidDocumentAuthoringProfileError extends Error {
|
|
21
|
+
constructor(message: string, options?: ErrorOptions);
|
|
22
|
+
}
|
|
23
|
+
export declare function loadValidatedDocumentAuthoringProfile(request: {
|
|
24
|
+
readonly consumerRoot: string;
|
|
25
|
+
readonly path: string;
|
|
26
|
+
readonly signal?: AbortSignal;
|
|
27
|
+
}): Promise<{
|
|
28
|
+
readonly evidence: Awaited<ReturnType<typeof readDocumentAuthorityFile>>["evidence"];
|
|
29
|
+
readonly profile: ValidatedDocumentAuthoringProfile;
|
|
30
|
+
}>;
|
|
31
|
+
//# sourceMappingURL=load-validated-document-authoring-profile.d.ts.map
|
package/dist/document-authoring/adapters/node/load-validated-document-authoring-profile.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-validated-document-authoring-profile.d.ts","sourceRoot":"","sources":["../../../../src/document-authoring/adapters/node/load-validated-document-authoring-profile.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,8CAA8C,CAAC;AAMtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAI9E,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,aAAa,EAAE,SAAS,oBAAoB,EAAE,CAAC;QACxD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;KAC9B,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE,SAAS,yBAAyB,EAAE,CAAC;QAC3D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAC9C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;QACpC,QAAQ,CAAC,YAAY,EAAE;YACrB,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;YAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;SACvB,CAAC;KACH,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;CAC3B;AAED,qBAAa,oCAAqC,SAAQ,KAAK;IAC7D,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAGlD;CACF;AASD,wBAAsB,qCAAqC,CAAC,OAAO,EAAE;IACnE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B,GAAG,OAAO,CAAC;IACV,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACrF,QAAQ,CAAC,OAAO,EAAE,iCAAiC,CAAC;CACrD,CAAC,CA+BD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { CapabilityInputError } from "../../../capability-runtime.js";
|
|
2
|
+
import { assertNotCancelled } from "../../../cancellation.js";
|
|
3
|
+
import { assertSchema } from "../../../schema-catalog.js";
|
|
4
|
+
import { parseStrictYamlSource } from "../../../strict-yaml.js";
|
|
5
|
+
import { assertAuthoringProfileSemantics, AuthoringProfileSemanticError } from "../../application/policies/authoring-profile-semantics.js";
|
|
6
|
+
import { readDocumentAuthorityFile } from "./read-document-authority-file.js";
|
|
7
|
+
const MAX_PROFILE_BYTES = 1024 * 1024;
|
|
8
|
+
export class InvalidDocumentAuthoringProfileError extends Error {
|
|
9
|
+
constructor(message, options) {
|
|
10
|
+
super(message, options);
|
|
11
|
+
this.name = "InvalidDocumentAuthoringProfileError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function invalidProfile(error) {
|
|
15
|
+
const message = error instanceof Error
|
|
16
|
+
? error.message.slice(0, 1000)
|
|
17
|
+
: "Document authoring profile is invalid.";
|
|
18
|
+
throw new InvalidDocumentAuthoringProfileError(message, { cause: error });
|
|
19
|
+
}
|
|
20
|
+
export async function loadValidatedDocumentAuthoringProfile(request) {
|
|
21
|
+
assertNotCancelled(request.signal);
|
|
22
|
+
const file = await readDocumentAuthorityFile({
|
|
23
|
+
consumerRoot: request.consumerRoot,
|
|
24
|
+
maxBytes: MAX_PROFILE_BYTES,
|
|
25
|
+
path: request.path
|
|
26
|
+
});
|
|
27
|
+
let input;
|
|
28
|
+
try {
|
|
29
|
+
assertNotCancelled(request.signal);
|
|
30
|
+
input = parseStrictYamlSource(file.source, "document-authoring-profile");
|
|
31
|
+
await assertSchema("document-authoring-profile/v1", input, "document-authoring-profile");
|
|
32
|
+
assertAuthoringProfileSemantics(input);
|
|
33
|
+
assertNotCancelled(request.signal);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error instanceof CapabilityInputError ||
|
|
37
|
+
error instanceof AuthoringProfileSemanticError) {
|
|
38
|
+
invalidProfile(error);
|
|
39
|
+
}
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
return Object.freeze({
|
|
43
|
+
evidence: file.evidence,
|
|
44
|
+
profile: input
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=load-validated-document-authoring-profile.js.map
|
package/dist/document-authoring/adapters/node/load-validated-document-authoring-profile.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-validated-document-authoring-profile.js","sourceRoot":"","sources":["../../../../src/document-authoring/adapters/node/load-validated-document-authoring-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAE9B,MAAM,2DAA2D,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAC;AAoBtC,MAAM,OAAO,oCAAqC,SAAQ,KAAK;IAC7D,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,sCAAsC,CAAC;IACrD,CAAC;CACF;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK;QACpC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;QAC9B,CAAC,CAAC,wCAAwC,CAAC;IAC7C,MAAM,IAAI,oCAAoC,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qCAAqC,CAAC,OAI3D;IAIC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,yBAAyB,CAAC;QAC3C,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,QAAQ,EAAE,iBAAiB;QAC3B,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC,CAAC;IACH,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACH,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QACzE,MAAM,YAAY,CAChB,+BAA+B,EAC/B,KAAK,EACL,4BAA4B,CAC7B,CAAC;QACF,+BAA+B,CAAC,KAAkC,CAAC,CAAC;QACpE,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IACE,KAAK,YAAY,oBAAoB;YACrC,KAAK,YAAY,6BAA6B,EAC9C,CAAC;YACD,cAAc,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,KAA0C;KACpD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-authoring-profile-reader.d.ts","sourceRoot":"","sources":["../../../../src/document-authoring/adapters/node/node-authoring-profile-reader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"node-authoring-profile-reader.d.ts","sourceRoot":"","sources":["../../../../src/document-authoring/adapters/node/node-authoring-profile-reader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EAEtB,sBAAsB,EACvB,MAAM,qDAAqD,CAAC;AAa7D,qBAAa,0BAA2B,YAAW,sBAAsB;IACjE,IAAI,CAAC,OAAO,EAAE;QAClB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;KAC/B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAyBlC;CACF"}
|
|
@@ -1,17 +1,5 @@
|
|
|
1
|
-
import { CapabilityInputError } from "../../../capability-runtime.js";
|
|
2
|
-
import { assertNotCancelled } from "../../../cancellation.js";
|
|
3
|
-
import { assertSchema } from "../../../schema-catalog.js";
|
|
4
|
-
import { parseStrictYamlSource } from "../../../strict-yaml.js";
|
|
5
|
-
import { assertAuthoringProfileSemantics, AuthoringProfileSemanticError } from "../../application/policies/authoring-profile-semantics.js";
|
|
6
1
|
import { DocumentCatalogError } from "../../document-catalog-error.js";
|
|
7
|
-
import {
|
|
8
|
-
const MAX_PROFILE_BYTES = 1024 * 1024;
|
|
9
|
-
function invalidProfile(error) {
|
|
10
|
-
const message = error instanceof Error
|
|
11
|
-
? error.message.slice(0, 1000)
|
|
12
|
-
: "Document authoring profile is invalid.";
|
|
13
|
-
throw new DocumentCatalogError("DOCUMENT_CATALOG_INPUT_INVALID", `Document authoring profile is invalid: ${message}`, { cause: error });
|
|
14
|
-
}
|
|
2
|
+
import { InvalidDocumentAuthoringProfileError, loadValidatedDocumentAuthoringProfile } from "./load-validated-document-authoring-profile.js";
|
|
15
3
|
function freezeCollection(collection) {
|
|
16
4
|
return collection.kind === "markdown-tree"
|
|
17
5
|
? Object.freeze({ ...collection })
|
|
@@ -19,38 +7,25 @@ function freezeCollection(collection) {
|
|
|
19
7
|
}
|
|
20
8
|
export class NodeAuthoringProfileReader {
|
|
21
9
|
async read(request) {
|
|
22
|
-
assertNotCancelled(request.signal);
|
|
23
|
-
const file = await readDocumentAuthorityFile({
|
|
24
|
-
consumerRoot: request.consumerRoot,
|
|
25
|
-
maxBytes: MAX_PROFILE_BYTES,
|
|
26
|
-
path: request.path
|
|
27
|
-
});
|
|
28
|
-
let input;
|
|
29
10
|
try {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
11
|
+
const { evidence, profile } = await loadValidatedDocumentAuthoringProfile(request);
|
|
12
|
+
return Object.freeze({
|
|
13
|
+
collections: Object.freeze(profile.catalog.collections.map(freezeCollection)),
|
|
14
|
+
evidence,
|
|
15
|
+
excludedPrefixes: Object.freeze([
|
|
16
|
+
...(profile.catalog.excludedPrefixes ?? [])
|
|
17
|
+
]),
|
|
18
|
+
metadataSchemaPath: profile.catalog.metadataSchemaPath,
|
|
19
|
+
ownerCatalog: Object.freeze({ ...profile.catalog.ownerCatalog }),
|
|
20
|
+
projectId: profile.projectId
|
|
21
|
+
});
|
|
35
22
|
}
|
|
36
23
|
catch (error) {
|
|
37
|
-
if (error instanceof
|
|
38
|
-
error
|
|
39
|
-
invalidProfile(error);
|
|
24
|
+
if (error instanceof InvalidDocumentAuthoringProfileError) {
|
|
25
|
+
throw new DocumentCatalogError("DOCUMENT_CATALOG_INPUT_INVALID", `Document authoring profile is invalid: ${error.message}`, { cause: error });
|
|
40
26
|
}
|
|
41
27
|
throw error;
|
|
42
28
|
}
|
|
43
|
-
const profile = input;
|
|
44
|
-
return Object.freeze({
|
|
45
|
-
collections: Object.freeze(profile.catalog.collections.map(freezeCollection)),
|
|
46
|
-
evidence: file.evidence,
|
|
47
|
-
excludedPrefixes: Object.freeze([
|
|
48
|
-
...(profile.catalog.excludedPrefixes ?? [])
|
|
49
|
-
]),
|
|
50
|
-
metadataSchemaPath: profile.catalog.metadataSchemaPath,
|
|
51
|
-
ownerCatalog: Object.freeze({ ...profile.catalog.ownerCatalog }),
|
|
52
|
-
projectId: profile.projectId
|
|
53
|
-
});
|
|
54
29
|
}
|
|
55
30
|
}
|
|
56
31
|
//# sourceMappingURL=node-authoring-profile-reader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-authoring-profile-reader.js","sourceRoot":"","sources":["../../../../src/document-authoring/adapters/node/node-authoring-profile-reader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"node-authoring-profile-reader.js","sourceRoot":"","sources":["../../../../src/document-authoring/adapters/node/node-authoring-profile-reader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EACL,oCAAoC,EACpC,qCAAqC,EACtC,MAAM,gDAAgD,CAAC;AAExD,SAAS,gBAAgB,CAAC,UAA6B;IACrD,OAAO,UAAU,CAAC,IAAI,KAAK,eAAe;QACxC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC;QAClC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,OAAO,0BAA0B;IACrC,KAAK,CAAC,IAAI,CAAC,OAIV;QACC,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,qCAAqC,CAAC,OAAO,CAAC,CAAC;YACnF,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,WAAW,EAAE,MAAM,CAAC,MAAM,CACxB,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAClD;gBACD,QAAQ;gBACR,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC;oBAC9B,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC;iBAC5C,CAAC;gBACF,kBAAkB,EAAE,OAAO,CAAC,OAAO,CAAC,kBAAkB;gBACtD,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;gBAChE,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,oCAAoC,EAAE,CAAC;gBAC1D,MAAM,IAAI,oBAAoB,CAC5B,gCAAgC,EAChC,0CAA0C,KAAK,CAAC,OAAO,EAAE,EACzD,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DocumentIntent, DocumentPlan } from "../../application/model/document-planning.js";
|
|
2
|
+
import type { DocumentContractValidator } from "../../application/ports/document-contract-validator.js";
|
|
3
|
+
export declare class NodeDocumentContractValidator implements DocumentContractValidator {
|
|
4
|
+
validateIntent(input: unknown): Promise<DocumentIntent>;
|
|
5
|
+
validatePlan(input: unknown): Promise<DocumentPlan>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=node-document-contract-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-document-contract-validator.d.ts","sourceRoot":"","sources":["../../../../src/document-authoring/adapters/node/node-document-contract-validator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACb,MAAM,8CAA8C,CAAC;AACtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wDAAwD,CAAC;AA2LxG,qBAAa,6BAA8B,YAAW,yBAAyB;IACvE,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAkB5D;IAEK,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAUxD;CACF"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { isProxy } from "node:util/types";
|
|
2
|
+
import { CapabilityInputError } from "../../../capability-runtime.js";
|
|
3
|
+
import { assertSchema } from "../../../schema-catalog.js";
|
|
4
|
+
import { DocumentPlanningError } from "../../document-planning-error.js";
|
|
5
|
+
function invalidContract(kind, error) {
|
|
6
|
+
throw new DocumentPlanningError(kind === "Intent"
|
|
7
|
+
? "DOCUMENT_PLANNING_INPUT_INVALID"
|
|
8
|
+
: "DOCUMENT_PLANNING_OUTPUT_INVALID", `Document ${kind} does not match its v1 contract: ${error.message.slice(0, 1000)}`, { cause: error });
|
|
9
|
+
}
|
|
10
|
+
const MAXIMUM_INTENT_DEPTH = 8;
|
|
11
|
+
const MAXIMUM_INTENT_CONTAINER_ITEMS = 128;
|
|
12
|
+
const MAXIMUM_DOCUMENT_OUTPUT_BYTES = 1024 * 1024;
|
|
13
|
+
const OUTPUT_INTENT_KEYS = new Set([
|
|
14
|
+
"additionalMetadata",
|
|
15
|
+
"id",
|
|
16
|
+
"owner",
|
|
17
|
+
"related",
|
|
18
|
+
"summary",
|
|
19
|
+
"title",
|
|
20
|
+
"type"
|
|
21
|
+
]);
|
|
22
|
+
const INTENT_ROOT_KEYS = new Set([
|
|
23
|
+
...OUTPUT_INTENT_KEYS,
|
|
24
|
+
"destination",
|
|
25
|
+
"schemaVersion",
|
|
26
|
+
"slug"
|
|
27
|
+
]);
|
|
28
|
+
const STRING_INTENT_ROOT_KEYS = new Set([
|
|
29
|
+
"destination",
|
|
30
|
+
"id",
|
|
31
|
+
"owner",
|
|
32
|
+
"slug",
|
|
33
|
+
"summary",
|
|
34
|
+
"title",
|
|
35
|
+
"type"
|
|
36
|
+
]);
|
|
37
|
+
function addOutputLowerBound(budget, bytes) {
|
|
38
|
+
budget.outputLowerBoundBytes += bytes;
|
|
39
|
+
if (budget.outputLowerBoundBytes > MAXIMUM_DOCUMENT_OUTPUT_BYTES) {
|
|
40
|
+
throw new TypeError("Document Intent logically expands beyond the public document output byte limit.");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function isJsonScalar(value, contributesToOutput, budget) {
|
|
44
|
+
if (value === null || typeof value === "boolean" || typeof value === "string") {
|
|
45
|
+
if (contributesToOutput) {
|
|
46
|
+
addOutputLowerBound(budget, 1 + (typeof value === "string"
|
|
47
|
+
? Buffer.byteLength(value.normalize("NFC"), "utf8")
|
|
48
|
+
: 1));
|
|
49
|
+
}
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
if (typeof value === "number") {
|
|
53
|
+
if (!Number.isSafeInteger(value) || Object.is(value, -0)) {
|
|
54
|
+
throw new TypeError("Document Intent numbers must be safe integers other than negative zero.");
|
|
55
|
+
}
|
|
56
|
+
if (contributesToOutput) {
|
|
57
|
+
addOutputLowerBound(budget, 1);
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
function inertContainerKeys(value) {
|
|
64
|
+
const keys = Reflect.ownKeys(value);
|
|
65
|
+
if (keys.some((key) => typeof key !== "string")) {
|
|
66
|
+
throw new TypeError("Document Intent must not contain symbol keys.");
|
|
67
|
+
}
|
|
68
|
+
const itemCount = Array.isArray(value) ? keys.length - 1 : keys.length;
|
|
69
|
+
if (itemCount > MAXIMUM_INTENT_CONTAINER_ITEMS) {
|
|
70
|
+
throw new TypeError("Document Intent container exceeds the item budget.");
|
|
71
|
+
}
|
|
72
|
+
if (Array.isArray(value) && keys.length !== value.length + 1) {
|
|
73
|
+
throw new TypeError("Document Intent arrays must be dense and contain no extra properties.");
|
|
74
|
+
}
|
|
75
|
+
return keys;
|
|
76
|
+
}
|
|
77
|
+
function assertIntrinsicJsonContainer(value) {
|
|
78
|
+
const prototype = Object.getPrototypeOf(value);
|
|
79
|
+
if ((Array.isArray(value) && prototype !== Array.prototype) ||
|
|
80
|
+
(!Array.isArray(value) && prototype !== Object.prototype && prototype !== null)) {
|
|
81
|
+
throw new TypeError("Document Intent containers must use intrinsic JSON prototypes.");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function assertIntentRootField(key, value) {
|
|
85
|
+
if (!INTENT_ROOT_KEYS.has(key)) {
|
|
86
|
+
throw new TypeError("Document Intent contains an unknown root field.");
|
|
87
|
+
}
|
|
88
|
+
if (STRING_INTENT_ROOT_KEYS.has(key) && typeof value !== "string") {
|
|
89
|
+
throw new TypeError(`Document Intent root field ${key} must be a string.`);
|
|
90
|
+
}
|
|
91
|
+
if (key === "schemaVersion" && value !== 1) {
|
|
92
|
+
throw new TypeError("Document Intent schemaVersion must equal 1.");
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function assertInertJson(input) {
|
|
96
|
+
const pending = [
|
|
97
|
+
{ action: "enter", contributesToOutput: false, depth: 0, value: input }
|
|
98
|
+
];
|
|
99
|
+
const ancestors = new WeakSet();
|
|
100
|
+
const budget = { outputLowerBoundBytes: 0 };
|
|
101
|
+
while (pending.length > 0) {
|
|
102
|
+
const current = pending.pop();
|
|
103
|
+
if (current.action === "leave") {
|
|
104
|
+
ancestors.delete(current.value);
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (isJsonScalar(current.value, current.contributesToOutput, budget)) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (current.value === null || typeof current.value !== "object") {
|
|
111
|
+
throw new TypeError("Document Intent must use the closed JSON data model.");
|
|
112
|
+
}
|
|
113
|
+
if (isProxy(current.value)) {
|
|
114
|
+
throw new TypeError("Document Intent must not contain Proxy objects.");
|
|
115
|
+
}
|
|
116
|
+
if (current.depth > MAXIMUM_INTENT_DEPTH || ancestors.has(current.value)) {
|
|
117
|
+
throw new TypeError("Document Intent must be a bounded acyclic JSON tree.");
|
|
118
|
+
}
|
|
119
|
+
assertIntrinsicJsonContainer(current.value);
|
|
120
|
+
if (current.contributesToOutput) {
|
|
121
|
+
addOutputLowerBound(budget, 1);
|
|
122
|
+
}
|
|
123
|
+
ancestors.add(current.value);
|
|
124
|
+
pending.push({ action: "leave", value: current.value });
|
|
125
|
+
for (const key of inertContainerKeys(current.value)) {
|
|
126
|
+
if (key === "length" && Array.isArray(current.value)) {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
const descriptor = Object.getOwnPropertyDescriptor(current.value, key);
|
|
130
|
+
if (descriptor === undefined ||
|
|
131
|
+
!("value" in descriptor) ||
|
|
132
|
+
descriptor.enumerable !== true) {
|
|
133
|
+
throw new TypeError("Document Intent must contain only enumerable own data properties.");
|
|
134
|
+
}
|
|
135
|
+
if (current.depth === 0) {
|
|
136
|
+
assertIntentRootField(key, descriptor.value);
|
|
137
|
+
}
|
|
138
|
+
pending.push({
|
|
139
|
+
action: "enter",
|
|
140
|
+
contributesToOutput: current.depth === 0
|
|
141
|
+
? OUTPUT_INTENT_KEYS.has(key)
|
|
142
|
+
: current.contributesToOutput,
|
|
143
|
+
depth: current.depth + 1,
|
|
144
|
+
value: descriptor.value
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
export class NodeDocumentContractValidator {
|
|
150
|
+
async validateIntent(input) {
|
|
151
|
+
try {
|
|
152
|
+
assertInertJson(input);
|
|
153
|
+
await assertSchema("document-intent/v1", input, "document-intent");
|
|
154
|
+
return input;
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
if (error instanceof CapabilityInputError) {
|
|
158
|
+
invalidContract("Intent", error);
|
|
159
|
+
}
|
|
160
|
+
if (error instanceof TypeError) {
|
|
161
|
+
throw new DocumentPlanningError("DOCUMENT_PLANNING_INPUT_INVALID", `Document Intent must use inert canonical JSON data: ${error.message}`, { cause: error });
|
|
162
|
+
}
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async validatePlan(input) {
|
|
167
|
+
try {
|
|
168
|
+
await assertSchema("document-plan/v1", input, "document-plan");
|
|
169
|
+
return input;
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
if (error instanceof CapabilityInputError) {
|
|
173
|
+
invalidContract("Plan", error);
|
|
174
|
+
}
|
|
175
|
+
throw error;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=node-document-contract-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-document-contract-validator.js","sourceRoot":"","sources":["../../../../src/document-authoring/adapters/node/node-document-contract-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAM1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,SAAS,eAAe,CAAC,IAAuB,EAAE,KAA2B;IAC3E,MAAM,IAAI,qBAAqB,CAC7B,IAAI,KAAK,QAAQ;QACf,CAAC,CAAC,iCAAiC;QACnC,CAAC,CAAC,kCAAkC,EACtC,YAAY,IAAI,oCAAoC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAClF,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;AACJ,CAAC;AAED,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAC/B,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAC3C,MAAM,6BAA6B,GAAG,IAAI,GAAG,IAAI,CAAC;AAClD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,oBAAoB;IACpB,IAAI;IACJ,OAAO;IACP,SAAS;IACT,SAAS;IACT,OAAO;IACP,MAAM;CACP,CAAC,CAAC;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,GAAG,kBAAkB;IACrB,aAAa;IACb,eAAe;IACf,MAAM;CACP,CAAC,CAAC;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,aAAa;IACb,IAAI;IACJ,OAAO;IACP,MAAM;IACN,SAAS;IACT,OAAO;IACP,MAAM;CACP,CAAC,CAAC;AAMH,SAAS,mBAAmB,CAC1B,MAA8B,EAC9B,KAAa;IAEb,MAAM,CAAC,qBAAqB,IAAI,KAAK,CAAC;IACtC,IAAI,MAAM,CAAC,qBAAqB,GAAG,6BAA6B,EAAE,CAAC;QACjE,MAAM,IAAI,SAAS,CACjB,iFAAiF,CAClF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,KAAc,EACd,mBAA4B,EAC5B,MAA8B;IAE9B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9E,IAAI,mBAAmB,EAAE,CAAC;YACxB,mBAAmB,CACjB,MAAM,EACN,CAAC,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ;gBAC5B,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;gBACnD,CAAC,CAAC,CAAC,CAAC,CACP,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,SAAS,CAAC,yEAAyE,CAAC,CAAC;QACjG,CAAC;QACD,IAAI,mBAAmB,EAAE,CAAC;YACxB,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACvE,IAAI,SAAS,GAAG,8BAA8B,EAAE,CAAC;QAC/C,MAAM,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,SAAS,CAAC,uEAAuE,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,IAAgB,CAAC;AAC1B,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAa;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAkB,CAAC;IAChE,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC;QACvD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,EAC/E,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,gEAAgE,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAW,EAAE,KAAc;IACxD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAClE,MAAM,IAAI,SAAS,CAAC,8BAA8B,GAAG,oBAAoB,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,GAAG,KAAK,eAAe,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,MAAM,OAAO,GAQP;QACJ,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE;KACxE,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,OAAO,EAAU,CAAC;IACxC,MAAM,MAAM,GAA2B,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC;IACpE,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAG,CAAC;QAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC/B,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QACD,IAAI,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,EAAE,CAAC;YACrE,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAChE,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,GAAG,oBAAoB,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzE,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;QAC9E,CAAC;QACD,4BAA4B,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAChC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACxD,KAAK,MAAM,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,IAAI,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrD,SAAS;YACX,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACvE,IACE,UAAU,KAAK,SAAS;gBACxB,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC;gBACxB,UAAU,CAAC,UAAU,KAAK,IAAI,EAC9B,CAAC;gBACD,MAAM,IAAI,SAAS,CAAC,mEAAmE,CAAC,CAAC;YAC3F,CAAC;YACD,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gBACxB,qBAAqB,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YAC/C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,OAAO;gBACf,mBAAmB,EAAE,OAAO,CAAC,KAAK,KAAK,CAAC;oBACtC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC;oBAC7B,CAAC,CAAC,OAAO,CAAC,mBAAmB;gBAC/B,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;gBACxB,KAAK,EAAE,UAAU,CAAC,KAAK;aACxB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,OAAO,6BAA6B;IACxC,KAAK,CAAC,cAAc,CAAC,KAAc;QACjC,IAAI,CAAC;YACH,eAAe,CAAC,KAAK,CAAC,CAAC;YACvB,MAAM,YAAY,CAAC,oBAAoB,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;YACnE,OAAO,KAAuB,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;gBAC1C,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;gBAC/B,MAAM,IAAI,qBAAqB,CAC7B,iCAAiC,EACjC,uDAAuD,KAAK,CAAC,OAAO,EAAE,EACtE,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAc;QAC/B,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,kBAAkB,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;YAC/D,OAAO,KAAqB,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;gBAC1C,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DocumentPlanningProfileSnapshot } from "../../application/model/document-planning.js";
|
|
2
|
+
import type { DocumentPlanningProfileReader } from "../../application/ports/document-planning-profile-reader.js";
|
|
3
|
+
export declare class NodeDocumentPlanningProfileReader implements DocumentPlanningProfileReader {
|
|
4
|
+
read(request: {
|
|
5
|
+
readonly consumerRoot: string;
|
|
6
|
+
readonly path: string;
|
|
7
|
+
readonly signal?: AbortSignal;
|
|
8
|
+
}): Promise<DocumentPlanningProfileSnapshot>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=node-document-planning-profile-reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-document-planning-profile-reader.d.ts","sourceRoot":"","sources":["../../../../src/document-authoring/adapters/node/node-document-planning-profile-reader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,+BAA+B,EAChC,MAAM,8CAA8C,CAAC;AACtD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,6DAA6D,CAAC;AA0DjH,qBAAa,iCACb,YAAW,6BAA6B;IAChC,IAAI,CAAC,OAAO,EAAE;QAClB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;KAC/B,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAiC3C;CACF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { DocumentCatalogError } from "../../document-catalog-error.js";
|
|
2
|
+
import { DocumentPlanningError } from "../../document-planning-error.js";
|
|
3
|
+
import { InvalidDocumentAuthoringProfileError, loadValidatedDocumentAuthoringProfile } from "./load-validated-document-authoring-profile.js";
|
|
4
|
+
function freezeIdentity(identity) {
|
|
5
|
+
return identity.format === "qualified"
|
|
6
|
+
? Object.freeze({
|
|
7
|
+
...identity,
|
|
8
|
+
grammar: Object.freeze({
|
|
9
|
+
...identity.grammar,
|
|
10
|
+
prefixSegments: Object.freeze([...identity.grammar.prefixSegments])
|
|
11
|
+
})
|
|
12
|
+
})
|
|
13
|
+
: Object.freeze({ ...identity });
|
|
14
|
+
}
|
|
15
|
+
function freezePlacement(placement) {
|
|
16
|
+
return placement.kind === "explicit"
|
|
17
|
+
? Object.freeze({
|
|
18
|
+
...placement,
|
|
19
|
+
allowedRoots: Object.freeze([...placement.allowedRoots]),
|
|
20
|
+
requiredSegmentsInOrder: Object.freeze([
|
|
21
|
+
...placement.requiredSegmentsInOrder
|
|
22
|
+
])
|
|
23
|
+
})
|
|
24
|
+
: Object.freeze({ ...placement });
|
|
25
|
+
}
|
|
26
|
+
function freezeArtifactType(artifactType) {
|
|
27
|
+
return Object.freeze({
|
|
28
|
+
...artifactType,
|
|
29
|
+
heading: Object.freeze({ ...artifactType.heading }),
|
|
30
|
+
identity: freezeIdentity(artifactType.identity),
|
|
31
|
+
placement: freezePlacement(artifactType.placement),
|
|
32
|
+
template: Object.freeze({ ...artifactType.template })
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function freezeCollection(collection) {
|
|
36
|
+
return collection.kind === "frontmatter-readme"
|
|
37
|
+
? Object.freeze({ ...collection, roots: Object.freeze([...collection.roots]) })
|
|
38
|
+
: Object.freeze({ ...collection });
|
|
39
|
+
}
|
|
40
|
+
function invalidProfile(error) {
|
|
41
|
+
throw new DocumentPlanningError("DOCUMENT_PLANNING_INPUT_INVALID", `Document authoring profile is invalid: ${error.message}`, { cause: error });
|
|
42
|
+
}
|
|
43
|
+
export class NodeDocumentPlanningProfileReader {
|
|
44
|
+
async read(request) {
|
|
45
|
+
try {
|
|
46
|
+
const { evidence, profile } = await loadValidatedDocumentAuthoringProfile(request);
|
|
47
|
+
return Object.freeze({
|
|
48
|
+
artifactTypes: Object.freeze(profile.authoring.artifactTypes.map(freezeArtifactType)),
|
|
49
|
+
collections: Object.freeze(profile.catalog.collections.map(freezeCollection)),
|
|
50
|
+
evidence,
|
|
51
|
+
excludedPrefixes: Object.freeze([
|
|
52
|
+
...(profile.catalog.excludedPrefixes ?? [])
|
|
53
|
+
]),
|
|
54
|
+
metadataSchemaPath: profile.catalog.metadataSchemaPath,
|
|
55
|
+
ownerCatalog: Object.freeze({ ...profile.catalog.ownerCatalog }),
|
|
56
|
+
projectId: profile.projectId
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
if (error instanceof InvalidDocumentAuthoringProfileError) {
|
|
61
|
+
invalidProfile(error);
|
|
62
|
+
}
|
|
63
|
+
if (error instanceof DocumentCatalogError) {
|
|
64
|
+
throw new DocumentPlanningError(error.code === "DOCUMENT_CATALOG_INPUT_INVALID"
|
|
65
|
+
? "DOCUMENT_PLANNING_INPUT_INVALID"
|
|
66
|
+
: "DOCUMENT_PLANNING_AUTHORITY_UNAVAILABLE", `Document authoring profile cannot be loaded: ${error.message}`, { cause: error });
|
|
67
|
+
}
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=node-document-planning-profile-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-document-planning-profile-reader.js","sourceRoot":"","sources":["../../../../src/document-authoring/adapters/node/node-document-planning-profile-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DocumentPlanningStateSnapshot } from "../../application/model/document-planning.js";
|
|
2
|
+
import type { DocumentPlanningStateReader } from "../../application/ports/document-planning-state-reader.js";
|
|
3
|
+
export declare class NodeDocumentPlanningStateReader implements DocumentPlanningStateReader {
|
|
4
|
+
observe(request: {
|
|
5
|
+
readonly consumerRoot: string;
|
|
6
|
+
readonly destination: string;
|
|
7
|
+
readonly signal?: AbortSignal;
|
|
8
|
+
}): Promise<DocumentPlanningStateSnapshot>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=node-document-planning-state-reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-document-planning-state-reader.d.ts","sourceRoot":"","sources":["../../../../src/document-authoring/adapters/node/node-document-planning-state-reader.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAClG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2DAA2D,CAAC;AA8I7G,qBAAa,+BACb,YAAW,2BAA2B;IAC9B,OAAO,CAAC,OAAO,EAAE;QACrB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;KAC/B,GAAG,OAAO,CAAC,6BAA6B,CAAC,CA2DzC;CACF"}
|