@diplodoc/cli 4.57.11 → 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 +3 -3
- package/build/index.mjs +3 -3
- package/lib/toc/index.js +5 -0
- package/lib/toc/index.js.map +2 -2
- package/lib/toc/index.mjs +5 -0
- 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.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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
@@ -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
|
}
|
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 * 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\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 * 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
|
@@ -359,6 +359,11 @@ var TocService = class {
|
|
|
359
359
|
if (own2(item, "href") && !isExternalHref2(item.href)) {
|
|
360
360
|
this._entries.add(normalizePath2(join2(dirname2(path), item.href)));
|
|
361
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
|
+
}
|
|
362
367
|
return item;
|
|
363
368
|
});
|
|
364
369
|
}
|
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 * 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\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 * 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
|
}
|