@diplodoc/cli 4.57.21 → 4.57.22

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/build/index.js CHANGED
@@ -251518,7 +251518,7 @@ var Build = class extends (_a2 = import_program11.BaseProgram, _process_dec = [i
251518
251518
  this.run.logger.proc(entry);
251519
251519
  this.run.meta.add(entry, {
251520
251520
  metadata: {
251521
- generator: `Diplodoc Platform v${"4.57.21"}`
251521
+ generator: `Diplodoc Platform v${"4.57.22"}`
251522
251522
  }
251523
251523
  });
251524
251524
  const info2 = await this.process(entry);
@@ -257840,7 +257840,7 @@ var Program = class extends (_a8 = import_program17.BaseProgram) {
257840
257840
  super(...arguments);
257841
257841
  this.name = "Program";
257842
257842
  this.command = new import_config54.Command(NAME).helpOption(true).allowUnknownOption(false).version(
257843
- false ? "" : "4.57.21",
257843
+ false ? "" : "4.57.22",
257844
257844
  "--version",
257845
257845
  "Output the version number"
257846
257846
  ).usage(USAGE);
@@ -257867,7 +257867,7 @@ if (require.main === module) {
257867
257867
  (async () => {
257868
257868
  console.time(MAIN_TIMER_ID);
257869
257869
  if (process.env.NODE_ENV !== "test") {
257870
- console.log(`Using v${"4.57.21"} version`);
257870
+ console.log(`Using v${"4.57.22"} version`);
257871
257871
  }
257872
257872
  let exitCode = 0;
257873
257873
  try {
package/build/index.mjs CHANGED
@@ -251511,7 +251511,7 @@ var Build = class extends (_a2 = BaseProgram, _process_dec = [bounded3], _a2) {
251511
251511
  this.run.logger.proc(entry);
251512
251512
  this.run.meta.add(entry, {
251513
251513
  metadata: {
251514
- generator: `Diplodoc Platform v${"4.57.21"}`
251514
+ generator: `Diplodoc Platform v${"4.57.22"}`
251515
251515
  }
251516
251516
  });
251517
251517
  const info2 = await this.process(entry);
@@ -257853,7 +257853,7 @@ var Program = class extends (_a8 = BaseProgram6) {
257853
257853
  super(...arguments);
257854
257854
  this.name = "Program";
257855
257855
  this.command = new Command7(NAME).helpOption(true).allowUnknownOption(false).version(
257856
- false ? "" : "4.57.21",
257856
+ false ? "" : "4.57.22",
257857
257857
  "--version",
257858
257858
  "Output the version number"
257859
257859
  ).usage(USAGE);
@@ -257880,7 +257880,7 @@ if (__require.main === module) {
257880
257880
  (async () => {
257881
257881
  console.time(MAIN_TIMER_ID);
257882
257882
  if (process.env.NODE_ENV !== "test") {
257883
- console.log(`Using v${"4.57.21"} version`);
257883
+ console.log(`Using v${"4.57.22"} version`);
257884
257884
  }
257885
257885
  let exitCode = 0;
257886
257886
  try {
package/lib/toc/index.js CHANGED
@@ -373,11 +373,11 @@ var TocService = class {
373
373
  await this.walkItems([toc], (item) => {
374
374
  if ((0, import_utils4.own)(item, "href") && !(0, import_utils4.isExternalHref)(item.href)) {
375
375
  this._entries.add((0, import_utils4.normalizePath)((0, import_node_path2.join)((0, import_node_path2.dirname)(path), item.href)));
376
- }
377
- if ((0, import_utils4.own)(item, "restricted-access")) {
378
- this.run.toc.meta.add((0, import_utils4.normalizePath)((0, import_node_path2.join)((0, import_node_path2.dirname)(path), item.href)), {
379
- "restricted-access": item["restricted-access"]
380
- });
376
+ if ((0, import_utils4.own)(item, "restricted-access")) {
377
+ this.run.toc.meta.add((0, import_utils4.normalizePath)((0, import_node_path2.join)((0, import_node_path2.dirname)(path), item.href)), {
378
+ "restricted-access": item["restricted-access"]
379
+ });
380
+ }
381
381
  }
382
382
  return item;
383
383
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/core/toc/index.ts", "../../src/core/toc/hooks.ts", "../../src/core/toc/loader.ts", "../../src/core/toc/utils.ts", "../../src/core/toc/TocService.ts"],
4
- "sourcesContent": ["export type * from './types';\nexport type {LoaderContext} from './loader';\n\nexport {getHooks} from './hooks';\nexport {IncludeMode} from './loader';\nexport {TocService} from './TocService';\n", "import type {IncludeInfo, IncluderOptions, RawToc, RawTocItem, Toc} from './types';\n\nimport {AsyncParallelHook, AsyncSeriesWaterfallHook, HookMap} from 'tapable';\n\nimport {generateHooksAccess} from '~/core/utils';\n\nexport function hooks(name: string) {\n return {\n /**\n * Called before item data processing (but after data interpolation)\n */\n Item: new AsyncSeriesWaterfallHook<[RawTocItem, RelativePath]>(\n ['TocItem', 'TocPath'],\n `${name}.Item`,\n ),\n /**\n * AsyncSeriesWaterfall HookMap called for each includer name detected in toc.<br>\n * Expects RawToc as result of waterfall.\n */\n Includer: new HookMap(\n (type: string) =>\n new AsyncSeriesWaterfallHook<[RawToc, IncluderOptions, RelativePath]>(\n ['Toc', 'options', 'TocPath'],\n `${name}.Includer(${type})`,\n ),\n ),\n Resolved: new AsyncParallelHook<[DeepFrozen<Toc>, RelativePath]>(\n ['Toc', 'TocPath'],\n `${name}.Resolved`,\n ),\n Included: new AsyncParallelHook<[Toc, RelativePath, IncludeInfo]>(\n ['Toc', 'TocPath', 'IncludeInfo'],\n `${name}.Included`,\n ),\n Dump: new AsyncSeriesWaterfallHook<[Toc, NormalizedPath]>(['toc', 'path'], `${name}.Dump`),\n };\n}\n\nconst [getHooks, withHooks] = generateHooksAccess('Toc', hooks);\n\nexport {getHooks, withHooks};\n", "import type {LiquidContext} from '@diplodoc/liquid';\nimport type {TocService} from './TocService';\nimport type {IncludeInfo, RawToc, RawTocItem, TocInclude, YfmString} from './types';\n\nimport {ok} from 'node:assert';\nimport {dirname, join, relative} from 'node:path';\nimport {omit} from 'lodash';\nimport {evaluate, liquidSnippet} from '@diplodoc/liquid';\n\nimport {isExternalHref, normalizePath, own} from '~/core/utils';\n\nimport {getHooks} from './hooks';\nimport {getFirstValuable, isRelative} from './utils';\n\nexport type LoaderContext = LiquidContext & {\n /** Relative to run.input path to current processing toc */\n path: RelativePath;\n /** Path of last include level */\n from: RelativePath;\n /** Path of last include level with 'merge' mode */\n base?: RelativePath;\n mode: IncludeMode | undefined;\n vars: Hash;\n options: {\n removeHiddenItems: boolean;\n };\n toc: TocService;\n};\n\nexport enum IncludeMode {\n RootMerge = 'root_merge',\n Merge = 'merge',\n Link = 'link',\n}\n\ntype MergeIncludeInfo = IncludeInfo & {\n mode: IncludeMode.RootMerge | IncludeMode.Merge;\n base: RelativePath;\n};\n\ntype LinkIncludeInfo = IncludeInfo & {\n mode: IncludeMode.Link;\n base?: undefined;\n};\n\nexport function isLinkMode(include: IncludeInfo | LoaderContext): include is LinkIncludeInfo {\n return IncludeMode.Link === include.mode;\n}\n\nexport function isMergeMode(include: IncludeInfo | LoaderContext): include is MergeIncludeInfo {\n return IncludeMode.RootMerge === include.mode || IncludeMode.Merge === include.mode;\n}\n\n// Designed to be isolated loaders in future\nexport async function loader(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n // Resolves toc fields which can be filterable arrays.\n // Apply when filter in some toc fields\n toc = await resolveFields.call(this, toc);\n\n // Apply when filter in toc.items\n // Drop hidden items\n toc = await resolveItems.call(this, toc);\n\n // Interpolate liquid vars in some toc fields\n toc = await templateFields.call(this, toc);\n\n // Make include paths relative to project root instead of toc root\n toc = await rebaseIncludes.call(this, toc);\n\n // Resolve includes and includers in toc items\n toc = await processItems.call(this, toc);\n\n // Rebase items href path for deep includes\n toc = await rebaseItems.call(this, toc);\n\n // Fix item href extensions\n toc = await normalizeItems.call(this, toc);\n\n return toc;\n}\n\n/**\n * Resolves toc fields which can be filterable arrays.\n * Convert arrays to text fields (gets first truth value)\n */\nasync function resolveFields(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n for (const field of ['title', 'label'] as const) {\n const value = toc[field];\n if (value) {\n toc[field] = getFirstValuable<YfmString>(value, this.vars);\n }\n }\n\n return toc;\n}\n\n/**\n * Applies liquid substitutions for some toc fields\n */\nasync function templateFields(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n const {conditions, substitutions} = this.settings;\n const interpolate = (box: Hash, field: string) => {\n const value = box[field];\n if (typeof value !== 'string') {\n return;\n }\n\n box[field] = liquidSnippet.call(this, value, this.vars);\n };\n\n if (!conditions && !substitutions) {\n return toc;\n }\n\n for (const field of ['href', 'title', 'label', 'navigation'] as const) {\n interpolate(toc, field);\n }\n\n toc.items = await this.toc.walkItems(toc.items, (item: RawTocItem) => {\n for (const field of ['name', 'href'] as const) {\n interpolate(item, field);\n }\n\n return item;\n });\n\n return toc;\n}\n\n/**\n * Applies `when` filter in toc items.\n * Also drops hidden items if needed.\n */\nasync function resolveItems(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n const {removeHiddenItems} = this.options;\n const {conditions, substitutions} = this.settings;\n\n if (!conditions && !substitutions) {\n return toc;\n }\n\n toc.items = await this.toc.walkItems(toc.items, (item: RawTocItem) => {\n let when = true;\n\n if (conditions) {\n when =\n typeof item.when === 'string'\n ? Boolean(evaluate(item.when, this.vars))\n : item.when !== false;\n delete item.when;\n }\n\n if (removeHiddenItems) {\n when = when && !item.hidden;\n delete item.hidden;\n }\n\n return when ? item : undefined;\n });\n\n return toc;\n}\n\n/**\n * Processes items includes and includers.\n * Then merges result in original place in `named` or `inline` mode.\n */\nasync function processItems(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n toc.items = await this.toc.walkItems(toc.items, async (item) => {\n item = await getHooks(this.toc).Item.promise(item, this.path);\n\n if (!item || !own(item, 'include')) {\n return item;\n }\n\n const {include} = item;\n\n ok(include.path, 'Invalid value for include path.');\n\n let toc: RawToc | undefined = {};\n if (own(include, 'includers')) {\n ok(\n include.mode === IncludeMode.Link || !include.mode,\n 'Invalid mode value for include with includers.',\n );\n ok(Array.isArray(include.includers), 'Includers should be an array.');\n\n const tocPath = include.path.endsWith('toc.yaml')\n ? normalizePath(include.path)\n : normalizePath(join(include.path, 'toc.yaml'));\n\n for (const includer of include.includers) {\n const hook = getHooks(this.toc).Includer.get(includer.name);\n\n ok(includer.name, 'Includer name should be a string.');\n ok(hook, `Includer with name '${includer.name}' is not registered.`);\n\n const options = {\n ...includer,\n path: tocPath,\n };\n\n toc = await hook.promise(toc, options, this.path);\n }\n\n toc = (await this.toc.include(tocPath, {\n from: this.path,\n mode: IncludeMode.Link,\n content: toc,\n })) as RawToc;\n } else {\n const includeInfo = {\n from: this.path,\n mode: include.mode,\n } as IncludeInfo;\n\n if (isMergeMode(includeInfo)) {\n includeInfo.base = this.base || this.path;\n }\n\n toc = (await this.toc.include(include.path, includeInfo)) as RawToc;\n }\n\n item = omit(item, ['include']) as RawTocItem;\n\n if (!toc) {\n return null;\n }\n\n // named mode\n if (item.name) {\n item.items = (item.items || []).concat((toc.items as RawTocItem[]) || []);\n\n return item;\n } else {\n return toc.items as RawTocItem[];\n }\n });\n\n return toc;\n}\n\n/**\n * Rebases items includes path.\n * For link mode path should be always relative to original toc source.\n * For merge modes path should be relative to merge base, which can be inherited from parent->parent->toc.\n */\nasync function rebaseIncludes(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n const rebaseIncludes = (item: RawTocItem | RawToc) => {\n if (!own<TocInclude, 'include'>(item, 'include')) {\n return item;\n }\n\n if (!item.include.mode) {\n item.include.mode = own<unknown, 'includers'>(item.include, 'includers')\n ? IncludeMode.Link\n : IncludeMode.RootMerge;\n }\n\n if (item.include.mode === IncludeMode.RootMerge) {\n return item;\n }\n\n if (isLinkMode(this)) {\n item.include.path = join(dirname(this.path), item.include.path);\n } else {\n item.include.path = join(dirname(this.base || this.path), item.include.path);\n }\n\n return item;\n };\n\n await this.toc.walkItems([toc], rebaseIncludes);\n\n return toc;\n}\n\n/**\n * Rebuses items href after include in parent toc\n */\nasync function rebaseItems(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n const rebaseHrefs = (item: RawTocItem | RawToc) => {\n if (own<AnyPath>(item, 'href') && isRelative(item.href)) {\n const absBase = dirname(this.from);\n const absPath = join(dirname(this.base || this.path), item.href);\n\n item.href = relative(absBase, absPath);\n }\n\n return item;\n };\n\n if (isLinkMode(this)) {\n await this.toc.walkItems([toc], rebaseHrefs);\n }\n\n return toc;\n}\n\n/**\n * Fixes item href extensions\n */\nasync function normalizeItems(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n await this.toc.walkItems([toc], (item: RawTocItem | RawToc) => {\n if (own<string>(item, 'href') && !isExternalHref(item.href)) {\n if (!item.href) {\n delete item['href'];\n return item;\n }\n\n item.href = normalizePath(item.href);\n\n if (item.href.endsWith('/')) {\n item.href = `${item.href}index.yaml`;\n }\n\n if (!item.href.endsWith('.md') && !item.href.endsWith('.yaml')) {\n item.href = `${item.href}.md`;\n }\n }\n\n return item;\n });\n\n return toc;\n}\n", "import type {TextFilter} from './types';\n\nimport {evaluate} from '@diplodoc/liquid';\n\nexport function isRelative(path: AnyPath): path is RelativePath {\n return /^\\.{1,2}\\//.test(path) || !/^(\\w{0,7}:)?\\/\\//.test(path);\n}\n\nexport function getFirstValuable<T>(\n items: TextFilter[] | string,\n vars: Hash,\n fallback?: T,\n): T | undefined {\n if (typeof items === 'string') {\n items = [{text: items, when: true}];\n }\n\n if (!Array.isArray(items)) {\n items = [];\n }\n\n for (const item of items) {\n let {when = true} = item;\n delete item.when;\n\n if (typeof when === 'string') {\n when = Boolean(evaluate(when, vars));\n }\n\n if (when) {\n return item.text as T;\n }\n }\n\n return fallback;\n}\n", "import type {Run as BaseRun} from '~/core/run';\nimport type {VarsService} from '~/core/vars';\nimport type {MetaService} from '~/core/meta';\nimport type {IncludeInfo, RawToc, Toc, TocItem, WithItems} from './types';\nimport type {LoaderContext} from './loader';\n\nimport {basename, dirname, join, relative} from 'node:path';\nimport {load} from 'js-yaml';\nimport {dedent} from 'ts-dedent';\n\nimport {\n Defer,\n bounded,\n copyJson,\n errorMessage,\n freezeJson,\n isExternalHref,\n memoize,\n normalizePath,\n own,\n} from '~/core/utils';\n\nimport {getHooks, withHooks} from './hooks';\nimport {isMergeMode, loader} from './loader';\n\nexport type TocServiceConfig = {\n ignore: string[];\n ignoreStage: string[];\n template: {\n enabled: boolean;\n features: {\n conditions: boolean;\n substitutions: boolean;\n };\n scopes: {\n code: boolean;\n text: boolean;\n };\n };\n removeHiddenTocItems: boolean;\n};\n\ntype WalkStepResult<I> = I | I[] | null | undefined;\n\nenum Stage {\n TECH_PREVIEW = 'tech-preview',\n}\n\ntype Run = BaseRun<TocServiceConfig> & {\n vars: VarsService;\n meta: MetaService;\n};\n\n@withHooks\nexport class TocService {\n readonly name = 'Toc';\n\n get entries() {\n return [...this._entries];\n }\n\n private run: Run;\n\n private logger: Run['logger'];\n\n private config: TocServiceConfig;\n\n private _entries: Set<NormalizedPath> = new Set();\n\n private processed: Hash<boolean> = {};\n\n private cache: Map<NormalizedPath, Toc | Promise<Toc | undefined> | undefined> = new Map();\n\n private get vars() {\n return this.run.vars;\n }\n\n private get meta() {\n return this.run.meta;\n }\n\n constructor(run: Run) {\n this.run = run;\n this.logger = run.logger;\n this.config = run.config;\n }\n\n @bounded async load(path: RelativePath): Promise<Toc | undefined> {\n const file = normalizePath(path);\n\n // There is no error. We really skip toc processing, if it was processed previously in any way.\n // For example toc can be processed as include of some other toc.\n if (this.processed[file]) {\n return this.cache.get(file);\n }\n\n this.processed[file] = true;\n\n this.logger.proc(file);\n\n const defer = new Defer<Toc | undefined>();\n\n this.cache.set(file, defer.promise);\n\n defer.promise.then((result) => {\n this.cache.set(file, result);\n });\n\n const context: LoaderContext = this.loaderContext(file);\n\n const content = await read(this.run, file);\n\n if (this.shouldSkip(content)) {\n this.cache.delete(file);\n defer.resolve(undefined);\n return undefined;\n }\n\n const toc = (await loader.call(context, content)) as Toc;\n\n // This looks how small optimization, but there was cases when toc is an array...\n // This is not that we expect.\n if (toc.href || toc.items?.length) {\n await this.walkItems([toc], (item: TocItem | Toc) => {\n if (own<string, 'href'>(item, 'href') && !isExternalHref(item.href)) {\n this._entries.add(normalizePath(join(dirname(path), item.href)));\n }\n if (own<string>(item, 'restricted-access')) {\n this.run.toc.meta.add(normalizePath(join(dirname(path), item.href)), {\n 'restricted-access': item['restricted-access'],\n });\n }\n\n return item;\n });\n }\n\n defer.resolve(toc);\n\n await getHooks(this).Resolved.promise(freezeJson(toc), file);\n\n return defer.promise;\n }\n\n @bounded async include(path: RelativePath, include: IncludeInfo): Promise<Toc | undefined> {\n const file = normalizePath(path);\n\n this.processed[file] = true;\n\n this.logger.proc(file);\n\n const context: LoaderContext = await this.loaderContext(file, include);\n\n const content = include.content || (await read(this.run, file, include.from));\n\n if (this.shouldSkip(content)) {\n return undefined;\n }\n\n if (isMergeMode(include)) {\n const from = normalizePath(dirname(file));\n const to = normalizePath(dirname(include.base));\n\n context.vars = this.vars.for(include.base);\n context.path = context.path.replace(from, to) as RelativePath;\n context.from = include.from;\n\n const files = await this.run.copy(\n join(this.run.input, from),\n join(this.run.input, to),\n [basename(file), '**/toc.yaml'],\n );\n\n for (const [from, to] of files) {\n this.logger.copy(from, to);\n this.meta.add(relative(this.run.input, to), {\n sourcePath: relative(this.run.input, from),\n });\n }\n }\n\n const toc = (await loader.call(context, content)) as Toc;\n\n await getHooks(this).Included.promise(toc, file, include);\n\n return toc;\n }\n\n @bounded\n @memoize('path')\n async dump(path: RelativePath): Promise<Toc | undefined> {\n const file = normalizePath(path);\n const toc = await this.load(path);\n\n if (!toc) {\n return;\n }\n\n return await getHooks(this).Dump.promise(copyJson(toc), file);\n }\n\n /**\n * Visits all passed items. Applies actor to each item.\n * Then applies actor to each item in actor result.items.\n * Returns actor results.\n */\n async walkItems<T extends WithItems<T>>(\n items: T[] | undefined,\n actor: (item: T) => Promise<WalkStepResult<T>> | WalkStepResult<T>,\n ): Promise<T[] | undefined> {\n if (!items || !items.length) {\n return items;\n }\n\n const results: T[] = [];\n const queue = [...items];\n while (queue.length) {\n const item = queue.shift() as T;\n\n const result = await actor(item);\n if (result) {\n results.push(...([] as T[]).concat(result));\n }\n }\n\n for (const result of results) {\n if (own(result, 'items')) {\n // Sometime users defines items as object (one item) instead of array of one item.\n if (!Array.isArray(result.items) && result.items) {\n result.items = ([] as T[]).concat(result.items);\n }\n\n if (result.items?.length) {\n result.items = await this.walkItems(result.items, actor);\n }\n }\n }\n\n return results;\n }\n\n set(path: NormalizedPath, toc: Toc) {\n this.cache.set(path, toc);\n }\n\n /**\n * Resolves toc path and data for any page path.\n * Expects what all paths are already loaded in service.\n */\n for(path: RelativePath): NormalizedPath {\n path = normalizePath(path);\n\n const tocPath = normalizePath(join(dirname(path), 'toc.yaml'));\n\n if (this.cache.has(tocPath as NormalizedPath)) {\n return tocPath;\n }\n\n const nextPath = dirname(path);\n\n if (path === nextPath) {\n throw new Error('Error while finding toc dir.');\n }\n\n return this.for(nextPath);\n }\n\n dir(path: RelativePath): NormalizedPath {\n const tocPath = this.for(path);\n\n return normalizePath(dirname(tocPath));\n }\n\n private shouldSkip(toc: RawToc) {\n // Should ignore included toc with tech-preview stage.\n // TODO(major): remove this\n if (toc && toc.stage === Stage.TECH_PREVIEW) {\n return true;\n }\n\n const {ignoreStage} = this.config;\n if (toc.stage && ignoreStage.length && ignoreStage.includes(toc.stage)) {\n return true;\n }\n\n return false;\n }\n\n private loaderContext(path: NormalizedPath, {from, mode, base}: Partial<IncludeInfo> = {}) {\n return {\n path,\n from: from || path,\n mode,\n base,\n vars: this.vars.for(path),\n toc: this,\n logger: this.logger,\n settings: {\n conditions: this.config.template.features.conditions,\n substitutions: this.config.template.features.substitutions,\n },\n options: {\n removeHiddenItems: this.config.removeHiddenTocItems,\n },\n };\n }\n}\n\nasync function read(run: Run, path: RelativePath, from?: string): Promise<RawToc> {\n try {\n return load((await run.read(join(run.input, path))) || '{}') as RawToc;\n } catch (error) {\n throw new Error(dedent`\n Unable to resolve ${path}${from ? ' from ' + from : ''}.\n Original error:\n ${errorMessage(error)}\n `);\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["export type * from './types';\nexport type {LoaderContext} from './loader';\n\nexport {getHooks} from './hooks';\nexport {IncludeMode} from './loader';\nexport {TocService} from './TocService';\n", "import type {IncludeInfo, IncluderOptions, RawToc, RawTocItem, Toc} from './types';\n\nimport {AsyncParallelHook, AsyncSeriesWaterfallHook, HookMap} from 'tapable';\n\nimport {generateHooksAccess} from '~/core/utils';\n\nexport function hooks(name: string) {\n return {\n /**\n * Called before item data processing (but after data interpolation)\n */\n Item: new AsyncSeriesWaterfallHook<[RawTocItem, RelativePath]>(\n ['TocItem', 'TocPath'],\n `${name}.Item`,\n ),\n /**\n * AsyncSeriesWaterfall HookMap called for each includer name detected in toc.<br>\n * Expects RawToc as result of waterfall.\n */\n Includer: new HookMap(\n (type: string) =>\n new AsyncSeriesWaterfallHook<[RawToc, IncluderOptions, RelativePath]>(\n ['Toc', 'options', 'TocPath'],\n `${name}.Includer(${type})`,\n ),\n ),\n Resolved: new AsyncParallelHook<[DeepFrozen<Toc>, RelativePath]>(\n ['Toc', 'TocPath'],\n `${name}.Resolved`,\n ),\n Included: new AsyncParallelHook<[Toc, RelativePath, IncludeInfo]>(\n ['Toc', 'TocPath', 'IncludeInfo'],\n `${name}.Included`,\n ),\n Dump: new AsyncSeriesWaterfallHook<[Toc, NormalizedPath]>(['toc', 'path'], `${name}.Dump`),\n };\n}\n\nconst [getHooks, withHooks] = generateHooksAccess('Toc', hooks);\n\nexport {getHooks, withHooks};\n", "import type {LiquidContext} from '@diplodoc/liquid';\nimport type {TocService} from './TocService';\nimport type {IncludeInfo, RawToc, RawTocItem, TocInclude, YfmString} from './types';\n\nimport {ok} from 'node:assert';\nimport {dirname, join, relative} from 'node:path';\nimport {omit} from 'lodash';\nimport {evaluate, liquidSnippet} from '@diplodoc/liquid';\n\nimport {isExternalHref, normalizePath, own} from '~/core/utils';\n\nimport {getHooks} from './hooks';\nimport {getFirstValuable, isRelative} from './utils';\n\nexport type LoaderContext = LiquidContext & {\n /** Relative to run.input path to current processing toc */\n path: RelativePath;\n /** Path of last include level */\n from: RelativePath;\n /** Path of last include level with 'merge' mode */\n base?: RelativePath;\n mode: IncludeMode | undefined;\n vars: Hash;\n options: {\n removeHiddenItems: boolean;\n };\n toc: TocService;\n};\n\nexport enum IncludeMode {\n RootMerge = 'root_merge',\n Merge = 'merge',\n Link = 'link',\n}\n\ntype MergeIncludeInfo = IncludeInfo & {\n mode: IncludeMode.RootMerge | IncludeMode.Merge;\n base: RelativePath;\n};\n\ntype LinkIncludeInfo = IncludeInfo & {\n mode: IncludeMode.Link;\n base?: undefined;\n};\n\nexport function isLinkMode(include: IncludeInfo | LoaderContext): include is LinkIncludeInfo {\n return IncludeMode.Link === include.mode;\n}\n\nexport function isMergeMode(include: IncludeInfo | LoaderContext): include is MergeIncludeInfo {\n return IncludeMode.RootMerge === include.mode || IncludeMode.Merge === include.mode;\n}\n\n// Designed to be isolated loaders in future\nexport async function loader(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n // Resolves toc fields which can be filterable arrays.\n // Apply when filter in some toc fields\n toc = await resolveFields.call(this, toc);\n\n // Apply when filter in toc.items\n // Drop hidden items\n toc = await resolveItems.call(this, toc);\n\n // Interpolate liquid vars in some toc fields\n toc = await templateFields.call(this, toc);\n\n // Make include paths relative to project root instead of toc root\n toc = await rebaseIncludes.call(this, toc);\n\n // Resolve includes and includers in toc items\n toc = await processItems.call(this, toc);\n\n // Rebase items href path for deep includes\n toc = await rebaseItems.call(this, toc);\n\n // Fix item href extensions\n toc = await normalizeItems.call(this, toc);\n\n return toc;\n}\n\n/**\n * Resolves toc fields which can be filterable arrays.\n * Convert arrays to text fields (gets first truth value)\n */\nasync function resolveFields(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n for (const field of ['title', 'label'] as const) {\n const value = toc[field];\n if (value) {\n toc[field] = getFirstValuable<YfmString>(value, this.vars);\n }\n }\n\n return toc;\n}\n\n/**\n * Applies liquid substitutions for some toc fields\n */\nasync function templateFields(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n const {conditions, substitutions} = this.settings;\n const interpolate = (box: Hash, field: string) => {\n const value = box[field];\n if (typeof value !== 'string') {\n return;\n }\n\n box[field] = liquidSnippet.call(this, value, this.vars);\n };\n\n if (!conditions && !substitutions) {\n return toc;\n }\n\n for (const field of ['href', 'title', 'label', 'navigation'] as const) {\n interpolate(toc, field);\n }\n\n toc.items = await this.toc.walkItems(toc.items, (item: RawTocItem) => {\n for (const field of ['name', 'href'] as const) {\n interpolate(item, field);\n }\n\n return item;\n });\n\n return toc;\n}\n\n/**\n * Applies `when` filter in toc items.\n * Also drops hidden items if needed.\n */\nasync function resolveItems(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n const {removeHiddenItems} = this.options;\n const {conditions, substitutions} = this.settings;\n\n if (!conditions && !substitutions) {\n return toc;\n }\n\n toc.items = await this.toc.walkItems(toc.items, (item: RawTocItem) => {\n let when = true;\n\n if (conditions) {\n when =\n typeof item.when === 'string'\n ? Boolean(evaluate(item.when, this.vars))\n : item.when !== false;\n delete item.when;\n }\n\n if (removeHiddenItems) {\n when = when && !item.hidden;\n delete item.hidden;\n }\n\n return when ? item : undefined;\n });\n\n return toc;\n}\n\n/**\n * Processes items includes and includers.\n * Then merges result in original place in `named` or `inline` mode.\n */\nasync function processItems(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n toc.items = await this.toc.walkItems(toc.items, async (item) => {\n item = await getHooks(this.toc).Item.promise(item, this.path);\n\n if (!item || !own(item, 'include')) {\n return item;\n }\n\n const {include} = item;\n\n ok(include.path, 'Invalid value for include path.');\n\n let toc: RawToc | undefined = {};\n if (own(include, 'includers')) {\n ok(\n include.mode === IncludeMode.Link || !include.mode,\n 'Invalid mode value for include with includers.',\n );\n ok(Array.isArray(include.includers), 'Includers should be an array.');\n\n const tocPath = include.path.endsWith('toc.yaml')\n ? normalizePath(include.path)\n : normalizePath(join(include.path, 'toc.yaml'));\n\n for (const includer of include.includers) {\n const hook = getHooks(this.toc).Includer.get(includer.name);\n\n ok(includer.name, 'Includer name should be a string.');\n ok(hook, `Includer with name '${includer.name}' is not registered.`);\n\n const options = {\n ...includer,\n path: tocPath,\n };\n\n toc = await hook.promise(toc, options, this.path);\n }\n\n toc = (await this.toc.include(tocPath, {\n from: this.path,\n mode: IncludeMode.Link,\n content: toc,\n })) as RawToc;\n } else {\n const includeInfo = {\n from: this.path,\n mode: include.mode,\n } as IncludeInfo;\n\n if (isMergeMode(includeInfo)) {\n includeInfo.base = this.base || this.path;\n }\n\n toc = (await this.toc.include(include.path, includeInfo)) as RawToc;\n }\n\n item = omit(item, ['include']) as RawTocItem;\n\n if (!toc) {\n return null;\n }\n\n // named mode\n if (item.name) {\n item.items = (item.items || []).concat((toc.items as RawTocItem[]) || []);\n\n return item;\n } else {\n return toc.items as RawTocItem[];\n }\n });\n\n return toc;\n}\n\n/**\n * Rebases items includes path.\n * For link mode path should be always relative to original toc source.\n * For merge modes path should be relative to merge base, which can be inherited from parent->parent->toc.\n */\nasync function rebaseIncludes(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n const rebaseIncludes = (item: RawTocItem | RawToc) => {\n if (!own<TocInclude, 'include'>(item, 'include')) {\n return item;\n }\n\n if (!item.include.mode) {\n item.include.mode = own<unknown, 'includers'>(item.include, 'includers')\n ? IncludeMode.Link\n : IncludeMode.RootMerge;\n }\n\n if (item.include.mode === IncludeMode.RootMerge) {\n return item;\n }\n\n if (isLinkMode(this)) {\n item.include.path = join(dirname(this.path), item.include.path);\n } else {\n item.include.path = join(dirname(this.base || this.path), item.include.path);\n }\n\n return item;\n };\n\n await this.toc.walkItems([toc], rebaseIncludes);\n\n return toc;\n}\n\n/**\n * Rebuses items href after include in parent toc\n */\nasync function rebaseItems(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n const rebaseHrefs = (item: RawTocItem | RawToc) => {\n if (own<AnyPath>(item, 'href') && isRelative(item.href)) {\n const absBase = dirname(this.from);\n const absPath = join(dirname(this.base || this.path), item.href);\n\n item.href = relative(absBase, absPath);\n }\n\n return item;\n };\n\n if (isLinkMode(this)) {\n await this.toc.walkItems([toc], rebaseHrefs);\n }\n\n return toc;\n}\n\n/**\n * Fixes item href extensions\n */\nasync function normalizeItems(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n await this.toc.walkItems([toc], (item: RawTocItem | RawToc) => {\n if (own<string>(item, 'href') && !isExternalHref(item.href)) {\n if (!item.href) {\n delete item['href'];\n return item;\n }\n\n item.href = normalizePath(item.href);\n\n if (item.href.endsWith('/')) {\n item.href = `${item.href}index.yaml`;\n }\n\n if (!item.href.endsWith('.md') && !item.href.endsWith('.yaml')) {\n item.href = `${item.href}.md`;\n }\n }\n\n return item;\n });\n\n return toc;\n}\n", "import type {TextFilter} from './types';\n\nimport {evaluate} from '@diplodoc/liquid';\n\nexport function isRelative(path: AnyPath): path is RelativePath {\n return /^\\.{1,2}\\//.test(path) || !/^(\\w{0,7}:)?\\/\\//.test(path);\n}\n\nexport function getFirstValuable<T>(\n items: TextFilter[] | string,\n vars: Hash,\n fallback?: T,\n): T | undefined {\n if (typeof items === 'string') {\n items = [{text: items, when: true}];\n }\n\n if (!Array.isArray(items)) {\n items = [];\n }\n\n for (const item of items) {\n let {when = true} = item;\n delete item.when;\n\n if (typeof when === 'string') {\n when = Boolean(evaluate(when, vars));\n }\n\n if (when) {\n return item.text as T;\n }\n }\n\n return fallback;\n}\n", "import type {Run as BaseRun} from '~/core/run';\nimport type {VarsService} from '~/core/vars';\nimport type {MetaService} from '~/core/meta';\nimport type {IncludeInfo, RawToc, Toc, TocItem, WithItems} from './types';\nimport type {LoaderContext} from './loader';\n\nimport {basename, dirname, join, relative} from 'node:path';\nimport {load} from 'js-yaml';\nimport {dedent} from 'ts-dedent';\n\nimport {\n Defer,\n bounded,\n copyJson,\n errorMessage,\n freezeJson,\n isExternalHref,\n memoize,\n normalizePath,\n own,\n} from '~/core/utils';\n\nimport {getHooks, withHooks} from './hooks';\nimport {isMergeMode, loader} from './loader';\n\nexport type TocServiceConfig = {\n ignore: string[];\n ignoreStage: string[];\n template: {\n enabled: boolean;\n features: {\n conditions: boolean;\n substitutions: boolean;\n };\n scopes: {\n code: boolean;\n text: boolean;\n };\n };\n removeHiddenTocItems: boolean;\n};\n\ntype WalkStepResult<I> = I | I[] | null | undefined;\n\nenum Stage {\n TECH_PREVIEW = 'tech-preview',\n}\n\ntype Run = BaseRun<TocServiceConfig> & {\n vars: VarsService;\n meta: MetaService;\n};\n\n@withHooks\nexport class TocService {\n readonly name = 'Toc';\n\n get entries() {\n return [...this._entries];\n }\n\n private run: Run;\n\n private logger: Run['logger'];\n\n private config: TocServiceConfig;\n\n private _entries: Set<NormalizedPath> = new Set();\n\n private processed: Hash<boolean> = {};\n\n private cache: Map<NormalizedPath, Toc | Promise<Toc | undefined> | undefined> = new Map();\n\n private get vars() {\n return this.run.vars;\n }\n\n private get meta() {\n return this.run.meta;\n }\n\n constructor(run: Run) {\n this.run = run;\n this.logger = run.logger;\n this.config = run.config;\n }\n\n @bounded async load(path: RelativePath): Promise<Toc | undefined> {\n const file = normalizePath(path);\n\n // There is no error. We really skip toc processing, if it was processed previously in any way.\n // For example toc can be processed as include of some other toc.\n if (this.processed[file]) {\n return this.cache.get(file);\n }\n\n this.processed[file] = true;\n\n this.logger.proc(file);\n\n const defer = new Defer<Toc | undefined>();\n\n this.cache.set(file, defer.promise);\n\n defer.promise.then((result) => {\n this.cache.set(file, result);\n });\n\n const context: LoaderContext = this.loaderContext(file);\n\n const content = await read(this.run, file);\n\n if (this.shouldSkip(content)) {\n this.cache.delete(file);\n defer.resolve(undefined);\n return undefined;\n }\n\n const toc = (await loader.call(context, content)) as Toc;\n\n // This looks how small optimization, but there was cases when toc is an array...\n // This is not that we expect.\n if (toc.href || toc.items?.length) {\n await this.walkItems([toc], (item: TocItem | Toc) => {\n if (own<string, 'href'>(item, 'href') && !isExternalHref(item.href)) {\n this._entries.add(normalizePath(join(dirname(path), item.href)));\n\n if (own<string>(item, 'restricted-access')) {\n this.run.toc.meta.add(normalizePath(join(dirname(path), item.href)), {\n 'restricted-access': item['restricted-access'],\n });\n }\n }\n\n return item;\n });\n }\n\n defer.resolve(toc);\n\n await getHooks(this).Resolved.promise(freezeJson(toc), file);\n\n return defer.promise;\n }\n\n @bounded async include(path: RelativePath, include: IncludeInfo): Promise<Toc | undefined> {\n const file = normalizePath(path);\n\n this.processed[file] = true;\n\n this.logger.proc(file);\n\n const context: LoaderContext = await this.loaderContext(file, include);\n\n const content = include.content || (await read(this.run, file, include.from));\n\n if (this.shouldSkip(content)) {\n return undefined;\n }\n\n if (isMergeMode(include)) {\n const from = normalizePath(dirname(file));\n const to = normalizePath(dirname(include.base));\n\n context.vars = this.vars.for(include.base);\n context.path = context.path.replace(from, to) as RelativePath;\n context.from = include.from;\n\n const files = await this.run.copy(\n join(this.run.input, from),\n join(this.run.input, to),\n [basename(file), '**/toc.yaml'],\n );\n\n for (const [from, to] of files) {\n this.logger.copy(from, to);\n this.meta.add(relative(this.run.input, to), {\n sourcePath: relative(this.run.input, from),\n });\n }\n }\n\n const toc = (await loader.call(context, content)) as Toc;\n\n await getHooks(this).Included.promise(toc, file, include);\n\n return toc;\n }\n\n @bounded\n @memoize('path')\n async dump(path: RelativePath): Promise<Toc | undefined> {\n const file = normalizePath(path);\n const toc = await this.load(path);\n\n if (!toc) {\n return;\n }\n\n return await getHooks(this).Dump.promise(copyJson(toc), file);\n }\n\n /**\n * Visits all passed items. Applies actor to each item.\n * Then applies actor to each item in actor result.items.\n * Returns actor results.\n */\n async walkItems<T extends WithItems<T>>(\n items: T[] | undefined,\n actor: (item: T) => Promise<WalkStepResult<T>> | WalkStepResult<T>,\n ): Promise<T[] | undefined> {\n if (!items || !items.length) {\n return items;\n }\n\n const results: T[] = [];\n const queue = [...items];\n while (queue.length) {\n const item = queue.shift() as T;\n\n const result = await actor(item);\n if (result) {\n results.push(...([] as T[]).concat(result));\n }\n }\n\n for (const result of results) {\n if (own(result, 'items')) {\n // Sometime users defines items as object (one item) instead of array of one item.\n if (!Array.isArray(result.items) && result.items) {\n result.items = ([] as T[]).concat(result.items);\n }\n\n if (result.items?.length) {\n result.items = await this.walkItems(result.items, actor);\n }\n }\n }\n\n return results;\n }\n\n set(path: NormalizedPath, toc: Toc) {\n this.cache.set(path, toc);\n }\n\n /**\n * Resolves toc path and data for any page path.\n * Expects what all paths are already loaded in service.\n */\n for(path: RelativePath): NormalizedPath {\n path = normalizePath(path);\n\n const tocPath = normalizePath(join(dirname(path), 'toc.yaml'));\n\n if (this.cache.has(tocPath as NormalizedPath)) {\n return tocPath;\n }\n\n const nextPath = dirname(path);\n\n if (path === nextPath) {\n throw new Error('Error while finding toc dir.');\n }\n\n return this.for(nextPath);\n }\n\n dir(path: RelativePath): NormalizedPath {\n const tocPath = this.for(path);\n\n return normalizePath(dirname(tocPath));\n }\n\n private shouldSkip(toc: RawToc) {\n // Should ignore included toc with tech-preview stage.\n // TODO(major): remove this\n if (toc && toc.stage === Stage.TECH_PREVIEW) {\n return true;\n }\n\n const {ignoreStage} = this.config;\n if (toc.stage && ignoreStage.length && ignoreStage.includes(toc.stage)) {\n return true;\n }\n\n return false;\n }\n\n private loaderContext(path: NormalizedPath, {from, mode, base}: Partial<IncludeInfo> = {}) {\n return {\n path,\n from: from || path,\n mode,\n base,\n vars: this.vars.for(path),\n toc: this,\n logger: this.logger,\n settings: {\n conditions: this.config.template.features.conditions,\n substitutions: this.config.template.features.substitutions,\n },\n options: {\n removeHiddenItems: this.config.removeHiddenTocItems,\n },\n };\n }\n}\n\nasync function read(run: Run, path: RelativePath, from?: string): Promise<RawToc> {\n try {\n return load((await run.read(join(run.input, path))) || '{}') as RawToc;\n } catch (error) {\n throw new Error(dedent`\n Unable to resolve ${path}${from ? ' from ' + from : ''}.\n Original error:\n ${errorMessage(error)}\n `);\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,qBAAmE;AAEnE,mBAAkC;AAE3B,SAAS,MAAM,MAAc;AAChC,SAAO;AAAA;AAAA;AAAA;AAAA,IAIH,MAAM,IAAI;AAAA,MACN,CAAC,WAAW,SAAS;AAAA,MACrB,GAAG,IAAI;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,UAAU,IAAI;AAAA,MACV,CAAC,SACG,IAAI;AAAA,QACA,CAAC,OAAO,WAAW,SAAS;AAAA,QAC5B,GAAG,IAAI,aAAa,IAAI;AAAA,MAC5B;AAAA,IACR;AAAA,IACA,UAAU,IAAI;AAAA,MACV,CAAC,OAAO,SAAS;AAAA,MACjB,GAAG,IAAI;AAAA,IACX;AAAA,IACA,UAAU,IAAI;AAAA,MACV,CAAC,OAAO,WAAW,aAAa;AAAA,MAChC,GAAG,IAAI;AAAA,IACX;AAAA,IACA,MAAM,IAAI,wCAAgD,CAAC,OAAO,MAAM,GAAG,GAAG,IAAI,OAAO;AAAA,EAC7F;AACJ;AAEA,IAAM,CAAC,UAAU,SAAS,QAAI,kCAAoB,OAAO,KAAK;;;AClC9D,yBAAiB;AACjB,uBAAsC;AACtC,oBAAmB;AACnB,IAAAA,iBAAsC;AAEtC,IAAAC,gBAAiD;;;ACPjD,oBAAuB;AAEhB,SAAS,WAAW,MAAqC;AAC5D,SAAO,aAAa,KAAK,IAAI,KAAK,CAAC,mBAAmB,KAAK,IAAI;AACnE;AAEO,SAAS,iBACZ,OACA,MACA,UACa;AACb,MAAI,OAAO,UAAU,UAAU;AAC3B,YAAQ,CAAC,EAAC,MAAM,OAAO,MAAM,KAAI,CAAC;AAAA,EACtC;AAEA,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACvB,YAAQ,CAAC;AAAA,EACb;AAEA,aAAW,QAAQ,OAAO;AACtB,QAAI,EAAC,OAAO,KAAI,IAAI;AACpB,WAAO,KAAK;AAEZ,QAAI,OAAO,SAAS,UAAU;AAC1B,aAAO,YAAQ,wBAAS,MAAM,IAAI,CAAC;AAAA,IACvC;AAEA,QAAI,MAAM;AACN,aAAO,KAAK;AAAA,IAChB;AAAA,EACJ;AAEA,SAAO;AACX;;;ADNO,IAAK,cAAL,kBAAKC,iBAAL;AACH,EAAAA,aAAA,eAAY;AACZ,EAAAA,aAAA,WAAQ;AACR,EAAAA,aAAA,UAAO;AAHC,SAAAA;AAAA,GAAA;AAgBL,SAAS,WAAW,SAAkE;AACzF,SAAO,sBAAqB,QAAQ;AACxC;AAEO,SAAS,YAAY,SAAmE;AAC3F,SAAO,iCAA0B,QAAQ,QAAQ,wBAAsB,QAAQ;AACnF;AAGA,eAAsB,OAA4B,KAA8B;AAG5E,QAAM,MAAM,cAAc,KAAK,MAAM,GAAG;AAIxC,QAAM,MAAM,aAAa,KAAK,MAAM,GAAG;AAGvC,QAAM,MAAM,eAAe,KAAK,MAAM,GAAG;AAGzC,QAAM,MAAM,eAAe,KAAK,MAAM,GAAG;AAGzC,QAAM,MAAM,aAAa,KAAK,MAAM,GAAG;AAGvC,QAAM,MAAM,YAAY,KAAK,MAAM,GAAG;AAGtC,QAAM,MAAM,eAAe,KAAK,MAAM,GAAG;AAEzC,SAAO;AACX;AAMA,eAAe,cAAmC,KAA8B;AAC5E,aAAW,SAAS,CAAC,SAAS,OAAO,GAAY;AAC7C,UAAM,QAAQ,IAAI,KAAK;AACvB,QAAI,OAAO;AACP,UAAI,KAAK,IAAI,iBAA4B,OAAO,KAAK,IAAI;AAAA,IAC7D;AAAA,EACJ;AAEA,SAAO;AACX;AAKA,eAAe,eAAoC,KAA8B;AAC7E,QAAM,EAAC,YAAY,cAAa,IAAI,KAAK;AACzC,QAAM,cAAc,CAAC,KAAW,UAAkB;AAC9C,UAAM,QAAQ,IAAI,KAAK;AACvB,QAAI,OAAO,UAAU,UAAU;AAC3B;AAAA,IACJ;AAEA,QAAI,KAAK,IAAI,6BAAc,KAAK,MAAM,OAAO,KAAK,IAAI;AAAA,EAC1D;AAEA,MAAI,CAAC,cAAc,CAAC,eAAe;AAC/B,WAAO;AAAA,EACX;AAEA,aAAW,SAAS,CAAC,QAAQ,SAAS,SAAS,YAAY,GAAY;AACnE,gBAAY,KAAK,KAAK;AAAA,EAC1B;AAEA,MAAI,QAAQ,MAAM,KAAK,IAAI,UAAU,IAAI,OAAO,CAAC,SAAqB;AAClE,eAAW,SAAS,CAAC,QAAQ,MAAM,GAAY;AAC3C,kBAAY,MAAM,KAAK;AAAA,IAC3B;AAEA,WAAO;AAAA,EACX,CAAC;AAED,SAAO;AACX;AAMA,eAAe,aAAkC,KAA8B;AAC3E,QAAM,EAAC,kBAAiB,IAAI,KAAK;AACjC,QAAM,EAAC,YAAY,cAAa,IAAI,KAAK;AAEzC,MAAI,CAAC,cAAc,CAAC,eAAe;AAC/B,WAAO;AAAA,EACX;AAEA,MAAI,QAAQ,MAAM,KAAK,IAAI,UAAU,IAAI,OAAO,CAAC,SAAqB;AAClE,QAAI,OAAO;AAEX,QAAI,YAAY;AACZ,aACI,OAAO,KAAK,SAAS,WACf,YAAQ,yBAAS,KAAK,MAAM,KAAK,IAAI,CAAC,IACtC,KAAK,SAAS;AACxB,aAAO,KAAK;AAAA,IAChB;AAEA,QAAI,mBAAmB;AACnB,aAAO,QAAQ,CAAC,KAAK;AACrB,aAAO,KAAK;AAAA,IAChB;AAEA,WAAO,OAAO,OAAO;AAAA,EACzB,CAAC;AAED,SAAO;AACX;AAMA,eAAe,aAAkC,KAA8B;AAC3E,MAAI,QAAQ,MAAM,KAAK,IAAI,UAAU,IAAI,OAAO,OAAO,SAAS;AAC5D,WAAO,MAAM,SAAS,KAAK,GAAG,EAAE,KAAK,QAAQ,MAAM,KAAK,IAAI;AAE5D,QAAI,CAAC,QAAQ,KAAC,mBAAI,MAAM,SAAS,GAAG;AAChC,aAAO;AAAA,IACX;AAEA,UAAM,EAAC,QAAO,IAAI;AAElB,+BAAG,QAAQ,MAAM,iCAAiC;AAElD,QAAIC,OAA0B,CAAC;AAC/B,YAAI,mBAAI,SAAS,WAAW,GAAG;AAC3B;AAAA,QACI,QAAQ,SAAS,qBAAoB,CAAC,QAAQ;AAAA,QAC9C;AAAA,MACJ;AACA,iCAAG,MAAM,QAAQ,QAAQ,SAAS,GAAG,+BAA+B;AAEpE,YAAM,UAAU,QAAQ,KAAK,SAAS,UAAU,QAC1C,6BAAc,QAAQ,IAAI,QAC1B,iCAAc,uBAAK,QAAQ,MAAM,UAAU,CAAC;AAElD,iBAAW,YAAY,QAAQ,WAAW;AACtC,cAAM,OAAO,SAAS,KAAK,GAAG,EAAE,SAAS,IAAI,SAAS,IAAI;AAE1D,mCAAG,SAAS,MAAM,mCAAmC;AACrD,mCAAG,MAAM,uBAAuB,SAAS,IAAI,sBAAsB;AAEnE,cAAM,UAAU;AAAA,UACZ,GAAG;AAAA,UACH,MAAM;AAAA,QACV;AAEA,QAAAA,OAAM,MAAM,KAAK,QAAQA,MAAK,SAAS,KAAK,IAAI;AAAA,MACpD;AAEA,MAAAA,OAAO,MAAM,KAAK,IAAI,QAAQ,SAAS;AAAA,QACnC,MAAM,KAAK;AAAA,QACX,MAAM;AAAA,QACN,SAASA;AAAA,MACb,CAAC;AAAA,IACL,OAAO;AACH,YAAM,cAAc;AAAA,QAChB,MAAM,KAAK;AAAA,QACX,MAAM,QAAQ;AAAA,MAClB;AAEA,UAAI,YAAY,WAAW,GAAG;AAC1B,oBAAY,OAAO,KAAK,QAAQ,KAAK;AAAA,MACzC;AAEA,MAAAA,OAAO,MAAM,KAAK,IAAI,QAAQ,QAAQ,MAAM,WAAW;AAAA,IAC3D;AAEA,eAAO,oBAAK,MAAM,CAAC,SAAS,CAAC;AAE7B,QAAI,CAACA,MAAK;AACN,aAAO;AAAA,IACX;AAGA,QAAI,KAAK,MAAM;AACX,WAAK,SAAS,KAAK,SAAS,CAAC,GAAG,OAAQA,KAAI,SAA0B,CAAC,CAAC;AAExE,aAAO;AAAA,IACX,OAAO;AACH,aAAOA,KAAI;AAAA,IACf;AAAA,EACJ,CAAC;AAED,SAAO;AACX;AAOA,eAAe,eAAoC,KAA8B;AAC7E,QAAMC,kBAAiB,CAAC,SAA8B;AAClD,QAAI,KAAC,mBAA2B,MAAM,SAAS,GAAG;AAC9C,aAAO;AAAA,IACX;AAEA,QAAI,CAAC,KAAK,QAAQ,MAAM;AACpB,WAAK,QAAQ,WAAO,mBAA0B,KAAK,SAAS,WAAW,IACjE,oBACA;AAAA,IACV;AAEA,QAAI,KAAK,QAAQ,SAAS,8BAAuB;AAC7C,aAAO;AAAA,IACX;AAEA,QAAI,WAAW,IAAI,GAAG;AAClB,WAAK,QAAQ,WAAO,2BAAK,0BAAQ,KAAK,IAAI,GAAG,KAAK,QAAQ,IAAI;AAAA,IAClE,OAAO;AACH,WAAK,QAAQ,WAAO,2BAAK,0BAAQ,KAAK,QAAQ,KAAK,IAAI,GAAG,KAAK,QAAQ,IAAI;AAAA,IAC/E;AAEA,WAAO;AAAA,EACX;AAEA,QAAM,KAAK,IAAI,UAAU,CAAC,GAAG,GAAGA,eAAc;AAE9C,SAAO;AACX;AAKA,eAAe,YAAiC,KAA8B;AAC1E,QAAM,cAAc,CAAC,SAA8B;AAC/C,YAAI,mBAAa,MAAM,MAAM,KAAK,WAAW,KAAK,IAAI,GAAG;AACrD,YAAM,cAAU,0BAAQ,KAAK,IAAI;AACjC,YAAM,cAAU,2BAAK,0BAAQ,KAAK,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI;AAE/D,WAAK,WAAO,2BAAS,SAAS,OAAO;AAAA,IACzC;AAEA,WAAO;AAAA,EACX;AAEA,MAAI,WAAW,IAAI,GAAG;AAClB,UAAM,KAAK,IAAI,UAAU,CAAC,GAAG,GAAG,WAAW;AAAA,EAC/C;AAEA,SAAO;AACX;AAKA,eAAe,eAAoC,KAA8B;AAC7E,QAAM,KAAK,IAAI,UAAU,CAAC,GAAG,GAAG,CAAC,SAA8B;AAC3D,YAAI,mBAAY,MAAM,MAAM,KAAK,KAAC,8BAAe,KAAK,IAAI,GAAG;AACzD,UAAI,CAAC,KAAK,MAAM;AACZ,eAAO,KAAK,MAAM;AAClB,eAAO;AAAA,MACX;AAEA,WAAK,WAAO,6BAAc,KAAK,IAAI;AAEnC,UAAI,KAAK,KAAK,SAAS,GAAG,GAAG;AACzB,aAAK,OAAO,GAAG,KAAK,IAAI;AAAA,MAC5B;AAEA,UAAI,CAAC,KAAK,KAAK,SAAS,KAAK,KAAK,CAAC,KAAK,KAAK,SAAS,OAAO,GAAG;AAC5D,aAAK,OAAO,GAAG,KAAK,IAAI;AAAA,MAC5B;AAAA,IACJ;AAEA,WAAO;AAAA,EACX,CAAC;AAED,SAAO;AACX;;;AE/TA,IAAAC,oBAAgD;AAChD,qBAAmB;AACnB,uBAAqB;AAErB,IAAAC,gBAUO;AApBP;AAqDA,0BAAC,YAkCG,aAAC,wBA0DD,gBAAC,wBA4CD,aAAC,2BACA,uBAAQ,MAAM;AAxIZ,IAAM,aAAN,MAAiB;AAAA,EA2BpB,YAAY,KAAU;AA3BnB;AACH,SAAS,OAAO;AAYhB,SAAQ,WAAgC,oBAAI,IAAI;AAEhD,SAAQ,YAA2B,CAAC;AAEpC,SAAQ,QAAyE,oBAAI,IAAI;AAWrF,SAAK,MAAM;AACX,SAAK,SAAS,IAAI;AAClB,SAAK,SAAS,IAAI;AAAA,EACtB;AAAA,EA5BA,IAAI,UAAU;AACV,WAAO,CAAC,GAAG,KAAK,QAAQ;AAAA,EAC5B;AAAA,EAcA,IAAY,OAAO;AACf,WAAO,KAAK,IAAI;AAAA,EACpB;AAAA,EAEA,IAAY,OAAO;AACf,WAAO,KAAK,IAAI;AAAA,EACpB;AAAA,EAQS,MAAM,KAAK,MAA8C;AAC9D,UAAM,WAAO,6BAAc,IAAI;AAI/B,QAAI,KAAK,UAAU,IAAI,GAAG;AACtB,aAAO,KAAK,MAAM,IAAI,IAAI;AAAA,IAC9B;AAEA,SAAK,UAAU,IAAI,IAAI;AAEvB,SAAK,OAAO,KAAK,IAAI;AAErB,UAAM,QAAQ,IAAI,oBAAuB;AAEzC,SAAK,MAAM,IAAI,MAAM,MAAM,OAAO;AAElC,UAAM,QAAQ,KAAK,CAAC,WAAW;AAC3B,WAAK,MAAM,IAAI,MAAM,MAAM;AAAA,IAC/B,CAAC;AAED,UAAM,UAAyB,KAAK,cAAc,IAAI;AAEtD,UAAM,UAAU,MAAM,KAAK,KAAK,KAAK,IAAI;AAEzC,QAAI,KAAK,WAAW,OAAO,GAAG;AAC1B,WAAK,MAAM,OAAO,IAAI;AACtB,YAAM,QAAQ,MAAS;AACvB,aAAO;AAAA,IACX;AAEA,UAAM,MAAO,MAAM,OAAO,KAAK,SAAS,OAAO;AAI/C,QAAI,IAAI,QAAQ,IAAI,OAAO,QAAQ;AAC/B,YAAM,KAAK,UAAU,CAAC,GAAG,GAAG,CAAC,SAAwB;AACjD,gBAAI,mBAAoB,MAAM,MAAM,KAAK,KAAC,8BAAe,KAAK,IAAI,GAAG;AACjE,eAAK,SAAS,QAAI,iCAAc,4BAAK,2BAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AAE/D,kBAAI,mBAAY,MAAM,mBAAmB,GAAG;AACxC,iBAAK,IAAI,IAAI,KAAK,QAAI,iCAAc,4BAAK,2BAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,GAAG;AAAA,cACjE,qBAAqB,KAAK,mBAAmB;AAAA,YACjD,CAAC;AAAA,UACL;AAAA,QACJ;AAEA,eAAO;AAAA,MACX,CAAC;AAAA,IACL;AAEA,UAAM,QAAQ,GAAG;AAEjB,UAAM,SAAS,IAAI,EAAE,SAAS,YAAQ,0BAAW,GAAG,GAAG,IAAI;AAE3D,WAAO,MAAM;AAAA,EACjB;AAAA,EAES,MAAM,QAAQ,MAAoB,SAAgD;AACvF,UAAM,WAAO,6BAAc,IAAI;AAE/B,SAAK,UAAU,IAAI,IAAI;AAEvB,SAAK,OAAO,KAAK,IAAI;AAErB,UAAM,UAAyB,MAAM,KAAK,cAAc,MAAM,OAAO;AAErE,UAAM,UAAU,QAAQ,WAAY,MAAM,KAAK,KAAK,KAAK,MAAM,QAAQ,IAAI;AAE3E,QAAI,KAAK,WAAW,OAAO,GAAG;AAC1B,aAAO;AAAA,IACX;AAEA,QAAI,YAAY,OAAO,GAAG;AACtB,YAAM,WAAO,iCAAc,2BAAQ,IAAI,CAAC;AACxC,YAAM,SAAK,iCAAc,2BAAQ,QAAQ,IAAI,CAAC;AAE9C,cAAQ,OAAO,KAAK,KAAK,IAAI,QAAQ,IAAI;AACzC,cAAQ,OAAO,QAAQ,KAAK,QAAQ,MAAM,EAAE;AAC5C,cAAQ,OAAO,QAAQ;AAEvB,YAAM,QAAQ,MAAM,KAAK,IAAI;AAAA,YACzB,wBAAK,KAAK,IAAI,OAAO,IAAI;AAAA,YACzB,wBAAK,KAAK,IAAI,OAAO,EAAE;AAAA,QACvB,KAAC,4BAAS,IAAI,GAAG,aAAa;AAAA,MAClC;AAEA,iBAAW,CAACC,OAAMC,GAAE,KAAK,OAAO;AAC5B,aAAK,OAAO,KAAKD,OAAMC,GAAE;AACzB,aAAK,KAAK,QAAI,4BAAS,KAAK,IAAI,OAAOA,GAAE,GAAG;AAAA,UACxC,gBAAY,4BAAS,KAAK,IAAI,OAAOD,KAAI;AAAA,QAC7C,CAAC;AAAA,MACL;AAAA,IACJ;AAEA,UAAM,MAAO,MAAM,OAAO,KAAK,SAAS,OAAO;AAE/C,UAAM,SAAS,IAAI,EAAE,SAAS,QAAQ,KAAK,MAAM,OAAO;AAExD,WAAO;AAAA,EACX;AAAA,EAIA,MAAM,KAAK,MAA8C;AACrD,UAAM,WAAO,6BAAc,IAAI;AAC/B,UAAM,MAAM,MAAM,KAAK,KAAK,IAAI;AAEhC,QAAI,CAAC,KAAK;AACN;AAAA,IACJ;AAEA,WAAO,MAAM,SAAS,IAAI,EAAE,KAAK,YAAQ,wBAAS,GAAG,GAAG,IAAI;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UACF,OACA,OACwB;AACxB,QAAI,CAAC,SAAS,CAAC,MAAM,QAAQ;AACzB,aAAO;AAAA,IACX;AAEA,UAAM,UAAe,CAAC;AACtB,UAAM,QAAQ,CAAC,GAAG,KAAK;AACvB,WAAO,MAAM,QAAQ;AACjB,YAAM,OAAO,MAAM,MAAM;AAEzB,YAAM,SAAS,MAAM,MAAM,IAAI;AAC/B,UAAI,QAAQ;AACR,gBAAQ,KAAK,GAAI,CAAC,EAAU,OAAO,MAAM,CAAC;AAAA,MAC9C;AAAA,IACJ;AAEA,eAAW,UAAU,SAAS;AAC1B,cAAI,mBAAI,QAAQ,OAAO,GAAG;AAEtB,YAAI,CAAC,MAAM,QAAQ,OAAO,KAAK,KAAK,OAAO,OAAO;AAC9C,iBAAO,QAAS,CAAC,EAAU,OAAO,OAAO,KAAK;AAAA,QAClD;AAEA,YAAI,OAAO,OAAO,QAAQ;AACtB,iBAAO,QAAQ,MAAM,KAAK,UAAU,OAAO,OAAO,KAAK;AAAA,QAC3D;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,MAAsB,KAAU;AAChC,SAAK,MAAM,IAAI,MAAM,GAAG;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,MAAoC;AACpC,eAAO,6BAAc,IAAI;AAEzB,UAAM,cAAU,iCAAc,4BAAK,2BAAQ,IAAI,GAAG,UAAU,CAAC;AAE7D,QAAI,KAAK,MAAM,IAAI,OAAyB,GAAG;AAC3C,aAAO;AAAA,IACX;AAEA,UAAM,eAAW,2BAAQ,IAAI;AAE7B,QAAI,SAAS,UAAU;AACnB,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAClD;AAEA,WAAO,KAAK,IAAI,QAAQ;AAAA,EAC5B;AAAA,EAEA,IAAI,MAAoC;AACpC,UAAM,UAAU,KAAK,IAAI,IAAI;AAE7B,eAAO,iCAAc,2BAAQ,OAAO,CAAC;AAAA,EACzC;AAAA,EAEQ,WAAW,KAAa;AAG5B,QAAI,OAAO,IAAI,UAAU,mCAAoB;AACzC,aAAO;AAAA,IACX;AAEA,UAAM,EAAC,YAAW,IAAI,KAAK;AAC3B,QAAI,IAAI,SAAS,YAAY,UAAU,YAAY,SAAS,IAAI,KAAK,GAAG;AACpE,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AAAA,EAEQ,cAAc,MAAsB,EAAC,MAAM,MAAM,KAAI,IAA0B,CAAC,GAAG;AACvF,WAAO;AAAA,MACH;AAAA,MACA,MAAM,QAAQ;AAAA,MACd;AAAA,MACA;AAAA,MACA,MAAM,KAAK,KAAK,IAAI,IAAI;AAAA,MACxB,KAAK;AAAA,MACL,QAAQ,KAAK;AAAA,MACb,UAAU;AAAA,QACN,YAAY,KAAK,OAAO,SAAS,SAAS;AAAA,QAC1C,eAAe,KAAK,OAAO,SAAS,SAAS;AAAA,MACjD;AAAA,MACA,SAAS;AAAA,QACL,mBAAmB,KAAK,OAAO;AAAA,MACnC;AAAA,IACJ;AAAA,EACJ;AACJ;AA7PO;AAiCM,4BAAM,QAAf,WAjCS;AA2FA,4BAAM,WAAf,cA3FS;AAyIT,4BAAM,QAFN,WAvIS;AAAA,aAAN,0CADP,wBACa;AAAN,4BAAM;AA+Pb,eAAe,KAAK,KAAU,MAAoB,MAAgC;AAC9E,MAAI;AACA,eAAO,qBAAM,MAAM,IAAI,SAAK,wBAAK,IAAI,OAAO,IAAI,CAAC,KAAM,IAAI;AAAA,EAC/D,SAAS,OAAO;AACZ,UAAM,IAAI,MAAM;AAAA,gCACQ,IAAI,GAAG,OAAO,WAAW,OAAO,EAAE;AAAA;AAAA,sBAEhD,4BAAa,KAAK,CAAC;AAAA,SAC5B;AAAA,EACL;AACJ;",
6
6
  "names": ["import_liquid", "import_utils", "IncludeMode", "toc", "rebaseIncludes", "import_node_path", "import_utils", "from", "to"]
7
7
  }
package/lib/toc/index.mjs CHANGED
@@ -358,11 +358,11 @@ var TocService = class {
358
358
  await this.walkItems([toc], (item) => {
359
359
  if (own2(item, "href") && !isExternalHref2(item.href)) {
360
360
  this._entries.add(normalizePath2(join2(dirname2(path), item.href)));
361
- }
362
- if (own2(item, "restricted-access")) {
363
- this.run.toc.meta.add(normalizePath2(join2(dirname2(path), item.href)), {
364
- "restricted-access": item["restricted-access"]
365
- });
361
+ if (own2(item, "restricted-access")) {
362
+ this.run.toc.meta.add(normalizePath2(join2(dirname2(path), item.href)), {
363
+ "restricted-access": item["restricted-access"]
364
+ });
365
+ }
366
366
  }
367
367
  return item;
368
368
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/core/toc/hooks.ts", "../../src/core/toc/loader.ts", "../../src/core/toc/utils.ts", "../../src/core/toc/TocService.ts"],
4
- "sourcesContent": ["import type {IncludeInfo, IncluderOptions, RawToc, RawTocItem, Toc} from './types';\n\nimport {AsyncParallelHook, AsyncSeriesWaterfallHook, HookMap} from 'tapable';\n\nimport {generateHooksAccess} from '~/core/utils';\n\nexport function hooks(name: string) {\n return {\n /**\n * Called before item data processing (but after data interpolation)\n */\n Item: new AsyncSeriesWaterfallHook<[RawTocItem, RelativePath]>(\n ['TocItem', 'TocPath'],\n `${name}.Item`,\n ),\n /**\n * AsyncSeriesWaterfall HookMap called for each includer name detected in toc.<br>\n * Expects RawToc as result of waterfall.\n */\n Includer: new HookMap(\n (type: string) =>\n new AsyncSeriesWaterfallHook<[RawToc, IncluderOptions, RelativePath]>(\n ['Toc', 'options', 'TocPath'],\n `${name}.Includer(${type})`,\n ),\n ),\n Resolved: new AsyncParallelHook<[DeepFrozen<Toc>, RelativePath]>(\n ['Toc', 'TocPath'],\n `${name}.Resolved`,\n ),\n Included: new AsyncParallelHook<[Toc, RelativePath, IncludeInfo]>(\n ['Toc', 'TocPath', 'IncludeInfo'],\n `${name}.Included`,\n ),\n Dump: new AsyncSeriesWaterfallHook<[Toc, NormalizedPath]>(['toc', 'path'], `${name}.Dump`),\n };\n}\n\nconst [getHooks, withHooks] = generateHooksAccess('Toc', hooks);\n\nexport {getHooks, withHooks};\n", "import type {LiquidContext} from '@diplodoc/liquid';\nimport type {TocService} from './TocService';\nimport type {IncludeInfo, RawToc, RawTocItem, TocInclude, YfmString} from './types';\n\nimport {ok} from 'node:assert';\nimport {dirname, join, relative} from 'node:path';\nimport {omit} from 'lodash';\nimport {evaluate, liquidSnippet} from '@diplodoc/liquid';\n\nimport {isExternalHref, normalizePath, own} from '~/core/utils';\n\nimport {getHooks} from './hooks';\nimport {getFirstValuable, isRelative} from './utils';\n\nexport type LoaderContext = LiquidContext & {\n /** Relative to run.input path to current processing toc */\n path: RelativePath;\n /** Path of last include level */\n from: RelativePath;\n /** Path of last include level with 'merge' mode */\n base?: RelativePath;\n mode: IncludeMode | undefined;\n vars: Hash;\n options: {\n removeHiddenItems: boolean;\n };\n toc: TocService;\n};\n\nexport enum IncludeMode {\n RootMerge = 'root_merge',\n Merge = 'merge',\n Link = 'link',\n}\n\ntype MergeIncludeInfo = IncludeInfo & {\n mode: IncludeMode.RootMerge | IncludeMode.Merge;\n base: RelativePath;\n};\n\ntype LinkIncludeInfo = IncludeInfo & {\n mode: IncludeMode.Link;\n base?: undefined;\n};\n\nexport function isLinkMode(include: IncludeInfo | LoaderContext): include is LinkIncludeInfo {\n return IncludeMode.Link === include.mode;\n}\n\nexport function isMergeMode(include: IncludeInfo | LoaderContext): include is MergeIncludeInfo {\n return IncludeMode.RootMerge === include.mode || IncludeMode.Merge === include.mode;\n}\n\n// Designed to be isolated loaders in future\nexport async function loader(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n // Resolves toc fields which can be filterable arrays.\n // Apply when filter in some toc fields\n toc = await resolveFields.call(this, toc);\n\n // Apply when filter in toc.items\n // Drop hidden items\n toc = await resolveItems.call(this, toc);\n\n // Interpolate liquid vars in some toc fields\n toc = await templateFields.call(this, toc);\n\n // Make include paths relative to project root instead of toc root\n toc = await rebaseIncludes.call(this, toc);\n\n // Resolve includes and includers in toc items\n toc = await processItems.call(this, toc);\n\n // Rebase items href path for deep includes\n toc = await rebaseItems.call(this, toc);\n\n // Fix item href extensions\n toc = await normalizeItems.call(this, toc);\n\n return toc;\n}\n\n/**\n * Resolves toc fields which can be filterable arrays.\n * Convert arrays to text fields (gets first truth value)\n */\nasync function resolveFields(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n for (const field of ['title', 'label'] as const) {\n const value = toc[field];\n if (value) {\n toc[field] = getFirstValuable<YfmString>(value, this.vars);\n }\n }\n\n return toc;\n}\n\n/**\n * Applies liquid substitutions for some toc fields\n */\nasync function templateFields(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n const {conditions, substitutions} = this.settings;\n const interpolate = (box: Hash, field: string) => {\n const value = box[field];\n if (typeof value !== 'string') {\n return;\n }\n\n box[field] = liquidSnippet.call(this, value, this.vars);\n };\n\n if (!conditions && !substitutions) {\n return toc;\n }\n\n for (const field of ['href', 'title', 'label', 'navigation'] as const) {\n interpolate(toc, field);\n }\n\n toc.items = await this.toc.walkItems(toc.items, (item: RawTocItem) => {\n for (const field of ['name', 'href'] as const) {\n interpolate(item, field);\n }\n\n return item;\n });\n\n return toc;\n}\n\n/**\n * Applies `when` filter in toc items.\n * Also drops hidden items if needed.\n */\nasync function resolveItems(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n const {removeHiddenItems} = this.options;\n const {conditions, substitutions} = this.settings;\n\n if (!conditions && !substitutions) {\n return toc;\n }\n\n toc.items = await this.toc.walkItems(toc.items, (item: RawTocItem) => {\n let when = true;\n\n if (conditions) {\n when =\n typeof item.when === 'string'\n ? Boolean(evaluate(item.when, this.vars))\n : item.when !== false;\n delete item.when;\n }\n\n if (removeHiddenItems) {\n when = when && !item.hidden;\n delete item.hidden;\n }\n\n return when ? item : undefined;\n });\n\n return toc;\n}\n\n/**\n * Processes items includes and includers.\n * Then merges result in original place in `named` or `inline` mode.\n */\nasync function processItems(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n toc.items = await this.toc.walkItems(toc.items, async (item) => {\n item = await getHooks(this.toc).Item.promise(item, this.path);\n\n if (!item || !own(item, 'include')) {\n return item;\n }\n\n const {include} = item;\n\n ok(include.path, 'Invalid value for include path.');\n\n let toc: RawToc | undefined = {};\n if (own(include, 'includers')) {\n ok(\n include.mode === IncludeMode.Link || !include.mode,\n 'Invalid mode value for include with includers.',\n );\n ok(Array.isArray(include.includers), 'Includers should be an array.');\n\n const tocPath = include.path.endsWith('toc.yaml')\n ? normalizePath(include.path)\n : normalizePath(join(include.path, 'toc.yaml'));\n\n for (const includer of include.includers) {\n const hook = getHooks(this.toc).Includer.get(includer.name);\n\n ok(includer.name, 'Includer name should be a string.');\n ok(hook, `Includer with name '${includer.name}' is not registered.`);\n\n const options = {\n ...includer,\n path: tocPath,\n };\n\n toc = await hook.promise(toc, options, this.path);\n }\n\n toc = (await this.toc.include(tocPath, {\n from: this.path,\n mode: IncludeMode.Link,\n content: toc,\n })) as RawToc;\n } else {\n const includeInfo = {\n from: this.path,\n mode: include.mode,\n } as IncludeInfo;\n\n if (isMergeMode(includeInfo)) {\n includeInfo.base = this.base || this.path;\n }\n\n toc = (await this.toc.include(include.path, includeInfo)) as RawToc;\n }\n\n item = omit(item, ['include']) as RawTocItem;\n\n if (!toc) {\n return null;\n }\n\n // named mode\n if (item.name) {\n item.items = (item.items || []).concat((toc.items as RawTocItem[]) || []);\n\n return item;\n } else {\n return toc.items as RawTocItem[];\n }\n });\n\n return toc;\n}\n\n/**\n * Rebases items includes path.\n * For link mode path should be always relative to original toc source.\n * For merge modes path should be relative to merge base, which can be inherited from parent->parent->toc.\n */\nasync function rebaseIncludes(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n const rebaseIncludes = (item: RawTocItem | RawToc) => {\n if (!own<TocInclude, 'include'>(item, 'include')) {\n return item;\n }\n\n if (!item.include.mode) {\n item.include.mode = own<unknown, 'includers'>(item.include, 'includers')\n ? IncludeMode.Link\n : IncludeMode.RootMerge;\n }\n\n if (item.include.mode === IncludeMode.RootMerge) {\n return item;\n }\n\n if (isLinkMode(this)) {\n item.include.path = join(dirname(this.path), item.include.path);\n } else {\n item.include.path = join(dirname(this.base || this.path), item.include.path);\n }\n\n return item;\n };\n\n await this.toc.walkItems([toc], rebaseIncludes);\n\n return toc;\n}\n\n/**\n * Rebuses items href after include in parent toc\n */\nasync function rebaseItems(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n const rebaseHrefs = (item: RawTocItem | RawToc) => {\n if (own<AnyPath>(item, 'href') && isRelative(item.href)) {\n const absBase = dirname(this.from);\n const absPath = join(dirname(this.base || this.path), item.href);\n\n item.href = relative(absBase, absPath);\n }\n\n return item;\n };\n\n if (isLinkMode(this)) {\n await this.toc.walkItems([toc], rebaseHrefs);\n }\n\n return toc;\n}\n\n/**\n * Fixes item href extensions\n */\nasync function normalizeItems(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n await this.toc.walkItems([toc], (item: RawTocItem | RawToc) => {\n if (own<string>(item, 'href') && !isExternalHref(item.href)) {\n if (!item.href) {\n delete item['href'];\n return item;\n }\n\n item.href = normalizePath(item.href);\n\n if (item.href.endsWith('/')) {\n item.href = `${item.href}index.yaml`;\n }\n\n if (!item.href.endsWith('.md') && !item.href.endsWith('.yaml')) {\n item.href = `${item.href}.md`;\n }\n }\n\n return item;\n });\n\n return toc;\n}\n", "import type {TextFilter} from './types';\n\nimport {evaluate} from '@diplodoc/liquid';\n\nexport function isRelative(path: AnyPath): path is RelativePath {\n return /^\\.{1,2}\\//.test(path) || !/^(\\w{0,7}:)?\\/\\//.test(path);\n}\n\nexport function getFirstValuable<T>(\n items: TextFilter[] | string,\n vars: Hash,\n fallback?: T,\n): T | undefined {\n if (typeof items === 'string') {\n items = [{text: items, when: true}];\n }\n\n if (!Array.isArray(items)) {\n items = [];\n }\n\n for (const item of items) {\n let {when = true} = item;\n delete item.when;\n\n if (typeof when === 'string') {\n when = Boolean(evaluate(when, vars));\n }\n\n if (when) {\n return item.text as T;\n }\n }\n\n return fallback;\n}\n", "import type {Run as BaseRun} from '~/core/run';\nimport type {VarsService} from '~/core/vars';\nimport type {MetaService} from '~/core/meta';\nimport type {IncludeInfo, RawToc, Toc, TocItem, WithItems} from './types';\nimport type {LoaderContext} from './loader';\n\nimport {basename, dirname, join, relative} from 'node:path';\nimport {load} from 'js-yaml';\nimport {dedent} from 'ts-dedent';\n\nimport {\n Defer,\n bounded,\n copyJson,\n errorMessage,\n freezeJson,\n isExternalHref,\n memoize,\n normalizePath,\n own,\n} from '~/core/utils';\n\nimport {getHooks, withHooks} from './hooks';\nimport {isMergeMode, loader} from './loader';\n\nexport type TocServiceConfig = {\n ignore: string[];\n ignoreStage: string[];\n template: {\n enabled: boolean;\n features: {\n conditions: boolean;\n substitutions: boolean;\n };\n scopes: {\n code: boolean;\n text: boolean;\n };\n };\n removeHiddenTocItems: boolean;\n};\n\ntype WalkStepResult<I> = I | I[] | null | undefined;\n\nenum Stage {\n TECH_PREVIEW = 'tech-preview',\n}\n\ntype Run = BaseRun<TocServiceConfig> & {\n vars: VarsService;\n meta: MetaService;\n};\n\n@withHooks\nexport class TocService {\n readonly name = 'Toc';\n\n get entries() {\n return [...this._entries];\n }\n\n private run: Run;\n\n private logger: Run['logger'];\n\n private config: TocServiceConfig;\n\n private _entries: Set<NormalizedPath> = new Set();\n\n private processed: Hash<boolean> = {};\n\n private cache: Map<NormalizedPath, Toc | Promise<Toc | undefined> | undefined> = new Map();\n\n private get vars() {\n return this.run.vars;\n }\n\n private get meta() {\n return this.run.meta;\n }\n\n constructor(run: Run) {\n this.run = run;\n this.logger = run.logger;\n this.config = run.config;\n }\n\n @bounded async load(path: RelativePath): Promise<Toc | undefined> {\n const file = normalizePath(path);\n\n // There is no error. We really skip toc processing, if it was processed previously in any way.\n // For example toc can be processed as include of some other toc.\n if (this.processed[file]) {\n return this.cache.get(file);\n }\n\n this.processed[file] = true;\n\n this.logger.proc(file);\n\n const defer = new Defer<Toc | undefined>();\n\n this.cache.set(file, defer.promise);\n\n defer.promise.then((result) => {\n this.cache.set(file, result);\n });\n\n const context: LoaderContext = this.loaderContext(file);\n\n const content = await read(this.run, file);\n\n if (this.shouldSkip(content)) {\n this.cache.delete(file);\n defer.resolve(undefined);\n return undefined;\n }\n\n const toc = (await loader.call(context, content)) as Toc;\n\n // This looks how small optimization, but there was cases when toc is an array...\n // This is not that we expect.\n if (toc.href || toc.items?.length) {\n await this.walkItems([toc], (item: TocItem | Toc) => {\n if (own<string, 'href'>(item, 'href') && !isExternalHref(item.href)) {\n this._entries.add(normalizePath(join(dirname(path), item.href)));\n }\n if (own<string>(item, 'restricted-access')) {\n this.run.toc.meta.add(normalizePath(join(dirname(path), item.href)), {\n 'restricted-access': item['restricted-access'],\n });\n }\n\n return item;\n });\n }\n\n defer.resolve(toc);\n\n await getHooks(this).Resolved.promise(freezeJson(toc), file);\n\n return defer.promise;\n }\n\n @bounded async include(path: RelativePath, include: IncludeInfo): Promise<Toc | undefined> {\n const file = normalizePath(path);\n\n this.processed[file] = true;\n\n this.logger.proc(file);\n\n const context: LoaderContext = await this.loaderContext(file, include);\n\n const content = include.content || (await read(this.run, file, include.from));\n\n if (this.shouldSkip(content)) {\n return undefined;\n }\n\n if (isMergeMode(include)) {\n const from = normalizePath(dirname(file));\n const to = normalizePath(dirname(include.base));\n\n context.vars = this.vars.for(include.base);\n context.path = context.path.replace(from, to) as RelativePath;\n context.from = include.from;\n\n const files = await this.run.copy(\n join(this.run.input, from),\n join(this.run.input, to),\n [basename(file), '**/toc.yaml'],\n );\n\n for (const [from, to] of files) {\n this.logger.copy(from, to);\n this.meta.add(relative(this.run.input, to), {\n sourcePath: relative(this.run.input, from),\n });\n }\n }\n\n const toc = (await loader.call(context, content)) as Toc;\n\n await getHooks(this).Included.promise(toc, file, include);\n\n return toc;\n }\n\n @bounded\n @memoize('path')\n async dump(path: RelativePath): Promise<Toc | undefined> {\n const file = normalizePath(path);\n const toc = await this.load(path);\n\n if (!toc) {\n return;\n }\n\n return await getHooks(this).Dump.promise(copyJson(toc), file);\n }\n\n /**\n * Visits all passed items. Applies actor to each item.\n * Then applies actor to each item in actor result.items.\n * Returns actor results.\n */\n async walkItems<T extends WithItems<T>>(\n items: T[] | undefined,\n actor: (item: T) => Promise<WalkStepResult<T>> | WalkStepResult<T>,\n ): Promise<T[] | undefined> {\n if (!items || !items.length) {\n return items;\n }\n\n const results: T[] = [];\n const queue = [...items];\n while (queue.length) {\n const item = queue.shift() as T;\n\n const result = await actor(item);\n if (result) {\n results.push(...([] as T[]).concat(result));\n }\n }\n\n for (const result of results) {\n if (own(result, 'items')) {\n // Sometime users defines items as object (one item) instead of array of one item.\n if (!Array.isArray(result.items) && result.items) {\n result.items = ([] as T[]).concat(result.items);\n }\n\n if (result.items?.length) {\n result.items = await this.walkItems(result.items, actor);\n }\n }\n }\n\n return results;\n }\n\n set(path: NormalizedPath, toc: Toc) {\n this.cache.set(path, toc);\n }\n\n /**\n * Resolves toc path and data for any page path.\n * Expects what all paths are already loaded in service.\n */\n for(path: RelativePath): NormalizedPath {\n path = normalizePath(path);\n\n const tocPath = normalizePath(join(dirname(path), 'toc.yaml'));\n\n if (this.cache.has(tocPath as NormalizedPath)) {\n return tocPath;\n }\n\n const nextPath = dirname(path);\n\n if (path === nextPath) {\n throw new Error('Error while finding toc dir.');\n }\n\n return this.for(nextPath);\n }\n\n dir(path: RelativePath): NormalizedPath {\n const tocPath = this.for(path);\n\n return normalizePath(dirname(tocPath));\n }\n\n private shouldSkip(toc: RawToc) {\n // Should ignore included toc with tech-preview stage.\n // TODO(major): remove this\n if (toc && toc.stage === Stage.TECH_PREVIEW) {\n return true;\n }\n\n const {ignoreStage} = this.config;\n if (toc.stage && ignoreStage.length && ignoreStage.includes(toc.stage)) {\n return true;\n }\n\n return false;\n }\n\n private loaderContext(path: NormalizedPath, {from, mode, base}: Partial<IncludeInfo> = {}) {\n return {\n path,\n from: from || path,\n mode,\n base,\n vars: this.vars.for(path),\n toc: this,\n logger: this.logger,\n settings: {\n conditions: this.config.template.features.conditions,\n substitutions: this.config.template.features.substitutions,\n },\n options: {\n removeHiddenItems: this.config.removeHiddenTocItems,\n },\n };\n }\n}\n\nasync function read(run: Run, path: RelativePath, from?: string): Promise<RawToc> {\n try {\n return load((await run.read(join(run.input, path))) || '{}') as RawToc;\n } catch (error) {\n throw new Error(dedent`\n Unable to resolve ${path}${from ? ' from ' + from : ''}.\n Original error:\n ${errorMessage(error)}\n `);\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type {IncludeInfo, IncluderOptions, RawToc, RawTocItem, Toc} from './types';\n\nimport {AsyncParallelHook, AsyncSeriesWaterfallHook, HookMap} from 'tapable';\n\nimport {generateHooksAccess} from '~/core/utils';\n\nexport function hooks(name: string) {\n return {\n /**\n * Called before item data processing (but after data interpolation)\n */\n Item: new AsyncSeriesWaterfallHook<[RawTocItem, RelativePath]>(\n ['TocItem', 'TocPath'],\n `${name}.Item`,\n ),\n /**\n * AsyncSeriesWaterfall HookMap called for each includer name detected in toc.<br>\n * Expects RawToc as result of waterfall.\n */\n Includer: new HookMap(\n (type: string) =>\n new AsyncSeriesWaterfallHook<[RawToc, IncluderOptions, RelativePath]>(\n ['Toc', 'options', 'TocPath'],\n `${name}.Includer(${type})`,\n ),\n ),\n Resolved: new AsyncParallelHook<[DeepFrozen<Toc>, RelativePath]>(\n ['Toc', 'TocPath'],\n `${name}.Resolved`,\n ),\n Included: new AsyncParallelHook<[Toc, RelativePath, IncludeInfo]>(\n ['Toc', 'TocPath', 'IncludeInfo'],\n `${name}.Included`,\n ),\n Dump: new AsyncSeriesWaterfallHook<[Toc, NormalizedPath]>(['toc', 'path'], `${name}.Dump`),\n };\n}\n\nconst [getHooks, withHooks] = generateHooksAccess('Toc', hooks);\n\nexport {getHooks, withHooks};\n", "import type {LiquidContext} from '@diplodoc/liquid';\nimport type {TocService} from './TocService';\nimport type {IncludeInfo, RawToc, RawTocItem, TocInclude, YfmString} from './types';\n\nimport {ok} from 'node:assert';\nimport {dirname, join, relative} from 'node:path';\nimport {omit} from 'lodash';\nimport {evaluate, liquidSnippet} from '@diplodoc/liquid';\n\nimport {isExternalHref, normalizePath, own} from '~/core/utils';\n\nimport {getHooks} from './hooks';\nimport {getFirstValuable, isRelative} from './utils';\n\nexport type LoaderContext = LiquidContext & {\n /** Relative to run.input path to current processing toc */\n path: RelativePath;\n /** Path of last include level */\n from: RelativePath;\n /** Path of last include level with 'merge' mode */\n base?: RelativePath;\n mode: IncludeMode | undefined;\n vars: Hash;\n options: {\n removeHiddenItems: boolean;\n };\n toc: TocService;\n};\n\nexport enum IncludeMode {\n RootMerge = 'root_merge',\n Merge = 'merge',\n Link = 'link',\n}\n\ntype MergeIncludeInfo = IncludeInfo & {\n mode: IncludeMode.RootMerge | IncludeMode.Merge;\n base: RelativePath;\n};\n\ntype LinkIncludeInfo = IncludeInfo & {\n mode: IncludeMode.Link;\n base?: undefined;\n};\n\nexport function isLinkMode(include: IncludeInfo | LoaderContext): include is LinkIncludeInfo {\n return IncludeMode.Link === include.mode;\n}\n\nexport function isMergeMode(include: IncludeInfo | LoaderContext): include is MergeIncludeInfo {\n return IncludeMode.RootMerge === include.mode || IncludeMode.Merge === include.mode;\n}\n\n// Designed to be isolated loaders in future\nexport async function loader(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n // Resolves toc fields which can be filterable arrays.\n // Apply when filter in some toc fields\n toc = await resolveFields.call(this, toc);\n\n // Apply when filter in toc.items\n // Drop hidden items\n toc = await resolveItems.call(this, toc);\n\n // Interpolate liquid vars in some toc fields\n toc = await templateFields.call(this, toc);\n\n // Make include paths relative to project root instead of toc root\n toc = await rebaseIncludes.call(this, toc);\n\n // Resolve includes and includers in toc items\n toc = await processItems.call(this, toc);\n\n // Rebase items href path for deep includes\n toc = await rebaseItems.call(this, toc);\n\n // Fix item href extensions\n toc = await normalizeItems.call(this, toc);\n\n return toc;\n}\n\n/**\n * Resolves toc fields which can be filterable arrays.\n * Convert arrays to text fields (gets first truth value)\n */\nasync function resolveFields(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n for (const field of ['title', 'label'] as const) {\n const value = toc[field];\n if (value) {\n toc[field] = getFirstValuable<YfmString>(value, this.vars);\n }\n }\n\n return toc;\n}\n\n/**\n * Applies liquid substitutions for some toc fields\n */\nasync function templateFields(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n const {conditions, substitutions} = this.settings;\n const interpolate = (box: Hash, field: string) => {\n const value = box[field];\n if (typeof value !== 'string') {\n return;\n }\n\n box[field] = liquidSnippet.call(this, value, this.vars);\n };\n\n if (!conditions && !substitutions) {\n return toc;\n }\n\n for (const field of ['href', 'title', 'label', 'navigation'] as const) {\n interpolate(toc, field);\n }\n\n toc.items = await this.toc.walkItems(toc.items, (item: RawTocItem) => {\n for (const field of ['name', 'href'] as const) {\n interpolate(item, field);\n }\n\n return item;\n });\n\n return toc;\n}\n\n/**\n * Applies `when` filter in toc items.\n * Also drops hidden items if needed.\n */\nasync function resolveItems(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n const {removeHiddenItems} = this.options;\n const {conditions, substitutions} = this.settings;\n\n if (!conditions && !substitutions) {\n return toc;\n }\n\n toc.items = await this.toc.walkItems(toc.items, (item: RawTocItem) => {\n let when = true;\n\n if (conditions) {\n when =\n typeof item.when === 'string'\n ? Boolean(evaluate(item.when, this.vars))\n : item.when !== false;\n delete item.when;\n }\n\n if (removeHiddenItems) {\n when = when && !item.hidden;\n delete item.hidden;\n }\n\n return when ? item : undefined;\n });\n\n return toc;\n}\n\n/**\n * Processes items includes and includers.\n * Then merges result in original place in `named` or `inline` mode.\n */\nasync function processItems(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n toc.items = await this.toc.walkItems(toc.items, async (item) => {\n item = await getHooks(this.toc).Item.promise(item, this.path);\n\n if (!item || !own(item, 'include')) {\n return item;\n }\n\n const {include} = item;\n\n ok(include.path, 'Invalid value for include path.');\n\n let toc: RawToc | undefined = {};\n if (own(include, 'includers')) {\n ok(\n include.mode === IncludeMode.Link || !include.mode,\n 'Invalid mode value for include with includers.',\n );\n ok(Array.isArray(include.includers), 'Includers should be an array.');\n\n const tocPath = include.path.endsWith('toc.yaml')\n ? normalizePath(include.path)\n : normalizePath(join(include.path, 'toc.yaml'));\n\n for (const includer of include.includers) {\n const hook = getHooks(this.toc).Includer.get(includer.name);\n\n ok(includer.name, 'Includer name should be a string.');\n ok(hook, `Includer with name '${includer.name}' is not registered.`);\n\n const options = {\n ...includer,\n path: tocPath,\n };\n\n toc = await hook.promise(toc, options, this.path);\n }\n\n toc = (await this.toc.include(tocPath, {\n from: this.path,\n mode: IncludeMode.Link,\n content: toc,\n })) as RawToc;\n } else {\n const includeInfo = {\n from: this.path,\n mode: include.mode,\n } as IncludeInfo;\n\n if (isMergeMode(includeInfo)) {\n includeInfo.base = this.base || this.path;\n }\n\n toc = (await this.toc.include(include.path, includeInfo)) as RawToc;\n }\n\n item = omit(item, ['include']) as RawTocItem;\n\n if (!toc) {\n return null;\n }\n\n // named mode\n if (item.name) {\n item.items = (item.items || []).concat((toc.items as RawTocItem[]) || []);\n\n return item;\n } else {\n return toc.items as RawTocItem[];\n }\n });\n\n return toc;\n}\n\n/**\n * Rebases items includes path.\n * For link mode path should be always relative to original toc source.\n * For merge modes path should be relative to merge base, which can be inherited from parent->parent->toc.\n */\nasync function rebaseIncludes(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n const rebaseIncludes = (item: RawTocItem | RawToc) => {\n if (!own<TocInclude, 'include'>(item, 'include')) {\n return item;\n }\n\n if (!item.include.mode) {\n item.include.mode = own<unknown, 'includers'>(item.include, 'includers')\n ? IncludeMode.Link\n : IncludeMode.RootMerge;\n }\n\n if (item.include.mode === IncludeMode.RootMerge) {\n return item;\n }\n\n if (isLinkMode(this)) {\n item.include.path = join(dirname(this.path), item.include.path);\n } else {\n item.include.path = join(dirname(this.base || this.path), item.include.path);\n }\n\n return item;\n };\n\n await this.toc.walkItems([toc], rebaseIncludes);\n\n return toc;\n}\n\n/**\n * Rebuses items href after include in parent toc\n */\nasync function rebaseItems(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n const rebaseHrefs = (item: RawTocItem | RawToc) => {\n if (own<AnyPath>(item, 'href') && isRelative(item.href)) {\n const absBase = dirname(this.from);\n const absPath = join(dirname(this.base || this.path), item.href);\n\n item.href = relative(absBase, absPath);\n }\n\n return item;\n };\n\n if (isLinkMode(this)) {\n await this.toc.walkItems([toc], rebaseHrefs);\n }\n\n return toc;\n}\n\n/**\n * Fixes item href extensions\n */\nasync function normalizeItems(this: LoaderContext, toc: RawToc): Promise<RawToc> {\n await this.toc.walkItems([toc], (item: RawTocItem | RawToc) => {\n if (own<string>(item, 'href') && !isExternalHref(item.href)) {\n if (!item.href) {\n delete item['href'];\n return item;\n }\n\n item.href = normalizePath(item.href);\n\n if (item.href.endsWith('/')) {\n item.href = `${item.href}index.yaml`;\n }\n\n if (!item.href.endsWith('.md') && !item.href.endsWith('.yaml')) {\n item.href = `${item.href}.md`;\n }\n }\n\n return item;\n });\n\n return toc;\n}\n", "import type {TextFilter} from './types';\n\nimport {evaluate} from '@diplodoc/liquid';\n\nexport function isRelative(path: AnyPath): path is RelativePath {\n return /^\\.{1,2}\\//.test(path) || !/^(\\w{0,7}:)?\\/\\//.test(path);\n}\n\nexport function getFirstValuable<T>(\n items: TextFilter[] | string,\n vars: Hash,\n fallback?: T,\n): T | undefined {\n if (typeof items === 'string') {\n items = [{text: items, when: true}];\n }\n\n if (!Array.isArray(items)) {\n items = [];\n }\n\n for (const item of items) {\n let {when = true} = item;\n delete item.when;\n\n if (typeof when === 'string') {\n when = Boolean(evaluate(when, vars));\n }\n\n if (when) {\n return item.text as T;\n }\n }\n\n return fallback;\n}\n", "import type {Run as BaseRun} from '~/core/run';\nimport type {VarsService} from '~/core/vars';\nimport type {MetaService} from '~/core/meta';\nimport type {IncludeInfo, RawToc, Toc, TocItem, WithItems} from './types';\nimport type {LoaderContext} from './loader';\n\nimport {basename, dirname, join, relative} from 'node:path';\nimport {load} from 'js-yaml';\nimport {dedent} from 'ts-dedent';\n\nimport {\n Defer,\n bounded,\n copyJson,\n errorMessage,\n freezeJson,\n isExternalHref,\n memoize,\n normalizePath,\n own,\n} from '~/core/utils';\n\nimport {getHooks, withHooks} from './hooks';\nimport {isMergeMode, loader} from './loader';\n\nexport type TocServiceConfig = {\n ignore: string[];\n ignoreStage: string[];\n template: {\n enabled: boolean;\n features: {\n conditions: boolean;\n substitutions: boolean;\n };\n scopes: {\n code: boolean;\n text: boolean;\n };\n };\n removeHiddenTocItems: boolean;\n};\n\ntype WalkStepResult<I> = I | I[] | null | undefined;\n\nenum Stage {\n TECH_PREVIEW = 'tech-preview',\n}\n\ntype Run = BaseRun<TocServiceConfig> & {\n vars: VarsService;\n meta: MetaService;\n};\n\n@withHooks\nexport class TocService {\n readonly name = 'Toc';\n\n get entries() {\n return [...this._entries];\n }\n\n private run: Run;\n\n private logger: Run['logger'];\n\n private config: TocServiceConfig;\n\n private _entries: Set<NormalizedPath> = new Set();\n\n private processed: Hash<boolean> = {};\n\n private cache: Map<NormalizedPath, Toc | Promise<Toc | undefined> | undefined> = new Map();\n\n private get vars() {\n return this.run.vars;\n }\n\n private get meta() {\n return this.run.meta;\n }\n\n constructor(run: Run) {\n this.run = run;\n this.logger = run.logger;\n this.config = run.config;\n }\n\n @bounded async load(path: RelativePath): Promise<Toc | undefined> {\n const file = normalizePath(path);\n\n // There is no error. We really skip toc processing, if it was processed previously in any way.\n // For example toc can be processed as include of some other toc.\n if (this.processed[file]) {\n return this.cache.get(file);\n }\n\n this.processed[file] = true;\n\n this.logger.proc(file);\n\n const defer = new Defer<Toc | undefined>();\n\n this.cache.set(file, defer.promise);\n\n defer.promise.then((result) => {\n this.cache.set(file, result);\n });\n\n const context: LoaderContext = this.loaderContext(file);\n\n const content = await read(this.run, file);\n\n if (this.shouldSkip(content)) {\n this.cache.delete(file);\n defer.resolve(undefined);\n return undefined;\n }\n\n const toc = (await loader.call(context, content)) as Toc;\n\n // This looks how small optimization, but there was cases when toc is an array...\n // This is not that we expect.\n if (toc.href || toc.items?.length) {\n await this.walkItems([toc], (item: TocItem | Toc) => {\n if (own<string, 'href'>(item, 'href') && !isExternalHref(item.href)) {\n this._entries.add(normalizePath(join(dirname(path), item.href)));\n\n if (own<string>(item, 'restricted-access')) {\n this.run.toc.meta.add(normalizePath(join(dirname(path), item.href)), {\n 'restricted-access': item['restricted-access'],\n });\n }\n }\n\n return item;\n });\n }\n\n defer.resolve(toc);\n\n await getHooks(this).Resolved.promise(freezeJson(toc), file);\n\n return defer.promise;\n }\n\n @bounded async include(path: RelativePath, include: IncludeInfo): Promise<Toc | undefined> {\n const file = normalizePath(path);\n\n this.processed[file] = true;\n\n this.logger.proc(file);\n\n const context: LoaderContext = await this.loaderContext(file, include);\n\n const content = include.content || (await read(this.run, file, include.from));\n\n if (this.shouldSkip(content)) {\n return undefined;\n }\n\n if (isMergeMode(include)) {\n const from = normalizePath(dirname(file));\n const to = normalizePath(dirname(include.base));\n\n context.vars = this.vars.for(include.base);\n context.path = context.path.replace(from, to) as RelativePath;\n context.from = include.from;\n\n const files = await this.run.copy(\n join(this.run.input, from),\n join(this.run.input, to),\n [basename(file), '**/toc.yaml'],\n );\n\n for (const [from, to] of files) {\n this.logger.copy(from, to);\n this.meta.add(relative(this.run.input, to), {\n sourcePath: relative(this.run.input, from),\n });\n }\n }\n\n const toc = (await loader.call(context, content)) as Toc;\n\n await getHooks(this).Included.promise(toc, file, include);\n\n return toc;\n }\n\n @bounded\n @memoize('path')\n async dump(path: RelativePath): Promise<Toc | undefined> {\n const file = normalizePath(path);\n const toc = await this.load(path);\n\n if (!toc) {\n return;\n }\n\n return await getHooks(this).Dump.promise(copyJson(toc), file);\n }\n\n /**\n * Visits all passed items. Applies actor to each item.\n * Then applies actor to each item in actor result.items.\n * Returns actor results.\n */\n async walkItems<T extends WithItems<T>>(\n items: T[] | undefined,\n actor: (item: T) => Promise<WalkStepResult<T>> | WalkStepResult<T>,\n ): Promise<T[] | undefined> {\n if (!items || !items.length) {\n return items;\n }\n\n const results: T[] = [];\n const queue = [...items];\n while (queue.length) {\n const item = queue.shift() as T;\n\n const result = await actor(item);\n if (result) {\n results.push(...([] as T[]).concat(result));\n }\n }\n\n for (const result of results) {\n if (own(result, 'items')) {\n // Sometime users defines items as object (one item) instead of array of one item.\n if (!Array.isArray(result.items) && result.items) {\n result.items = ([] as T[]).concat(result.items);\n }\n\n if (result.items?.length) {\n result.items = await this.walkItems(result.items, actor);\n }\n }\n }\n\n return results;\n }\n\n set(path: NormalizedPath, toc: Toc) {\n this.cache.set(path, toc);\n }\n\n /**\n * Resolves toc path and data for any page path.\n * Expects what all paths are already loaded in service.\n */\n for(path: RelativePath): NormalizedPath {\n path = normalizePath(path);\n\n const tocPath = normalizePath(join(dirname(path), 'toc.yaml'));\n\n if (this.cache.has(tocPath as NormalizedPath)) {\n return tocPath;\n }\n\n const nextPath = dirname(path);\n\n if (path === nextPath) {\n throw new Error('Error while finding toc dir.');\n }\n\n return this.for(nextPath);\n }\n\n dir(path: RelativePath): NormalizedPath {\n const tocPath = this.for(path);\n\n return normalizePath(dirname(tocPath));\n }\n\n private shouldSkip(toc: RawToc) {\n // Should ignore included toc with tech-preview stage.\n // TODO(major): remove this\n if (toc && toc.stage === Stage.TECH_PREVIEW) {\n return true;\n }\n\n const {ignoreStage} = this.config;\n if (toc.stage && ignoreStage.length && ignoreStage.includes(toc.stage)) {\n return true;\n }\n\n return false;\n }\n\n private loaderContext(path: NormalizedPath, {from, mode, base}: Partial<IncludeInfo> = {}) {\n return {\n path,\n from: from || path,\n mode,\n base,\n vars: this.vars.for(path),\n toc: this,\n logger: this.logger,\n settings: {\n conditions: this.config.template.features.conditions,\n substitutions: this.config.template.features.substitutions,\n },\n options: {\n removeHiddenItems: this.config.removeHiddenTocItems,\n },\n };\n }\n}\n\nasync function read(run: Run, path: RelativePath, from?: string): Promise<RawToc> {\n try {\n return load((await run.read(join(run.input, path))) || '{}') as RawToc;\n } catch (error) {\n throw new Error(dedent`\n Unable to resolve ${path}${from ? ' from ' + from : ''}.\n Original error:\n ${errorMessage(error)}\n `);\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["evaluate", "IncludeMode", "evaluate", "toc", "rebaseIncludes", "dirname", "join", "relative", "isExternalHref", "normalizePath", "own", "normalizePath", "own", "isExternalHref", "join", "dirname", "from", "to", "relative"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diplodoc/cli",
3
- "version": "4.57.21",
3
+ "version": "4.57.22",
4
4
  "description": "Make documentation using yfm-docs in Markdown and HTML formats",
5
5
  "keywords": [
6
6
  "markdown",