@alistigo/list-document 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.
Files changed (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +151 -0
  3. package/dist/__tests__/projection.test.d.ts +2 -0
  4. package/dist/__tests__/projection.test.d.ts.map +1 -0
  5. package/dist/__tests__/projection.test.js +318 -0
  6. package/dist/__tests__/projection.test.js.map +1 -0
  7. package/dist/application/__tests__/list-application-service.test.d.ts +2 -0
  8. package/dist/application/__tests__/list-application-service.test.d.ts.map +1 -0
  9. package/dist/application/__tests__/list-application-service.test.js +281 -0
  10. package/dist/application/__tests__/list-application-service.test.js.map +1 -0
  11. package/dist/application/list-application-service.d.ts +59 -0
  12. package/dist/application/list-application-service.d.ts.map +1 -0
  13. package/dist/application/list-application-service.js +138 -0
  14. package/dist/application/list-application-service.js.map +1 -0
  15. package/dist/index.d.ts +135 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +11 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/markdown/__tests__/list-markdown.test.d.ts +2 -0
  20. package/dist/markdown/__tests__/list-markdown.test.d.ts.map +1 -0
  21. package/dist/markdown/__tests__/list-markdown.test.js +133 -0
  22. package/dist/markdown/__tests__/list-markdown.test.js.map +1 -0
  23. package/dist/markdown/list-markdown.d.ts +13 -0
  24. package/dist/markdown/list-markdown.d.ts.map +1 -0
  25. package/dist/markdown/list-markdown.js +50 -0
  26. package/dist/markdown/list-markdown.js.map +1 -0
  27. package/dist/package.json +58 -0
  28. package/dist/projection.d.ts +32 -0
  29. package/dist/projection.d.ts.map +1 -0
  30. package/dist/projection.js +59 -0
  31. package/dist/projection.js.map +1 -0
  32. package/dist/projector/list-projector.d.ts +27 -0
  33. package/dist/projector/list-projector.d.ts.map +1 -0
  34. package/dist/projector/list-projector.js +36 -0
  35. package/dist/projector/list-projector.js.map +1 -0
  36. package/dist/result.d.ts +10 -0
  37. package/dist/result.d.ts.map +1 -0
  38. package/dist/result.js +7 -0
  39. package/dist/result.js.map +1 -0
  40. package/dist/schemas/alistigo-document.json +117 -0
  41. package/dist/schemas/document.json +83 -0
  42. package/dist/serializer/__tests__/list-document-serializer.test.d.ts +2 -0
  43. package/dist/serializer/__tests__/list-document-serializer.test.d.ts.map +1 -0
  44. package/dist/serializer/__tests__/list-document-serializer.test.js +282 -0
  45. package/dist/serializer/__tests__/list-document-serializer.test.js.map +1 -0
  46. package/dist/serializer/list-document-serializer.d.ts +11 -0
  47. package/dist/serializer/list-document-serializer.d.ts.map +1 -0
  48. package/dist/serializer/list-document-serializer.js +160 -0
  49. package/dist/serializer/list-document-serializer.js.map +1 -0
  50. package/dist/types/list.d.ts +53 -0
  51. package/dist/types/list.d.ts.map +1 -0
  52. package/dist/types/list.js +2 -0
  53. package/dist/types/list.js.map +1 -0
  54. package/dist/types.d.ts +3 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +3 -0
  57. package/dist/types.js.map +1 -0
  58. package/dist/validate.d.ts +12 -0
  59. package/dist/validate.d.ts.map +1 -0
  60. package/dist/validate.js +39 -0
  61. package/dist/validate.js.map +1 -0
  62. package/package.json +57 -0
  63. package/src/schemas/alistigo-document.json +117 -0
  64. package/src/schemas/document.json +83 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/types/list.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from "@alistigo/core-document";
2
+ export * from "./types/list.js";
3
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from "@alistigo/core-document";
2
+ export * from "./types/list.js";
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface ValidationResult {
2
+ valid: boolean;
3
+ errors: string[];
4
+ }
5
+ /**
6
+ * Validate that an unknown JSON value conforms to the Alistigo document schema.
7
+ *
8
+ * Lazily resolves `ajv` and `ajv-formats` from the consumer's node_modules so
9
+ * we don't pull them in for non-validating consumers.
10
+ */
11
+ export declare function validateDocument(input: unknown): Promise<ValidationResult>;
12
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAgBD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiBhF"}
@@ -0,0 +1,39 @@
1
+ import alistigoDocumentSchema from "@alistigo/core-document/schemas/alistigo-document.json" with {
2
+ type: "json"
3
+ };
4
+ import documentSchema from "./schemas/document.json" with { type: "json" };
5
+ // schema.org's `Thing` (base of ItemList) defines @context as {type:"string"},
6
+ // which conflicts with our @context object. Register a permissive stub for the
7
+ // schema:ItemList $ref so it resolves without enforcing schema.org constraints.
8
+ // The installed schema-org-json-schemas package is used for schema flattening
9
+ // (via $RefParser.bundle) where AJV is not involved.
10
+ const SCHEMA_ORG_STUBS = [
11
+ { $id: "schema:Thing", type: "object" },
12
+ { $id: "schema:Action", type: "object" },
13
+ { $id: "schema:Person", type: "object" },
14
+ { $id: "schema:SoftwareApplication", type: "object" },
15
+ { $id: "schema:ItemList", type: "object" },
16
+ { $id: "schema:ListItem", type: "object" },
17
+ ];
18
+ /**
19
+ * Validate that an unknown JSON value conforms to the Alistigo document schema.
20
+ *
21
+ * Lazily resolves `ajv` and `ajv-formats` from the consumer's node_modules so
22
+ * we don't pull them in for non-validating consumers.
23
+ */
24
+ export async function validateDocument(input) {
25
+ // biome-ignore lint/suspicious/noExplicitAny: dynamic import of optional peer
26
+ const Ajv = (await import("ajv/dist/2020.js")).default;
27
+ // biome-ignore lint/suspicious/noExplicitAny: dynamic import of optional peer
28
+ const addFormats = (await import("ajv-formats")).default;
29
+ const ajv = new Ajv({ allErrors: true, strict: false });
30
+ addFormats(ajv);
31
+ for (const stub of SCHEMA_ORG_STUBS)
32
+ ajv.addSchema(stub);
33
+ ajv.addSchema(alistigoDocumentSchema);
34
+ const validate = ajv.compile(documentSchema);
35
+ const valid = validate(input);
36
+ const errors = (validate.errors ?? []).map((e) => `${e.instancePath || "/"} ${e.message ?? ""}`.trim());
37
+ return { valid, errors };
38
+ }
39
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,MAAM,wDAAwD,CAAC;IAC1F,IAAI,EAAE,MAAM;CACb,CAAC;AACF,OAAO,cAAc,MAAM,yBAAyB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAO3E,+EAA+E;AAC/E,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,qDAAqD;AACrD,MAAM,gBAAgB,GAAG;IACvB,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE;IACvC,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxC,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxC,EAAE,GAAG,EAAE,4BAA4B,EAAE,IAAI,EAAE,QAAQ,EAAE;IACrD,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC1C,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE;CAClC,CAAC;AAEX;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAc;IACnD,8EAA8E;IAC9E,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAc,CAAC;IAC9D,8EAA8E;IAC9E,MAAM,UAAU,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,OAAc,CAAC;IAEhE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,gBAAgB;QAAE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzD,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAEtC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAY,CAAC;IACzC,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAA6C,EAAE,EAAE,CAC3F,GAAG,CAAC,CAAC,YAAY,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CACrD,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@alistigo/list-document",
3
+ "version": "0.4.0",
4
+ "license": "MIT",
5
+ "author": {
6
+ "name": "Mikael Labrut",
7
+ "email": "contact@alistigo.com"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/alistigo/holos.git",
12
+ "directory": "packages/list-document"
13
+ },
14
+ "bugs": {
15
+ "url": "https://github.com/alistigo/holos/issues"
16
+ },
17
+ "homepage": "https://github.com/alistigo/holos/tree/main/packages/list-document#readme",
18
+ "alistigo": {
19
+ "type": "document"
20
+ },
21
+ "keywords": [
22
+ "alistigo",
23
+ "list",
24
+ "document",
25
+ "json-schema",
26
+ "json-ld",
27
+ "typescript"
28
+ ],
29
+ "private": false,
30
+ "type": "module",
31
+ "description": "Specification, JSON schemas, and TypeScript types for the Alistigo list document format.",
32
+ "exports": {
33
+ ".": {
34
+ "import": "./dist/index.js",
35
+ "types": "./dist/index.d.ts"
36
+ },
37
+ "./schemas/document.json": "./src/schemas/document.json"
38
+ },
39
+ "main": "./dist/index.js",
40
+ "types": "./dist/index.d.ts",
41
+ "files": [
42
+ "dist",
43
+ "src/schemas",
44
+ "docs"
45
+ ],
46
+ "publishConfig": {
47
+ "access": "public"
48
+ },
49
+ "dependencies": {
50
+ "ajv": "^8.17.0",
51
+ "ajv-formats": "^3.0.1",
52
+ "schema-dts": "^2.0.0",
53
+ "@alistigo/list-domain": "0.3.2",
54
+ "@alistigo/core-document": "0.2.0",
55
+ "@alistigo/logger": "0.3.2"
56
+ }
57
+ }
@@ -0,0 +1,117 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.alistigo.com/v1/documents/alistigo-document.json",
4
+ "title": "Alistigo Document",
5
+ "description": "Common properties shared by all Alistigo artifact documents",
6
+ "type": "object",
7
+ "allOf": [
8
+ {
9
+ "$ref": "schema:Thing"
10
+ }
11
+ ],
12
+ "required": ["alistigo:eventLog", "@type", "@id"],
13
+ "properties": {
14
+ "alistigo:eventLog": {
15
+ "type": "array",
16
+ "items": {
17
+ "$ref": "#/$defs/Event"
18
+ }
19
+ },
20
+ "alistigo:agents": {
21
+ "type": "array",
22
+ "items": {
23
+ "$ref": "#/$defs/Agent"
24
+ }
25
+ },
26
+ "alistigo:plugins": {
27
+ "type": "array",
28
+ "items": {
29
+ "$ref": "#/$defs/Plugin"
30
+ }
31
+ }
32
+ },
33
+ "$defs": {
34
+ "Reference": {
35
+ "type": "object",
36
+ "required": ["@id"],
37
+ "properties": {
38
+ "@id": { "type": "string" }
39
+ }
40
+ },
41
+ "Event": {
42
+ "allOf": [
43
+ {
44
+ "$ref": "schema:Action"
45
+ },
46
+ {
47
+ "type": "object",
48
+ "required": ["@id", "alistigo:eventType", "agent", "startTime"],
49
+ "properties": {
50
+ "@id": {
51
+ "type": "string"
52
+ },
53
+ "alistigo:eventType": {
54
+ "type": "string"
55
+ },
56
+ "agent": {
57
+ "$ref": "#/$defs/Reference"
58
+ },
59
+ "startTime": {
60
+ "type": "string",
61
+ "format": "date-time"
62
+ }
63
+ }
64
+ }
65
+ ]
66
+ },
67
+ "Agent": {
68
+ "oneOf": [
69
+ {
70
+ "$ref": "#/$defs/Person"
71
+ },
72
+ {
73
+ "$ref": "#/$defs/SoftwareApplication"
74
+ }
75
+ ]
76
+ },
77
+ "Person": {
78
+ "type": "object",
79
+ "required": ["@type", "@id", "name"],
80
+ "properties": {
81
+ "@type": { "const": "Person" }
82
+ },
83
+ "allOf": [
84
+ {
85
+ "$ref": "schema:Person"
86
+ }
87
+ ]
88
+ },
89
+ "SoftwareApplication": {
90
+ "type": "object",
91
+ "required": ["@type", "@id", "name"],
92
+ "properties": {
93
+ "@type": { "const": "SoftwareApplication" }
94
+ },
95
+ "allOf": [
96
+ {
97
+ "$ref": "schema:SoftwareApplication"
98
+ }
99
+ ]
100
+ },
101
+ "Plugin": {
102
+ "type": "object",
103
+ "required": ["name"],
104
+ "properties": {
105
+ "name": {
106
+ "type": "string"
107
+ },
108
+ "version": {
109
+ "type": "string"
110
+ },
111
+ "config": {
112
+ "type": "object"
113
+ }
114
+ }
115
+ }
116
+ }
117
+ }
@@ -0,0 +1,83 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.alistigo.com/v1/documents/list.json",
4
+ "title": "Alistigo List Document",
5
+ "description": "A list document",
6
+ "type": "object",
7
+ "allOf": [
8
+ { "$ref": "schema:ItemList" },
9
+ { "$ref": "https://schemas.alistigo.com/v1/documents/alistigo-document.json" }
10
+ ],
11
+ "required": ["@context", "@type", "@id", "itemListElement"],
12
+ "properties": {
13
+ "@context": {
14
+ "type": "object",
15
+ "required": ["@vocab", "alistigo"],
16
+ "properties": {
17
+ "@vocab": { "type": "string", "const": "https://schema.org/" },
18
+ "alistigo": { "type": "string", "const": "https://json-ld.alistigo.com/vocab/" }
19
+ }
20
+ },
21
+ "@type": { "type": "string", "const": "ItemList" },
22
+ "@id": { "type": "string", "pattern": "^lst_" },
23
+ "name": { "type": "string" },
24
+ "itemListElement": {
25
+ "type": "array",
26
+ "items": { "$ref": "#/$defs/ListItem" }
27
+ },
28
+ "alistigo:eventLog": {
29
+ "type": "array",
30
+ "items": { "$ref": "#/$defs/ListEventRecord" }
31
+ }
32
+ },
33
+ "$defs": {
34
+ "Reference": {
35
+ "type": "object",
36
+ "required": ["@id"],
37
+ "properties": {
38
+ "@id": { "type": "string" }
39
+ }
40
+ },
41
+ "ListItem": {
42
+ "allOf": [
43
+ { "$ref": "schema:ListItem" },
44
+ {
45
+ "type": "object",
46
+ "required": ["@type", "alistigo:listElementId", "position", "name"],
47
+ "properties": {
48
+ "@type": { "type": "string", "const": "ListItem" },
49
+ "alistigo:listElementId": { "type": "string", "pattern": "^lse_" },
50
+ "position": { "type": "integer", "minimum": 1 },
51
+ "name": { "type": "string", "minLength": 1 },
52
+ "alistigo:metadatas": {
53
+ "type": "object",
54
+ "additionalProperties": { "type": "object" }
55
+ }
56
+ }
57
+ }
58
+ ]
59
+ },
60
+ "ListEventRecord": {
61
+ "type": "object",
62
+ "required": ["@id", "alistigo:eventType", "list", "agent", "startTime"],
63
+ "properties": {
64
+ "@id": { "type": "string" },
65
+ "alistigo:eventType": {
66
+ "type": "string",
67
+ "enum": [
68
+ "ListCreated",
69
+ "ListElementAdded",
70
+ "ListElementDeleted",
71
+ "ListExported",
72
+ "ListElementChecked"
73
+ ]
74
+ },
75
+ "list": { "$ref": "#/$defs/Reference" },
76
+ "agent": { "$ref": "#/$defs/Reference" },
77
+ "startTime": { "type": "string", "format": "date-time" },
78
+ "listItem": { "$ref": "#/$defs/Reference" },
79
+ "checked": { "type": "boolean" }
80
+ }
81
+ }
82
+ }
83
+ }