@jxsuite/schema 0.35.0 → 1.1.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.
@@ -1,9 +1,10 @@
1
1
  export const expressionPointerSchema = {
2
2
  additionalProperties: false,
3
- description: "A JSON Pointer $ref operand within an expression node.",
3
+ description:
4
+ "A JSON Pointer $ref operand within an expression node. $args/<name> resolves a named formula's parameter (callable entries only).",
4
5
  properties: {
5
6
  $ref: {
6
- pattern: "^(\\$map/|\\$reduce/|event#/|#/|parent#/|window#/|document#/)",
7
+ pattern: "^(\\$map/|\\$reduce/|\\$args/|event#/|#/|parent#/|window#/|document#/)",
7
8
  type: "string",
8
9
  },
9
10
  },
@@ -18,8 +19,14 @@ export const expressionLiteralSchema = {
18
19
  { type: "boolean" },
19
20
  { type: "null" },
20
21
  { items: { $ref: "#/$defs/ExpressionOperand" }, type: "array" },
22
+ {
23
+ description:
24
+ "Plain-object literal (e.g. an Intl options bag). Objects carrying $ref or operator keys are pointers/nodes, never literals.",
25
+ not: { anyOf: [{ required: ["$ref"] }, { required: ["operator"] }] },
26
+ type: "object",
27
+ },
21
28
  ],
22
- description: "A non-reactive operand: scalar or array of operands.",
29
+ description: "A non-reactive operand: scalar, plain-object literal, or array of operands.",
23
30
  } as const;
24
31
 
