@refrakt-md/runes 0.39.0 → 0.41.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 (68) hide show
  1. package/dist/attribute-presets.d.ts +3 -2
  2. package/dist/attribute-presets.d.ts.map +1 -1
  3. package/dist/attribute-presets.js +2 -1
  4. package/dist/attribute-presets.js.map +1 -1
  5. package/dist/composed-rune.d.ts +61 -0
  6. package/dist/composed-rune.d.ts.map +1 -0
  7. package/dist/composed-rune.js +158 -0
  8. package/dist/composed-rune.js.map +1 -0
  9. package/dist/index.d.ts +12 -2
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +15 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/lib/composition-errors.d.ts +80 -0
  14. package/dist/lib/composition-errors.d.ts.map +1 -0
  15. package/dist/lib/composition-errors.js +82 -0
  16. package/dist/lib/composition-errors.js.map +1 -0
  17. package/dist/lib/composition.d.ts +167 -0
  18. package/dist/lib/composition.d.ts.map +1 -0
  19. package/dist/lib/composition.js +1182 -0
  20. package/dist/lib/composition.js.map +1 -0
  21. package/dist/lib/index.d.ts +30 -5
  22. package/dist/lib/index.d.ts.map +1 -1
  23. package/dist/lib/index.js +107 -16
  24. package/dist/lib/index.js.map +1 -1
  25. package/dist/lib/preprocess.d.ts +3 -2
  26. package/dist/lib/preprocess.d.ts.map +1 -1
  27. package/dist/lib/preprocess.js +2 -1
  28. package/dist/lib/preprocess.js.map +1 -1
  29. package/dist/lib/registers.d.ts +2 -2
  30. package/dist/lib/registers.d.ts.map +1 -1
  31. package/dist/lib/registers.js +2 -1
  32. package/dist/lib/registers.js.map +1 -1
  33. package/dist/lib/resolver.d.ts +32 -4
  34. package/dist/lib/resolver.d.ts.map +1 -1
  35. package/dist/lib/resolver.js +87 -33
  36. package/dist/lib/resolver.js.map +1 -1
  37. package/dist/lib/schema-side-table.d.ts +26 -0
  38. package/dist/lib/schema-side-table.d.ts.map +1 -0
  39. package/dist/lib/schema-side-table.js +34 -0
  40. package/dist/lib/schema-side-table.js.map +1 -0
  41. package/dist/lib/schema-table.d.ts +16 -1
  42. package/dist/lib/schema-table.d.ts.map +1 -1
  43. package/dist/lib/schema-table.js +101 -3
  44. package/dist/lib/schema-table.js.map +1 -1
  45. package/dist/lib/slot-markers.d.ts +38 -0
  46. package/dist/lib/slot-markers.d.ts.map +1 -0
  47. package/dist/lib/slot-markers.js +105 -0
  48. package/dist/lib/slot-markers.js.map +1 -0
  49. package/dist/plugins.d.ts +31 -9
  50. package/dist/plugins.d.ts.map +1 -1
  51. package/dist/plugins.js +242 -64
  52. package/dist/plugins.js.map +1 -1
  53. package/dist/project-runes.d.ts +53 -0
  54. package/dist/project-runes.d.ts.map +1 -0
  55. package/dist/project-runes.js +85 -0
  56. package/dist/project-runes.js.map +1 -0
  57. package/dist/registers-pipeline.d.ts +1 -0
  58. package/dist/registers-pipeline.d.ts.map +1 -1
  59. package/dist/registers-pipeline.js +7 -1
  60. package/dist/registers-pipeline.js.map +1 -1
  61. package/dist/rune-dir.d.ts +52 -0
  62. package/dist/rune-dir.d.ts.map +1 -0
  63. package/dist/rune-dir.js +90 -0
  64. package/dist/rune-dir.js.map +1 -0
  65. package/dist/tags/sandbox.d.ts.map +1 -1
  66. package/dist/tags/sandbox.js +15 -3
  67. package/dist/tags/sandbox.js.map +1 -1
  68. package/package.json +3 -3
package/dist/plugins.js CHANGED
@@ -1,5 +1,11 @@
1
1
  import { selectLocaleBundle } from '@refrakt-md/transform';
2
2
  import { defineRune, runeTagMap } from './rune.js';
