@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 +3 -3
- package/build/index.mjs +3 -3
- package/lib/toc/index.js +5 -5
- package/lib/toc/index.js.map +2 -2
- package/lib/toc/index.mjs +5 -5
- package/lib/toc/index.mjs.map +2 -2
- package/package.json +1 -1
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
378
|
-
|
|
379
|
-
|
|
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
|
});
|
package/lib/toc/index.js.map
CHANGED
|
@@ -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": "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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
|
@@ -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
|
-
|
|
363
|
-
|
|
364
|
-
|
|
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
|
});
|
package/lib/toc/index.mjs.map
CHANGED
|
@@ -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
|
}
|