25
32
  export const expressionOperandSchema = {
@@ -34,7 +41,47 @@ export const expressionOperandSchema = {
34
41
 
35
42
  export const unaryOperatorSchema = { enum: ["!", "-"] } as const;
36
43
  export const binaryOperatorSchema = {
37
- enum: ["+", "-", "*", "/", "%", "===", "!==", "<", "<=", ">", ">=", "&&", "||"],
44
+ enum: ["+", "-", "*", "/", "%", "===", "!==", "<", "<=", ">", ">=", "&&", "||", "??"],
45
+ } as const;
46
+ export const conditionalOperatorSchema = { const: "?:" } as const;
47
+ export const switchOperatorSchema = { const: "switch" } as const;
48
+ export const callOperatorSchema = { const: "call" } as const;
49
+ export const pureMethodSchema = {
50
+ description:
51
+ "A genuine pure String.prototype / Array.prototype / Number.prototype method (spec §19.4d). The ES2023 change-by-copy family (toSorted, toReversed, toSpliced, with) stands in where mutation would otherwise occur. Receiver in target; value carries the argument (bare scalar) or argument list (array).",
52
+ enum: [
53
+ "includes",
54
+ "indexOf",
55
+ "lastIndexOf",
56
+ "join",
57
+ "slice",
58
+ "concat",
59
+ "at",
60
+ "flat",
61
+ "toSorted",
62
+ "toReversed",
63
+ "toSpliced",
64
+ "with",
65
+ "toUpperCase",
66
+ "toLowerCase",
67
+ "trim",
68
+ "trimStart",
69
+ "trimEnd",
70
+ "split",
71
+ "startsWith",
72
+ "endsWith",
73
+ "padStart",
74
+ "padEnd",
75
+ "replaceAll",
76
+ "repeat",
77
+ "charAt",
78
+ "normalize",
79
+ "toLocaleUpperCase",
80
+ "toLocaleLowerCase",
81
+ "toFixed",
82
+ "toPrecision",
83
+ "toLocaleString",
84
+ ],
38
85
  } as const;
39
86
  export const assignmentOperatorSchema = { enum: ["=", "+=", "-=", "*=", "/="] } as const;
40
87
  export const noArgMethodSchema = { enum: ["pop", "shift"] } as const;
@@ -99,24 +146,80 @@ export const expressionNodeSchema = {
99
146
  {
100
147
  properties: {
101
148
  operator: { $ref: "#/$defs/ReduceMethod" },
102
- target: { $ref: "#/$defs/ExpressionPointer" },
149
+ target: {
150
+ anyOf: [{ $ref: "#/$defs/ExpressionPointer" }, { $ref: "#/$defs/ExpressionNode" }],
151
+ },
103
152
  value: { $ref: "#/$defs/ExpressionNode" },
104
153
  },
105
154
  required: ["operator", "value", "initial"],
106
- title: "reduce — pure fold; per-item expression in value, seed in initial",
155
+ title: "reduce — pure fold over a pointer or derived array; seed in initial",
107
156
  },
108
157
  {
109
158
  not: { required: ["initial"] },
110
159
  properties: {
111
160
  operator: { $ref: "#/$defs/MapFilterMethod" },
112
- target: { $ref: "#/$defs/ExpressionPointer" },
161
+ target: {
162
+ anyOf: [{ $ref: "#/$defs/ExpressionPointer" }, { $ref: "#/$defs/ExpressionNode" }],
163
+ },
113
164
  value: { $ref: "#/$defs/ExpressionNode" },
114
165
  },
115
166
  required: ["operator", "value"],
116
- title: "map / filter — pure; per-item expression in value, no initial",
167
+ title: "map / filter — pure over a pointer or derived array; per-item expression in value",
168
+ },
169
+ {
170
+ description:
171
+ "The ECMAScript conditional (ternary) operator, pure: target is the test, value the consequent, initial the alternate (the reduce precedent for repurposing initial). Chain else-if by nesting another ?: node in initial.",
172
+ properties: { operator: { $ref: "#/$defs/ConditionalOperator" } },
173
+ required: ["operator", "value", "initial"],
174
+ title: "?: — pure conditional; test in target, consequent in value, alternate in initial",
175
+ },
176
+ {
177
+ description:
178
+ "Value-keyed multiway selection, pure: target is the discriminant (matched against case keys by its string form, like element-level $switch), cases maps matched values to result operands, default is the operand when no case matches (result is undefined without it). Condition-chain branching composes from nested ?: nodes instead.",
179
+ not: { anyOf: [{ required: ["value"] }, { required: ["initial"] }] },
180
+ properties: {
181
+ cases: {
182
+ additionalProperties: { $ref: "#/$defs/ExpressionOperand" },
183
+ type: "object",
184
+ },
185
+ default: { $ref: "#/$defs/ExpressionOperand" },
186
+ operator: { $ref: "#/$defs/SwitchOperator" },
187
+ },
188
+ required: ["operator", "cases"],
189
+ title:
190
+ "switch — pure value-keyed selection; discriminant in target, results in cases/default",
191
+ },
192
+ {
193
+ description:
194
+ "A pure standard-library method call: target is the receiver (any operand — never mutated; change-by-copy names replace the mutating originals), value the optional argument (bare scalar) or argument list (array). A missing receiver or method yields undefined, matching null-safe path reads.",
195
+ not: { required: ["initial"] },
196
+ properties: { operator: { $ref: "#/$defs/PureMethod" } },
197
+ required: ["operator"],
198
+ title: "Pure method — genuine prototype methods; receiver in target, args in value",
199
+ },
200
+ {
201
+ description:
202
+ "Invoke a callable, pure in formula position: target is the callee pointer — a named formula entry (#/state/…) or a blessed pure global via window#/ (Math.*, JSON.*, Object.keys/values/entries, and the Intl helpers Intl/formatNumber, Intl/formatDate, Intl/formatRelativeTime) — and value is the positional argument list (the splice args-in-value precedent). Argument order follows the callee's declared parameters.",
203
+ not: { required: ["initial"] },
204
+ properties: {
205
+ operator: { $ref: "#/$defs/CallOperator" },
206
+ target: { $ref: "#/$defs/ExpressionPointer" },
207
+ value: { items: { $ref: "#/$defs/ExpressionOperand" }, type: "array" },
208
+ },
209
+ required: ["operator"],
210
+ title: "call — invoke a named formula or blessed global; callee in target, args in value",
117
211
  },
118
212
  ],
119
213
  properties: {
214
+ cases: {
215
+ additionalProperties: { $ref: "#/$defs/ExpressionOperand" },
216
+ description: "switch only: matched discriminant value (string form) → result operand.",
217
+ type: "object",
218
+ },
219
+ default: {
220
+ $ref: "#/$defs/ExpressionOperand",
221
+ description: "switch only: result operand when no case key matches.",
222
+ },
120
223
  initial: { $ref: "#/$defs/ExpressionOperand" },
121
224
  operator: { type: "string" },
122
225
  target: { $ref: "#/$defs/ExpressionOperand" },
@@ -129,11 +232,17 @@ export const expressionNodeSchema = {
129
232
  export const expressionEntrySchema = {
130
233
  additionalProperties: false,
131
234
  description:
132
- "A declarative expression entry (Shape 5). Used as a state entry or inline event handler.",
235
+ "A declarative expression entry (Shape 5). Used as a state entry or inline event handler. With parameters it is a named formula: a pure, reusable computation invoked via the call operator, its parameters resolved through $args/<name> refs in the body.",
133
236
  properties: {
134
237
  $description: { type: "string" },
135
238
  $expression: { $ref: "#/$defs/ExpressionNode" },
136
239
  $title: { type: "string" },
240
+ parameters: {
241
+ description:
242
+ "Named-formula parameters (CEM convention, as on Function entries): bare names or CEM parameter objects. Present ⇒ the entry is callable, not a computed value.",
243
+ items: { anyOf: [{ type: "string" }, { $ref: "#/$defs/CemParameter" }] },
244
+ type: "array",
245
+ },
137
246
  },
138
247
  required: ["$expression"],
139
248
  type: "object",
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Jx-extension.json manifest schema (specs/extensions.md §4). The manifest is pure data: it
3
+ * enumerates an extension package's classes and schema fragments; behavior lives in the class
4
+ * descriptors it points to.
5
+ */
6
+
7
+ export const extensionManifestSchema = {
8
+ additionalProperties: false,
9
+ description:
10
+ "Schema for jx-extension.json manifests. Located at the extension package root and " +
11
+ "exported so hosts can resolve <package>/jx-extension.json through the exports map.",
12
+ properties: {
13
+ $schema: { type: "string" },
14
+ classes: {
15
+ additionalProperties: { type: "string" },
16
+ description:
17
+ "$prototype-visible class name → class descriptor path, relative to the manifest.",
18
+ type: "object",
19
+ },
20
+ description: { description: "One-line description.", type: "string" },
21
+ name: { description: "Package name; must match package.json.", type: "string" },
22
+ schemas: {
23
+ additionalProperties: false,
24
+ description: "Schema fragments this package contributes, relative to the manifest.",
25
+ properties: {
26
+ document: {
27
+ description: "Document-schema fragment (positions like $paths values).",
28
+ type: "string",
29
+ },
30
+ fields: {
31
+ description:
32
+ "Field-union fragment: its $defs members are unioned into the per-project " +
33
+ "field-schema resource as extension field extras (specs/extensions.md §5.3).",
34
+ type: "string",
35
+ },
36
+ project: {
37
+ description: "Project-schema fragment (top-level project.json sections).",
38
+ type: "string",
39
+ },
40
+ },
41
+ type: "object",
42
+ },
43
+ title: { description: "Human-readable name for studio surfaces.", type: "string" },
44
+ },
45
+ required: ["name"],
46
+ type: "object",
47
+ } as const;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Field-schema vocabulary (specs/extensions.md §5.3, specs/relationships.md).
3
+ *
4
+ * JxFieldSchema is the JSON-Schema-subset shape for a single field inside a section entry schema
5
+ * (content frontmatter fields, table columns). Recursive positions (`items`, nested `properties`)
6
+ * reference the well-known **fields resource URI** — a schema resource the generated per-project
7
+ * entry document re-embeds under the same `$id` with the effective union (core shape +
8
+ * RelationshipRef + extension extras), shadowing the shipped default by standard compound-document
9
+ * `$id` resolution. Extension fragments reference the same URI at their field positions.
10
+ *
11
+ * (An earlier design used `$dynamicRef`/`$dynamicAnchor` here; ajv restricts `$dynamicAnchor` to
12
+ * schema-resource roots, which cannot express a non-root recursion unit, so the model uses plain
13
+ * `$id` indirection instead — verified against ajv 8.20 / 2020-12.)
14
+ */
15
+
16
+ /** The well-known $id of the project field-schema union resource. */
17
+ export const PROJECT_FIELDS_SCHEMA_ID = "https://jxsuite.com/schema/project/fields/v2";
18
+
19
+ /** The well-known $id of the document $paths-value union resource. */
20
+ export const DOCUMENT_PATHS_SCHEMA_ID = "https://jxsuite.com/schema/document/paths/v2";
21
+
22
+ export const jxFieldSchemaDef = {
23
+ description:
24
+ "A single field definition inside a section entry schema — a small, recursive subset of " +
25
+ "JSON Schema. Recursive positions reference the effective field union via the well-known " +
26
+ "fields resource $id.",
27
+ properties: {
28
+ default: {},
29
+ description: { type: "string" },
30
+ enum: { type: "array" },
31
+ format: { type: "string" },
32
+ items: { $ref: PROJECT_FIELDS_SCHEMA_ID },
33
+ properties: {
34
+ additionalProperties: { $ref: PROJECT_FIELDS_SCHEMA_ID },
35
+ type: "object",
36
+ },
37
+ required: { items: { type: "string" }, type: "array" },
38
+ type: {
39
+ enum: ["string", "number", "integer", "boolean", "array", "object"],
40
+ type: "string",
41
+ },
42
+ },
43
+ required: ["type"],
44
+ type: "object",
45
+ } as const;
46
+
47
+ export const relationshipRefSchema = {
48
+ description:
49
+ "Relationship reference field: points at a named entry of a referenceable section via " +
50
+ '"#/<sectionKey>/<name>" (specs/relationships.md). A bare reference is to-one; wrap in an ' +
51
+ "array field's items for to-many.",
52
+ properties: {
53
+ $ref: { pattern: "^#/[A-Za-z][A-Za-z0-9_-]*/[A-Za-z0-9._-]+$", type: "string" },
54
+ description: { type: "string" },
55
+ },
56
+ required: ["$ref"],
57
+ type: "object",
58
+ } as const;
@@ -16,13 +16,18 @@ export const functionDefSchema = {
16
16
  type: "string",
17
17
  },
18
18
  body: {
19
- description: "Inline function body string. First implicit parameter is state.",
19
+ description:
20
+ "Inline function body: an opaque JS source string (first implicit parameter is state), or a structured statement array (spec §20) — explicit structured function declaration, analyzable by tooling and editable visually. The escalation ladder within the shape is structured statements → JS string.",
20
21
  examples: [
21
22
  "state.count++",
22
23
  'state.items.push({ id: Date.now(), text: "", done: false })',
23
24
  'return state.score >= 90 ? "gold" : "silver"',
25
+ [
26
+ { operator: "push", target: { $ref: "#/state/cart" }, value: 1 },
27
+ { dispatchEvent: "cart-changed", detail: { $ref: "#/state/cart" } },
28
+ ],
24
29
  ],
25
- type: "string",
30
+ oneOf: [{ type: "string" }, { $ref: "#/$defs/StatementList" }],
26
31
  },
27
32
  description: { type: "string" },
28
33
  emits: {
package/defs/index.ts CHANGED
@@ -34,6 +34,7 @@ export {
34
34
  // State shapes
35
35
  export { typedStateDefSchema } from "./typed-state-def.schema";
36
36
  export { functionDefSchema } from "./function-def.schema";
37
+ export { statementSchema, statementListSchema } from "./statement.schema";
37
38
  export { externalClassDefSchema, BUILT_IN_PROTOTYPES } from "./external-class-def.schema";
38
39
  export { pureTypeDefSchema } from "./pure-type-def.schema";
39
40
 
@@ -46,6 +47,10 @@ export {
46
47
  expressionEntrySchema,
47
48
  unaryOperatorSchema,
48
49
  binaryOperatorSchema,
50
+ conditionalOperatorSchema,
51
+ switchOperatorSchema,
52
+ callOperatorSchema,
53
+ pureMethodSchema,
49
54
  assignmentOperatorSchema,
50
55
  noArgMethodSchema,
51
56
  oneArgMethodSchema,
@@ -73,6 +78,9 @@ export {
73
78
  studioHintsSchema,
74
79
  } from "./class-def.schema";
75
80
 
76
- // Content & project
77
- export { contentTypeDefSchema } from "./content-type-def.schema";
81
+ // Project
78
82
  export { projectConfigSchema } from "./project-config.schema";
83
+
84
+ // Extensions (specs/extensions.md)
85
+ export { extensionManifestSchema } from "./extension-manifest.schema";
86
+ export { jxFieldSchemaDef, relationshipRefSchema } from "./field-schema.schema";
@@ -1,10 +1,11 @@
1
1
  export const projectConfigSchema = {
2
- additionalProperties: false,
3
2
  description:
4
3
  "Schema for Jx project.json files. " +
5
4
  "A project.json file is the root anchor file for a Jx project, " +
6
- "declaring site metadata, default settings, global styles, content types, " +
7
- "and build configuration.",
5
+ "declaring site metadata, default settings, global styles, extensions, " +
6
+ "and build configuration. Open by design: extension-contributed sections " +
7
+ "(e.g. `content`) are opaque top-level keys; the generated per-project " +
8
+ "entry document (project.schema.json) closes the composition.",
8
9
  properties: {
9
10
  $defs: {
10
11
  description: "Global type definitions available to all pages.",
@@ -63,6 +64,12 @@ export const projectConfigSchema = {
63
64
  ],
64
65
  type: "object",
65
66
  },
67
+ $schema: {
68
+ description:
69
+ "Relative path to the generated per-project schema (conventionally " +
70
+ "./project.schema.json, written by `jx schema`).",
71
+ type: "string",
72
+ },
66
73
  build: {
67
74
  description: "Build configuration.",
68
75
  properties: {
@@ -103,7 +110,8 @@ export const projectConfigSchema = {
103
110
  },
104
111
  format: {
105
112
  default: "directory",
106
- description: "Output format.",
113
+ description:
114
+ "Reserved; currently unused. Accepted for forward compatibility with single-file output (desktop single-file mode) — the build emits per-route directories regardless.",
107
115
  enum: ["directory", "single"],
108
116
  type: "string",
109
117
  },
@@ -127,13 +135,6 @@ export const projectConfigSchema = {
127
135
  },
128
136
  type: "object",
129
137
  },
130
- contentTypes: {
131
- additionalProperties: { $ref: "#/$defs/ContentTypeDef" },
132
- description:
133
- "Content type definitions. Each key is a content type name; " +
134
- "the value defines the source directory, frontmatter schema, and element dependencies.",
135
- type: "object",
136
- },
137
138
  copy: {
138
139
  additionalProperties: { type: "string" },
139
140
  description:
@@ -164,6 +165,14 @@ export const projectConfigSchema = {
164
165
  },
165
166
  type: "object",
166
167
  },
168
+ extensions: {
169
+ description:
170
+ "Extension packages: bare package names (resolved project-first through the package " +
171
+ "exports map) or relative paths. Each must export jx-extension.json.",
172
+ examples: [["@jxsuite/parser"]],
173
+ items: { type: "string" },
174
+ type: "array",
175
+ },
167
176
  i18n: {
168
177
  description: "Internationalization configuration.",
169
178
  properties: {
@@ -0,0 +1,65 @@
1
+ // oxlint-disable unicorn/no-thenable -- `then` is the JSON Schema conditional keyword (spec §20), not a promise
2
+ /**
3
+ * Statement schema (spec §20) — structured function bodies.
4
+ *
5
+ * A Function entry's `body` may be a JSON array of statements instead of an opaque JS source
6
+ * string: explicit structured function declaration, mirroring ESTree's `BlockStatement.body =
7
+ * Statement[]`. Every statement kind reuses a web-platform name: bare expression nodes (§19), the
8
+ * JSON Schema 2020-12 `if`/`then`/`else` keyword triple, the element-level `$switch`/`cases`
9
+ * convention in statement position, and WHATWG's `dispatchEvent` with `CustomEventInit` members.
10
+ */
11
+
12
+ export const statementSchema = {
13
+ description:
14
+ "One statement of a structured function body. Either a bare expression node in statement position (a mutation like =/push, or a call — its result discarded unless captured by an assignment), an if/then/else branch (JSON Schema conditional keywords; if holds a pure expression, then/else hold statement lists), a $switch multiway branch (discriminant matched by string form against cases keys, like element-level $switch), or a dispatchEvent statement (WHATWG DOM: dispatches a CustomEvent from the handler's current target, with CustomEventInit members detail/bubbles/composed).",
15
+ oneOf: [
16
+ { $ref: "#/$defs/ExpressionNode" },
17
+ {
18
+ additionalProperties: false,
19
+ properties: {
20
+ else: { items: { $ref: "#/$defs/Statement" }, type: "array" },
21
+ if: { $ref: "#/$defs/ExpressionOperand" },
22
+ then: { items: { $ref: "#/$defs/Statement" }, type: "array" },
23
+ },
24
+ required: ["if", "then"],
25
+ title: "if / then / else — conditional branch (JSON Schema keyword triple)",
26
+ type: "object",
27
+ },
28
+ {
29
+ additionalProperties: false,
30
+ properties: {
31
+ $switch: { $ref: "#/$defs/ExpressionOperand" },
32
+ cases: {
33
+ additionalProperties: { items: { $ref: "#/$defs/Statement" }, type: "array" },
34
+ type: "object",
35
+ },
36
+ default: { items: { $ref: "#/$defs/Statement" }, type: "array" },
37
+ },
38
+ required: ["$switch", "cases"],
39
+ title: "$switch / cases — multiway branch (element-level convention, ECMA switch semantics)",
40
+ type: "object",
41
+ },
42
+ {
43
+ additionalProperties: false,
44
+ properties: {
45
+ bubbles: { type: "boolean" },
46
+ composed: { type: "boolean" },
47
+ detail: { $ref: "#/$defs/ExpressionOperand" },
48
+ dispatchEvent: {
49
+ description: "The CustomEvent type to dispatch (WHATWG DOM dispatchEvent).",
50
+ type: "string",
51
+ },
52
+ },
53
+ required: ["dispatchEvent"],
54
+ title: "dispatchEvent — emit a CustomEvent (WHATWG naming, CustomEventInit members)",
55
+ type: "object",
56
+ },
57
+ ],
58
+ } as const;
59
+
60
+ export const statementListSchema = {
61
+ description:
62
+ "A structured function body: statements executed sequentially (one yielding a promise is awaited before the next, per ECMA async/await semantics).",
63
+ items: { $ref: "#/$defs/Statement" },
64
+ type: "array",
65
+ } as const;
@@ -0,0 +1,54 @@
1
+ {
2
+ "$id": "https://jxsuite.com/schema/extension-manifest/v1",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "title": "Jx Extension Manifest",
5
+ "additionalProperties": false,
6
+ "description": "Schema for jx-extension.json manifests. Located at the extension package root and exported so hosts can resolve <package>/jx-extension.json through the exports map.",
7
+ "properties": {
8
+ "$schema": {
9
+ "type": "string"
10
+ },
11
+ "classes": {
12
+ "additionalProperties": {
13
+ "type": "string"
14
+ },
15
+ "description": "$prototype-visible class name → class descriptor path, relative to the manifest.",
16
+ "type": "object"
17
+ },
18
+ "description": {
19
+ "description": "One-line description.",
20
+ "type": "string"
21
+ },
22
+ "name": {
23
+ "description": "Package name; must match package.json.",
24
+ "type": "string"
25
+ },
26
+ "schemas": {
27
+ "additionalProperties": false,
28
+ "description": "Schema fragments this package contributes, relative to the manifest.",
29
+ "properties": {
30
+ "document": {
31
+ "description": "Document-schema fragment (positions like $paths values).",
32
+ "type": "string"
33
+ },
34
+ "fields": {
35
+ "description": "Field-union fragment: its $defs members are unioned into the per-project field-schema resource as extension field extras (specs/extensions.md §5.3).",
36
+ "type": "string"
37
+ },
38
+ "project": {
39
+ "description": "Project-schema fragment (top-level project.json sections).",
40
+ "type": "string"
41
+ }
42
+ },
43
+ "type": "object"
44
+ },
45
+ "title": {
46
+ "description": "Human-readable name for studio surfaces.",
47
+ "type": "string"
48
+ }
49
+ },
50
+ "required": [
51
+ "name"
52
+ ],
53
+ "type": "object"
54
+ }
package/package.json CHANGED
@@ -1,25 +1,33 @@
1
1
  {
2
2
  "dependencies": {
3
- "@webref/css": "^8.6.1",
3
+ "@webref/css": "^8.7.0",
4
4
  "@webref/elements": "^2.7.1",
5
- "@webref/idl": "^3.81.2",
5
+ "@webref/idl": "^3.82.0",
6
6
  "ajv": "^8.20.0",
7
7
  "ajv-formats": "^3.0.1"
8
8
  },
9
9
  "description": "JSON Schema 2020-12 meta-schema generator for Jx documents",
10
10
  "exports": {
11
11
  ".": "./src/schema.ts",
12
+ "./extension-registry": "./src/extension-registry.ts",
12
13
  "./format-registry": "./src/format-registry.ts",
14
+ "./project-schemas": "./src/project-schemas.ts",
15
+ "./validate-project": "./src/validate-project.ts",
13
16
  "./types": "./types.ts",
14
17
  "./guards": "./src/guards.ts",
15
18
  "./parse": "./src/parse.ts",
16
19
  "./defs": "./defs/index.ts",
17
20
  "./schema.json": "./schema.json",
18
- "./project-schema.json": "./project-schema.json"
21
+ "./project-schema.json": "./project-schema.json",
22
+ "./extension-manifest.schema.json": "./extension-manifest.schema.json",
23
+ "./schemas/project.core.schema.json": "./schemas/project.core.schema.json",
24
+ "./schemas/project.fields.schema.json": "./schemas/project.fields.schema.json",
25
+ "./schemas/document.paths.schema.json": "./schemas/document.paths.schema.json"
19
26
  },
20
27
  "files": [
21
28
  "src/",
22
29
  "defs/",
30
+ "schemas/",
23
31
  "types.ts",
24
32
  "*.json",
25
33
  "!package.json"
@@ -41,7 +49,7 @@
41
49
  "upgrade": "bunx npm-check-updates -u && bun install"
42
50
  },
43
51
  "type": "module",
44
- "version": "0.35.0",
52
+ "version": "1.1.0",
45
53
  "devDependencies": {
46
54
  "json-schema-to-ts": "^3.1.1"
47
55
  }