@diplodoc/cli 4.57.10 → 4.57.12

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.10"}`
251521
+ generator: `Diplodoc Platform v${"4.57.12"}`
251522
251522
  }
251523
251523
  });
251524
251524
  const info2 = await this.process(entry);
@@ -257762,7 +257762,7 @@ var Program = class extends (_a8 = import_program17.BaseProgram) {
257762
257762
  super(...arguments);
257763
257763
  this.name = "Program";
257764
257764
  this.command = new import_config52.Command(NAME).helpOption(true).allowUnknownOption(false).version(
257765
- false ? "" : "4.57.10",
257765
+ false ? "" : "4.57.12",
257766
257766
  "--version",
257767
257767
  "Output the version number"
257768
257768
  ).usage(USAGE);
@@ -257789,7 +257789,7 @@ if (require.main === module) {
257789
257789
  (async () => {
257790
257790
  console.time(MAIN_TIMER_ID);
257791
257791
  if (process.env.NODE_ENV !== "test") {
257792
- console.log(`Using v${"4.57.10"} version`);
257792
+ console.log(`Using v${"4.57.12"} version`);
257793
257793
  }
257794
257794
  let exitCode = 0;
257795
257795
  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.10"}`
251514
+ generator: `Diplodoc Platform v${"4.57.12"}`
251515
251515
  }
251516
251516
  });
251517
251517
  const info2 = await this.process(entry);
@@ -257775,7 +257775,7 @@ var Program = class extends (_a8 = BaseProgram6) {
257775
257775
  super(...arguments);
257776
257776
  this.name = "Program";
257777
257777
  this.command = new Command7(NAME).helpOption(true).allowUnknownOption(false).version(
257778
- false ? "" : "4.57.10",
257778
+ false ? "" : "4.57.12",
257779
257779
  "--version",
257780
257780
  "Output the version number"
257781
257781
  ).usage(USAGE);
@@ -257802,7 +257802,7 @@ if (__require.main === module) {
257802
257802
  (async () => {
257803
257803
  console.time(MAIN_TIMER_ID);
257804
257804
  if (process.env.NODE_ENV !== "test") {
257805
- console.log(`Using v${"4.57.10"} version`);
257805
+ console.log(`Using v${"4.57.12"} version`);
257806
257806
  }
257807
257807
  let exitCode = 0;
257808
257808
  try {
package/lib/toc/index.js CHANGED
@@ -328,7 +328,7 @@ var import_js_yaml = require("js-yaml");
328
328
  var import_ts_dedent = require("ts-dedent");
329
329
  var import_utils4 = require("@diplodoc/cli/lib/utils");
330
330
  var _dump_dec, _include_dec, _load_dec, _TocService_decorators, _init;
331
- _TocService_decorators = [withHooks], _load_dec = [import_utils4.bounded], _include_dec = [import_utils4.bounded], _dump_dec = [import_utils4.bounded];
331
+ _TocService_decorators = [withHooks], _load_dec = [import_utils4.bounded], _include_dec = [import_utils4.bounded], _dump_dec = [import_utils4.bounded, (0, import_utils4.memoize)("path")];
332
332
  var TocService = class {
333
333
  constructor(run) {
334
334
  __runInitializers(_init, 5, this);
@@ -374,6 +374,11 @@ var TocService = class {
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
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
+ });
381
+ }
377
382
  return item;
378
383
  });
379
384
  }
@@ -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 * Rebuses items includes path.\n * For link moda 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 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\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 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,gBASO;AAnBP;AAoDA,0BAAC,YAkCG,aAAC,wBAoDD,gBAAC,wBA4CD,aAAC;AAjIE,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;AAAA,QACnE;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,EAES,MAAM,KAAK,MAA8C;AAC9D,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;AArPO;AAiCM,4BAAM,QAAf,WAjCS;AAqFA,4BAAM,WAAf,cArFS;AAiIA,4BAAM,QAAf,WAjIS;AAAA,aAAN,0CADP,wBACa;AAAN,4BAAM;AAuPb,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;",
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 * Rebuses items includes path.\n * For link moda 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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",
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
@@ -308,11 +308,12 @@ import {
308
308
  errorMessage,
309
309
  freezeJson,
310
310
  isExternalHref as isExternalHref2,
311
+ memoize,
311
312
  normalizePath as normalizePath2,
312
313
  own as own2
313
314
  } from "@diplodoc/cli/lib/utils";
314
315
  var _dump_dec, _include_dec, _load_dec, _TocService_decorators, _init;
315
- _TocService_decorators = [withHooks], _load_dec = [bounded], _include_dec = [bounded], _dump_dec = [bounded];
316
+ _TocService_decorators = [withHooks], _load_dec = [bounded], _include_dec = [bounded], _dump_dec = [bounded, memoize("path")];
316
317
  var TocService = class {
317
318
  constructor(run) {
318
319
  __runInitializers(_init, 5, this);
@@ -358,6 +359,11 @@ var TocService = class {
358
359
  if (own2(item, "href") && !isExternalHref2(item.href)) {
359
360
  this._entries.add(normalizePath2(join2(dirname2(path), item.href)));
360
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
+ });
366
+ }
361
367
  return item;
362
368
  });
363
369
  }
@@ -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 * Rebuses items includes path.\n * For link moda 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 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\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 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 * Rebuses items includes path.\n * For link moda 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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",
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.10",
3
+ "version": "4.57.12",
4
4
  "description": "Make documentation using yfm-docs in Markdown and HTML formats",
5
5
  "keywords": [
6
6
  "markdown",