3
+ import { checkComposedCatalog, composedPluginRune, coreCatalogRunes } from './composed-rune.js';
4
+ import { PROJECT_RUNES, readRuneDefinitions, withRuneDefinitions } from './rune-dir.js';
5
+ import { CompositionError } from './lib/composition-errors.js';
6
+ import { compositionFor, composedTypeName } from './lib/composition.js';
7
+ /** The resolution layer a rune came from: the project's own directory, or a plugin. */
8
+ const sourceOf = (pkg) => pkg.npmName === PROJECT_RUNES ? 'project' : 'plugin';
3
9
  /** Reserved namespace names that cannot be used by user config or plugins. */
4
10
  const RESERVED_FILE_ROOT_NAMESPACES = new Set(['site']);
5
11
  /** Validate that a file-root namespace name is allowed. Throws on reserved
@@ -18,64 +24,150 @@ export function assertFileRootNamespaceAllowed(namespace, source) {
18
24
  * Load a plugin by npm package name.
19
25
  *
20
26
  * Dynamically imports the package and extracts the Plugin export.
21
- * Creates Rune instances from each plugin entry using defineRune().
27
+ * Creates Rune instances from each plugin entry using defineRune(). A plugin
28
+ * declaring a `runeDir` (SPEC-153 D2) has every `<rune>.md` in it loaded as a
29
+ * composed rune entry first, so from here on it is indistinguishable from an
30
+ * entry written in `Plugin.runes` (D1).
22
31
  */
