@superbee/core 0.2.0-pre.19 → 0.2.0-pre.20
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 +40 -18
- package/dist/connectors.d.ts +7 -0
- package/dist/connectors.d.ts.map +1 -1
- package/dist/connectors.js +17 -10
- package/dist/connectors.js.map +1 -1
- package/dist/recipe-lifecycle/errors.d.ts +17 -0
- package/dist/recipe-lifecycle/errors.d.ts.map +1 -1
- package/dist/recipe-lifecycle/errors.js +26 -0
- package/dist/recipe-lifecycle/errors.js.map +1 -1
- package/dist/recipe-lifecycle/evolution.d.ts +6 -2
- package/dist/recipe-lifecycle/evolution.d.ts.map +1 -1
- package/dist/recipe-lifecycle/evolution.js +132 -2
- package/dist/recipe-lifecycle/evolution.js.map +1 -1
- package/dist/recipe-lifecycle/index.d.ts +10 -9
- package/dist/recipe-lifecycle/index.d.ts.map +1 -1
- package/dist/recipe-lifecycle/index.js +9 -8
- package/dist/recipe-lifecycle/index.js.map +1 -1
- package/dist/recipe-lifecycle/install.d.ts +22 -7
- package/dist/recipe-lifecycle/install.d.ts.map +1 -1
- package/dist/recipe-lifecycle/install.js +102 -3
- package/dist/recipe-lifecycle/install.js.map +1 -1
- package/dist/recipe-lifecycle/stamp.d.ts +46 -19
- package/dist/recipe-lifecycle/stamp.d.ts.map +1 -1
- package/dist/recipe-lifecycle/stamp.js +97 -37
- package/dist/recipe-lifecycle/stamp.js.map +1 -1
- package/dist/recipes.d.ts +24 -1
- package/dist/recipes.d.ts.map +1 -1
- package/dist/recipes.js +132 -1
- package/dist/recipes.js.map +1 -1
- package/dist/search/backend-source.d.ts +6 -0
- package/dist/search/backend-source.d.ts.map +1 -0
- package/dist/search/backend-source.js +33 -0
- package/dist/search/backend-source.js.map +1 -0
- package/dist/search/index.d.ts +1 -0
- package/dist/search/index.d.ts.map +1 -1
- package/dist/search/index.js +1 -0
- package/dist/search/index.js.map +1 -1
- package/dist/search/memory-source.d.ts +11 -0
- package/dist/search/memory-source.d.ts.map +1 -1
- package/dist/search/memory-source.js +7 -2
- package/dist/search/memory-source.js.map +1 -1
- package/dist/search/search.d.ts.map +1 -1
- package/dist/search/search.js +25 -8
- package/dist/search/search.js.map +1 -1
- package/dist/source-harness/conformance.js +1 -1
- package/dist/source-harness/conformance.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
// Recipe install stamps. Every convention a recipe installs or evolves carries one
|
|
2
|
-
// record, written in the same compare-and-swap write as the
|
|
3
|
-
// exactly when the
|
|
1
|
+
// Recipe install stamps. Every convention and Connector a recipe installs or evolves carries one
|
|
2
|
+
// `x_recipe` record, written in the same compare-and-swap write as the document, so the stamp
|
|
3
|
+
// exists exactly when the document does. A stamp holds only deterministic facts: two clones that apply
|
|
4
4
|
// the same evolve write identical stamps. The read side derives each recipe's state from the
|
|
5
5
|
// stamps alone, without the recipe source. Storage-neutral: no Node globals or builtins.
|
|
6
|
+
import { CONNECTOR_TYPE, CONNECTORS_PREFIX } from "../connectors.js";
|
|
6
7
|
import { normalizeDocumentBodyForStorage } from "../frontmatter.js";
|
|
7
8
|
import { CONVENTION_TYPE } from "../kinds.js";
|
|
8
9
|
import { sha256Hex } from "../versioning.js";
|
|
@@ -61,8 +62,10 @@ function digest(value) {
|
|
|
61
62
|
}
|
|
62
63
|
/**
|
|
63
64
|
* Digest of a recipe's parsed content, taken before edition materialization: its id, version,
|
|
64
|
-
* conventions, View pairs and
|
|
65
|
-
* across editions, independent of how the recipe was acquired,
|
|
65
|
+
* conventions, View pairs, References and (only when it carries any) Connectors, each sorted by id,
|
|
66
|
+
* bodies with CRLF read as LF. Equal across editions, independent of how the recipe was acquired,
|
|
67
|
+
* and blind to README files. A recipe without connectors digests exactly as it did before
|
|
68
|
+
* connectors existed, so every stamp written earlier stays current.
|
|
66
69
|
*/
|
|
67
70
|
export function recipeSourceDigest(recipe) {
|
|
68
71
|
const docs = [...recipe.docs]
|
|
@@ -74,7 +77,17 @@ export function recipeSourceDigest(recipe) {
|
|
|
74
77
|
const references = [...recipe.references]
|
|
75
78
|
.sort((a, b) => byCodeUnit(a.doc.id, b.doc.id))
|
|
76
79
|
.map((reference) => [reference.doc.id, reference.doc.frontmatter, lf(reference.doc.body)]);
|
|
77
|
-
|
|
80
|
+
const connectors = [...(recipe.connectors ?? [])]
|
|
81
|
+
.sort((a, b) => byCodeUnit(a.doc.id, b.doc.id))
|
|
82
|
+
.map((connector) => [connector.doc.id, connector.doc.frontmatter, lf(connector.doc.body)]);
|
|
83
|
+
return digest({
|
|
84
|
+
id: recipe.id,
|
|
85
|
+
version: recipe.version,
|
|
86
|
+
docs,
|
|
87
|
+
pages,
|
|
88
|
+
references,
|
|
89
|
+
...(connectors.length > 0 ? { connectors } : {}),
|
|
90
|
+
});
|
|
78
91
|
}
|
|
79
92
|
/**
|
|
80
93
|
* Digest of a convention as written, rules version 1: its frontmatter without the stripped keys
|
|
@@ -90,7 +103,11 @@ export function definitionDigest(doc) {
|
|
|
90
103
|
function nonNegativeInteger(value) {
|
|
91
104
|
return typeof value === "number" && Number.isInteger(value) && value >= 0;
|
|
92
105
|
}
|
|
93
|
-
/**
|
|
106
|
+
/**
|
|
107
|
+
* The document's stamp, or null unless it is a mapping whose every required field has its type.
|
|
108
|
+
* The optional `connectors` count is kept when it is a non-negative integer and otherwise read as
|
|
109
|
+
* absent.
|
|
110
|
+
*/
|
|
94
111
|
export function readRecipeStamp(doc) {
|
|
95
112
|
const value = doc.frontmatter[RECIPE_STAMP_KEY];
|
|
96
113
|
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
@@ -107,6 +124,7 @@ export function readRecipeStamp(doc) {
|
|
|
107
124
|
id: stamp.id,
|
|
108
125
|
version: stamp.version,
|
|
109
126
|
of: stamp.of,
|
|
127
|
+
...(nonNegativeInteger(stamp.connectors) ? { connectors: stamp.connectors } : {}),
|
|
110
128
|
source_digest: stamp.source_digest,
|
|
111
129
|
definition: stamp.definition,
|
|
112
130
|
digest_rules: stamp.digest_rules,
|
|
@@ -114,10 +132,12 @@ export function readRecipeStamp(doc) {
|
|
|
114
132
|
}
|
|
115
133
|
/** The recipe-level stamp facts for `recipe`; `materialized` supplies the declared count. */
|
|
116
134
|
export function recipeStampIdentity(recipe, materialized) {
|
|
135
|
+
const connectors = (recipe.connectors ?? []).length;
|
|
117
136
|
return {
|
|
118
137
|
id: recipe.id,
|
|
119
138
|
version: recipe.version,
|
|
120
139
|
of: materialized.docs.length,
|
|
140
|
+
...(connectors > 0 ? { connectors } : {}),
|
|
121
141
|
source_digest: recipeSourceDigest(recipe),
|
|
122
142
|
};
|
|
123
143
|
}
|
|
@@ -128,20 +148,29 @@ export function withRecipeStamp(doc, identity) {
|
|
|
128
148
|
id: identity.id,
|
|
129
149
|
version: identity.version,
|
|
130
150
|
of: identity.of,
|
|
151
|
+
...(identity.connectors !== undefined ? { connectors: identity.connectors } : {}),
|
|
131
152
|
source_digest: identity.source_digest,
|
|
132
153
|
definition: definitionDigest({ frontmatter: frontmatter, body: doc.body }),
|
|
133
154
|
digest_rules: DEFINITION_DIGEST_RULES,
|
|
134
155
|
};
|
|
135
156
|
return { ...doc, frontmatter: { ...frontmatter, [RECIPE_STAMP_KEY]: stamp } };
|
|
136
157
|
}
|
|
137
|
-
/**
|
|
158
|
+
/**
|
|
159
|
+
* How the stamp on `doc` (null: no document) relates to the recipe `identity` describes. The
|
|
160
|
+
* Connector count must match too: for a recipe that carries connectors a stamp without it is
|
|
161
|
+
* `stale`, and since no release writes the key for a recipe without connectors, every stamp such a
|
|
162
|
+
* recipe wrote reads as it did before the key existed.
|
|
163
|
+
*/
|
|
138
164
|
export function recipeStampState(doc, identity) {
|
|
139
165
|
const stamp = doc === null ? null : readRecipeStamp(doc);
|
|
140
166
|
if (stamp === null)
|
|
141
167
|
return "missing";
|
|
142
168
|
if (stamp.id !== identity.id)
|
|
143
169
|
return "foreign";
|
|
144
|
-
return stamp.version === identity.version
|
|
170
|
+
return stamp.version === identity.version
|
|
171
|
+
&& stamp.of === identity.of
|
|
172
|
+
&& stamp.source_digest === identity.source_digest
|
|
173
|
+
&& stamp.connectors === identity.connectors
|
|
145
174
|
? "current"
|
|
146
175
|
: "stale";
|
|
147
176
|
}
|
|
@@ -152,7 +181,7 @@ export function worstRecipeStampState(states) {
|
|
|
152
181
|
worst = Math.max(worst, STAMP_STATE_SEVERITY.indexOf(state));
|
|
153
182
|
return STAMP_STATE_SEVERITY[worst];
|
|
154
183
|
}
|
|
155
|
-
/** One stamped
|
|
184
|
+
/** One stamped document's state: rules this release reads, and whether its digest still matches. */
|
|
156
185
|
export function conventionStampState(doc) {
|
|
157
186
|
const stamp = readRecipeStamp(doc);
|
|
158
187
|
if (stamp === null || stamp.digest_rules !== DEFINITION_DIGEST_RULES)
|
|
@@ -163,71 +192,94 @@ export function conventionStampState(doc) {
|
|
|
163
192
|
function declarationFree(doc) {
|
|
164
193
|
return !["fields", "sections", "links", "expects_inbound"].some((key) => Object.hasOwn(doc.frontmatter, key));
|
|
165
194
|
}
|
|
195
|
+
/** A Connector declaration: the type core's connector parser owns, at the one place it reads it. */
|
|
196
|
+
function isConnectorDoc(doc) {
|
|
197
|
+
return doc.frontmatter.type === CONNECTOR_TYPE && doc.id.startsWith(CONNECTORS_PREFIX);
|
|
198
|
+
}
|
|
166
199
|
/**
|
|
167
|
-
* Each recipe's install state, derived from the stamps on `
|
|
168
|
-
* type are ignored), and the
|
|
169
|
-
* are visible to the caller) also report a
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
200
|
+
* Each recipe's install state, derived from the stamps on `docs` (conventions, and Connector
|
|
201
|
+
* documents under `connectors/`; documents of any other type are ignored), and the documents no
|
|
202
|
+
* recipe stamped. `known` recipes (their declared ids are visible to the caller) also report a
|
|
203
|
+
* declared id that does not carry their stamp, and get a row when an unstamped convention that
|
|
204
|
+
* declares something, or an unstamped Connector, sits at one of their ids: a bundle written before
|
|
205
|
+
* stamps. A declined Kind (a declaration-free record) or another recipe's stamp at their ids alone
|
|
206
|
+
* is no evidence they were installed.
|
|
173
207
|
*
|
|
174
|
-
* States, the first match winning: `unknown` when no
|
|
175
|
-
* `partial` when the stamps record more than one version or source digest, disagree on
|
|
176
|
-
*
|
|
177
|
-
* recipe's stamp; `diverged` when a stamped
|
|
178
|
-
* `unknown` when a stamp uses digest rules this release does not read; otherwise
|
|
208
|
+
* States, the first match winning: `unknown` when no document carries the recipe's stamp;
|
|
209
|
+
* `partial` when the stamps record more than one version or source digest, disagree on a declared
|
|
210
|
+
* count, fall short of the convention or Connector count, or (known recipes) a declared id is
|
|
211
|
+
* present without this recipe's stamp; `diverged` when a stamped document changed since the recipe
|
|
212
|
+
* wrote it; `unknown` when a stamp uses digest rules this release does not read; otherwise
|
|
213
|
+
* `installed`. A row carries the Connector keys only for a recipe whose stamps record connectors,
|
|
214
|
+
* so every other row reads as it did before connectors existed.
|
|
179
215
|
*/
|
|
180
|
-
export function installedRecipes(
|
|
216
|
+
export function installedRecipes(docs, known = []) {
|
|
181
217
|
const present = new Map();
|
|
182
218
|
const stampedByRecipe = new Map();
|
|
183
219
|
const unstamped = [];
|
|
184
|
-
for (const doc of
|
|
185
|
-
|
|
220
|
+
for (const doc of docs) {
|
|
221
|
+
const connector = isConnectorDoc(doc);
|
|
222
|
+
if (doc.frontmatter.type !== CONVENTION_TYPE && !connector)
|
|
186
223
|
continue;
|
|
187
224
|
present.set(doc.id, doc);
|
|
188
225
|
const stamp = readRecipeStamp(doc);
|
|
189
226
|
if (stamp === null) {
|
|
190
|
-
if (!declarationFree(doc))
|
|
227
|
+
if (connector || !declarationFree(doc))
|
|
191
228
|
unstamped.push(doc.id);
|
|
192
229
|
continue;
|
|
193
230
|
}
|
|
194
231
|
const group = stampedByRecipe.get(stamp.id) ?? [];
|
|
195
|
-
group.push({ doc, stamp });
|
|
232
|
+
group.push({ doc, stamp, connector });
|
|
196
233
|
stampedByRecipe.set(stamp.id, group);
|
|
197
234
|
}
|
|
198
235
|
const knownById = new Map(known.map((recipe) => [recipe.id, recipe]));
|
|
236
|
+
const declaredDocs = (recipe) => [...recipe.docs, ...(recipe.connectors ?? []).map((connector) => connector.doc)];
|
|
199
237
|
const ids = new Set(stampedByRecipe.keys());
|
|
200
238
|
const unstampedIds = new Set(unstamped);
|
|
201
239
|
for (const recipe of known) {
|
|
202
|
-
if (recipe.
|
|
240
|
+
if (declaredDocs(recipe).some((declared) => unstampedIds.has(declared.id)))
|
|
203
241
|
ids.add(recipe.id);
|
|
204
242
|
}
|
|
205
243
|
const rows = [...ids].sort(byCodeUnit).map((id) => {
|
|
206
|
-
const
|
|
244
|
+
const all = (stampedByRecipe.get(id) ?? []).sort((a, b) => byCodeUnit(a.doc.id, b.doc.id));
|
|
245
|
+
const stamped = all.filter((entry) => !entry.connector);
|
|
246
|
+
const stampedConnectors = all.filter((entry) => entry.connector);
|
|
207
247
|
const recipe = knownById.get(id);
|
|
208
248
|
const conventionIds = stamped.map(({ doc }) => doc.id);
|
|
209
|
-
const stampedIds = new Set(
|
|
249
|
+
const stampedIds = new Set(all.map(({ doc }) => doc.id));
|
|
210
250
|
const records = new Map();
|
|
211
|
-
for (const { stamp } of
|
|
251
|
+
for (const { stamp, connector } of all) {
|
|
212
252
|
const key = `${stamp.version}\u0000${stamp.source_digest}`;
|
|
213
253
|
const record = records.get(key) ?? { version: stamp.version, source_digest: stamp.source_digest, conventions: 0 };
|
|
214
|
-
|
|
254
|
+
if (connector)
|
|
255
|
+
record.connectors = (record.connectors ?? 0) + 1;
|
|
256
|
+
else
|
|
257
|
+
record.conventions += 1;
|
|
215
258
|
records.set(key, record);
|
|
216
259
|
}
|
|
217
260
|
const recordRows = [...records.values()].sort((a, b) => byCodeUnit(a.version, b.version) || byCodeUnit(a.source_digest, b.source_digest));
|
|
218
|
-
const declaredCounts = new Set(
|
|
261
|
+
const declaredCounts = new Set(all.map(({ stamp }) => stamp.of));
|
|
219
262
|
const of = declaredCounts.size === 1 ? [...declaredCounts][0] : recipe ? recipe.docs.length : null;
|
|
220
|
-
|
|
221
|
-
const
|
|
222
|
-
const
|
|
263
|
+
// A stamp without the key records no connectors; a disagreement among stamps is partial.
|
|
264
|
+
const connectorCounts = new Set(all.map(({ stamp }) => stamp.connectors));
|
|
265
|
+
const declaredConnectors = recipe && (recipe.connectors ?? []).length > 0 ? recipe.connectors.length : undefined;
|
|
266
|
+
const connectorsOf = connectorCounts.size === 1
|
|
267
|
+
? [...connectorCounts][0]
|
|
268
|
+
: connectorCounts.size === 0 ? declaredConnectors : declaredConnectors ?? null;
|
|
269
|
+
const carriesConnectors = stampedConnectors.length > 0 || connectorsOf !== undefined;
|
|
270
|
+
const diverged = all.filter(({ doc }) => conventionStampState(doc) === "diverged").map(({ doc }) => doc.id);
|
|
271
|
+
const unknownRules = all.filter(({ stamp }) => stamp.digest_rules !== DEFINITION_DIGEST_RULES).map(({ doc }) => doc.id);
|
|
272
|
+
const declaredIds = recipe ? declaredDocs(recipe).map((doc) => doc.id).sort(byCodeUnit) : [];
|
|
223
273
|
const missingIds = declaredIds.filter((declared) => !stampedIds.has(declared));
|
|
224
274
|
const presentWithoutStamp = missingIds.filter((declared) => present.has(declared));
|
|
225
275
|
let state;
|
|
226
|
-
if (
|
|
276
|
+
if (all.length === 0)
|
|
227
277
|
state = "unknown";
|
|
228
278
|
else if (recordRows.length > 1
|
|
229
279
|
|| declaredCounts.size > 1
|
|
280
|
+
|| connectorCounts.size > 1
|
|
230
281
|
|| stamped.length !== of
|
|
282
|
+
|| stampedConnectors.length !== (connectorsOf ?? 0)
|
|
231
283
|
|| presentWithoutStamp.length > 0
|
|
232
284
|
|| (recipe !== undefined && missingIds.length > 0))
|
|
233
285
|
state = "partial";
|
|
@@ -247,9 +299,17 @@ export function installedRecipes(conventions, known = []) {
|
|
|
247
299
|
of,
|
|
248
300
|
convention_ids: conventionIds,
|
|
249
301
|
};
|
|
302
|
+
if (carriesConnectors) {
|
|
303
|
+
row.connectors = stampedConnectors.length;
|
|
304
|
+
row.connectors_of = connectorsOf ?? null;
|
|
305
|
+
row.connector_ids = stampedConnectors.map(({ doc }) => doc.id);
|
|
306
|
+
}
|
|
250
307
|
if (state === "partial") {
|
|
251
308
|
row.records = recordRows;
|
|
252
|
-
const missing = recipe
|
|
309
|
+
const missing = recipe
|
|
310
|
+
? missingIds.length
|
|
311
|
+
: (of === null ? 0 : Math.max(0, of - stamped.length))
|
|
312
|
+
+ (typeof connectorsOf === "number" ? Math.max(0, connectorsOf - stampedConnectors.length) : 0);
|
|
253
313
|
if (missing > 0)
|
|
254
314
|
row.missing = missing;
|
|
255
315
|
if (recipe && missingIds.length > 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stamp.js","sourceRoot":"","sources":["../../src/recipe-lifecycle/stamp.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stamp.js","sourceRoot":"","sources":["../../src/recipe-lifecycle/stamp.ts"],"names":[],"mappings":"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"}
|
package/dist/recipes.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type Connector, type ConnectorErrorCode } from "./connectors.js";
|
|
1
2
|
import type { OkfDocument } from "./types.js";
|
|
2
3
|
import type { ValidationWarning } from "./validation.js";
|
|
3
4
|
/** One recipe file: a path relative to the recipe root (posix), with its UTF-8 text. */
|
|
@@ -19,6 +20,13 @@ export interface RecipeReference {
|
|
|
19
20
|
/** A `type: Reference` document installed under `references/`. */
|
|
20
21
|
doc: OkfDocument;
|
|
21
22
|
}
|
|
23
|
+
/** One Connector declaration carried by a recipe package: a definition, never an instance. */
|
|
24
|
+
export interface RecipeConnector {
|
|
25
|
+
/** The `type: Connector` document installed under `connectors/`. */
|
|
26
|
+
doc: OkfDocument;
|
|
27
|
+
/** The declaration as `parseConnectorDoc` read it. */
|
|
28
|
+
connector: Connector;
|
|
29
|
+
}
|
|
22
30
|
/** Parsed recipe definitions. Parsing does not install, authorize or execute these assets. */
|
|
23
31
|
export interface LoadedRecipe {
|
|
24
32
|
id: string;
|
|
@@ -35,6 +43,12 @@ export interface LoadedRecipe {
|
|
|
35
43
|
pages: RecipePage[];
|
|
36
44
|
/** Optional operating references installed with the definitions; never project instances. */
|
|
37
45
|
references: RecipeReference[];
|
|
46
|
+
/**
|
|
47
|
+
* Connector declarations the manifest's `connectors:` list carries, installed and evolved as
|
|
48
|
+
* definitions. Absent when the manifest declares none, so a recipe without connectors parses to
|
|
49
|
+
* the same value it always did.
|
|
50
|
+
*/
|
|
51
|
+
connectors?: RecipeConnector[];
|
|
38
52
|
/** Present only for packages opting into the strict portable definitions-only contract. */
|
|
39
53
|
contentPolicy?: "definitions-only";
|
|
40
54
|
/** The `type` values this recipe's conventions govern (derived at parse, for the receipt). */
|
|
@@ -47,11 +61,20 @@ export interface LoadedRecipe {
|
|
|
47
61
|
* with the target edition's storage field. Part of the recipe format, so every client reads it here.
|
|
48
62
|
*/
|
|
49
63
|
export declare const RECIPE_PROGRESS_STATUS_TOKEN = "{{superbee:progress_status}}";
|
|
50
|
-
export type RecipeErrorCode = "RECIPE_NOT_FOUND" | "RECIPE_MALFORMED" | "RECIPE_EMPTY" | "RECIPE_UNSAFE_PATH";
|
|
64
|
+
export type RecipeErrorCode = "RECIPE_NOT_FOUND" | "RECIPE_MALFORMED" | "RECIPE_EMPTY" | "RECIPE_UNSAFE_PATH" | "RECIPE_CONNECTOR_INVALID";
|
|
51
65
|
export interface RecipeError {
|
|
52
66
|
code: RecipeErrorCode;
|
|
53
67
|
message: string;
|
|
68
|
+
/** `RECIPE_CONNECTOR_INVALID`: the first refusal of the connector named, and how many it had. */
|
|
69
|
+
connector?: {
|
|
70
|
+
id: string;
|
|
71
|
+
code: ConnectorErrorCode;
|
|
72
|
+
path: string;
|
|
73
|
+
count: number;
|
|
74
|
+
};
|
|
54
75
|
}
|
|
76
|
+
/** The connectors a recipe carries; empty when its manifest declares none. */
|
|
77
|
+
export declare function recipeConnectors(recipe: Pick<LoadedRecipe, "connectors">): readonly RecipeConnector[];
|
|
55
78
|
export type LoadResult = {
|
|
56
79
|
ok: true;
|
|
57
80
|
recipe: LoadedRecipe;
|
package/dist/recipes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../src/recipes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../src/recipes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwD,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAIhI,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAYzD,wFAAwF;AACxF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,mEAAmE;AACnE,MAAM,WAAW,UAAU;IACzB,uHAAuH;IACvH,QAAQ,EAAE,WAAW,CAAC;IACtB,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,kFAAkF;AAClF,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,GAAG,EAAE,WAAW,CAAC;CAClB;AAED,8FAA8F;AAC9F,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,GAAG,EAAE,WAAW,CAAC;IACjB,sDAAsD;IACtD,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,8FAA8F;AAC9F,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,iGAAiG;IACjG,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,sFAAsF;IACtF,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,6FAA6F;IAC7F,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,2FAA2F;IAC3F,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,8FAA8F;IAC9F,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,+FAA+F;IAC/F,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED;;;GAGG;AACH,eAAO,MAAM,4BAA4B,iCAAiC,CAAC;AAE3E,MAAM,MAAM,eAAe,GACvB,kBAAkB,GAClB,kBAAkB,GAClB,cAAc,GACd,oBAAoB,GACpB,0BAA0B,CAAC;AAE/B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,iGAAiG;IACjG,SAAS,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,kBAAkB,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACnF;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,SAAS,eAAe,EAAE,CAErG;AAED,MAAM,MAAM,UAAU,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC;AAgRhG;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,UAAU,EAAE,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACpC,UAAU,CA2VZ"}
|
package/dist/recipes.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// The ONE pure recipe parse+validate+materialize pipeline. Sources only acquire RecipeFile[];
|
|
2
2
|
// everything downstream of that byte boundary is distribution-neutral and branches on content,
|
|
3
3
|
// never on whether the files came from built-in constants, a folder, or a future source adapter.
|
|
4
|
+
import { CONNECTOR_TYPE, CONNECTORS_PREFIX, parseConnectorDoc } from "./connectors.js";
|
|
4
5
|
import { parseMarkdown } from "./frontmatter.js";
|
|
5
|
-
import { parseConventionDoc, CONVENTIONS_PREFIX, CONVENTION_TYPE } from "./kinds.js";
|
|
6
|
+
import { buildKindRegistry, parseConventionDoc, CONVENTIONS_PREFIX, CONVENTION_TYPE } from "./kinds.js";
|
|
6
7
|
import { conceptIdFromPath, assertSafeConceptId, isReservedFile } from "./paths.js";
|
|
7
8
|
import { declaredAccessValue, isAnyEntryKey, isAnyRegistryId, isPageTypeName, PAGE_ENTRY_PREFIX, PAGE_REGISTRY_PREFIX, VIEW_ENTRY_PREFIX, VIEW_REGISTRY_PREFIX, } from "./page.js";
|
|
8
9
|
/**
|
|
@@ -10,6 +11,10 @@ import { declaredAccessValue, isAnyEntryKey, isAnyRegistryId, isPageTypeName, PA
|
|
|
10
11
|
* with the target edition's storage field. Part of the recipe format, so every client reads it here.
|
|
11
12
|
*/
|
|
12
13
|
export const RECIPE_PROGRESS_STATUS_TOKEN = "{{superbee:progress_status}}";
|
|
14
|
+
/** The connectors a recipe carries; empty when its manifest declares none. */
|
|
15
|
+
export function recipeConnectors(recipe) {
|
|
16
|
+
return recipe.connectors ?? [];
|
|
17
|
+
}
|
|
13
18
|
/** Reserved manifest keys are surfaced as warnings, not applied or silently ignored. */
|
|
14
19
|
const RESERVED_MANIFEST_KEYS = ["composes", "seeds", "requires"];
|
|
15
20
|
function nonEmptyString(v) {
|
|
@@ -93,6 +98,81 @@ function parseReferenceDeclarations(manifest, recipeId, source) {
|
|
|
93
98
|
}
|
|
94
99
|
return { ok: true, references };
|
|
95
100
|
}
|
|
101
|
+
function isSafeRecipeConnectorPath(value) {
|
|
102
|
+
if (!value.startsWith(CONNECTORS_PREFIX) || !value.endsWith(".md") || /[\\%?#]/.test(value))
|
|
103
|
+
return false;
|
|
104
|
+
const segments = value.slice(CONNECTORS_PREFIX.length).split("/");
|
|
105
|
+
return segments.every((segment) => !segment.startsWith(".") && REFERENCE_SEGMENT.test(segment));
|
|
106
|
+
}
|
|
107
|
+
/** The manifest's `connectors:` list, under the grammar `references:` uses. */
|
|
108
|
+
function parseConnectorDeclarations(manifest, recipeId, source) {
|
|
109
|
+
if (manifest.connectors === undefined)
|
|
110
|
+
return { ok: true, connectors: [] };
|
|
111
|
+
if (manifest.content_policy !== "definitions-only") {
|
|
112
|
+
return {
|
|
113
|
+
ok: false,
|
|
114
|
+
error: {
|
|
115
|
+
code: "RECIPE_MALFORMED",
|
|
116
|
+
message: `recipe '${recipeId}' at '${source}' declares connectors but does not declare ` +
|
|
117
|
+
"'content_policy: definitions-only', which is required for portable assets",
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
if (!Array.isArray(manifest.connectors)) {
|
|
122
|
+
return {
|
|
123
|
+
ok: false,
|
|
124
|
+
error: { code: "RECIPE_MALFORMED", message: `recipe '${recipeId}': 'connectors' must be a list` },
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const connectors = [];
|
|
128
|
+
const targets = new Set();
|
|
129
|
+
for (const [index, value] of manifest.connectors.entries()) {
|
|
130
|
+
if (typeof value !== "string" || value === "") {
|
|
131
|
+
return {
|
|
132
|
+
ok: false,
|
|
133
|
+
error: {
|
|
134
|
+
code: "RECIPE_MALFORMED",
|
|
135
|
+
message: `recipe '${recipeId}': connectors[${index}] must be a non-empty path`,
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
if (!isSafeRecipeConnectorPath(value)) {
|
|
140
|
+
return {
|
|
141
|
+
ok: false,
|
|
142
|
+
error: {
|
|
143
|
+
code: "RECIPE_UNSAFE_PATH",
|
|
144
|
+
message: `recipe '${recipeId}': Connector '${value}' must be a .md file under '${CONNECTORS_PREFIX}'`,
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
const id = conceptIdFromPath(value);
|
|
149
|
+
try {
|
|
150
|
+
assertSafeConceptId(id);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return {
|
|
154
|
+
ok: false,
|
|
155
|
+
error: { code: "RECIPE_UNSAFE_PATH", message: `recipe '${recipeId}' contains an unsafe Connector path` },
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
if (isReservedFile(value)) {
|
|
159
|
+
return {
|
|
160
|
+
ok: false,
|
|
161
|
+
error: { code: "RECIPE_UNSAFE_PATH", message: `recipe '${recipeId}' contains a reserved filename: '${value}'` },
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
const target = id.toLowerCase();
|
|
165
|
+
if (targets.has(target)) {
|
|
166
|
+
return {
|
|
167
|
+
ok: false,
|
|
168
|
+
error: { code: "RECIPE_MALFORMED", message: `recipe '${recipeId}' declares duplicate Connector '${value}'` },
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
targets.add(target);
|
|
172
|
+
connectors.push({ path: value, id });
|
|
173
|
+
}
|
|
174
|
+
return { ok: true, connectors };
|
|
175
|
+
}
|
|
96
176
|
function parsePageDeclarations(manifest, recipeId, source) {
|
|
97
177
|
if (manifest.pages === undefined)
|
|
98
178
|
return { ok: true, pages: [] };
|
|
@@ -233,8 +313,12 @@ export function parseRecipeFiles(files, source, options = {}) {
|
|
|
233
313
|
const referenceDeclarations = parseReferenceDeclarations(manifest, id, source);
|
|
234
314
|
if (!referenceDeclarations.ok)
|
|
235
315
|
return referenceDeclarations;
|
|
316
|
+
const connectorDeclarations = parseConnectorDeclarations(manifest, id, source);
|
|
317
|
+
if (!connectorDeclarations.ok)
|
|
318
|
+
return connectorDeclarations;
|
|
236
319
|
const declaredPageFiles = new Set(pageDeclarations.pages.flatMap((page) => [page.registry, page.entry]));
|
|
237
320
|
const declaredReferenceFiles = new Set(referenceDeclarations.references.map((reference) => reference.path));
|
|
321
|
+
const declaredConnectorFiles = new Set(connectorDeclarations.connectors.map((connector) => connector.path));
|
|
238
322
|
const warnings = [];
|
|
239
323
|
for (const key of RESERVED_MANIFEST_KEYS) {
|
|
240
324
|
if (key in manifest) {
|
|
@@ -257,6 +341,8 @@ export function parseRecipeFiles(files, source, options = {}) {
|
|
|
257
341
|
continue;
|
|
258
342
|
if (declaredReferenceFiles.has(file.path))
|
|
259
343
|
continue;
|
|
344
|
+
if (declaredConnectorFiles.has(file.path))
|
|
345
|
+
continue;
|
|
260
346
|
if (contentPolicy === "definitions-only") {
|
|
261
347
|
return {
|
|
262
348
|
ok: false,
|
|
@@ -324,6 +410,16 @@ export function parseRecipeFiles(files, source, options = {}) {
|
|
|
324
410
|
});
|
|
325
411
|
continue;
|
|
326
412
|
}
|
|
413
|
+
// A Connector is a document type core's connector parser owns, never a recipe-declared Kind.
|
|
414
|
+
if (governs === CONNECTOR_TYPE) {
|
|
415
|
+
return {
|
|
416
|
+
ok: false,
|
|
417
|
+
error: {
|
|
418
|
+
code: "RECIPE_MALFORMED",
|
|
419
|
+
message: `recipe '${id}': '${doc.id}' governs '${CONNECTOR_TYPE}'; declare connectors in the manifest's 'connectors:' list instead`,
|
|
420
|
+
},
|
|
421
|
+
};
|
|
422
|
+
}
|
|
327
423
|
if (contentPolicy === "definitions-only") {
|
|
328
424
|
const parsed = parseConventionDoc(doc);
|
|
329
425
|
if (!parsed.ok || parsed.warnings.length > 0) {
|
|
@@ -448,6 +544,39 @@ export function parseRecipeFiles(files, source, options = {}) {
|
|
|
448
544
|
}
|
|
449
545
|
references.push({ doc: { id: declaration.id, frontmatter, body } });
|
|
450
546
|
}
|
|
547
|
+
const connectors = [];
|
|
548
|
+
// The recipe's own Kinds check the sources that target them now; a source whose Kind another
|
|
549
|
+
// recipe declares is checked against the bundle when the recipe is installed or evolved.
|
|
550
|
+
const ownKinds = connectorDeclarations.connectors.length > 0 ? buildKindRegistry(docs, [], options) : undefined;
|
|
551
|
+
for (const declaration of connectorDeclarations.connectors) {
|
|
552
|
+
const connectorFile = files.find((file) => file.path === declaration.path);
|
|
553
|
+
if (!connectorFile) {
|
|
554
|
+
return {
|
|
555
|
+
ok: false,
|
|
556
|
+
error: {
|
|
557
|
+
code: "RECIPE_MALFORMED",
|
|
558
|
+
message: `recipe '${id}' is missing declared Connector file '${declaration.path}'`,
|
|
559
|
+
},
|
|
560
|
+
};
|
|
561
|
+
}
|
|
562
|
+
const { frontmatter, body } = parseMarkdown(connectorFile.bytes, undefined, options);
|
|
563
|
+
const doc = { id: declaration.id, frontmatter, body };
|
|
564
|
+
const parsed = parseConnectorDoc(doc, { kinds: ownKinds });
|
|
565
|
+
if (!parsed.ok) {
|
|
566
|
+
const first = parsed.errors[0];
|
|
567
|
+
const more = parsed.errors.length - 1;
|
|
568
|
+
return {
|
|
569
|
+
ok: false,
|
|
570
|
+
error: {
|
|
571
|
+
code: "RECIPE_CONNECTOR_INVALID",
|
|
572
|
+
message: `recipe '${id}': invalid Connector '${declaration.path}': ${first.code} at '${first.path || "/"}': ${first.message}` +
|
|
573
|
+
(more > 0 ? ` (and ${more} more)` : ""),
|
|
574
|
+
connector: { id: declaration.id, code: first.code, path: first.path, count: parsed.errors.length },
|
|
575
|
+
},
|
|
576
|
+
};
|
|
577
|
+
}
|
|
578
|
+
connectors.push({ doc, connector: parsed.connector });
|
|
579
|
+
}
|
|
451
580
|
const recipe = {
|
|
452
581
|
id,
|
|
453
582
|
title,
|
|
@@ -461,6 +590,8 @@ export function parseRecipeFiles(files, source, options = {}) {
|
|
|
461
590
|
governs: governsList,
|
|
462
591
|
warnings,
|
|
463
592
|
};
|
|
593
|
+
if (connectorDeclarations.connectors.length > 0)
|
|
594
|
+
recipe.connectors = connectors;
|
|
464
595
|
if (contentPolicy === "definitions-only")
|
|
465
596
|
recipe.contentPolicy = contentPolicy;
|
|
466
597
|
return { ok: true, recipe };
|