23
- export async function loadPlugin(npmPackageName) {
32
+ export async function loadPlugin(npmPackageName, options = {}) {
33
+ const base = options.from ?? import.meta.url;
24
34
  let mod;
25
35
  try {
26
- mod = await import(/* @vite-ignore */ npmPackageName);
36
+ if (options.from) {
37
+ const { createRequire } = await import('node:module');
38
+ const { pathToFileURL } = await import('node:url');
39
+ const entry = createRequire(base).resolve(npmPackageName);
40
+ mod = await import(/* @vite-ignore */ pathToFileURL(entry).href);
41
+ }
42
+ else {
43
+ mod = await import(/* @vite-ignore */ npmPackageName);
44
+ }
27
45
  }
28
46
  catch (err) {
29
47
  throw new Error(`Failed to load plugin "${npmPackageName}": ${err.message}\n` +
30
48
  `Make sure the package is installed: npm install ${npmPackageName}`);
31
49
  }
32
- const pkg = findPluginExport(mod, npmPackageName);
50
+ let pkg = findPluginExport(mod, npmPackageName);
51
+ if (pkg.runeDir !== undefined)
52
+ pkg = await withRuneDir(pkg, npmPackageName, base);
33
53
  validatePlugin(pkg, npmPackageName);
34
54
  const runes = {};
35
55
  const fixtures = {};
36
56
  for (const [runeName, entry] of Object.entries(pkg.runes)) {
37
- runes[runeName] = defineRune({
38
- name: runeName,
39
- schema: entry.transform,
40
- description: entry.description ?? `Plugin rune from ${pkg.displayName ?? pkg.name}`,
41
- aliases: entry.aliases,
42
- seoType: entry.seoType,
43
- authoringHints: entry.authoringHints,
44
- });
45
- if (entry.fixture) {
57
+ runes[runeName] = pluginRune(runeName, entry, pkg);
58
+ if (entry.fixture)
46
59
  fixtures[runeName] = entry.fixture;
47
- }
48
60
  }
49
- const fileFixtures = await discoverPluginFixtures(npmPackageName);
61
+ const fileFixtures = await discoverPluginFixtures(npmPackageName, base);
50
62
  for (const [runeName, content] of Object.entries(fileFixtures)) {
51
63
  if (!fixtures[runeName]) {
52
64
  fixtures[runeName] = content;
53
65
  }
54
66
  }
55
- const fileRoots = await resolvePluginFileRoots(pkg, npmPackageName);
67
+ const fileRoots = await resolvePluginFileRoots(pkg, npmPackageName, base);
56
68
  return { pkg, npmName: npmPackageName, runes, fixtures, fileRoots };
57
69
  }
70
+ /**
71
+ * The `Rune` one plugin entry defines. A composed entry (SPEC-153 D11) gets its
72
+ * schema and its block-less config from the definition; the entry's own
73
+ * fields, where set, win over the definition's.
74
+ */
75
+ export function pluginRune(runeName, entry, pkg) {
76
+ if (entry.template !== undefined) {
77
+ const composed = composedPluginRune(runeName, entry);
78
+ return defineRune({
79
+ ...composed.rune,
80
+ name: runeName,
81
+ schema: composed.rune.schema,
82
+ description: entry.description ?? composed.rune.description,
83
+ aliases: entry.aliases ?? composed.rune.aliases,
84
+ seoType: entry.seoType,
85
+ authoringHints: entry.authoringHints,
86
+ });
87
+ }
88
+ return defineRune({
89
+ name: runeName,
90
+ schema: entry.transform,
91
+ description: entry.description ?? `Plugin rune from ${pkg.displayName ?? pkg.name}`,
92
+ aliases: entry.aliases,
93
+ seoType: entry.seoType,
94
+ authoringHints: entry.authoringHints,
95
+ });
96
+ }
97
+ /**
98
+ * The directory a plugin package sits in, through `<pkg>/package.json`. Throws
99
+ * naming what needed it and the cause: a package that declares files it
100
+ * ships cannot be allowed to lose them quietly (SPEC-153 D3).
101
+ */
102
+ async function resolvePackageDir(npmPackageName, base, purpose) {
103
+ const { createRequire } = await import('node:module');
104
+ const { dirname } = await import('node:path');
105
+ try {
106
+ return dirname(createRequire(base).resolve(`${npmPackageName}/package.json`));
107
+ }
108
+ catch (err) {
109
+ const code = err.code;
110
+ const fix = code === 'ERR_PACKAGE_PATH_NOT_EXPORTED'
111
+ ? ` Its \`exports\` map leaves out \`./package.json\`; add \`"./package.json": "./package.json"\` (SPEC-153 D6).`
112
+ : '';
113
+ throw new CompositionError('package-unresolvable', `Plugin "${npmPackageName}" declares ${purpose} but its package directory could not be located: ${err.message}${fix}`);
114
+ }
115
+ }
116
+ /**
117
+ * SPEC-153 D2/D3 — the plugin with its rune directory read in: every
118
+ * `<rune>.md` becomes a `template` entry in a copy of `Plugin.runes`. The
119
+ * directory is as available as the plugin's JavaScript, so any failure here is
120
+ * a packaging bug and throws with the resolved path and the cause; it never
121
+ * yields fewer runes.
122
+ */
123
+ async function withRuneDir(pkg, npmPackageName, base) {
124
+ const { readdirSync, readFileSync, statSync } = await import('node:fs');
125
+ const { join, relative, resolve, isAbsolute } = await import('node:path');
126
+ const declared = pkg.runeDir;
127
+ if (typeof declared !== 'string' || declared.length === 0) {
128
+ throw new CompositionError('rune-dir-invalid', `Plugin "${npmPackageName}" has an invalid \`runeDir\`. Expected a non-empty path relative to the plugin package directory.`);
129
+ }
130
+ const pkgDir = await resolvePackageDir(npmPackageName, base, `runeDir "${declared}"`);
131
+ const dir = resolve(pkgDir, declared);
132
+ const rel = relative(pkgDir, dir);
133
+ if (rel.startsWith('..') || isAbsolute(rel)) {
134
+ throw new CompositionError('rune-dir-invalid', `Plugin "${npmPackageName}" runeDir "${declared}" resolves to ${dir}, outside its package directory ${pkgDir}. A rune directory ships inside the package.`);
135
+ }
136
+ const where = `Plugin "${npmPackageName}" runeDir ${dir}`;
137
+ const reader = {
138
+ list() {
139
+ try {
140
+ return readdirSync(dir).filter((f) => statSync(join(dir, f)).isFile());
141
+ }
142
+ catch (err) {
143
+ throw new CompositionError('rune-dir-unreadable', `${where} could not be read: ${err.message}. Check that the directory exists and is listed in the package's \`files\` (SPEC-153 D3).`);
144
+ }
145
+ },
146
+ read(file) {
147
+ try {
148
+ return readFileSync(join(dir, file), 'utf-8');
149
+ }
150
+ catch (err) {
151
+ throw new CompositionError('file-unreadable', `${where}: "${file}" could not be read: ${err.message}`);
152
+ }
153
+ },
154
+ };
155
+ const files = readRuneDefinitions(reader, '', where);
156
+ return withRuneDefinitions(pkg, files, where, (file) => join(dir, file.path));
157
+ }
58
158
  /** Resolve a plugin's declared `fileRoots` to absolute on-disk paths.
59
159
  *
60
160
  * Paths are interpreted relative to the plugin package's own directory
61
161
  * (the dir containing the plugin's `package.json`). Throws if the package
62
- * can't be located on disk (workspace-link cases where `require.resolve`
63
- * fails) — fileRoots that can't be reached is a misconfig worth surfacing,
64
- * not silently dropping like file fixtures. */
65
- async function resolvePluginFileRoots(pkg, npmPackageName) {
162
+ * can't be located on disk (a missing install, or an `exports` map without
163
+ * `./package.json`) — fileRoots that can't be reached is a misconfig worth
164
+ * surfacing, not silently dropping like file fixtures. */
165
+ async function resolvePluginFileRoots(pkg, npmPackageName, base = import.meta.url) {
66
166
  const declared = pkg.fileRoots;
67
167
  if (!declared || Object.keys(declared).length === 0)
68
168
  return {};
69
- const { createRequire } = await import('node:module');
70
- const { dirname, resolve } = await import('node:path');
71
- let pkgDir;
72
- try {
73
- const require = createRequire(import.meta.url);
74
- pkgDir = dirname(require.resolve(`${npmPackageName}/package.json`));
75
- }
76
- catch (err) {
77
- throw new Error(`Plugin "${npmPackageName}" declares fileRoots but its package directory could not be located: ${err.message}`);
78
- }
169
+ const { resolve } = await import('node:path');
170
+ const pkgDir = await resolvePackageDir(npmPackageName, base, 'fileRoots');
79
171
  const resolved = {};
80
172
  for (const [namespace, relativePath] of Object.entries(declared)) {
81
173
  assertFileRootNamespaceAllowed(namespace, `plugin "${npmPackageName}"`);
@@ -95,7 +187,12 @@ async function resolvePluginFileRoots(pkg, npmPackageName) {
95
187
  * 3. `prefer` value `"__core__"` forces core to win for that rune
96
188
  * 4. Two plugins same name, no core: resolved by `prefer`, or throws
97
189
  */
98
- export function mergePlugins(loaded, coreRuneNames, prefer) {
190
+ export function mergePlugins(plugins, coreRuneNames, prefer, project) {
191
+ // SPEC-153 D8 — the project layer: core < plugin < project, core names
192
+ // never shadowable, a plugin's only through `runes.prefer`.
193
+ if (project)
194
+ checkProjectPrecedence(project, plugins, coreRuneNames, prefer);
195
+ const loaded = project ? [...plugins, project] : plugins;
99
196
  const ownership = new Map();
100
197
  for (const loadedPkg of loaded) {
101
198
  for (const [name, rune] of Object.entries(loadedPkg.runes)) {
@@ -117,7 +214,7 @@ export function mergePlugins(loaded, coreRuneNames, prefer) {
117
214
  runes[name] = c.rune;
118
215
  provenance[name] = {
119
216
  qualifiedId: `${c.pkg.pkg.name}:${name}`,
120
- source: 'plugin',
217
+ source: sourceOf(c.pkg),
121
218
  pluginName: c.pkg.pkg.name,
122
219
  origin: c.pkg.npmName,
123
220
  };
@@ -130,7 +227,7 @@ export function mergePlugins(loaded, coreRuneNames, prefer) {
130
227
  runes[name] = match.rune;
131
228
  provenance[name] = {
132
229
  qualifiedId: `${match.pkg.pkg.name}:${name}`,
133
- source: 'plugin',
230
+ source: sourceOf(match.pkg),
134
231
  pluginName: match.pkg.pkg.name,
135
232
  origin: match.pkg.npmName,
136
233
  };
@@ -153,7 +250,7 @@ export function mergePlugins(loaded, coreRuneNames, prefer) {
153
250
  runes[name] = c.rune;
154
251
  provenance[name] = {
155
252
  qualifiedId: `${c.pkg.pkg.name}:${name}`,
156
- source: 'plugin',
253
+ source: sourceOf(c.pkg),
157
254
  pluginName: c.pkg.pkg.name,
158
255
  origin: c.pkg.npmName,
159
256
  };
@@ -166,7 +263,7 @@ export function mergePlugins(loaded, coreRuneNames, prefer) {
166
263
  runes[name] = match.rune;
167
264
  provenance[name] = {
168
265
  qualifiedId: `${match.pkg.pkg.name}:${name}`,
169
- source: 'plugin',
266
+ source: sourceOf(match.pkg),
170
267
  pluginName: match.pkg.pkg.name,
171
268
  origin: match.pkg.npmName,
172
269
  };
@@ -198,6 +295,13 @@ export function mergePlugins(loaded, coreRuneNames, prefer) {
198
295
  themeRunes[key] = value;
199
296
  }
200
297
  }
298
+ // SPEC-145 D2a — a composed rune's config is generated from its
299
+ // definition, never hand-written beside it.
300
+ for (const rune of Object.values(loadedPkg.runes)) {
301
+ const info = compositionFor(rune.schema);
302
+ if (info?.config && info.typeName)
303
+ themeRunes[info.typeName] = info.config;
304
+ }
201
305
  if (loadedPkg.pkg.theme?.icons) {
202
306
  for (const [group, icons] of Object.entries(loadedPkg.pkg.theme.icons)) {
203
307
  themeIcons[group] = { ...themeIcons[group], ...icons };
@@ -209,6 +313,10 @@ export function mergePlugins(loaded, coreRuneNames, prefer) {
209
313
  }
210
314
  }
211
315
  }
316
+ // SPEC-145 — the composition checks that need every rune: cycles (by name),
317
+ // a composed type placed over a peer type (D9), a placed rune missing its
318
+ // required parent (D12). Here, at assembly, rather than at render.
319
+ checkComposedCatalog(runes, themeRunes);
212
320
  const extensions = {};
213
321
  for (const loadedPkg of loaded) {
214
322
  if (loadedPkg.pkg.extends) {
@@ -276,6 +384,48 @@ export function mergePlugins(loaded, coreRuneNames, prefer) {
276
384
  translations,
277
385
  };
278
386
  }
387
+ /**
388
+ * SPEC-153 D8 — a project rune may not take a core rune's name or alias: a
389
+ * `{% card %}` that means something local breaks every snippet, doc page and
390
+ * composition built on the core one. It may take a plugin rune's name only
391
+ * where `runes.prefer` says which wins (`"__project__"` for the project's).
392
+ */
393
+ function checkProjectPrecedence(project, plugins, coreRuneNames, prefer) {
394
+ const coreOwner = new Map();
395
+ for (const name of coreRuneNames)
396
+ coreOwner.set(name, name);
397
+ for (const [name, rune] of Object.entries(coreCatalogRunes())) {
398
+ if (!coreRuneNames.has(name))
399
+ continue;
400
+ for (const alias of rune.aliases)
401
+ if (!coreOwner.has(alias))
402
+ coreOwner.set(alias, name);
403
+ }
404
+ const pluginOwners = new Map();
405
+ for (const p of plugins) {
406
+ for (const [name, rune] of Object.entries(p.runes)) {
407
+ for (const n of [name, ...rune.aliases]) {
408
+ pluginOwners.set(n, [...(pluginOwners.get(n) ?? []), p.npmName]);
409
+ }
410
+ }
411
+ }
412
+ for (const [name, rune] of Object.entries(project.runes)) {
413
+ const file = `${name}.md`;
414
+ for (const n of [name, ...rune.aliases]) {
415
+ const as = n === name ? '' : ` (through its alias "${n}")`;
416
+ const core = coreOwner.get(n);
417
+ if (core) {
418
+ throw new CompositionError('project-core-name', `Project rune "${name}" (${file})${as} takes the name of core rune "${core}". A core rune's name cannot be shadowed: every snippet, page and composition that uses "${core}" would change meaning (SPEC-153 D8). Rename the definition.`);
419
+ }
420
+ const owners = pluginOwners.get(n);
421
+ if (owners && !prefer?.[n]) {
422
+ throw new CompositionError('project-plugin-name', `Project rune "${name}" (${file})${as} and the rune "${n}" from ${owners.join(', ')} share a name. Say which wins in refrakt.config.json:\n` +
423
+ ` "runes": { "prefer": { "${n}": "${PROJECT_RUNES}" } }\n` +
424
+ `or rename the definition (SPEC-153 D8).`);
425
+ }
426
+ }
427
+ }
428
+ }
279
429
  /**
280
430
  * SPEC-035 — select the plugin translation dictionary for a locale, applying
281
431
  * the Decision D5 region-strip fallback (`de-AT` → `de`). Returns the merged
@@ -325,7 +475,13 @@ export function applyAliases(runes, tags, aliases, provenance) {
325
475
  export async function loadLocalRunes(localConfig, projectRoot) {
326
476
  const runes = {};
327
477
  const { resolve } = await import('node:path');
478
+ /** SPEC-153 D7 — `runes.local` takes a JS module for unpublished plugin
479
+ * development; a composed rune definition has its own home. */
480
+ const notADefinition = (name, modulePath, what) => new CompositionError('local-definition', `Local rune "${name}" at "${modulePath}" is ${what}. \`runes.local\` takes a JavaScript module exporting a rune with a \`transform\`, for developing a plugin before publishing it (SPEC-153 D7). Put a composed rune definition in the project's rune directory instead: move it to \`runes/${name}.md\` (or the directory \`runes.dir\` names) and remove this \`runes.local\` entry.`);
328
481
  for (const [name, modulePath] of Object.entries(localConfig)) {
482
+ if (/\.(md|markdoc|mdoc)$/i.test(modulePath)) {
483
+ throw notADefinition(name, modulePath, 'a composed rune definition, not a module');
484
+ }
329
485
  const absPath = resolve(projectRoot, modulePath);
330
486
  let mod;
331
487
  try {
@@ -335,6 +491,9 @@ export async function loadLocalRunes(localConfig, projectRoot) {
335
491
  throw new Error(`Failed to load local rune "${name}" from "${modulePath}": ${err.message}`);
336
492
  }
337
493
  const entry = (mod.default ?? mod);
494
+ if (entry.template !== undefined) {
495
+ throw notADefinition(name, modulePath, 'a module exporting a composition `template`');
496
+ }
338
497
  if (!entry.transform || typeof entry.transform !== 'object') {
339
498
  throw new Error(`Local rune "${name}" at "${modulePath}" must export a transform (Markdoc Schema).`);
340
499
  }
@@ -362,35 +521,37 @@ export async function loadLocalRunes(localConfig, projectRoot) {
362
521
  * parsed into a {@link ParsedFixture} (frontmatter validated, body stripped).
363
522
  *
364
523
  * Returns an empty array when the package isn't resolvable or has no fixtures/
365
- * directory. A fixture whose frontmatter fails schema validation throws from
366
- * `parseFixture` — callers that want resilience can wrap individual files; the
367
- * CI corpus check (WORK-414) relies on the throw to fail loudly.
524
+ * directory. Only the resolution is forgiven: a fixture whose frontmatter fails
525
+ * schema validation throws from `parseFixture`, and the CI corpus check
526
+ * (WORK-414) relies on the throw to fail loudly.
368
527
  */
369
- export async function discoverPluginFixtureManifest(npmPackageName) {
528
+ export async function discoverPluginFixtureManifest(npmPackageName, base = import.meta.url) {
370
529
  const manifest = [];
530
+ const { createRequire } = await import('node:module');
531
+ const { existsSync, readFileSync, readdirSync } = await import('node:fs');
532
+ const { dirname, join } = await import('node:path');
533
+ const { parseFixture } = await import('./fixtures.js');
534
+ let pkgDir;
371
535
  try {
372
- const { createRequire } = await import('node:module');
373
- const { existsSync, readFileSync, readdirSync } = await import('node:fs');
374
- const { dirname, join } = await import('node:path');
375
- const { parseFixture } = await import('./fixtures.js');
376
- const require = createRequire(import.meta.url);
377
- const pkgJsonPath = require.resolve(`${npmPackageName}/package.json`);
378
- const pkgDir = dirname(pkgJsonPath);
379
- const fixturesDir = join(pkgDir, 'fixtures');
380
- if (!existsSync(fixturesDir)) {
381
- return manifest;
382
- }
383
- for (const file of readdirSync(fixturesDir).sort()) {
384
- if (!file.endsWith('.md'))
385
- continue;
386
- const raw = readFileSync(join(fixturesDir, file), 'utf-8');
387
- if (!raw.trim())
388
- continue;
389
- manifest.push(parseFixture(raw, file));
390
- }
536
+ pkgDir = dirname(createRequire(base).resolve(`${npmPackageName}/package.json`));
391
537
  }
392
538
  catch {
393
- // Plugin not resolvable via require (e.g., workspace link) — skip file fixtures
539
+ // `<pkg>/package.json` did not resolve — the package is not installed, or it declares an
540
+ // `exports` map without a `./package.json` entry (ERR_PACKAGE_PATH_NOT_EXPORTED). A
541
+ // workspace link resolves fine. Skip file fixtures; a `runeDir`, which cannot be
542
+ // skipped, reports the same failure as an error (SPEC-153 D3).
543
+ return manifest;
544
+ }
545
+ const fixturesDir = join(pkgDir, 'fixtures');
546
+ if (!existsSync(fixturesDir))
547
+ return manifest;
548
+ for (const file of readdirSync(fixturesDir).sort()) {
549
+ if (!file.endsWith('.md'))
550
+ continue;
551
+ const raw = readFileSync(join(fixturesDir, file), 'utf-8');
552
+ if (!raw.trim())
553
+ continue;
554
+ manifest.push(parseFixture(raw, file));
394
555
  }
395
556
  return manifest;
396
557
  }
@@ -401,9 +562,9 @@ export async function discoverPluginFixtureManifest(npmPackageName) {
401
562
  * When a rune ships multiple scenarios, the `canonical` scenario wins (falling
402
563
  * back to the first parsed). Backward-compatible with bare `<rune>.md` files.
403
564
  */
404
- export async function discoverPluginFixtures(npmPackageName) {
565
+ export async function discoverPluginFixtures(npmPackageName, base = import.meta.url) {
405
566
  const fixtures = {};
406
- for (const fx of await discoverPluginFixtureManifest(npmPackageName)) {
567
+ for (const fx of await discoverPluginFixtureManifest(npmPackageName, base)) {
407
568
  if (!fx.body)
408
569
  continue;
409
570
  // Prefer the canonical scenario; otherwise take the first one we see.
@@ -436,8 +597,9 @@ function isPlugin(value) {
436
597
  typeof obj.runes === 'object' &&
437
598
  obj.runes !== null);
438
599
  }
439
- /** Validate a loaded Plugin has required fields */
440
- function validatePlugin(pkg, npmName) {
600
+ /** Validate a loaded Plugin has required fields. Each rune entry carries
601
+ * exactly one of `transform` or `template` (SPEC-153 D11). */
602
+ export function validatePlugin(pkg, npmName) {
441
603
  if (!pkg.name) {
442
604
  throw new Error(`Plugin "${npmName}" has an empty name field`);
443
605
  }
@@ -448,9 +610,25 @@ function validatePlugin(pkg, npmName) {
448
610
  throw new Error(`Plugin "${npmName}" defines no runes`);
449
611
  }
450
612
  for (const [name, entry] of Object.entries(pkg.runes)) {
613
+ if (entry.template !== undefined) {
614
+ if (entry.transform !== undefined) {
615
+ throw new CompositionError('second-emit-path', `Plugin "${npmName}" rune "${name}" carries both a \`transform\` and a composition \`template\`. ` +
616
+ `A rune has exactly one emit path (SPEC-145 D5, SPEC-153 D11): drop the transform to compose, or the template to build its own output.`);
617
+ }
618
+ if (typeof entry.template !== 'string') {
619
+ throw new CompositionError('template-entry-invalid', `Plugin "${npmName}" rune "${name}" has an invalid template. ` +
620
+ `Expected a composed rune definition: YAML frontmatter and a Markdoc template, as one string.`);
621
+ }
622
+ const configKey = composedTypeName(name);
623
+ if (pkg.theme?.runes?.[configKey] !== undefined) {
624
+ throw new CompositionError('template-entry-invalid', `Plugin "${npmName}" rune "${name}" is composed but also has a hand-written theme config (\`theme.runes.${configKey}\`). ` +
625
+ `A composed rune's config is generated from its definition, and it has no block and ships no CSS (SPEC-145 D2, D2a).`);
626
+ }
627
+ continue;
628
+ }
451
629
  if (!entry.transform || typeof entry.transform !== 'object') {
452
630
  throw new Error(`Plugin "${npmName}" rune "${name}" has an invalid transform. ` +
453
- `Expected a Markdoc Schema object (created via createContentModelSchema()).`);
631
+ `Expected a Markdoc Schema object (created via createContentModelSchema()), or a composition \`template\`.`);
454
632
  }
455
633
  }
456
634
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * A project's own composed runes — SPEC-153 D4, D5, D8 and SPEC-145 D25.
3
+ *
4
+ * A project declares `runes.dir` (default `runes`), and every `<rune>.md` in it
5
+ * is a composed rune named after the file. The directory is read through
6
+ * `ProjectFiles` (D5), so the same code serves a build on disk and a hosted
7
+ * build over `memoryProjectFiles`, and containment is the provider's: a path
8
+ * that escapes the project root is refused there, not here.
9
+ *
10
+ * The definitions become `PluginRune` entries of a pseudo-plugin named
11
+ * `__project__`, through the same reader and the same `pluginRune` a plugin's
12
+ * `runeDir` uses (D1). `mergePlugins` takes it as its project layer and applies
13
+ * D8's precedence.
14
+ */
15
+ import type { CompositionErrorCode } from './lib/composition-errors.js';
16
+ import type { ProjectFiles } from '@refrakt-md/types';
17
+ import type { LoadedPlugin } from './plugins.js';
18
+ import { PROJECT_RUNES } from './rune-dir.js';
19
+ export { PROJECT_RUNES };
20
+ /** `runes.dir` when a project does not declare one (D4). */
21
+ export declare const DEFAULT_PROJECT_RUNE_DIR = "runes";
22
+ /** One definition that did not load. */
23
+ export interface ProjectRuneFinding {
24
+ /** The definition's project-relative path, `<dir>/<rune>.md`. */
25
+ file: string;
26
+ /** 1-based line in that file. */
27
+ line: number;
28
+ /** The rune, when the file name is one. */
29
+ rune?: string;
30
+ /** Its entry in `COMPOSITION_ERRORS`, when the failure is a coded one. */
31
+ code?: CompositionErrorCode;
32
+ message: string;
33
+ }
34
+ /** What reading a project's rune directory produced: the runes that built,
35
+ * and a finding for each definition that did not. */
36
+ export interface ProjectRunesResult {
37
+ loaded: LoadedPlugin;
38
+ findings: ProjectRuneFinding[];
39
+ }
40
+ /**
41
+ * Read and build every definition in a project's rune directory, collecting a
42
+ * finding for each that fails instead of stopping at the first — `refrakt
43
+ * validate` reports them all. A directory the provider does not have (absent,
44
+ * or refused because it escapes the root) defines no runes.
45
+ */
46
+ export declare function checkProjectRunes(files: Pick<ProjectFiles, 'list' | 'read'>, dir?: string): ProjectRunesResult;
47
+ /**
48
+ * A project's runes, for a build: as {@link checkProjectRunes}, but the first
49
+ * definition that fails throws, naming its file and line. Pass the result to
50
+ * `mergePlugins` as its project layer.
51
+ */
52
+ export declare function loadProjectRunes(files: Pick<ProjectFiles, 'list' | 'read'>, dir?: string): LoadedPlugin;
53
+ //# sourceMappingURL=project-runes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-runes.d.ts","sourceRoot":"","sources":["../src/project-runes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,aAAa,EAAsC,MAAM,eAAe,CAAC;AAElF,OAAO,EAAE,aAAa,EAAE,CAAC;AAGzB,4DAA4D;AAC5D,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAEhD,wCAAwC;AACxC,MAAM,WAAW,kBAAkB;IAClC,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;sDACsD;AACtD,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAoBD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC,EAC1C,GAAG,GAAE,MAAiC,GACpC,kBAAkB,CA8CpB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC,EAC1C,GAAG,GAAE,MAAiC,GACpC,YAAY,CAWd"}