@hey-api/codegen-core 0.3.0 → 0.3.2
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/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +78 -53
- package/dist/index.d.ts +78 -53
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`node:path`);c=s(c);const l=({file:e,modulePath:t,symbol:n,symbolFile:r})=>{let i=[],a=[],o={aliases:{},from:t};if(n.
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`node:path`);c=s(c);const l=({file:e,modulePath:t,symbol:n,symbolFile:r})=>{let i=[],a=[],o={aliases:{},from:t};if(n.importKind&&(n.importKind===`default`?(o.defaultBinding=n.placeholder,n.kind===`type`&&(o.typeDefaultBinding=!0)):n.importKind===`namespace`&&(o.namespaceBinding=n.placeholder,n.kind===`type`&&(o.typeNamespaceBinding=!0))),n.importKind===`named`||!i.length&&!o.defaultBinding&&!o.namespaceBinding){let t=n.placeholder,s=e.resolvedNames.get(n.id);if(s){let e=r.resolvedNames.get(n.id);e?e!==s&&(t=e,o.aliases[t]=s):n.name&&s!==n.name&&(t=n.name,o.aliases[t]=n.placeholder)}i.push(t),n.kind===`type`&&a.push(t)}for(let e of a)i.includes(e)||i.push(e);return o.names=i,o.typeNames=a,o},u=(e,t)=>{e.aliases={...e.aliases,...t.aliases},t.defaultBinding!==void 0&&(e.defaultBinding=t.defaultBinding),e.names=[...new Set([...e.names??[],...t.names??[]])],t.namespaceBinding!==void 0&&(e.namespaceBinding=t.namespaceBinding),t.typeDefaultBinding!==void 0&&(e.typeDefaultBinding=t.typeDefaultBinding),e.typeNames=[...new Set([...e.typeNames??[],...t.typeNames??[]])],t.typeNamespaceBinding!==void 0&&(e.typeNamespaceBinding=t.typeNamespaceBinding)};var d=class{map=new Map;reverse=new Map;delete(e){let t=this.map.get(e);return t!==void 0&&this.reverse.delete(t),this.map.delete(e)}deleteValue(e){let t=this.reverse.get(e);return t!==void 0&&this.map.delete(t),this.reverse.delete(e)}entries(){return this.map.entries()}get(e){return this.map.get(e)}getKey(e){return this.reverse.get(e)}hasKey(e){return this.map.has(e)}hasValue(e){return this.reverse.has(e)}keys(){return this.map.keys()}set(e,t){let n=this.map.get(e);n!==void 0&&n!==t&&this.reverse.delete(n);let r=this.reverse.get(t);return r!==void 0&&r!==e&&this.map.delete(r),this.map.set(e,t),this.reverse.set(t,e),this}get size(){return this.map.size}values(){return this.map.values()}[Symbol.iterator](){return this.map[Symbol.iterator]()}},f=class{_id=0;referenceOrder=new Set;registerOrder=new Set;selectorToId=new Map;values=new Map;get(e){let t=this.identifierToFile(e);if(t.id!==void 0)return this.values.get(t.id);let n=t.selector===void 0?void 0:JSON.stringify(t.selector);if(n){let e=this.selectorToId.get(n);if(e!==void 0)return this.values.get(e)}}get id(){return this._id++}identifierToFile(e){return typeof e==`number`?{id:e}:{selector:e}}isRegistered(e){let t=this.get(e);return t?this.registerOrder.has(t.id):!1}reference(e){let t=this.identifierToFile(e);return this.register(t)}*referenced(){for(let e of this.referenceOrder.values())yield this.values.get(e)}register(e){if(e.id!==void 0){let t=this.values.get(e.id);if(!t)throw Error(`File with ID ${e.id} not found. To register a new file, leave the ID undefined.`);return t}let t=Object.keys(e).some(e=>![`id`,`selector`].includes(e)),n,r=e.selector===void 0?void 0:JSON.stringify(e.selector);if(r){let e=this.selectorToId.get(r);if(e!==void 0){if(n=this.values.get(e),!n)throw Error(`File with ID ${e} not found. The selector ${r} matched an ID, but there was no result. This is likely an issue with the application logic.`);if(!t)return n}}let i=n?.id===void 0?this.id:n.id;return n={...n,...e,id:i,resolvedNames:n?.resolvedNames??new d,symbols:n?.symbols??{body:[],exports:[],imports:[]}},this.values.set(i,n),t?(this.registerOrder.add(i),this.referenceOrder.has(i)&&this.referenceOrder.delete(i)):this.referenceOrder.add(i),r&&this.selectorToId.set(r,i),n}*registered(){for(let e of this.registerOrder.values())yield this.values.get(e)}};const p=e=>`_heyapi_${e}_`,m=e=>e.slice(8,-1),h=()=>new RegExp(p(`\\d+`),`g`),g=(e,t)=>e.replace(h(),e=>t(Number.parseInt(m(e),10))||e);var _=class{_id=0;indices=new Map;nodes=new Map;queryCache=new Map;queryCacheDependencies=new Map;registerOrder=new Set;stubCache=new Map;stubs=new Set;values=new Map;get(e){return typeof e==`number`?this.values.get(e):this.query(e)[0]}getValue(e){return this.nodes.get(e)}hasValue(e){return this.nodes.has(e)}get id(){return this._id++}isRegistered(e){let t=this.get(e);return t?this.registerOrder.has(t.id):!1}query(e){let t=this.buildCacheKey(e),n=this.queryCache.get(t);if(n)return n.map(e=>this.values.get(e));let r=[],i=this.buildIndexKeySpace(e),a=new Set,o=!1;for(let e of i){a.add(this.serializeIndexEntry(e));let t=this.indices.get(e[0]);if(!t){o=!0;break}let n=t.get(e[1]);if(!n){o=!0;break}r.push(n)}if(o||!r.length)return this.queryCacheDependencies.set(t,a),this.queryCache.set(t,[]),[];let s=new Set(r[0]);for(let e of r.slice(1))s=new Set([...s].filter(t=>e.has(t)));let c=[...s];return this.queryCacheDependencies.set(t,a),this.queryCache.set(t,c),c.map(e=>this.values.get(e))}reference(e){let[t]=this.query(e);if(t)return t;let n=this.buildCacheKey(e),r=this.stubCache.get(n);if(r!==void 0)return this.values.get(r);let i=this.id,a={exportFrom:[],id:i,meta:e,placeholder:p(String(i))};return this.values.set(a.id,a),this.stubs.add(a.id),this.stubCache.set(n,a.id),a}register(e){let t=e.id===void 0?this.id:e.id,n={...e,exportFrom:e.exportFrom??[],id:t,placeholder:e.placeholder??p(String(t))};if(this.values.set(n.id,n),this.registerOrder.add(n.id),n.meta){let e=this.buildIndexKeySpace(n.meta);this.indexSymbol(n.id,e),this.invalidateCache(e),this.replaceStubs(n,e)}return n}*registered(){for(let e of this.registerOrder.values())yield this.values.get(e)}setValue(e,t){return this.nodes.set(e,t)}buildCacheKey(e){return this.buildIndexKeySpace(e).map(e=>this.serializeIndexEntry(e)).sort().join(`|`)}buildIndexKeySpace(e,t=``){let n=[];for(let[r,i]of Object.entries(e)){let e=t?`${t}.${r}`:r;i&&typeof i==`object`&&!Array.isArray(i)?n.push(...this.buildIndexKeySpace(i,e)):n.push([e,i])}return n}indexSymbol(e,t){for(let[n,r]of t){this.indices.has(n)||this.indices.set(n,new Map);let t=this.indices.get(n),i=t.get(r)??new Set;i.add(e),t.set(r,i)}}invalidateCache(e){let t=e.map(e=>this.serializeIndexEntry(e));for(let[e,n]of this.queryCacheDependencies.entries())for(let r of t)if(n.has(r)){this.queryCacheDependencies.delete(e),this.queryCache.delete(e);break}}isSubset(e,t){let n=new Map(t);for(let[t,r]of e)if(!n.has(t)||n.get(t)!==r)return!1;return!0}replaceStubs(e,t){for(let n of this.stubs.values()){let r=this.values.get(n);if(r?.meta&&this.isSubset(this.buildIndexKeySpace(r.meta),t)){let t=this.buildCacheKey(r.meta);this.stubCache.delete(t),this.values.set(n,Object.assign(r,e)),this.stubs.delete(n)}}}serializeIndexEntry(e){return`${e[0]}:${JSON.stringify(e[1])}`}};const v=`@`;var y=class{symbolIdToFileIds=new Map;defaultFileName;files=new f;fileName;renderers={};root;symbols=new _;constructor({defaultFileName:e,fileName:t,renderers:n,root:r}){this.defaultFileName=e??`main`,this.fileName=typeof t==`string`?()=>t:t,this.renderers=n,this.root=r}getRenderer(e){return e.extension?this.renderers[e.extension]:void 0}prepareFiles(){for(let e of this.symbols.registered()){let t=this.symbolToFileSelector(e),n=this.files.reference(t);n.symbols.body.push(e.id);let r=this.symbolIdToFileIds.get(e.id)??new Set;r.add(n.id),this.symbolIdToFileIds.set(e.id,r);for(let t of e.exportFrom){let r=[t],i=this.files.reference(r);i.id!==n.id&&i.symbols.exports.push(e.id)}}for(let e of this.files.referenced()){if(!e.selector)continue;if(e.selector[0]===`@`){let t=e.selector[1];if(!t){this.files.register({external:!0,selector:e.selector});continue}let n=c.default.extname(t);if(!n){this.files.register({external:!0,path:t,selector:e.selector});continue}this.files.register({extension:n,external:!0,path:t,selector:e.selector});continue}let t=e.selector.slice(0,-1),n=e.selector[e.selector.length-1];n=this.fileName?.(n)||n,this.files.register({extension:`.ts`,name:n,path:c.default.resolve(this.root,...t,`${n}.ts`),selector:e.selector})}}render(e){this.prepareFiles();let t=new Map;for(let n of this.files.registered()){if(n.external||!n.path)continue;let r=this.getRenderer(n);r&&t.set(n.id,{content:r.renderSymbols(n,this,e),path:n.path})}for(let[n,r]of t.entries()){let i=this.files.get(n),a=this.getRenderer(i).renderFile(r.content,i,this,e);a?t.set(i.id,{...r,content:a}):t.delete(i.id)}return Array.from(t.values())}symbolIdToFiles(e){let t=this.symbolIdToFileIds.get(e);return Array.from(t??[]).map(e=>this.files.get(e))}symbolToFileSelector(e){if(e.external)return[`@`,e.external];let t=e.getFilePath?.(e);return t?t.split(`/`):[this.defaultFileName]}};exports.Project=y,exports.createBinding=l,exports.mergeBindings=u,exports.renderIds=g;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["names: Array<string>","typeNames: Array<string>","binding: IBinding & Pick<Required<IBinding>, 'aliases' | 'from'>","result","result: IFileOut | undefined","id","result","result: ISymbolOut | undefined","id","exportFrom: Array<string>","extension","path","files: Map<number, IOutput>"],"sources":["../src/bindings/utils.ts","../src/bimap/bimap.ts","../src/files/registry.ts","../src/renderer/utils.ts","../src/symbols/registry.ts","../src/project/project.ts"],"sourcesContent":["import type { IFileOut } from '../files/types';\nimport type { ISymbolOut } from '../symbols/types';\nimport type { IBinding } from './types';\n\nexport const createBinding = ({\n file,\n modulePath,\n symbol,\n symbolFile,\n}: {\n file: IFileOut;\n modulePath: string;\n symbol: ISymbolOut;\n symbolFile: IFileOut;\n}): IBinding => {\n const names: Array<string> = [];\n const typeNames: Array<string> = [];\n const binding: IBinding & Pick<Required<IBinding>, 'aliases' | 'from'> = {\n aliases: {},\n from: modulePath,\n };\n if (symbol.meta?.importKind) {\n if (symbol.meta.importKind === 'default') {\n binding.defaultBinding = symbol.placeholder;\n if (symbol.meta.kind === 'type') {\n binding.typeDefaultBinding = true;\n }\n } else if (symbol.meta.importKind === 'namespace') {\n binding.namespaceBinding = symbol.placeholder;\n if (symbol.meta.kind === 'type') {\n binding.typeNamespaceBinding = true;\n }\n }\n }\n // default to named binding\n if (\n symbol.meta?.importKind === 'named' ||\n (!names.length && !binding.defaultBinding && !binding.namespaceBinding)\n ) {\n let name = symbol.placeholder;\n const fileResolvedName = file.resolvedNames.get(symbol.id);\n if (fileResolvedName) {\n const symbolFileResolvedName = symbolFile.resolvedNames.get(symbol.id);\n if (symbolFileResolvedName) {\n if (symbolFileResolvedName !== fileResolvedName) {\n name = symbolFileResolvedName;\n binding.aliases[name] = fileResolvedName;\n }\n } else if (symbol.name && fileResolvedName !== symbol.name) {\n name = symbol.name;\n binding.aliases[name] = symbol.placeholder;\n }\n }\n names.push(name);\n if (symbol.meta?.kind === 'type') {\n typeNames.push(name);\n }\n }\n // cast type names to names to allow for cleaner API,\n // otherwise users would have to define the same values twice\n for (const typeName of typeNames) {\n if (!names.includes(typeName)) {\n names.push(typeName);\n }\n }\n binding.names = names;\n binding.typeNames = typeNames;\n return binding;\n};\n\nexport const mergeBindings = (target: IBinding, source: IBinding): void => {\n target.aliases = { ...target.aliases, ...source.aliases };\n if (source.defaultBinding !== undefined) {\n target.defaultBinding = source.defaultBinding;\n }\n target.names = [\n ...new Set([...(target.names ?? []), ...(source.names ?? [])]),\n ];\n if (source.namespaceBinding !== undefined) {\n target.namespaceBinding = source.namespaceBinding;\n }\n if (source.typeDefaultBinding !== undefined) {\n target.typeDefaultBinding = source.typeDefaultBinding;\n }\n target.typeNames = [\n ...new Set([...(target.typeNames ?? []), ...(source.typeNames ?? [])]),\n ];\n if (source.typeNamespaceBinding !== undefined) {\n target.typeNamespaceBinding = source.typeNamespaceBinding;\n }\n};\n","import type { IBiMap } from './types';\n\nexport class BiMap<Key, Value> implements IBiMap<Key, Value> {\n private map = new Map<Key, Value>();\n private reverse = new Map<Value, Key>();\n\n delete(key: Key): boolean {\n const value = this.map.get(key);\n if (value !== undefined) {\n this.reverse.delete(value);\n }\n return this.map.delete(key);\n }\n\n deleteValue(value: Value): boolean {\n const key = this.reverse.get(value);\n if (key !== undefined) {\n this.map.delete(key);\n }\n return this.reverse.delete(value);\n }\n\n entries(): IterableIterator<[Key, Value]> {\n return this.map.entries();\n }\n\n get(key: Key): Value | undefined {\n return this.map.get(key);\n }\n\n getKey(value: Value): Key | undefined {\n return this.reverse.get(value);\n }\n\n hasKey(key: Key): boolean {\n return this.map.has(key);\n }\n\n hasValue(value: Value): boolean {\n return this.reverse.has(value);\n }\n\n keys(): IterableIterator<Key> {\n return this.map.keys();\n }\n\n set(key: Key, value: Value): this {\n const oldValue = this.map.get(key);\n if (oldValue !== undefined && oldValue !== value) {\n this.reverse.delete(oldValue);\n }\n const oldKey = this.reverse.get(value);\n if (oldKey !== undefined && oldKey !== key) {\n this.map.delete(oldKey);\n }\n this.map.set(key, value);\n this.reverse.set(value, key);\n return this;\n }\n\n get size(): number {\n return this.map.size;\n }\n\n values(): IterableIterator<Value> {\n return this.map.values();\n }\n\n [Symbol.iterator](): IterableIterator<[Key, Value]> {\n return this.map[Symbol.iterator]();\n }\n}\n","import { BiMap } from '../bimap/bimap';\nimport type { ISelector } from '../selectors/types';\nimport type { IFileIn, IFileOut, IFileRegistry } from './types';\n\nexport class FileRegistry implements IFileRegistry {\n private _id: number = 0;\n private referenceOrder: Set<number> = new Set();\n private registerOrder: Set<number> = new Set();\n private selectorToId: Map<string, number> = new Map();\n private values: Map<number, IFileOut> = new Map();\n\n get(fileIdOrSelector: number | ISelector): IFileOut | undefined {\n const symbol = this.idOrSelector(fileIdOrSelector);\n\n if (symbol.id !== undefined) {\n return this.values.get(symbol.id);\n }\n\n const selector =\n symbol.selector !== undefined\n ? JSON.stringify(symbol.selector)\n : undefined;\n\n if (selector) {\n const id = this.selectorToId.get(selector);\n if (id !== undefined) {\n return this.values.get(id);\n }\n }\n\n return;\n }\n\n get id(): number {\n return this._id++;\n }\n\n private idOrSelector(\n symbolIdOrSelector: number | ISelector,\n ): Pick<IFileIn, 'id' | 'selector'> {\n return typeof symbolIdOrSelector === 'number'\n ? { id: symbolIdOrSelector }\n : { selector: symbolIdOrSelector };\n }\n\n reference(fileIdOrSelector: number | ISelector): IFileOut {\n const file = this.idOrSelector(fileIdOrSelector);\n return this.register(file);\n }\n\n *referenced(): IterableIterator<IFileOut> {\n for (const id of this.referenceOrder.values()) {\n yield this.values.get(id)!;\n }\n }\n\n register(file: IFileIn): IFileOut {\n if (file.id !== undefined) {\n const result = this.values.get(file.id);\n if (!result) {\n throw new Error(\n `File with ID ${file.id} not found. To register a new file, leave the ID undefined.`,\n );\n }\n return result;\n }\n\n const hasOtherKeys = Object.keys(file).some(\n (key) => !['id', 'selector'].includes(key),\n );\n\n let result: IFileOut | undefined;\n\n const selector =\n file.selector !== undefined ? JSON.stringify(file.selector) : undefined;\n if (selector) {\n const id = this.selectorToId.get(selector);\n if (id !== undefined) {\n result = this.values.get(id);\n if (!result) {\n throw new Error(\n `File with ID ${id} not found. The selector ${selector} matched an ID, but there was no result. This is likely an issue with the application logic.`,\n );\n }\n if (!hasOtherKeys) {\n return result;\n }\n }\n }\n\n const id = result?.id !== undefined ? result.id : this.id;\n result = {\n ...result,\n ...file, // clone to avoid mutation\n id,\n resolvedNames: result?.resolvedNames ?? new BiMap(),\n symbols: result?.symbols ?? {\n body: [],\n exports: [],\n imports: [],\n },\n };\n this.values.set(id, result);\n\n if (hasOtherKeys) {\n this.registerOrder.add(id);\n } else {\n this.referenceOrder.add(id);\n }\n\n if (selector) {\n this.selectorToId.set(selector, id);\n }\n\n return result;\n }\n\n *registered(): IterableIterator<IFileOut> {\n for (const id of this.registerOrder.values()) {\n yield this.values.get(id)!;\n }\n }\n}\n","/**\n * Wraps an ID in namespace to avoid collisions when replacing it.\n *\n * @param symbolId Stringified symbol ID to use.\n * @returns The wrapped placeholder ID.\n */\nexport const wrapId = (symbolId: string): string => `_heyapi_${symbolId}_`;\n\n/**\n * Unwraps an ID from namespace.\n *\n * @param wrappedId The wrapped placeholder ID.\n * @returns Stringified ID to use.\n */\nconst unwrapId = (wrappedId: string): string =>\n wrappedId.slice('_heyapi_'.length, -1);\n\n/**\n * Returns a RegExp instance to match ID placeholders.\n *\n * @returns RegExp instance to match ID placeholders.\n */\nconst createPlaceholderRegExp = (): RegExp => new RegExp(wrapId('\\\\d+'), 'g');\n\n/**\n *\n * @param source The source string to replace.\n * @param replacerFn Accepts a symbol ID, returns resolved symbol name.\n * @returns The replaced source string.\n */\nexport const renderIds = (\n source: string,\n replacerFn: (symbolId: number) => string | undefined,\n): string =>\n source.replace(createPlaceholderRegExp(), (match) => {\n const symbolId = Number.parseInt(unwrapId(match), 10);\n return replacerFn(symbolId) || match;\n });\n","import { wrapId } from '../renderer/utils';\nimport type { ISelector } from '../selectors/types';\nimport type { ISymbolIn, ISymbolOut, ISymbolRegistry } from './types';\n\nexport class SymbolRegistry implements ISymbolRegistry {\n private _id: number = 0;\n private nodes: Map<number, unknown> = new Map();\n private registerOrder: Set<number> = new Set();\n private selectorToId: Map<string, number> = new Map();\n private values: Map<number, ISymbolOut> = new Map();\n\n get(symbolIdOrSelector: number | ISelector): ISymbolOut | undefined {\n const symbol = this.idOrSelector(symbolIdOrSelector);\n\n if (symbol.id !== undefined) {\n return this.values.get(symbol.id);\n }\n\n const selector =\n symbol.selector !== undefined\n ? JSON.stringify(symbol.selector)\n : undefined;\n\n if (selector) {\n const id = this.selectorToId.get(selector);\n if (id !== undefined) {\n return this.values.get(id);\n }\n }\n\n return;\n }\n\n getValue(symbolId: number): unknown {\n return this.nodes.get(symbolId);\n }\n\n hasValue(symbolId: number): boolean {\n return this.nodes.has(symbolId);\n }\n\n get id(): number {\n return this._id++;\n }\n\n private idOrSelector(\n symbolIdOrSelector: number | ISelector,\n ): Pick<ISymbolIn, 'id' | 'selector'> {\n return typeof symbolIdOrSelector === 'number'\n ? { id: symbolIdOrSelector }\n : { selector: symbolIdOrSelector };\n }\n\n reference(symbolIdOrSelector: number | ISelector): ISymbolOut {\n const symbol = this.idOrSelector(symbolIdOrSelector);\n return this.register(symbol);\n }\n\n register(symbol: ISymbolIn): ISymbolOut {\n if (symbol.id !== undefined) {\n const result = this.values.get(symbol.id);\n if (!result) {\n throw new Error(\n `Symbol with ID ${symbol.id} not found. To register a new symbol, leave the ID undefined.`,\n );\n }\n return result;\n }\n\n const hasOtherKeys = Object.keys(symbol).some(\n (key) => !['id', 'selector'].includes(key),\n );\n\n let result: ISymbolOut | undefined;\n\n const selector =\n symbol.selector !== undefined\n ? JSON.stringify(symbol.selector)\n : undefined;\n if (selector) {\n const id = this.selectorToId.get(selector);\n if (id !== undefined) {\n result = this.values.get(id);\n if (!result) {\n throw new Error(\n `Symbol with ID ${id} not found. The selector ${selector} matched an ID, but there was no result. This is likely an issue with the application logic.`,\n );\n }\n if (!hasOtherKeys) {\n return result;\n }\n }\n }\n\n const id = result?.id !== undefined ? result.id : this.id;\n const exportFrom: Array<string> = result?.exportFrom\n ? [...result.exportFrom]\n : [];\n if (symbol.exportFrom) {\n exportFrom.push(...symbol.exportFrom);\n }\n result = {\n ...result,\n ...symbol, // clone to avoid mutation\n exportFrom,\n id,\n placeholder:\n result?.placeholder ?? symbol.placeholder ?? wrapId(String(id)),\n };\n this.values.set(id, result);\n\n if (hasOtherKeys) {\n this.registerOrder.add(id);\n }\n\n if (selector) {\n this.selectorToId.set(selector, id);\n }\n\n return result;\n }\n\n *registered(): IterableIterator<ISymbolOut> {\n for (const id of this.registerOrder.values()) {\n yield this.values.get(id)!;\n }\n }\n\n setValue(symbolId: number, value: unknown): Map<number, unknown> {\n return this.nodes.set(symbolId, value);\n }\n}\n","import path from 'node:path';\n\nimport type { IProjectRenderMeta } from '../extensions/types';\nimport { FileRegistry } from '../files/registry';\nimport type { IFileOut } from '../files/types';\nimport type { IOutput } from '../output/types';\nimport type { IRenderer } from '../renderer/types';\nimport type { ISelector } from '../selectors/types';\nimport { SymbolRegistry } from '../symbols/registry';\nimport type { ISymbolOut } from '../symbols/types';\nimport type { IProject } from './types';\n\nconst externalSourceSymbol = '@';\n\nexport class Project implements IProject {\n private symbolIdToFileIds: Map<number, Set<number>> = new Map();\n\n readonly defaultFileName: string;\n readonly files = new FileRegistry();\n readonly fileName?: (name: string) => string;\n readonly renderers: Record<string, IRenderer> = {};\n readonly root: string;\n readonly symbols = new SymbolRegistry();\n\n constructor({\n defaultFileName,\n fileName,\n renderers,\n root,\n }: Pick<IProject, 'defaultFileName' | 'fileName' | 'renderers' | 'root'>) {\n this.defaultFileName = defaultFileName ?? 'main';\n this.fileName = typeof fileName === 'string' ? () => fileName : fileName;\n this.renderers = renderers;\n this.root = root;\n }\n\n private getRenderer(file: IFileOut): IRenderer | undefined {\n return file.extension ? this.renderers[file.extension] : undefined;\n }\n\n private prepareFiles(): void {\n // TODO: infer extension from symbols\n const extension = '.ts';\n for (const symbol of this.symbols.registered()) {\n const selector = this.symbolToFileSelector(symbol);\n const file = this.files.reference(selector);\n file.symbols.body.push(symbol.id);\n // update symbol->files map\n const symbolIdToFileIds =\n this.symbolIdToFileIds.get(symbol.id) ?? new Set();\n symbolIdToFileIds.add(file.id);\n this.symbolIdToFileIds.set(symbol.id, symbolIdToFileIds);\n // update re-exports\n for (const exportFrom of symbol.exportFrom) {\n const exportSelector = [exportFrom];\n const exportFile = this.files.reference(exportSelector);\n if (exportFile.id !== file.id) {\n exportFile.symbols.exports.push(symbol.id);\n }\n }\n }\n for (const file of this.files.referenced()) {\n if (!file.selector) continue;\n if (file.selector[0] === externalSourceSymbol) {\n const filePath = file.selector[1];\n if (!filePath) {\n this.files.register({\n external: true,\n selector: file.selector,\n });\n continue;\n }\n const extension = path.extname(filePath);\n if (!extension) {\n this.files.register({\n external: true,\n path: filePath,\n selector: file.selector,\n });\n continue;\n }\n this.files.register({\n extension,\n external: true,\n path: filePath,\n selector: file.selector,\n });\n continue;\n }\n const dirs = file.selector.slice(0, -1);\n let name = file.selector[file.selector.length - 1]!;\n name = this.fileName?.(name) || name;\n this.files.register({\n extension,\n name,\n path: path.resolve(this.root, ...dirs, `${name}${extension}`),\n selector: file.selector,\n });\n }\n\n // TODO: track symbol dependencies and inject imports into files\n // based on symbol references so the render step can just render\n }\n\n render(meta?: IProjectRenderMeta): ReadonlyArray<IOutput> {\n this.prepareFiles();\n const files: Map<number, IOutput> = new Map();\n for (const file of this.files.registered()) {\n if (file.external || !file.path) continue;\n const renderer = this.getRenderer(file);\n if (!renderer) continue;\n files.set(file.id, {\n content: renderer.renderSymbols(file, this, meta),\n path: file.path,\n });\n }\n for (const [fileId, value] of files.entries()) {\n const file = this.files.get(fileId)!;\n const renderer = this.getRenderer(file)!;\n const content = renderer.renderFile(value.content, file, this, meta);\n if (content) {\n files.set(file.id, { ...value, content });\n } else {\n files.delete(file.id);\n }\n }\n return Array.from(files.values());\n }\n\n symbolIdToFiles(symbolId: number): ReadonlyArray<IFileOut> {\n const fileIds = this.symbolIdToFileIds.get(symbolId);\n return Array.from(fileIds ?? []).map((fileId) => this.files.get(fileId)!);\n }\n\n private symbolToFileSelector(symbol: ISymbolOut): ISelector {\n if (symbol.external) {\n return [externalSourceSymbol, symbol.external];\n }\n const filePath = symbol.getFilePath?.(symbol);\n if (filePath) {\n return filePath.split('/');\n }\n return [this.defaultFileName];\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["names: Array<string>","typeNames: Array<string>","binding: IBinding & Pick<Required<IBinding>, 'aliases' | 'from'>","result","result: IFileOut | undefined","id","sets: Array<Set<SymbolId>>","stub: ISymbolOut","result: ISymbolOut","entries: Array<IndexEntry>","path","extension","path","files: Map<number, IOutput>"],"sources":["../src/bindings/utils.ts","../src/bimap/bimap.ts","../src/files/registry.ts","../src/renderer/utils.ts","../src/symbols/registry.ts","../src/project/project.ts"],"sourcesContent":["import type { IFileOut } from '../files/types';\nimport type { ISymbolOut } from '../symbols/types';\nimport type { IBinding } from './types';\n\nexport const createBinding = ({\n file,\n modulePath,\n symbol,\n symbolFile,\n}: {\n file: IFileOut;\n modulePath: string;\n symbol: ISymbolOut;\n symbolFile: IFileOut;\n}): IBinding => {\n const names: Array<string> = [];\n const typeNames: Array<string> = [];\n const binding: IBinding & Pick<Required<IBinding>, 'aliases' | 'from'> = {\n aliases: {},\n from: modulePath,\n };\n if (symbol.importKind) {\n if (symbol.importKind === 'default') {\n binding.defaultBinding = symbol.placeholder;\n if (symbol.kind === 'type') {\n binding.typeDefaultBinding = true;\n }\n } else if (symbol.importKind === 'namespace') {\n binding.namespaceBinding = symbol.placeholder;\n if (symbol.kind === 'type') {\n binding.typeNamespaceBinding = true;\n }\n }\n }\n // default to named binding\n if (\n symbol.importKind === 'named' ||\n (!names.length && !binding.defaultBinding && !binding.namespaceBinding)\n ) {\n let name = symbol.placeholder;\n const fileResolvedName = file.resolvedNames.get(symbol.id);\n if (fileResolvedName) {\n const symbolFileResolvedName = symbolFile.resolvedNames.get(symbol.id);\n if (symbolFileResolvedName) {\n if (symbolFileResolvedName !== fileResolvedName) {\n name = symbolFileResolvedName;\n binding.aliases[name] = fileResolvedName;\n }\n } else if (symbol.name && fileResolvedName !== symbol.name) {\n name = symbol.name;\n binding.aliases[name] = symbol.placeholder;\n }\n }\n names.push(name);\n if (symbol.kind === 'type') {\n typeNames.push(name);\n }\n }\n // cast type names to names to allow for cleaner API,\n // otherwise users would have to define the same values twice\n for (const typeName of typeNames) {\n if (!names.includes(typeName)) {\n names.push(typeName);\n }\n }\n binding.names = names;\n binding.typeNames = typeNames;\n return binding;\n};\n\nexport const mergeBindings = (target: IBinding, source: IBinding): void => {\n target.aliases = { ...target.aliases, ...source.aliases };\n if (source.defaultBinding !== undefined) {\n target.defaultBinding = source.defaultBinding;\n }\n target.names = [\n ...new Set([...(target.names ?? []), ...(source.names ?? [])]),\n ];\n if (source.namespaceBinding !== undefined) {\n target.namespaceBinding = source.namespaceBinding;\n }\n if (source.typeDefaultBinding !== undefined) {\n target.typeDefaultBinding = source.typeDefaultBinding;\n }\n target.typeNames = [\n ...new Set([...(target.typeNames ?? []), ...(source.typeNames ?? [])]),\n ];\n if (source.typeNamespaceBinding !== undefined) {\n target.typeNamespaceBinding = source.typeNamespaceBinding;\n }\n};\n","import type { IBiMap } from './types';\n\nexport class BiMap<Key, Value> implements IBiMap<Key, Value> {\n private map = new Map<Key, Value>();\n private reverse = new Map<Value, Key>();\n\n delete(key: Key): boolean {\n const value = this.map.get(key);\n if (value !== undefined) {\n this.reverse.delete(value);\n }\n return this.map.delete(key);\n }\n\n deleteValue(value: Value): boolean {\n const key = this.reverse.get(value);\n if (key !== undefined) {\n this.map.delete(key);\n }\n return this.reverse.delete(value);\n }\n\n entries(): IterableIterator<[Key, Value]> {\n return this.map.entries();\n }\n\n get(key: Key): Value | undefined {\n return this.map.get(key);\n }\n\n getKey(value: Value): Key | undefined {\n return this.reverse.get(value);\n }\n\n hasKey(key: Key): boolean {\n return this.map.has(key);\n }\n\n hasValue(value: Value): boolean {\n return this.reverse.has(value);\n }\n\n keys(): IterableIterator<Key> {\n return this.map.keys();\n }\n\n set(key: Key, value: Value): this {\n const oldValue = this.map.get(key);\n if (oldValue !== undefined && oldValue !== value) {\n this.reverse.delete(oldValue);\n }\n const oldKey = this.reverse.get(value);\n if (oldKey !== undefined && oldKey !== key) {\n this.map.delete(oldKey);\n }\n this.map.set(key, value);\n this.reverse.set(value, key);\n return this;\n }\n\n get size(): number {\n return this.map.size;\n }\n\n values(): IterableIterator<Value> {\n return this.map.values();\n }\n\n [Symbol.iterator](): IterableIterator<[Key, Value]> {\n return this.map[Symbol.iterator]();\n }\n}\n","import { BiMap } from '../bimap/bimap';\nimport type {\n IFileIdentifier,\n IFileIn,\n IFileOut,\n IFileRegistry,\n} from './types';\n\nexport class FileRegistry implements IFileRegistry {\n private _id: number = 0;\n private referenceOrder: Set<number> = new Set();\n private registerOrder: Set<number> = new Set();\n private selectorToId: Map<string, number> = new Map();\n private values: Map<number, IFileOut> = new Map();\n\n get(identifier: IFileIdentifier): IFileOut | undefined {\n const file = this.identifierToFile(identifier);\n\n if (file.id !== undefined) {\n return this.values.get(file.id);\n }\n\n const selector =\n file.selector !== undefined ? JSON.stringify(file.selector) : undefined;\n\n if (selector) {\n const id = this.selectorToId.get(selector);\n if (id !== undefined) {\n return this.values.get(id);\n }\n }\n\n return;\n }\n\n get id(): number {\n return this._id++;\n }\n\n private identifierToFile(\n identifier: IFileIdentifier,\n ): Pick<IFileIn, 'id' | 'selector'> {\n return typeof identifier === 'number'\n ? { id: identifier }\n : { selector: identifier };\n }\n\n isRegistered(identifier: IFileIdentifier): boolean {\n const file = this.get(identifier);\n return file ? this.registerOrder.has(file.id) : false;\n }\n\n reference(identifier: IFileIdentifier): IFileOut {\n const file = this.identifierToFile(identifier);\n return this.register(file);\n }\n\n *referenced(): IterableIterator<IFileOut> {\n for (const id of this.referenceOrder.values()) {\n yield this.values.get(id)!;\n }\n }\n\n register(file: IFileIn): IFileOut {\n if (file.id !== undefined) {\n const result = this.values.get(file.id);\n if (!result) {\n throw new Error(\n `File with ID ${file.id} not found. To register a new file, leave the ID undefined.`,\n );\n }\n return result;\n }\n\n const hasOtherKeys = Object.keys(file).some(\n (key) => !['id', 'selector'].includes(key),\n );\n\n let result: IFileOut | undefined;\n\n const selector =\n file.selector !== undefined ? JSON.stringify(file.selector) : undefined;\n if (selector) {\n const id = this.selectorToId.get(selector);\n if (id !== undefined) {\n result = this.values.get(id);\n if (!result) {\n throw new Error(\n `File with ID ${id} not found. The selector ${selector} matched an ID, but there was no result. This is likely an issue with the application logic.`,\n );\n }\n if (!hasOtherKeys) {\n return result;\n }\n }\n }\n\n const id = result?.id !== undefined ? result.id : this.id;\n result = {\n ...result,\n ...file, // clone to avoid mutation\n id,\n resolvedNames: result?.resolvedNames ?? new BiMap(),\n symbols: result?.symbols ?? {\n body: [],\n exports: [],\n imports: [],\n },\n };\n this.values.set(id, result);\n\n if (hasOtherKeys) {\n this.registerOrder.add(id);\n if (this.referenceOrder.has(id)) {\n this.referenceOrder.delete(id);\n }\n } else {\n this.referenceOrder.add(id);\n }\n\n if (selector) {\n this.selectorToId.set(selector, id);\n }\n\n return result;\n }\n\n *registered(): IterableIterator<IFileOut> {\n for (const id of this.registerOrder.values()) {\n yield this.values.get(id)!;\n }\n }\n}\n","/**\n * Wraps an ID in namespace to avoid collisions when replacing it.\n *\n * @param symbolId Stringified symbol ID to use.\n * @returns The wrapped placeholder ID.\n */\nexport const wrapId = (symbolId: string): string => `_heyapi_${symbolId}_`;\n\n/**\n * Unwraps an ID from namespace.\n *\n * @param wrappedId The wrapped placeholder ID.\n * @returns Stringified ID to use.\n */\nconst unwrapId = (wrappedId: string): string =>\n wrappedId.slice('_heyapi_'.length, -1);\n\n/**\n * Returns a RegExp instance to match ID placeholders.\n *\n * @returns RegExp instance to match ID placeholders.\n */\nconst createPlaceholderRegExp = (): RegExp => new RegExp(wrapId('\\\\d+'), 'g');\n\n/**\n *\n * @param source The source string to replace.\n * @param replacerFn Accepts a symbol ID, returns resolved symbol name.\n * @returns The replaced source string.\n */\nexport const renderIds = (\n source: string,\n replacerFn: (symbolId: number) => string | undefined,\n): string =>\n source.replace(createPlaceholderRegExp(), (match) => {\n const symbolId = Number.parseInt(unwrapId(match), 10);\n return replacerFn(symbolId) || match;\n });\n","import type { ISymbolMeta } from '../extensions/types';\nimport { wrapId } from '../renderer/utils';\nimport type {\n ISymbolIdentifier,\n ISymbolIn,\n ISymbolOut,\n ISymbolRegistry,\n} from './types';\n\ntype IndexEntry = [string, unknown];\ntype IndexKeySpace = ReadonlyArray<IndexEntry>;\ntype QueryCacheKey = string;\ntype SymbolId = number;\n\nexport class SymbolRegistry implements ISymbolRegistry {\n private _id: SymbolId = 0;\n private indices: Map<IndexEntry[0], Map<IndexEntry[1], Set<SymbolId>>> =\n new Map();\n private nodes: Map<SymbolId, unknown> = new Map();\n private queryCache: Map<QueryCacheKey, ReadonlyArray<SymbolId>> = new Map();\n private queryCacheDependencies: Map<QueryCacheKey, Set<QueryCacheKey>> =\n new Map();\n private registerOrder: Set<SymbolId> = new Set();\n private stubCache: Map<QueryCacheKey, SymbolId> = new Map();\n private stubs: Set<SymbolId> = new Set();\n private values: Map<SymbolId, ISymbolOut> = new Map();\n\n get(identifier: ISymbolIdentifier): ISymbolOut | undefined {\n return typeof identifier === 'number'\n ? this.values.get(identifier)\n : this.query(identifier)[0];\n }\n\n getValue(symbolId: SymbolId): unknown {\n return this.nodes.get(symbolId);\n }\n\n hasValue(symbolId: SymbolId): boolean {\n return this.nodes.has(symbolId);\n }\n\n get id(): SymbolId {\n return this._id++;\n }\n\n isRegistered(identifier: ISymbolIdentifier): boolean {\n const symbol = this.get(identifier);\n return symbol ? this.registerOrder.has(symbol.id) : false;\n }\n\n query(filter: ISymbolMeta): ReadonlyArray<ISymbolOut> {\n const cacheKey = this.buildCacheKey(filter);\n const cachedIds = this.queryCache.get(cacheKey);\n if (cachedIds) {\n return cachedIds.map((symbolId) => this.values.get(symbolId)!);\n }\n const sets: Array<Set<SymbolId>> = [];\n const indexKeySpace = this.buildIndexKeySpace(filter);\n const cacheDependencies = new Set<QueryCacheKey>();\n let missed = false;\n for (const indexEntry of indexKeySpace) {\n cacheDependencies.add(this.serializeIndexEntry(indexEntry));\n const values = this.indices.get(indexEntry[0]);\n if (!values) {\n missed = true;\n break;\n }\n const set = values.get(indexEntry[1]);\n if (!set) {\n missed = true;\n break;\n }\n sets.push(set);\n }\n if (missed || !sets.length) {\n this.queryCacheDependencies.set(cacheKey, cacheDependencies);\n this.queryCache.set(cacheKey, []);\n return [];\n }\n let result = new Set(sets[0]);\n for (const set of sets.slice(1)) {\n result = new Set([...result].filter((symbolId) => set.has(symbolId)));\n }\n const resultIds = [...result];\n this.queryCacheDependencies.set(cacheKey, cacheDependencies);\n this.queryCache.set(cacheKey, resultIds);\n return resultIds.map((symbolId) => this.values.get(symbolId)!);\n }\n\n reference(meta: ISymbolMeta): ISymbolOut {\n const [registered] = this.query(meta);\n if (registered) return registered;\n const cacheKey = this.buildCacheKey(meta);\n const cachedId = this.stubCache.get(cacheKey);\n if (cachedId !== undefined) return this.values.get(cachedId)!;\n const id = this.id;\n const stub: ISymbolOut = {\n exportFrom: [],\n id,\n meta,\n placeholder: wrapId(String(id)),\n };\n this.values.set(stub.id, stub);\n this.stubs.add(stub.id);\n this.stubCache.set(cacheKey, stub.id);\n return stub;\n }\n\n register(symbol: ISymbolIn): ISymbolOut {\n const id = symbol.id !== undefined ? symbol.id : this.id;\n const result: ISymbolOut = {\n ...symbol, // clone to avoid mutation\n exportFrom: symbol.exportFrom ?? [],\n id,\n placeholder: symbol.placeholder ?? wrapId(String(id)),\n };\n this.values.set(result.id, result);\n this.registerOrder.add(result.id);\n if (result.meta) {\n const indexKeySpace = this.buildIndexKeySpace(result.meta);\n this.indexSymbol(result.id, indexKeySpace);\n this.invalidateCache(indexKeySpace);\n this.replaceStubs(result, indexKeySpace);\n }\n return result;\n }\n\n *registered(): IterableIterator<ISymbolOut> {\n for (const id of this.registerOrder.values()) {\n yield this.values.get(id)!;\n }\n }\n\n setValue(symbolId: SymbolId, value: unknown): Map<SymbolId, unknown> {\n return this.nodes.set(symbolId, value);\n }\n\n private buildCacheKey(filter: ISymbolMeta): QueryCacheKey {\n const indexKeySpace = this.buildIndexKeySpace(filter);\n return indexKeySpace\n .map((indexEntry) => this.serializeIndexEntry(indexEntry))\n .sort() // ensure order-insensitivity\n .join('|');\n }\n\n private buildIndexKeySpace(meta: ISymbolMeta, prefix = ''): IndexKeySpace {\n const entries: Array<IndexEntry> = [];\n for (const [key, value] of Object.entries(meta)) {\n const path = prefix ? `${prefix}.${key}` : key;\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n entries.push(...this.buildIndexKeySpace(value as ISymbolMeta, path));\n } else {\n entries.push([path, value]);\n }\n }\n return entries;\n }\n\n private indexSymbol(symbolId: SymbolId, indexKeySpace: IndexKeySpace): void {\n for (const [key, value] of indexKeySpace) {\n if (!this.indices.has(key)) this.indices.set(key, new Map());\n const values = this.indices.get(key)!;\n const set = values.get(value) ?? new Set();\n set.add(symbolId);\n values.set(value, set);\n }\n }\n\n private invalidateCache(indexKeySpace: IndexKeySpace): void {\n const changed = indexKeySpace.map((indexEntry) =>\n this.serializeIndexEntry(indexEntry),\n );\n for (const [\n cacheKey,\n cacheDependencies,\n ] of this.queryCacheDependencies.entries()) {\n for (const key of changed) {\n if (cacheDependencies.has(key)) {\n this.queryCacheDependencies.delete(cacheKey);\n this.queryCache.delete(cacheKey);\n break;\n }\n }\n }\n }\n\n private isSubset(sub: IndexKeySpace, sup: IndexKeySpace): boolean {\n const supMap = new Map(sup);\n for (const [key, value] of sub) {\n if (!supMap.has(key) || supMap.get(key) !== value) {\n return false;\n }\n }\n return true;\n }\n\n private replaceStubs(symbol: ISymbolOut, indexKeySpace: IndexKeySpace): void {\n for (const stubId of this.stubs.values()) {\n const stub = this.values.get(stubId);\n if (\n stub?.meta &&\n this.isSubset(this.buildIndexKeySpace(stub.meta), indexKeySpace)\n ) {\n const cacheKey = this.buildCacheKey(stub.meta);\n this.stubCache.delete(cacheKey);\n this.values.set(stubId, Object.assign(stub, symbol));\n this.stubs.delete(stubId);\n }\n }\n }\n\n private serializeIndexEntry(indexEntry: IndexEntry): string {\n return `${indexEntry[0]}:${JSON.stringify(indexEntry[1])}`;\n }\n}\n","import path from 'node:path';\n\nimport type { IProjectRenderMeta } from '../extensions/types';\nimport { FileRegistry } from '../files/registry';\nimport type { IFileOut, IFileSelector } from '../files/types';\nimport type { IOutput } from '../output/types';\nimport type { IRenderer } from '../renderer/types';\nimport { SymbolRegistry } from '../symbols/registry';\nimport type { ISymbolOut } from '../symbols/types';\nimport type { IProject } from './types';\n\nconst externalSourceSymbol = '@';\n\nexport class Project implements IProject {\n private symbolIdToFileIds: Map<number, Set<number>> = new Map();\n\n readonly defaultFileName: string;\n readonly files = new FileRegistry();\n readonly fileName?: (name: string) => string;\n readonly renderers: Record<string, IRenderer> = {};\n readonly root: string;\n readonly symbols = new SymbolRegistry();\n\n constructor({\n defaultFileName,\n fileName,\n renderers,\n root,\n }: Pick<IProject, 'defaultFileName' | 'fileName' | 'renderers' | 'root'>) {\n this.defaultFileName = defaultFileName ?? 'main';\n this.fileName = typeof fileName === 'string' ? () => fileName : fileName;\n this.renderers = renderers;\n this.root = root;\n }\n\n private getRenderer(file: IFileOut): IRenderer | undefined {\n return file.extension ? this.renderers[file.extension] : undefined;\n }\n\n private prepareFiles(): void {\n // TODO: infer extension from symbols\n const extension = '.ts';\n for (const symbol of this.symbols.registered()) {\n const selector = this.symbolToFileSelector(symbol);\n const file = this.files.reference(selector);\n file.symbols.body.push(symbol.id);\n // update symbol->files map\n const symbolIdToFileIds =\n this.symbolIdToFileIds.get(symbol.id) ?? new Set();\n symbolIdToFileIds.add(file.id);\n this.symbolIdToFileIds.set(symbol.id, symbolIdToFileIds);\n // update re-exports\n for (const exportFrom of symbol.exportFrom) {\n const exportSelector = [exportFrom];\n const exportFile = this.files.reference(exportSelector);\n if (exportFile.id !== file.id) {\n exportFile.symbols.exports.push(symbol.id);\n }\n }\n }\n for (const file of this.files.referenced()) {\n if (!file.selector) continue;\n if (file.selector[0] === externalSourceSymbol) {\n const filePath = file.selector[1];\n if (!filePath) {\n this.files.register({\n external: true,\n selector: file.selector,\n });\n continue;\n }\n const extension = path.extname(filePath);\n if (!extension) {\n this.files.register({\n external: true,\n path: filePath,\n selector: file.selector,\n });\n continue;\n }\n this.files.register({\n extension,\n external: true,\n path: filePath,\n selector: file.selector,\n });\n continue;\n }\n const dirs = file.selector.slice(0, -1);\n let name = file.selector[file.selector.length - 1]!;\n name = this.fileName?.(name) || name;\n this.files.register({\n extension,\n name,\n path: path.resolve(this.root, ...dirs, `${name}${extension}`),\n selector: file.selector,\n });\n }\n\n // TODO: track symbol dependencies and inject imports into files\n // based on symbol references so the render step can just render\n }\n\n render(meta?: IProjectRenderMeta): ReadonlyArray<IOutput> {\n this.prepareFiles();\n const files: Map<number, IOutput> = new Map();\n for (const file of this.files.registered()) {\n if (file.external || !file.path) continue;\n const renderer = this.getRenderer(file);\n if (!renderer) continue;\n files.set(file.id, {\n content: renderer.renderSymbols(file, this, meta),\n path: file.path,\n });\n }\n for (const [fileId, value] of files.entries()) {\n const file = this.files.get(fileId)!;\n const renderer = this.getRenderer(file)!;\n const content = renderer.renderFile(value.content, file, this, meta);\n if (content) {\n files.set(file.id, { ...value, content });\n } else {\n files.delete(file.id);\n }\n }\n return Array.from(files.values());\n }\n\n symbolIdToFiles(symbolId: number): ReadonlyArray<IFileOut> {\n const fileIds = this.symbolIdToFileIds.get(symbolId);\n return Array.from(fileIds ?? []).map((fileId) => this.files.get(fileId)!);\n }\n\n private symbolToFileSelector(symbol: ISymbolOut): IFileSelector {\n if (symbol.external) {\n return [externalSourceSymbol, symbol.external];\n }\n const filePath = symbol.getFilePath?.(symbol);\n if (filePath) {\n return filePath.split('/');\n }\n return [this.defaultFileName];\n }\n}\n"],"mappings":"ggBAIA,MAAa,GAAiB,CAC5B,OACA,aACA,SACA,gBAMc,CACd,IAAMA,EAAuB,EAAE,CACzBC,EAA2B,EAAE,CAC7BC,EAAmE,CACvE,QAAS,EAAE,CACX,KAAM,EACP,CAeD,GAdI,EAAO,aACL,EAAO,aAAe,WACxB,EAAQ,eAAiB,EAAO,YAC5B,EAAO,OAAS,SAClB,EAAQ,mBAAqB,KAEtB,EAAO,aAAe,cAC/B,EAAQ,iBAAmB,EAAO,YAC9B,EAAO,OAAS,SAClB,EAAQ,qBAAuB,MAMnC,EAAO,aAAe,SACrB,CAAC,EAAM,QAAU,CAAC,EAAQ,gBAAkB,CAAC,EAAQ,iBACtD,CACA,IAAI,EAAO,EAAO,YACZ,EAAmB,EAAK,cAAc,IAAI,EAAO,GAAG,CAC1D,GAAI,EAAkB,CACpB,IAAM,EAAyB,EAAW,cAAc,IAAI,EAAO,GAAG,CAClE,EACE,IAA2B,IAC7B,EAAO,EACP,EAAQ,QAAQ,GAAQ,GAEjB,EAAO,MAAQ,IAAqB,EAAO,OACpD,EAAO,EAAO,KACd,EAAQ,QAAQ,GAAQ,EAAO,aAGnC,EAAM,KAAK,EAAK,CACZ,EAAO,OAAS,QAClB,EAAU,KAAK,EAAK,CAKxB,IAAK,IAAM,KAAY,EAChB,EAAM,SAAS,EAAS,EAC3B,EAAM,KAAK,EAAS,CAKxB,MAFA,GAAQ,MAAQ,EAChB,EAAQ,UAAY,EACb,GAGI,GAAiB,EAAkB,IAA2B,CACzE,EAAO,QAAU,CAAE,GAAG,EAAO,QAAS,GAAG,EAAO,QAAS,CACrD,EAAO,iBAAmB,IAAA,KAC5B,EAAO,eAAiB,EAAO,gBAEjC,EAAO,MAAQ,CACb,GAAG,IAAI,IAAI,CAAC,GAAI,EAAO,OAAS,EAAE,CAAG,GAAI,EAAO,OAAS,EAAE,CAAE,CAAC,CAC/D,CACG,EAAO,mBAAqB,IAAA,KAC9B,EAAO,iBAAmB,EAAO,kBAE/B,EAAO,qBAAuB,IAAA,KAChC,EAAO,mBAAqB,EAAO,oBAErC,EAAO,UAAY,CACjB,GAAG,IAAI,IAAI,CAAC,GAAI,EAAO,WAAa,EAAE,CAAG,GAAI,EAAO,WAAa,EAAE,CAAE,CAAC,CACvE,CACG,EAAO,uBAAyB,IAAA,KAClC,EAAO,qBAAuB,EAAO,uBCtFzC,IAAa,EAAb,KAA6D,CAC3D,IAAc,IAAI,IAClB,QAAkB,IAAI,IAEtB,OAAO,EAAmB,CACxB,IAAM,EAAQ,KAAK,IAAI,IAAI,EAAI,CAI/B,OAHI,IAAU,IAAA,IACZ,KAAK,QAAQ,OAAO,EAAM,CAErB,KAAK,IAAI,OAAO,EAAI,CAG7B,YAAY,EAAuB,CACjC,IAAM,EAAM,KAAK,QAAQ,IAAI,EAAM,CAInC,OAHI,IAAQ,IAAA,IACV,KAAK,IAAI,OAAO,EAAI,CAEf,KAAK,QAAQ,OAAO,EAAM,CAGnC,SAA0C,CACxC,OAAO,KAAK,IAAI,SAAS,CAG3B,IAAI,EAA6B,CAC/B,OAAO,KAAK,IAAI,IAAI,EAAI,CAG1B,OAAO,EAA+B,CACpC,OAAO,KAAK,QAAQ,IAAI,EAAM,CAGhC,OAAO,EAAmB,CACxB,OAAO,KAAK,IAAI,IAAI,EAAI,CAG1B,SAAS,EAAuB,CAC9B,OAAO,KAAK,QAAQ,IAAI,EAAM,CAGhC,MAA8B,CAC5B,OAAO,KAAK,IAAI,MAAM,CAGxB,IAAI,EAAU,EAAoB,CAChC,IAAM,EAAW,KAAK,IAAI,IAAI,EAAI,CAC9B,IAAa,IAAA,IAAa,IAAa,GACzC,KAAK,QAAQ,OAAO,EAAS,CAE/B,IAAM,EAAS,KAAK,QAAQ,IAAI,EAAM,CAMtC,OALI,IAAW,IAAA,IAAa,IAAW,GACrC,KAAK,IAAI,OAAO,EAAO,CAEzB,KAAK,IAAI,IAAI,EAAK,EAAM,CACxB,KAAK,QAAQ,IAAI,EAAO,EAAI,CACrB,KAGT,IAAI,MAAe,CACjB,OAAO,KAAK,IAAI,KAGlB,QAAkC,CAChC,OAAO,KAAK,IAAI,QAAQ,CAG1B,CAAC,OAAO,WAA4C,CAClD,OAAO,KAAK,IAAI,OAAO,WAAW,GC7DzB,EAAb,KAAmD,CACjD,IAAsB,EACtB,eAAsC,IAAI,IAC1C,cAAqC,IAAI,IACzC,aAA4C,IAAI,IAChD,OAAwC,IAAI,IAE5C,IAAI,EAAmD,CACrD,IAAM,EAAO,KAAK,iBAAiB,EAAW,CAE9C,GAAI,EAAK,KAAO,IAAA,GACd,OAAO,KAAK,OAAO,IAAI,EAAK,GAAG,CAGjC,IAAM,EACJ,EAAK,WAAa,IAAA,GAA4C,IAAA,GAAhC,KAAK,UAAU,EAAK,SAAS,CAE7D,GAAI,EAAU,CACZ,IAAM,EAAK,KAAK,aAAa,IAAI,EAAS,CAC1C,GAAI,IAAO,IAAA,GACT,OAAO,KAAK,OAAO,IAAI,EAAG,EAOhC,IAAI,IAAa,CACf,MAAO,MAAK,MAGd,iBACE,EACkC,CAClC,OAAO,OAAO,GAAe,SACzB,CAAE,GAAI,EAAY,CAClB,CAAE,SAAU,EAAY,CAG9B,aAAa,EAAsC,CACjD,IAAM,EAAO,KAAK,IAAI,EAAW,CACjC,OAAO,EAAO,KAAK,cAAc,IAAI,EAAK,GAAG,CAAG,GAGlD,UAAU,EAAuC,CAC/C,IAAM,EAAO,KAAK,iBAAiB,EAAW,CAC9C,OAAO,KAAK,SAAS,EAAK,CAG5B,CAAC,YAAyC,CACxC,IAAK,IAAM,KAAM,KAAK,eAAe,QAAQ,CAC3C,MAAM,KAAK,OAAO,IAAI,EAAG,CAI7B,SAAS,EAAyB,CAChC,GAAI,EAAK,KAAO,IAAA,GAAW,CACzB,IAAMC,EAAS,KAAK,OAAO,IAAI,EAAK,GAAG,CACvC,GAAI,CAACA,EACH,MAAU,MACR,gBAAgB,EAAK,GAAG,6DACzB,CAEH,OAAOA,EAGT,IAAM,EAAe,OAAO,KAAK,EAAK,CAAC,KACpC,GAAQ,CAAC,CAAC,KAAM,WAAW,CAAC,SAAS,EAAI,CAC3C,CAEGC,EAEE,EACJ,EAAK,WAAa,IAAA,GAA4C,IAAA,GAAhC,KAAK,UAAU,EAAK,SAAS,CAC7D,GAAI,EAAU,CACZ,IAAMC,EAAK,KAAK,aAAa,IAAI,EAAS,CAC1C,GAAIA,IAAO,IAAA,GAAW,CAEpB,GADA,EAAS,KAAK,OAAO,IAAIA,EAAG,CACxB,CAAC,EACH,MAAU,MACR,gBAAgBA,EAAG,2BAA2B,EAAS,8FACxD,CAEH,GAAI,CAAC,EACH,OAAO,GAKb,IAAM,EAAK,GAAQ,KAAO,IAAA,GAAwB,KAAK,GAAjB,EAAO,GA2B7C,MA1BA,GAAS,CACP,GAAG,EACH,GAAG,EACH,KACA,cAAe,GAAQ,eAAiB,IAAI,EAC5C,QAAS,GAAQ,SAAW,CAC1B,KAAM,EAAE,CACR,QAAS,EAAE,CACX,QAAS,EAAE,CACZ,CACF,CACD,KAAK,OAAO,IAAI,EAAI,EAAO,CAEvB,GACF,KAAK,cAAc,IAAI,EAAG,CACtB,KAAK,eAAe,IAAI,EAAG,EAC7B,KAAK,eAAe,OAAO,EAAG,EAGhC,KAAK,eAAe,IAAI,EAAG,CAGzB,GACF,KAAK,aAAa,IAAI,EAAU,EAAG,CAG9B,EAGT,CAAC,YAAyC,CACxC,IAAK,IAAM,KAAM,KAAK,cAAc,QAAQ,CAC1C,MAAM,KAAK,OAAO,IAAI,EAAG,GC3H/B,MAAa,EAAU,GAA6B,WAAW,EAAS,GAQlE,EAAY,GAChB,EAAU,MAAM,EAAmB,GAAG,CAOlC,MAAwC,IAAI,OAAO,EAAO,OAAO,CAAE,IAAI,CAQhE,GACX,EACA,IAEA,EAAO,QAAQ,GAAyB,CAAG,GAElC,EADU,OAAO,SAAS,EAAS,EAAM,CAAE,GAAG,CAC1B,EAAI,EAC/B,CCvBJ,IAAa,EAAb,KAAuD,CACrD,IAAwB,EACxB,QACE,IAAI,IACN,MAAwC,IAAI,IAC5C,WAAkE,IAAI,IACtE,uBACE,IAAI,IACN,cAAuC,IAAI,IAC3C,UAAkD,IAAI,IACtD,MAA+B,IAAI,IACnC,OAA4C,IAAI,IAEhD,IAAI,EAAuD,CACzD,OAAO,OAAO,GAAe,SACzB,KAAK,OAAO,IAAI,EAAW,CAC3B,KAAK,MAAM,EAAW,CAAC,GAG7B,SAAS,EAA6B,CACpC,OAAO,KAAK,MAAM,IAAI,EAAS,CAGjC,SAAS,EAA6B,CACpC,OAAO,KAAK,MAAM,IAAI,EAAS,CAGjC,IAAI,IAAe,CACjB,MAAO,MAAK,MAGd,aAAa,EAAwC,CACnD,IAAM,EAAS,KAAK,IAAI,EAAW,CACnC,OAAO,EAAS,KAAK,cAAc,IAAI,EAAO,GAAG,CAAG,GAGtD,MAAM,EAAgD,CACpD,IAAM,EAAW,KAAK,cAAc,EAAO,CACrC,EAAY,KAAK,WAAW,IAAI,EAAS,CAC/C,GAAI,EACF,OAAO,EAAU,IAAK,GAAa,KAAK,OAAO,IAAI,EAAS,CAAE,CAEhE,IAAMC,EAA6B,EAAE,CAC/B,EAAgB,KAAK,mBAAmB,EAAO,CAC/C,EAAoB,IAAI,IAC1B,EAAS,GACb,IAAK,IAAM,KAAc,EAAe,CACtC,EAAkB,IAAI,KAAK,oBAAoB,EAAW,CAAC,CAC3D,IAAM,EAAS,KAAK,QAAQ,IAAI,EAAW,GAAG,CAC9C,GAAI,CAAC,EAAQ,CACX,EAAS,GACT,MAEF,IAAM,EAAM,EAAO,IAAI,EAAW,GAAG,CACrC,GAAI,CAAC,EAAK,CACR,EAAS,GACT,MAEF,EAAK,KAAK,EAAI,CAEhB,GAAI,GAAU,CAAC,EAAK,OAGlB,OAFA,KAAK,uBAAuB,IAAI,EAAU,EAAkB,CAC5D,KAAK,WAAW,IAAI,EAAU,EAAE,CAAC,CAC1B,EAAE,CAEX,IAAI,EAAS,IAAI,IAAI,EAAK,GAAG,CAC7B,IAAK,IAAM,KAAO,EAAK,MAAM,EAAE,CAC7B,EAAS,IAAI,IAAI,CAAC,GAAG,EAAO,CAAC,OAAQ,GAAa,EAAI,IAAI,EAAS,CAAC,CAAC,CAEvE,IAAM,EAAY,CAAC,GAAG,EAAO,CAG7B,OAFA,KAAK,uBAAuB,IAAI,EAAU,EAAkB,CAC5D,KAAK,WAAW,IAAI,EAAU,EAAU,CACjC,EAAU,IAAK,GAAa,KAAK,OAAO,IAAI,EAAS,CAAE,CAGhE,UAAU,EAA+B,CACvC,GAAM,CAAC,GAAc,KAAK,MAAM,EAAK,CACrC,GAAI,EAAY,OAAO,EACvB,IAAM,EAAW,KAAK,cAAc,EAAK,CACnC,EAAW,KAAK,UAAU,IAAI,EAAS,CAC7C,GAAI,IAAa,IAAA,GAAW,OAAO,KAAK,OAAO,IAAI,EAAS,CAC5D,IAAM,EAAK,KAAK,GACVC,EAAmB,CACvB,WAAY,EAAE,CACd,KACA,OACA,YAAa,EAAO,OAAO,EAAG,CAAC,CAChC,CAID,OAHA,KAAK,OAAO,IAAI,EAAK,GAAI,EAAK,CAC9B,KAAK,MAAM,IAAI,EAAK,GAAG,CACvB,KAAK,UAAU,IAAI,EAAU,EAAK,GAAG,CAC9B,EAGT,SAAS,EAA+B,CACtC,IAAM,EAAK,EAAO,KAAO,IAAA,GAAwB,KAAK,GAAjB,EAAO,GACtCC,EAAqB,CACzB,GAAG,EACH,WAAY,EAAO,YAAc,EAAE,CACnC,KACA,YAAa,EAAO,aAAe,EAAO,OAAO,EAAG,CAAC,CACtD,CAGD,GAFA,KAAK,OAAO,IAAI,EAAO,GAAI,EAAO,CAClC,KAAK,cAAc,IAAI,EAAO,GAAG,CAC7B,EAAO,KAAM,CACf,IAAM,EAAgB,KAAK,mBAAmB,EAAO,KAAK,CAC1D,KAAK,YAAY,EAAO,GAAI,EAAc,CAC1C,KAAK,gBAAgB,EAAc,CACnC,KAAK,aAAa,EAAQ,EAAc,CAE1C,OAAO,EAGT,CAAC,YAA2C,CAC1C,IAAK,IAAM,KAAM,KAAK,cAAc,QAAQ,CAC1C,MAAM,KAAK,OAAO,IAAI,EAAG,CAI7B,SAAS,EAAoB,EAAwC,CACnE,OAAO,KAAK,MAAM,IAAI,EAAU,EAAM,CAGxC,cAAsB,EAAoC,CAExD,OADsB,KAAK,mBAAmB,EAAO,CAElD,IAAK,GAAe,KAAK,oBAAoB,EAAW,CAAC,CACzD,MAAM,CACN,KAAK,IAAI,CAGd,mBAA2B,EAAmB,EAAS,GAAmB,CACxE,IAAMC,EAA6B,EAAE,CACrC,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,EAAK,CAAE,CAC/C,IAAMC,EAAO,EAAS,GAAG,EAAO,GAAG,IAAQ,EACvC,GAAS,OAAO,GAAU,UAAY,CAAC,MAAM,QAAQ,EAAM,CAC7D,EAAQ,KAAK,GAAG,KAAK,mBAAmB,EAAsBA,EAAK,CAAC,CAEpE,EAAQ,KAAK,CAACA,EAAM,EAAM,CAAC,CAG/B,OAAO,EAGT,YAAoB,EAAoB,EAAoC,CAC1E,IAAK,GAAM,CAAC,EAAK,KAAU,EAAe,CACnC,KAAK,QAAQ,IAAI,EAAI,EAAE,KAAK,QAAQ,IAAI,EAAK,IAAI,IAAM,CAC5D,IAAM,EAAS,KAAK,QAAQ,IAAI,EAAI,CAC9B,EAAM,EAAO,IAAI,EAAM,EAAI,IAAI,IACrC,EAAI,IAAI,EAAS,CACjB,EAAO,IAAI,EAAO,EAAI,EAI1B,gBAAwB,EAAoC,CAC1D,IAAM,EAAU,EAAc,IAAK,GACjC,KAAK,oBAAoB,EAAW,CACrC,CACD,IAAK,GAAM,CACT,EACA,KACG,KAAK,uBAAuB,SAAS,CACxC,IAAK,IAAM,KAAO,EAChB,GAAI,EAAkB,IAAI,EAAI,CAAE,CAC9B,KAAK,uBAAuB,OAAO,EAAS,CAC5C,KAAK,WAAW,OAAO,EAAS,CAChC,OAMR,SAAiB,EAAoB,EAA6B,CAChE,IAAM,EAAS,IAAI,IAAI,EAAI,CAC3B,IAAK,GAAM,CAAC,EAAK,KAAU,EACzB,GAAI,CAAC,EAAO,IAAI,EAAI,EAAI,EAAO,IAAI,EAAI,GAAK,EAC1C,MAAO,GAGX,MAAO,GAGT,aAAqB,EAAoB,EAAoC,CAC3E,IAAK,IAAM,KAAU,KAAK,MAAM,QAAQ,CAAE,CACxC,IAAM,EAAO,KAAK,OAAO,IAAI,EAAO,CACpC,GACE,GAAM,MACN,KAAK,SAAS,KAAK,mBAAmB,EAAK,KAAK,CAAE,EAAc,CAChE,CACA,IAAM,EAAW,KAAK,cAAc,EAAK,KAAK,CAC9C,KAAK,UAAU,OAAO,EAAS,CAC/B,KAAK,OAAO,IAAI,EAAQ,OAAO,OAAO,EAAM,EAAO,CAAC,CACpD,KAAK,MAAM,OAAO,EAAO,GAK/B,oBAA4B,EAAgC,CAC1D,MAAO,GAAG,EAAW,GAAG,GAAG,KAAK,UAAU,EAAW,GAAG,KCzM5D,MAAM,EAAuB,IAE7B,IAAa,EAAb,KAAyC,CACvC,kBAAsD,IAAI,IAE1D,gBACA,MAAiB,IAAI,EACrB,SACA,UAAgD,EAAE,CAClD,KACA,QAAmB,IAAI,EAEvB,YAAY,CACV,kBACA,WACA,YACA,QACwE,CACxE,KAAK,gBAAkB,GAAmB,OAC1C,KAAK,SAAW,OAAO,GAAa,aAAiB,EAAW,EAChE,KAAK,UAAY,EACjB,KAAK,KAAO,EAGd,YAAoB,EAAuC,CACzD,OAAO,EAAK,UAAY,KAAK,UAAU,EAAK,WAAa,IAAA,GAG3D,cAA6B,CAG3B,IAAK,IAAM,KAAU,KAAK,QAAQ,YAAY,CAAE,CAC9C,IAAM,EAAW,KAAK,qBAAqB,EAAO,CAC5C,EAAO,KAAK,MAAM,UAAU,EAAS,CAC3C,EAAK,QAAQ,KAAK,KAAK,EAAO,GAAG,CAEjC,IAAM,EACJ,KAAK,kBAAkB,IAAI,EAAO,GAAG,EAAI,IAAI,IAC/C,EAAkB,IAAI,EAAK,GAAG,CAC9B,KAAK,kBAAkB,IAAI,EAAO,GAAI,EAAkB,CAExD,IAAK,IAAM,KAAc,EAAO,WAAY,CAC1C,IAAM,EAAiB,CAAC,EAAW,CAC7B,EAAa,KAAK,MAAM,UAAU,EAAe,CACnD,EAAW,KAAO,EAAK,IACzB,EAAW,QAAQ,QAAQ,KAAK,EAAO,GAAG,EAIhD,IAAK,IAAM,KAAQ,KAAK,MAAM,YAAY,CAAE,CAC1C,GAAI,CAAC,EAAK,SAAU,SACpB,GAAI,EAAK,SAAS,KAAO,IAAsB,CAC7C,IAAM,EAAW,EAAK,SAAS,GAC/B,GAAI,CAAC,EAAU,CACb,KAAK,MAAM,SAAS,CAClB,SAAU,GACV,SAAU,EAAK,SAChB,CAAC,CACF,SAEF,IAAMC,EAAYC,EAAAA,QAAK,QAAQ,EAAS,CACxC,GAAI,CAACD,EAAW,CACd,KAAK,MAAM,SAAS,CAClB,SAAU,GACV,KAAM,EACN,SAAU,EAAK,SAChB,CAAC,CACF,SAEF,KAAK,MAAM,SAAS,CAClB,UAAA,EACA,SAAU,GACV,KAAM,EACN,SAAU,EAAK,SAChB,CAAC,CACF,SAEF,IAAM,EAAO,EAAK,SAAS,MAAM,EAAG,GAAG,CACnC,EAAO,EAAK,SAAS,EAAK,SAAS,OAAS,GAChD,EAAO,KAAK,WAAW,EAAK,EAAI,EAChC,KAAK,MAAM,SAAS,CAClB,gBACA,OACA,KAAMC,EAAAA,QAAK,QAAQ,KAAK,KAAM,GAAG,EAAM,GAAG,OAAmB,CAC7D,SAAU,EAAK,SAChB,CAAC,EAON,OAAO,EAAmD,CACxD,KAAK,cAAc,CACnB,IAAMC,EAA8B,IAAI,IACxC,IAAK,IAAM,KAAQ,KAAK,MAAM,YAAY,CAAE,CAC1C,GAAI,EAAK,UAAY,CAAC,EAAK,KAAM,SACjC,IAAM,EAAW,KAAK,YAAY,EAAK,CAClC,GACL,EAAM,IAAI,EAAK,GAAI,CACjB,QAAS,EAAS,cAAc,EAAM,KAAM,EAAK,CACjD,KAAM,EAAK,KACZ,CAAC,CAEJ,IAAK,GAAM,CAAC,EAAQ,KAAU,EAAM,SAAS,CAAE,CAC7C,IAAM,EAAO,KAAK,MAAM,IAAI,EAAO,CAE7B,EADW,KAAK,YAAY,EAAK,CACd,WAAW,EAAM,QAAS,EAAM,KAAM,EAAK,CAChE,EACF,EAAM,IAAI,EAAK,GAAI,CAAE,GAAG,EAAO,UAAS,CAAC,CAEzC,EAAM,OAAO,EAAK,GAAG,CAGzB,OAAO,MAAM,KAAK,EAAM,QAAQ,CAAC,CAGnC,gBAAgB,EAA2C,CACzD,IAAM,EAAU,KAAK,kBAAkB,IAAI,EAAS,CACpD,OAAO,MAAM,KAAK,GAAW,EAAE,CAAC,CAAC,IAAK,GAAW,KAAK,MAAM,IAAI,EAAO,CAAE,CAG3E,qBAA6B,EAAmC,CAC9D,GAAI,EAAO,SACT,MAAO,CAAC,IAAsB,EAAO,SAAS,CAEhD,IAAM,EAAW,EAAO,cAAc,EAAO,CAI7C,OAHI,EACK,EAAS,MAAM,IAAI,CAErB,CAAC,KAAK,gBAAgB"}
|
package/dist/index.d.cts
CHANGED
|
@@ -135,16 +135,14 @@ interface IBinding {
|
|
|
135
135
|
typeNamespaceBinding?: boolean;
|
|
136
136
|
}
|
|
137
137
|
//#endregion
|
|
138
|
-
//#region src/
|
|
138
|
+
//#region src/files/types.d.ts
|
|
139
139
|
/**
|
|
140
|
-
* Selector array used to reference
|
|
141
|
-
* uniqueness, but in practice it's desirable.
|
|
140
|
+
* Selector array used to reference files.
|
|
142
141
|
*
|
|
143
|
-
* @example ["
|
|
142
|
+
* @example ["foo", "bar"]
|
|
144
143
|
*/
|
|
145
|
-
type
|
|
146
|
-
|
|
147
|
-
//#region src/files/types.d.ts
|
|
144
|
+
type IFileSelector = ReadonlyArray<string>;
|
|
145
|
+
type IFileIdentifier = number | IFileSelector;
|
|
148
146
|
interface IFileIn {
|
|
149
147
|
/**
|
|
150
148
|
* File extension, if any.
|
|
@@ -176,12 +174,11 @@ interface IFileIn {
|
|
|
176
174
|
*/
|
|
177
175
|
readonly path?: string;
|
|
178
176
|
/**
|
|
179
|
-
* Selector array used to select this file.
|
|
180
|
-
* unique, but in practice it might be desirable.
|
|
177
|
+
* Selector array used to select this file.
|
|
181
178
|
*
|
|
182
|
-
* @example ["
|
|
179
|
+
* @example ["foo", "bar"]
|
|
183
180
|
*/
|
|
184
|
-
readonly selector?:
|
|
181
|
+
readonly selector?: IFileSelector;
|
|
185
182
|
}
|
|
186
183
|
interface IFileOut extends IFileIn {
|
|
187
184
|
/**
|
|
@@ -212,12 +209,12 @@ interface IFileOut extends IFileIn {
|
|
|
212
209
|
}
|
|
213
210
|
interface IFileRegistry {
|
|
214
211
|
/**
|
|
215
|
-
* Get a file
|
|
212
|
+
* Get a file.
|
|
216
213
|
*
|
|
217
|
-
* @param
|
|
214
|
+
* @param identifier File identifier to reference.
|
|
218
215
|
* @returns The file, or undefined if not found.
|
|
219
216
|
*/
|
|
220
|
-
get(
|
|
217
|
+
get(identifier: IFileIdentifier): IFileOut | undefined;
|
|
221
218
|
/**
|
|
222
219
|
* Returns the current file ID and increments it.
|
|
223
220
|
*
|
|
@@ -225,12 +222,19 @@ interface IFileRegistry {
|
|
|
225
222
|
*/
|
|
226
223
|
readonly id: number;
|
|
227
224
|
/**
|
|
228
|
-
* Returns a file
|
|
225
|
+
* Returns whether a file is registered in the registry.
|
|
226
|
+
*
|
|
227
|
+
* @param identifier File identifier to check.
|
|
228
|
+
* @returns True if the file is registered, false otherwise.
|
|
229
|
+
*/
|
|
230
|
+
isRegistered(identifier: IFileIdentifier): boolean;
|
|
231
|
+
/**
|
|
232
|
+
* Returns a file by identifier, registering it if it doesn't exist.
|
|
229
233
|
*
|
|
230
|
-
* @param
|
|
234
|
+
* @param identifier File identifier to reference.
|
|
231
235
|
* @returns The referenced or newly registered file.
|
|
232
236
|
*/
|
|
233
|
-
reference(
|
|
237
|
+
reference(identifier: IFileIdentifier): IFileOut;
|
|
234
238
|
/**
|
|
235
239
|
* Get all unregistered files in the order they were referenced.
|
|
236
240
|
*
|
|
@@ -273,6 +277,7 @@ interface ISymbolMeta {
|
|
|
273
277
|
}
|
|
274
278
|
//#endregion
|
|
275
279
|
//#region src/symbols/types.d.ts
|
|
280
|
+
type ISymbolIdentifier = number | ISymbolMeta;
|
|
276
281
|
interface ISymbolIn {
|
|
277
282
|
/**
|
|
278
283
|
* Array of file names (without extensions) from which this symbol is re-exported.
|
|
@@ -303,21 +308,20 @@ interface ISymbolIn {
|
|
|
303
308
|
* Unique symbol ID. If one is not provided, it will be auto-generated.
|
|
304
309
|
*/
|
|
305
310
|
readonly id?: number;
|
|
311
|
+
/**
|
|
312
|
+
* Kind of import if this symbol represents an import.
|
|
313
|
+
*/
|
|
314
|
+
readonly importKind?: 'namespace' | 'default' | 'named';
|
|
315
|
+
/**
|
|
316
|
+
* Kind of symbol.
|
|
317
|
+
*/
|
|
318
|
+
readonly kind?: 'type';
|
|
306
319
|
/**
|
|
307
320
|
* Arbitrary metadata about the symbol.
|
|
308
321
|
*
|
|
309
322
|
* @default undefined
|
|
310
323
|
*/
|
|
311
|
-
readonly meta?: ISymbolMeta
|
|
312
|
-
/**
|
|
313
|
-
* Kind of import if this symbol represents an import.
|
|
314
|
-
*/
|
|
315
|
-
importKind?: 'namespace' | 'default' | 'named';
|
|
316
|
-
/**
|
|
317
|
-
* Kind of symbol.
|
|
318
|
-
*/
|
|
319
|
-
kind?: 'type';
|
|
320
|
-
};
|
|
324
|
+
readonly meta?: ISymbolMeta;
|
|
321
325
|
/**
|
|
322
326
|
* The desired name for the symbol within its file. If there are multiple symbols
|
|
323
327
|
* with the same desired name, this might not end up being the actual name.
|
|
@@ -331,13 +335,6 @@ interface ISymbolIn {
|
|
|
331
335
|
* @example "_heyapi_31_"
|
|
332
336
|
*/
|
|
333
337
|
readonly placeholder?: string;
|
|
334
|
-
/**
|
|
335
|
-
* Selector array used to select this symbol. It doesn't have to be
|
|
336
|
-
* unique, but in practice it might be desirable.
|
|
337
|
-
*
|
|
338
|
-
* @example ["zod", "#/components/schemas/Foo"]
|
|
339
|
-
*/
|
|
340
|
-
readonly selector?: ISelector;
|
|
341
338
|
}
|
|
342
339
|
interface ISymbolOut extends ISymbolIn {
|
|
343
340
|
/**
|
|
@@ -357,12 +354,12 @@ interface ISymbolOut extends ISymbolIn {
|
|
|
357
354
|
}
|
|
358
355
|
interface ISymbolRegistry {
|
|
359
356
|
/**
|
|
360
|
-
* Get a symbol
|
|
357
|
+
* Get a symbol.
|
|
361
358
|
*
|
|
362
|
-
* @param
|
|
359
|
+
* @param identifier Symbol identifier to reference.
|
|
363
360
|
* @returns The symbol, or undefined if not found.
|
|
364
361
|
*/
|
|
365
|
-
get(
|
|
362
|
+
get(identifier: ISymbolIdentifier): ISymbolOut | undefined;
|
|
366
363
|
/**
|
|
367
364
|
* Returns the value associated with a symbol ID.
|
|
368
365
|
*
|
|
@@ -384,12 +381,26 @@ interface ISymbolRegistry {
|
|
|
384
381
|
*/
|
|
385
382
|
readonly id: number;
|
|
386
383
|
/**
|
|
387
|
-
* Returns a symbol
|
|
384
|
+
* Returns whether a symbol is registered in the registry.
|
|
385
|
+
*
|
|
386
|
+
* @param identifier Symbol identifier to check.
|
|
387
|
+
* @returns True if the symbol is registered, false otherwise.
|
|
388
|
+
*/
|
|
389
|
+
isRegistered(identifier: ISymbolIdentifier): boolean;
|
|
390
|
+
/**
|
|
391
|
+
* Queries symbols by metadata filter.
|
|
392
|
+
*
|
|
393
|
+
* @param filter Metadata filter to query symbols by.
|
|
394
|
+
* @returns Array of symbols matching the filter.
|
|
395
|
+
*/
|
|
396
|
+
query(filter: ISymbolMeta): ReadonlyArray<ISymbolOut>;
|
|
397
|
+
/**
|
|
398
|
+
* References a symbol.
|
|
388
399
|
*
|
|
389
|
-
* @param
|
|
390
|
-
* @returns The referenced
|
|
400
|
+
* @param meta Metadata filter to reference symbol by.
|
|
401
|
+
* @returns The referenced symbol.
|
|
391
402
|
*/
|
|
392
|
-
reference(
|
|
403
|
+
reference(meta: ISymbolMeta): ISymbolOut;
|
|
393
404
|
/**
|
|
394
405
|
* Register a symbol globally.
|
|
395
406
|
*
|
|
@@ -454,10 +465,11 @@ declare class FileRegistry implements IFileRegistry {
|
|
|
454
465
|
private registerOrder;
|
|
455
466
|
private selectorToId;
|
|
456
467
|
private values;
|
|
457
|
-
get(
|
|
468
|
+
get(identifier: IFileIdentifier): IFileOut | undefined;
|
|
458
469
|
get id(): number;
|
|
459
|
-
private
|
|
460
|
-
|
|
470
|
+
private identifierToFile;
|
|
471
|
+
isRegistered(identifier: IFileIdentifier): boolean;
|
|
472
|
+
reference(identifier: IFileIdentifier): IFileOut;
|
|
461
473
|
referenced(): IterableIterator<IFileOut>;
|
|
462
474
|
register(file: IFileIn): IFileOut;
|
|
463
475
|
registered(): IterableIterator<IFileOut>;
|
|
@@ -551,21 +563,34 @@ interface IRenderer {
|
|
|
551
563
|
}
|
|
552
564
|
//#endregion
|
|
553
565
|
//#region src/symbols/registry.d.ts
|
|
566
|
+
type SymbolId = number;
|
|
554
567
|
declare class SymbolRegistry implements ISymbolRegistry {
|
|
555
568
|
private _id;
|
|
569
|
+
private indices;
|
|
556
570
|
private nodes;
|
|
571
|
+
private queryCache;
|
|
572
|
+
private queryCacheDependencies;
|
|
557
573
|
private registerOrder;
|
|
558
|
-
private
|
|
574
|
+
private stubCache;
|
|
575
|
+
private stubs;
|
|
559
576
|
private values;
|
|
560
|
-
get(
|
|
561
|
-
getValue(symbolId:
|
|
562
|
-
hasValue(symbolId:
|
|
563
|
-
get id():
|
|
564
|
-
|
|
565
|
-
|
|
577
|
+
get(identifier: ISymbolIdentifier): ISymbolOut | undefined;
|
|
578
|
+
getValue(symbolId: SymbolId): unknown;
|
|
579
|
+
hasValue(symbolId: SymbolId): boolean;
|
|
580
|
+
get id(): SymbolId;
|
|
581
|
+
isRegistered(identifier: ISymbolIdentifier): boolean;
|
|
582
|
+
query(filter: ISymbolMeta): ReadonlyArray<ISymbolOut>;
|
|
583
|
+
reference(meta: ISymbolMeta): ISymbolOut;
|
|
566
584
|
register(symbol: ISymbolIn): ISymbolOut;
|
|
567
585
|
registered(): IterableIterator<ISymbolOut>;
|
|
568
|
-
setValue(symbolId:
|
|
586
|
+
setValue(symbolId: SymbolId, value: unknown): Map<SymbolId, unknown>;
|
|
587
|
+
private buildCacheKey;
|
|
588
|
+
private buildIndexKeySpace;
|
|
589
|
+
private indexSymbol;
|
|
590
|
+
private invalidateCache;
|
|
591
|
+
private isSubset;
|
|
592
|
+
private replaceStubs;
|
|
593
|
+
private serializeIndexEntry;
|
|
569
594
|
}
|
|
570
595
|
//#endregion
|
|
571
596
|
//#region src/project/project.d.ts
|
|
@@ -599,5 +624,5 @@ declare class Project implements IProject {
|
|
|
599
624
|
*/
|
|
600
625
|
declare const renderIds: (source: string, replacerFn: (symbolId: number) => string | undefined) => string;
|
|
601
626
|
//#endregion
|
|
602
|
-
export { type IBiMap as BiMap, type IBinding as Binding, type IFileOut as File, type IFileIn as FileIn, type IProject, type IOutput as Output, Project, type IProjectRenderMeta as ProjectRenderMeta, type IRenderer as Renderer, type
|
|
627
|
+
export { type IBiMap as BiMap, type IBinding as Binding, type IFileOut as File, type IFileIdentifier as FileIdentifier, type IFileIn as FileIn, type IProject, type IOutput as Output, Project, type IProjectRenderMeta as ProjectRenderMeta, type IRenderer as Renderer, type ISymbolOut as Symbol, type ISymbolIdentifier as SymbolIdentifier, type ISymbolIn as SymbolIn, type ISymbolMeta as SymbolMeta, createBinding, mergeBindings, renderIds };
|
|
603
628
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.ts
CHANGED
|
@@ -135,16 +135,14 @@ interface IBinding {
|
|
|
135
135
|
typeNamespaceBinding?: boolean;
|
|
136
136
|
}
|
|
137
137
|
//#endregion
|
|
138
|
-
//#region src/
|
|
138
|
+
//#region src/files/types.d.ts
|
|
139
139
|
/**
|
|
140
|
-
* Selector array used to reference
|
|
141
|
-
* uniqueness, but in practice it's desirable.
|
|
140
|
+
* Selector array used to reference files.
|
|
142
141
|
*
|
|
143
|
-
* @example ["
|
|
142
|
+
* @example ["foo", "bar"]
|
|
144
143
|
*/
|
|
145
|
-
type
|
|
146
|
-
|
|
147
|
-
//#region src/files/types.d.ts
|
|
144
|
+
type IFileSelector = ReadonlyArray<string>;
|
|
145
|
+
type IFileIdentifier = number | IFileSelector;
|
|
148
146
|
interface IFileIn {
|
|
149
147
|
/**
|
|
150
148
|
* File extension, if any.
|
|
@@ -176,12 +174,11 @@ interface IFileIn {
|
|
|
176
174
|
*/
|
|
177
175
|
readonly path?: string;
|
|
178
176
|
/**
|
|
179
|
-
* Selector array used to select this file.
|
|
180
|
-
* unique, but in practice it might be desirable.
|
|
177
|
+
* Selector array used to select this file.
|
|
181
178
|
*
|
|
182
|
-
* @example ["
|
|
179
|
+
* @example ["foo", "bar"]
|
|
183
180
|
*/
|
|
184
|
-
readonly selector?:
|
|
181
|
+
readonly selector?: IFileSelector;
|
|
185
182
|
}
|
|
186
183
|
interface IFileOut extends IFileIn {
|
|
187
184
|
/**
|
|
@@ -212,12 +209,12 @@ interface IFileOut extends IFileIn {
|
|
|
212
209
|
}
|
|
213
210
|
interface IFileRegistry {
|
|
214
211
|
/**
|
|
215
|
-
* Get a file
|
|
212
|
+
* Get a file.
|
|
216
213
|
*
|
|
217
|
-
* @param
|
|
214
|
+
* @param identifier File identifier to reference.
|
|
218
215
|
* @returns The file, or undefined if not found.
|
|
219
216
|
*/
|
|
220
|
-
get(
|
|
217
|
+
get(identifier: IFileIdentifier): IFileOut | undefined;
|
|
221
218
|
/**
|
|
222
219
|
* Returns the current file ID and increments it.
|
|
223
220
|
*
|
|
@@ -225,12 +222,19 @@ interface IFileRegistry {
|
|
|
225
222
|
*/
|
|
226
223
|
readonly id: number;
|
|
227
224
|
/**
|
|
228
|
-
* Returns a file
|
|
225
|
+
* Returns whether a file is registered in the registry.
|
|
226
|
+
*
|
|
227
|
+
* @param identifier File identifier to check.
|
|
228
|
+
* @returns True if the file is registered, false otherwise.
|
|
229
|
+
*/
|
|
230
|
+
isRegistered(identifier: IFileIdentifier): boolean;
|
|
231
|
+
/**
|
|
232
|
+
* Returns a file by identifier, registering it if it doesn't exist.
|
|
229
233
|
*
|
|
230
|
-
* @param
|
|
234
|
+
* @param identifier File identifier to reference.
|
|
231
235
|
* @returns The referenced or newly registered file.
|
|
232
236
|
*/
|
|
233
|
-
reference(
|
|
237
|
+
reference(identifier: IFileIdentifier): IFileOut;
|
|
234
238
|
/**
|
|
235
239
|
* Get all unregistered files in the order they were referenced.
|
|
236
240
|
*
|
|
@@ -273,6 +277,7 @@ interface ISymbolMeta {
|
|
|
273
277
|
}
|
|
274
278
|
//#endregion
|
|
275
279
|
//#region src/symbols/types.d.ts
|
|
280
|
+
type ISymbolIdentifier = number | ISymbolMeta;
|
|
276
281
|
interface ISymbolIn {
|
|
277
282
|
/**
|
|
278
283
|
* Array of file names (without extensions) from which this symbol is re-exported.
|
|
@@ -303,21 +308,20 @@ interface ISymbolIn {
|
|
|
303
308
|
* Unique symbol ID. If one is not provided, it will be auto-generated.
|
|
304
309
|
*/
|
|
305
310
|
readonly id?: number;
|
|
311
|
+
/**
|
|
312
|
+
* Kind of import if this symbol represents an import.
|
|
313
|
+
*/
|
|
314
|
+
readonly importKind?: 'namespace' | 'default' | 'named';
|
|
315
|
+
/**
|
|
316
|
+
* Kind of symbol.
|
|
317
|
+
*/
|
|
318
|
+
readonly kind?: 'type';
|
|
306
319
|
/**
|
|
307
320
|
* Arbitrary metadata about the symbol.
|
|
308
321
|
*
|
|
309
322
|
* @default undefined
|
|
310
323
|
*/
|
|
311
|
-
readonly meta?: ISymbolMeta
|
|
312
|
-
/**
|
|
313
|
-
* Kind of import if this symbol represents an import.
|
|
314
|
-
*/
|
|
315
|
-
importKind?: 'namespace' | 'default' | 'named';
|
|
316
|
-
/**
|
|
317
|
-
* Kind of symbol.
|
|
318
|
-
*/
|
|
319
|
-
kind?: 'type';
|
|
320
|
-
};
|
|
324
|
+
readonly meta?: ISymbolMeta;
|
|
321
325
|
/**
|
|
322
326
|
* The desired name for the symbol within its file. If there are multiple symbols
|
|
323
327
|
* with the same desired name, this might not end up being the actual name.
|
|
@@ -331,13 +335,6 @@ interface ISymbolIn {
|
|
|
331
335
|
* @example "_heyapi_31_"
|
|
332
336
|
*/
|
|
333
337
|
readonly placeholder?: string;
|
|
334
|
-
/**
|
|
335
|
-
* Selector array used to select this symbol. It doesn't have to be
|
|
336
|
-
* unique, but in practice it might be desirable.
|
|
337
|
-
*
|
|
338
|
-
* @example ["zod", "#/components/schemas/Foo"]
|
|
339
|
-
*/
|
|
340
|
-
readonly selector?: ISelector;
|
|
341
338
|
}
|
|
342
339
|
interface ISymbolOut extends ISymbolIn {
|
|
343
340
|
/**
|
|
@@ -357,12 +354,12 @@ interface ISymbolOut extends ISymbolIn {
|
|
|
357
354
|
}
|
|
358
355
|
interface ISymbolRegistry {
|
|
359
356
|
/**
|
|
360
|
-
* Get a symbol
|
|
357
|
+
* Get a symbol.
|
|
361
358
|
*
|
|
362
|
-
* @param
|
|
359
|
+
* @param identifier Symbol identifier to reference.
|
|
363
360
|
* @returns The symbol, or undefined if not found.
|
|
364
361
|
*/
|
|
365
|
-
get(
|
|
362
|
+
get(identifier: ISymbolIdentifier): ISymbolOut | undefined;
|
|
366
363
|
/**
|
|
367
364
|
* Returns the value associated with a symbol ID.
|
|
368
365
|
*
|
|
@@ -384,12 +381,26 @@ interface ISymbolRegistry {
|
|
|
384
381
|
*/
|
|
385
382
|
readonly id: number;
|
|
386
383
|
/**
|
|
387
|
-
* Returns a symbol
|
|
384
|
+
* Returns whether a symbol is registered in the registry.
|
|
385
|
+
*
|
|
386
|
+
* @param identifier Symbol identifier to check.
|
|
387
|
+
* @returns True if the symbol is registered, false otherwise.
|
|
388
|
+
*/
|
|
389
|
+
isRegistered(identifier: ISymbolIdentifier): boolean;
|
|
390
|
+
/**
|
|
391
|
+
* Queries symbols by metadata filter.
|
|
392
|
+
*
|
|
393
|
+
* @param filter Metadata filter to query symbols by.
|
|
394
|
+
* @returns Array of symbols matching the filter.
|
|
395
|
+
*/
|
|
396
|
+
query(filter: ISymbolMeta): ReadonlyArray<ISymbolOut>;
|
|
397
|
+
/**
|
|
398
|
+
* References a symbol.
|
|
388
399
|
*
|
|
389
|
-
* @param
|
|
390
|
-
* @returns The referenced
|
|
400
|
+
* @param meta Metadata filter to reference symbol by.
|
|
401
|
+
* @returns The referenced symbol.
|
|
391
402
|
*/
|
|
392
|
-
reference(
|
|
403
|
+
reference(meta: ISymbolMeta): ISymbolOut;
|
|
393
404
|
/**
|
|
394
405
|
* Register a symbol globally.
|
|
395
406
|
*
|
|
@@ -454,10 +465,11 @@ declare class FileRegistry implements IFileRegistry {
|
|
|
454
465
|
private registerOrder;
|
|
455
466
|
private selectorToId;
|
|
456
467
|
private values;
|
|
457
|
-
get(
|
|
468
|
+
get(identifier: IFileIdentifier): IFileOut | undefined;
|
|
458
469
|
get id(): number;
|
|
459
|
-
private
|
|
460
|
-
|
|
470
|
+
private identifierToFile;
|
|
471
|
+
isRegistered(identifier: IFileIdentifier): boolean;
|
|
472
|
+
reference(identifier: IFileIdentifier): IFileOut;
|
|
461
473
|
referenced(): IterableIterator<IFileOut>;
|
|
462
474
|
register(file: IFileIn): IFileOut;
|
|
463
475
|
registered(): IterableIterator<IFileOut>;
|
|
@@ -551,21 +563,34 @@ interface IRenderer {
|
|
|
551
563
|
}
|
|
552
564
|
//#endregion
|
|
553
565
|
//#region src/symbols/registry.d.ts
|
|
566
|
+
type SymbolId = number;
|
|
554
567
|
declare class SymbolRegistry implements ISymbolRegistry {
|
|
555
568
|
private _id;
|
|
569
|
+
private indices;
|
|
556
570
|
private nodes;
|
|
571
|
+
private queryCache;
|
|
572
|
+
private queryCacheDependencies;
|
|
557
573
|
private registerOrder;
|
|
558
|
-
private
|
|
574
|
+
private stubCache;
|
|
575
|
+
private stubs;
|
|
559
576
|
private values;
|
|
560
|
-
get(
|
|
561
|
-
getValue(symbolId:
|
|
562
|
-
hasValue(symbolId:
|
|
563
|
-
get id():
|
|
564
|
-
|
|
565
|
-
|
|
577
|
+
get(identifier: ISymbolIdentifier): ISymbolOut | undefined;
|
|
578
|
+
getValue(symbolId: SymbolId): unknown;
|
|
579
|
+
hasValue(symbolId: SymbolId): boolean;
|
|
580
|
+
get id(): SymbolId;
|
|
581
|
+
isRegistered(identifier: ISymbolIdentifier): boolean;
|
|
582
|
+
query(filter: ISymbolMeta): ReadonlyArray<ISymbolOut>;
|
|
583
|
+
reference(meta: ISymbolMeta): ISymbolOut;
|
|
566
584
|
register(symbol: ISymbolIn): ISymbolOut;
|
|
567
585
|
registered(): IterableIterator<ISymbolOut>;
|
|
568
|
-
setValue(symbolId:
|
|
586
|
+
setValue(symbolId: SymbolId, value: unknown): Map<SymbolId, unknown>;
|
|
587
|
+
private buildCacheKey;
|
|
588
|
+
private buildIndexKeySpace;
|
|
589
|
+
private indexSymbol;
|
|
590
|
+
private invalidateCache;
|
|
591
|
+
private isSubset;
|
|
592
|
+
private replaceStubs;
|
|
593
|
+
private serializeIndexEntry;
|
|
569
594
|
}
|
|
570
595
|
//#endregion
|
|
571
596
|
//#region src/project/project.d.ts
|
|
@@ -599,5 +624,5 @@ declare class Project implements IProject {
|
|
|
599
624
|
*/
|
|
600
625
|
declare const renderIds: (source: string, replacerFn: (symbolId: number) => string | undefined) => string;
|
|
601
626
|
//#endregion
|
|
602
|
-
export { type IBiMap as BiMap, type IBinding as Binding, type IFileOut as File, type IFileIn as FileIn, type IProject, type IOutput as Output, Project, type IProjectRenderMeta as ProjectRenderMeta, type IRenderer as Renderer, type
|
|
627
|
+
export { type IBiMap as BiMap, type IBinding as Binding, type IFileOut as File, type IFileIdentifier as FileIdentifier, type IFileIn as FileIn, type IProject, type IOutput as Output, Project, type IProjectRenderMeta as ProjectRenderMeta, type IRenderer as Renderer, type ISymbolOut as Symbol, type ISymbolIdentifier as SymbolIdentifier, type ISymbolIn as SymbolIn, type ISymbolMeta as SymbolMeta, createBinding, mergeBindings, renderIds };
|
|
603
628
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"node:path";const t=({file:e,modulePath:t,symbol:n,symbolFile:r})=>{let i=[],a=[],o={aliases:{},from:t};if(n.
|
|
1
|
+
import e from"node:path";const t=({file:e,modulePath:t,symbol:n,symbolFile:r})=>{let i=[],a=[],o={aliases:{},from:t};if(n.importKind&&(n.importKind===`default`?(o.defaultBinding=n.placeholder,n.kind===`type`&&(o.typeDefaultBinding=!0)):n.importKind===`namespace`&&(o.namespaceBinding=n.placeholder,n.kind===`type`&&(o.typeNamespaceBinding=!0))),n.importKind===`named`||!i.length&&!o.defaultBinding&&!o.namespaceBinding){let t=n.placeholder,s=e.resolvedNames.get(n.id);if(s){let e=r.resolvedNames.get(n.id);e?e!==s&&(t=e,o.aliases[t]=s):n.name&&s!==n.name&&(t=n.name,o.aliases[t]=n.placeholder)}i.push(t),n.kind===`type`&&a.push(t)}for(let e of a)i.includes(e)||i.push(e);return o.names=i,o.typeNames=a,o},n=(e,t)=>{e.aliases={...e.aliases,...t.aliases},t.defaultBinding!==void 0&&(e.defaultBinding=t.defaultBinding),e.names=[...new Set([...e.names??[],...t.names??[]])],t.namespaceBinding!==void 0&&(e.namespaceBinding=t.namespaceBinding),t.typeDefaultBinding!==void 0&&(e.typeDefaultBinding=t.typeDefaultBinding),e.typeNames=[...new Set([...e.typeNames??[],...t.typeNames??[]])],t.typeNamespaceBinding!==void 0&&(e.typeNamespaceBinding=t.typeNamespaceBinding)};var r=class{map=new Map;reverse=new Map;delete(e){let t=this.map.get(e);return t!==void 0&&this.reverse.delete(t),this.map.delete(e)}deleteValue(e){let t=this.reverse.get(e);return t!==void 0&&this.map.delete(t),this.reverse.delete(e)}entries(){return this.map.entries()}get(e){return this.map.get(e)}getKey(e){return this.reverse.get(e)}hasKey(e){return this.map.has(e)}hasValue(e){return this.reverse.has(e)}keys(){return this.map.keys()}set(e,t){let n=this.map.get(e);n!==void 0&&n!==t&&this.reverse.delete(n);let r=this.reverse.get(t);return r!==void 0&&r!==e&&this.map.delete(r),this.map.set(e,t),this.reverse.set(t,e),this}get size(){return this.map.size}values(){return this.map.values()}[Symbol.iterator](){return this.map[Symbol.iterator]()}},i=class{_id=0;referenceOrder=new Set;registerOrder=new Set;selectorToId=new Map;values=new Map;get(e){let t=this.identifierToFile(e);if(t.id!==void 0)return this.values.get(t.id);let n=t.selector===void 0?void 0:JSON.stringify(t.selector);if(n){let e=this.selectorToId.get(n);if(e!==void 0)return this.values.get(e)}}get id(){return this._id++}identifierToFile(e){return typeof e==`number`?{id:e}:{selector:e}}isRegistered(e){let t=this.get(e);return t?this.registerOrder.has(t.id):!1}reference(e){let t=this.identifierToFile(e);return this.register(t)}*referenced(){for(let e of this.referenceOrder.values())yield this.values.get(e)}register(e){if(e.id!==void 0){let t=this.values.get(e.id);if(!t)throw Error(`File with ID ${e.id} not found. To register a new file, leave the ID undefined.`);return t}let t=Object.keys(e).some(e=>![`id`,`selector`].includes(e)),n,i=e.selector===void 0?void 0:JSON.stringify(e.selector);if(i){let e=this.selectorToId.get(i);if(e!==void 0){if(n=this.values.get(e),!n)throw Error(`File with ID ${e} not found. The selector ${i} matched an ID, but there was no result. This is likely an issue with the application logic.`);if(!t)return n}}let a=n?.id===void 0?this.id:n.id;return n={...n,...e,id:a,resolvedNames:n?.resolvedNames??new r,symbols:n?.symbols??{body:[],exports:[],imports:[]}},this.values.set(a,n),t?(this.registerOrder.add(a),this.referenceOrder.has(a)&&this.referenceOrder.delete(a)):this.referenceOrder.add(a),i&&this.selectorToId.set(i,a),n}*registered(){for(let e of this.registerOrder.values())yield this.values.get(e)}};const a=e=>`_heyapi_${e}_`,o=e=>e.slice(8,-1),s=()=>new RegExp(a(`\\d+`),`g`),c=(e,t)=>e.replace(s(),e=>t(Number.parseInt(o(e),10))||e);var l=class{_id=0;indices=new Map;nodes=new Map;queryCache=new Map;queryCacheDependencies=new Map;registerOrder=new Set;stubCache=new Map;stubs=new Set;values=new Map;get(e){return typeof e==`number`?this.values.get(e):this.query(e)[0]}getValue(e){return this.nodes.get(e)}hasValue(e){return this.nodes.has(e)}get id(){return this._id++}isRegistered(e){let t=this.get(e);return t?this.registerOrder.has(t.id):!1}query(e){let t=this.buildCacheKey(e),n=this.queryCache.get(t);if(n)return n.map(e=>this.values.get(e));let r=[],i=this.buildIndexKeySpace(e),a=new Set,o=!1;for(let e of i){a.add(this.serializeIndexEntry(e));let t=this.indices.get(e[0]);if(!t){o=!0;break}let n=t.get(e[1]);if(!n){o=!0;break}r.push(n)}if(o||!r.length)return this.queryCacheDependencies.set(t,a),this.queryCache.set(t,[]),[];let s=new Set(r[0]);for(let e of r.slice(1))s=new Set([...s].filter(t=>e.has(t)));let c=[...s];return this.queryCacheDependencies.set(t,a),this.queryCache.set(t,c),c.map(e=>this.values.get(e))}reference(e){let[t]=this.query(e);if(t)return t;let n=this.buildCacheKey(e),r=this.stubCache.get(n);if(r!==void 0)return this.values.get(r);let i=this.id,o={exportFrom:[],id:i,meta:e,placeholder:a(String(i))};return this.values.set(o.id,o),this.stubs.add(o.id),this.stubCache.set(n,o.id),o}register(e){let t=e.id===void 0?this.id:e.id,n={...e,exportFrom:e.exportFrom??[],id:t,placeholder:e.placeholder??a(String(t))};if(this.values.set(n.id,n),this.registerOrder.add(n.id),n.meta){let e=this.buildIndexKeySpace(n.meta);this.indexSymbol(n.id,e),this.invalidateCache(e),this.replaceStubs(n,e)}return n}*registered(){for(let e of this.registerOrder.values())yield this.values.get(e)}setValue(e,t){return this.nodes.set(e,t)}buildCacheKey(e){return this.buildIndexKeySpace(e).map(e=>this.serializeIndexEntry(e)).sort().join(`|`)}buildIndexKeySpace(e,t=``){let n=[];for(let[r,i]of Object.entries(e)){let e=t?`${t}.${r}`:r;i&&typeof i==`object`&&!Array.isArray(i)?n.push(...this.buildIndexKeySpace(i,e)):n.push([e,i])}return n}indexSymbol(e,t){for(let[n,r]of t){this.indices.has(n)||this.indices.set(n,new Map);let t=this.indices.get(n),i=t.get(r)??new Set;i.add(e),t.set(r,i)}}invalidateCache(e){let t=e.map(e=>this.serializeIndexEntry(e));for(let[e,n]of this.queryCacheDependencies.entries())for(let r of t)if(n.has(r)){this.queryCacheDependencies.delete(e),this.queryCache.delete(e);break}}isSubset(e,t){let n=new Map(t);for(let[t,r]of e)if(!n.has(t)||n.get(t)!==r)return!1;return!0}replaceStubs(e,t){for(let n of this.stubs.values()){let r=this.values.get(n);if(r?.meta&&this.isSubset(this.buildIndexKeySpace(r.meta),t)){let t=this.buildCacheKey(r.meta);this.stubCache.delete(t),this.values.set(n,Object.assign(r,e)),this.stubs.delete(n)}}}serializeIndexEntry(e){return`${e[0]}:${JSON.stringify(e[1])}`}},u=class{symbolIdToFileIds=new Map;defaultFileName;files=new i;fileName;renderers={};root;symbols=new l;constructor({defaultFileName:e,fileName:t,renderers:n,root:r}){this.defaultFileName=e??`main`,this.fileName=typeof t==`string`?()=>t:t,this.renderers=n,this.root=r}getRenderer(e){return e.extension?this.renderers[e.extension]:void 0}prepareFiles(){for(let e of this.symbols.registered()){let t=this.symbolToFileSelector(e),n=this.files.reference(t);n.symbols.body.push(e.id);let r=this.symbolIdToFileIds.get(e.id)??new Set;r.add(n.id),this.symbolIdToFileIds.set(e.id,r);for(let t of e.exportFrom){let r=[t],i=this.files.reference(r);i.id!==n.id&&i.symbols.exports.push(e.id)}}for(let t of this.files.referenced()){if(!t.selector)continue;if(t.selector[0]===`@`){let n=t.selector[1];if(!n){this.files.register({external:!0,selector:t.selector});continue}let r=e.extname(n);if(!r){this.files.register({external:!0,path:n,selector:t.selector});continue}this.files.register({extension:r,external:!0,path:n,selector:t.selector});continue}let n=t.selector.slice(0,-1),r=t.selector[t.selector.length-1];r=this.fileName?.(r)||r,this.files.register({extension:`.ts`,name:r,path:e.resolve(this.root,...n,`${r}.ts`),selector:t.selector})}}render(e){this.prepareFiles();let t=new Map;for(let n of this.files.registered()){if(n.external||!n.path)continue;let r=this.getRenderer(n);r&&t.set(n.id,{content:r.renderSymbols(n,this,e),path:n.path})}for(let[n,r]of t.entries()){let i=this.files.get(n),a=this.getRenderer(i).renderFile(r.content,i,this,e);a?t.set(i.id,{...r,content:a}):t.delete(i.id)}return Array.from(t.values())}symbolIdToFiles(e){let t=this.symbolIdToFileIds.get(e);return Array.from(t??[]).map(e=>this.files.get(e))}symbolToFileSelector(e){if(e.external)return[`@`,e.external];let t=e.getFilePath?.(e);return t?t.split(`/`):[this.defaultFileName]}};export{u as Project,t as createBinding,n as mergeBindings,c as renderIds};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["names: Array<string>","typeNames: Array<string>","binding: IBinding & Pick<Required<IBinding>, 'aliases' | 'from'>","result","result: IFileOut | undefined","id","result","result: ISymbolOut | undefined","id","exportFrom: Array<string>","extension","files: Map<number, IOutput>"],"sources":["../src/bindings/utils.ts","../src/bimap/bimap.ts","../src/files/registry.ts","../src/renderer/utils.ts","../src/symbols/registry.ts","../src/project/project.ts"],"sourcesContent":["import type { IFileOut } from '../files/types';\nimport type { ISymbolOut } from '../symbols/types';\nimport type { IBinding } from './types';\n\nexport const createBinding = ({\n file,\n modulePath,\n symbol,\n symbolFile,\n}: {\n file: IFileOut;\n modulePath: string;\n symbol: ISymbolOut;\n symbolFile: IFileOut;\n}): IBinding => {\n const names: Array<string> = [];\n const typeNames: Array<string> = [];\n const binding: IBinding & Pick<Required<IBinding>, 'aliases' | 'from'> = {\n aliases: {},\n from: modulePath,\n };\n if (symbol.meta?.importKind) {\n if (symbol.meta.importKind === 'default') {\n binding.defaultBinding = symbol.placeholder;\n if (symbol.meta.kind === 'type') {\n binding.typeDefaultBinding = true;\n }\n } else if (symbol.meta.importKind === 'namespace') {\n binding.namespaceBinding = symbol.placeholder;\n if (symbol.meta.kind === 'type') {\n binding.typeNamespaceBinding = true;\n }\n }\n }\n // default to named binding\n if (\n symbol.meta?.importKind === 'named' ||\n (!names.length && !binding.defaultBinding && !binding.namespaceBinding)\n ) {\n let name = symbol.placeholder;\n const fileResolvedName = file.resolvedNames.get(symbol.id);\n if (fileResolvedName) {\n const symbolFileResolvedName = symbolFile.resolvedNames.get(symbol.id);\n if (symbolFileResolvedName) {\n if (symbolFileResolvedName !== fileResolvedName) {\n name = symbolFileResolvedName;\n binding.aliases[name] = fileResolvedName;\n }\n } else if (symbol.name && fileResolvedName !== symbol.name) {\n name = symbol.name;\n binding.aliases[name] = symbol.placeholder;\n }\n }\n names.push(name);\n if (symbol.meta?.kind === 'type') {\n typeNames.push(name);\n }\n }\n // cast type names to names to allow for cleaner API,\n // otherwise users would have to define the same values twice\n for (const typeName of typeNames) {\n if (!names.includes(typeName)) {\n names.push(typeName);\n }\n }\n binding.names = names;\n binding.typeNames = typeNames;\n return binding;\n};\n\nexport const mergeBindings = (target: IBinding, source: IBinding): void => {\n target.aliases = { ...target.aliases, ...source.aliases };\n if (source.defaultBinding !== undefined) {\n target.defaultBinding = source.defaultBinding;\n }\n target.names = [\n ...new Set([...(target.names ?? []), ...(source.names ?? [])]),\n ];\n if (source.namespaceBinding !== undefined) {\n target.namespaceBinding = source.namespaceBinding;\n }\n if (source.typeDefaultBinding !== undefined) {\n target.typeDefaultBinding = source.typeDefaultBinding;\n }\n target.typeNames = [\n ...new Set([...(target.typeNames ?? []), ...(source.typeNames ?? [])]),\n ];\n if (source.typeNamespaceBinding !== undefined) {\n target.typeNamespaceBinding = source.typeNamespaceBinding;\n }\n};\n","import type { IBiMap } from './types';\n\nexport class BiMap<Key, Value> implements IBiMap<Key, Value> {\n private map = new Map<Key, Value>();\n private reverse = new Map<Value, Key>();\n\n delete(key: Key): boolean {\n const value = this.map.get(key);\n if (value !== undefined) {\n this.reverse.delete(value);\n }\n return this.map.delete(key);\n }\n\n deleteValue(value: Value): boolean {\n const key = this.reverse.get(value);\n if (key !== undefined) {\n this.map.delete(key);\n }\n return this.reverse.delete(value);\n }\n\n entries(): IterableIterator<[Key, Value]> {\n return this.map.entries();\n }\n\n get(key: Key): Value | undefined {\n return this.map.get(key);\n }\n\n getKey(value: Value): Key | undefined {\n return this.reverse.get(value);\n }\n\n hasKey(key: Key): boolean {\n return this.map.has(key);\n }\n\n hasValue(value: Value): boolean {\n return this.reverse.has(value);\n }\n\n keys(): IterableIterator<Key> {\n return this.map.keys();\n }\n\n set(key: Key, value: Value): this {\n const oldValue = this.map.get(key);\n if (oldValue !== undefined && oldValue !== value) {\n this.reverse.delete(oldValue);\n }\n const oldKey = this.reverse.get(value);\n if (oldKey !== undefined && oldKey !== key) {\n this.map.delete(oldKey);\n }\n this.map.set(key, value);\n this.reverse.set(value, key);\n return this;\n }\n\n get size(): number {\n return this.map.size;\n }\n\n values(): IterableIterator<Value> {\n return this.map.values();\n }\n\n [Symbol.iterator](): IterableIterator<[Key, Value]> {\n return this.map[Symbol.iterator]();\n }\n}\n","import { BiMap } from '../bimap/bimap';\nimport type { ISelector } from '../selectors/types';\nimport type { IFileIn, IFileOut, IFileRegistry } from './types';\n\nexport class FileRegistry implements IFileRegistry {\n private _id: number = 0;\n private referenceOrder: Set<number> = new Set();\n private registerOrder: Set<number> = new Set();\n private selectorToId: Map<string, number> = new Map();\n private values: Map<number, IFileOut> = new Map();\n\n get(fileIdOrSelector: number | ISelector): IFileOut | undefined {\n const symbol = this.idOrSelector(fileIdOrSelector);\n\n if (symbol.id !== undefined) {\n return this.values.get(symbol.id);\n }\n\n const selector =\n symbol.selector !== undefined\n ? JSON.stringify(symbol.selector)\n : undefined;\n\n if (selector) {\n const id = this.selectorToId.get(selector);\n if (id !== undefined) {\n return this.values.get(id);\n }\n }\n\n return;\n }\n\n get id(): number {\n return this._id++;\n }\n\n private idOrSelector(\n symbolIdOrSelector: number | ISelector,\n ): Pick<IFileIn, 'id' | 'selector'> {\n return typeof symbolIdOrSelector === 'number'\n ? { id: symbolIdOrSelector }\n : { selector: symbolIdOrSelector };\n }\n\n reference(fileIdOrSelector: number | ISelector): IFileOut {\n const file = this.idOrSelector(fileIdOrSelector);\n return this.register(file);\n }\n\n *referenced(): IterableIterator<IFileOut> {\n for (const id of this.referenceOrder.values()) {\n yield this.values.get(id)!;\n }\n }\n\n register(file: IFileIn): IFileOut {\n if (file.id !== undefined) {\n const result = this.values.get(file.id);\n if (!result) {\n throw new Error(\n `File with ID ${file.id} not found. To register a new file, leave the ID undefined.`,\n );\n }\n return result;\n }\n\n const hasOtherKeys = Object.keys(file).some(\n (key) => !['id', 'selector'].includes(key),\n );\n\n let result: IFileOut | undefined;\n\n const selector =\n file.selector !== undefined ? JSON.stringify(file.selector) : undefined;\n if (selector) {\n const id = this.selectorToId.get(selector);\n if (id !== undefined) {\n result = this.values.get(id);\n if (!result) {\n throw new Error(\n `File with ID ${id} not found. The selector ${selector} matched an ID, but there was no result. This is likely an issue with the application logic.`,\n );\n }\n if (!hasOtherKeys) {\n return result;\n }\n }\n }\n\n const id = result?.id !== undefined ? result.id : this.id;\n result = {\n ...result,\n ...file, // clone to avoid mutation\n id,\n resolvedNames: result?.resolvedNames ?? new BiMap(),\n symbols: result?.symbols ?? {\n body: [],\n exports: [],\n imports: [],\n },\n };\n this.values.set(id, result);\n\n if (hasOtherKeys) {\n this.registerOrder.add(id);\n } else {\n this.referenceOrder.add(id);\n }\n\n if (selector) {\n this.selectorToId.set(selector, id);\n }\n\n return result;\n }\n\n *registered(): IterableIterator<IFileOut> {\n for (const id of this.registerOrder.values()) {\n yield this.values.get(id)!;\n }\n }\n}\n","/**\n * Wraps an ID in namespace to avoid collisions when replacing it.\n *\n * @param symbolId Stringified symbol ID to use.\n * @returns The wrapped placeholder ID.\n */\nexport const wrapId = (symbolId: string): string => `_heyapi_${symbolId}_`;\n\n/**\n * Unwraps an ID from namespace.\n *\n * @param wrappedId The wrapped placeholder ID.\n * @returns Stringified ID to use.\n */\nconst unwrapId = (wrappedId: string): string =>\n wrappedId.slice('_heyapi_'.length, -1);\n\n/**\n * Returns a RegExp instance to match ID placeholders.\n *\n * @returns RegExp instance to match ID placeholders.\n */\nconst createPlaceholderRegExp = (): RegExp => new RegExp(wrapId('\\\\d+'), 'g');\n\n/**\n *\n * @param source The source string to replace.\n * @param replacerFn Accepts a symbol ID, returns resolved symbol name.\n * @returns The replaced source string.\n */\nexport const renderIds = (\n source: string,\n replacerFn: (symbolId: number) => string | undefined,\n): string =>\n source.replace(createPlaceholderRegExp(), (match) => {\n const symbolId = Number.parseInt(unwrapId(match), 10);\n return replacerFn(symbolId) || match;\n });\n","import { wrapId } from '../renderer/utils';\nimport type { ISelector } from '../selectors/types';\nimport type { ISymbolIn, ISymbolOut, ISymbolRegistry } from './types';\n\nexport class SymbolRegistry implements ISymbolRegistry {\n private _id: number = 0;\n private nodes: Map<number, unknown> = new Map();\n private registerOrder: Set<number> = new Set();\n private selectorToId: Map<string, number> = new Map();\n private values: Map<number, ISymbolOut> = new Map();\n\n get(symbolIdOrSelector: number | ISelector): ISymbolOut | undefined {\n const symbol = this.idOrSelector(symbolIdOrSelector);\n\n if (symbol.id !== undefined) {\n return this.values.get(symbol.id);\n }\n\n const selector =\n symbol.selector !== undefined\n ? JSON.stringify(symbol.selector)\n : undefined;\n\n if (selector) {\n const id = this.selectorToId.get(selector);\n if (id !== undefined) {\n return this.values.get(id);\n }\n }\n\n return;\n }\n\n getValue(symbolId: number): unknown {\n return this.nodes.get(symbolId);\n }\n\n hasValue(symbolId: number): boolean {\n return this.nodes.has(symbolId);\n }\n\n get id(): number {\n return this._id++;\n }\n\n private idOrSelector(\n symbolIdOrSelector: number | ISelector,\n ): Pick<ISymbolIn, 'id' | 'selector'> {\n return typeof symbolIdOrSelector === 'number'\n ? { id: symbolIdOrSelector }\n : { selector: symbolIdOrSelector };\n }\n\n reference(symbolIdOrSelector: number | ISelector): ISymbolOut {\n const symbol = this.idOrSelector(symbolIdOrSelector);\n return this.register(symbol);\n }\n\n register(symbol: ISymbolIn): ISymbolOut {\n if (symbol.id !== undefined) {\n const result = this.values.get(symbol.id);\n if (!result) {\n throw new Error(\n `Symbol with ID ${symbol.id} not found. To register a new symbol, leave the ID undefined.`,\n );\n }\n return result;\n }\n\n const hasOtherKeys = Object.keys(symbol).some(\n (key) => !['id', 'selector'].includes(key),\n );\n\n let result: ISymbolOut | undefined;\n\n const selector =\n symbol.selector !== undefined\n ? JSON.stringify(symbol.selector)\n : undefined;\n if (selector) {\n const id = this.selectorToId.get(selector);\n if (id !== undefined) {\n result = this.values.get(id);\n if (!result) {\n throw new Error(\n `Symbol with ID ${id} not found. The selector ${selector} matched an ID, but there was no result. This is likely an issue with the application logic.`,\n );\n }\n if (!hasOtherKeys) {\n return result;\n }\n }\n }\n\n const id = result?.id !== undefined ? result.id : this.id;\n const exportFrom: Array<string> = result?.exportFrom\n ? [...result.exportFrom]\n : [];\n if (symbol.exportFrom) {\n exportFrom.push(...symbol.exportFrom);\n }\n result = {\n ...result,\n ...symbol, // clone to avoid mutation\n exportFrom,\n id,\n placeholder:\n result?.placeholder ?? symbol.placeholder ?? wrapId(String(id)),\n };\n this.values.set(id, result);\n\n if (hasOtherKeys) {\n this.registerOrder.add(id);\n }\n\n if (selector) {\n this.selectorToId.set(selector, id);\n }\n\n return result;\n }\n\n *registered(): IterableIterator<ISymbolOut> {\n for (const id of this.registerOrder.values()) {\n yield this.values.get(id)!;\n }\n }\n\n setValue(symbolId: number, value: unknown): Map<number, unknown> {\n return this.nodes.set(symbolId, value);\n }\n}\n","import path from 'node:path';\n\nimport type { IProjectRenderMeta } from '../extensions/types';\nimport { FileRegistry } from '../files/registry';\nimport type { IFileOut } from '../files/types';\nimport type { IOutput } from '../output/types';\nimport type { IRenderer } from '../renderer/types';\nimport type { ISelector } from '../selectors/types';\nimport { SymbolRegistry } from '../symbols/registry';\nimport type { ISymbolOut } from '../symbols/types';\nimport type { IProject } from './types';\n\nconst externalSourceSymbol = '@';\n\nexport class Project implements IProject {\n private symbolIdToFileIds: Map<number, Set<number>> = new Map();\n\n readonly defaultFileName: string;\n readonly files = new FileRegistry();\n readonly fileName?: (name: string) => string;\n readonly renderers: Record<string, IRenderer> = {};\n readonly root: string;\n readonly symbols = new SymbolRegistry();\n\n constructor({\n defaultFileName,\n fileName,\n renderers,\n root,\n }: Pick<IProject, 'defaultFileName' | 'fileName' | 'renderers' | 'root'>) {\n this.defaultFileName = defaultFileName ?? 'main';\n this.fileName = typeof fileName === 'string' ? () => fileName : fileName;\n this.renderers = renderers;\n this.root = root;\n }\n\n private getRenderer(file: IFileOut): IRenderer | undefined {\n return file.extension ? this.renderers[file.extension] : undefined;\n }\n\n private prepareFiles(): void {\n // TODO: infer extension from symbols\n const extension = '.ts';\n for (const symbol of this.symbols.registered()) {\n const selector = this.symbolToFileSelector(symbol);\n const file = this.files.reference(selector);\n file.symbols.body.push(symbol.id);\n // update symbol->files map\n const symbolIdToFileIds =\n this.symbolIdToFileIds.get(symbol.id) ?? new Set();\n symbolIdToFileIds.add(file.id);\n this.symbolIdToFileIds.set(symbol.id, symbolIdToFileIds);\n // update re-exports\n for (const exportFrom of symbol.exportFrom) {\n const exportSelector = [exportFrom];\n const exportFile = this.files.reference(exportSelector);\n if (exportFile.id !== file.id) {\n exportFile.symbols.exports.push(symbol.id);\n }\n }\n }\n for (const file of this.files.referenced()) {\n if (!file.selector) continue;\n if (file.selector[0] === externalSourceSymbol) {\n const filePath = file.selector[1];\n if (!filePath) {\n this.files.register({\n external: true,\n selector: file.selector,\n });\n continue;\n }\n const extension = path.extname(filePath);\n if (!extension) {\n this.files.register({\n external: true,\n path: filePath,\n selector: file.selector,\n });\n continue;\n }\n this.files.register({\n extension,\n external: true,\n path: filePath,\n selector: file.selector,\n });\n continue;\n }\n const dirs = file.selector.slice(0, -1);\n let name = file.selector[file.selector.length - 1]!;\n name = this.fileName?.(name) || name;\n this.files.register({\n extension,\n name,\n path: path.resolve(this.root, ...dirs, `${name}${extension}`),\n selector: file.selector,\n });\n }\n\n // TODO: track symbol dependencies and inject imports into files\n // based on symbol references so the render step can just render\n }\n\n render(meta?: IProjectRenderMeta): ReadonlyArray<IOutput> {\n this.prepareFiles();\n const files: Map<number, IOutput> = new Map();\n for (const file of this.files.registered()) {\n if (file.external || !file.path) continue;\n const renderer = this.getRenderer(file);\n if (!renderer) continue;\n files.set(file.id, {\n content: renderer.renderSymbols(file, this, meta),\n path: file.path,\n });\n }\n for (const [fileId, value] of files.entries()) {\n const file = this.files.get(fileId)!;\n const renderer = this.getRenderer(file)!;\n const content = renderer.renderFile(value.content, file, this, meta);\n if (content) {\n files.set(file.id, { ...value, content });\n } else {\n files.delete(file.id);\n }\n }\n return Array.from(files.values());\n }\n\n symbolIdToFiles(symbolId: number): ReadonlyArray<IFileOut> {\n const fileIds = this.symbolIdToFileIds.get(symbolId);\n return Array.from(fileIds ?? []).map((fileId) => this.files.get(fileId)!);\n }\n\n private symbolToFileSelector(symbol: ISymbolOut): ISelector {\n if (symbol.external) {\n return [externalSourceSymbol, symbol.external];\n }\n const filePath = symbol.getFilePath?.(symbol);\n if (filePath) {\n return filePath.split('/');\n }\n return [this.defaultFileName];\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["names: Array<string>","typeNames: Array<string>","binding: IBinding & Pick<Required<IBinding>, 'aliases' | 'from'>","result","result: IFileOut | undefined","id","sets: Array<Set<SymbolId>>","stub: ISymbolOut","result: ISymbolOut","entries: Array<IndexEntry>","path","extension","files: Map<number, IOutput>"],"sources":["../src/bindings/utils.ts","../src/bimap/bimap.ts","../src/files/registry.ts","../src/renderer/utils.ts","../src/symbols/registry.ts","../src/project/project.ts"],"sourcesContent":["import type { IFileOut } from '../files/types';\nimport type { ISymbolOut } from '../symbols/types';\nimport type { IBinding } from './types';\n\nexport const createBinding = ({\n file,\n modulePath,\n symbol,\n symbolFile,\n}: {\n file: IFileOut;\n modulePath: string;\n symbol: ISymbolOut;\n symbolFile: IFileOut;\n}): IBinding => {\n const names: Array<string> = [];\n const typeNames: Array<string> = [];\n const binding: IBinding & Pick<Required<IBinding>, 'aliases' | 'from'> = {\n aliases: {},\n from: modulePath,\n };\n if (symbol.importKind) {\n if (symbol.importKind === 'default') {\n binding.defaultBinding = symbol.placeholder;\n if (symbol.kind === 'type') {\n binding.typeDefaultBinding = true;\n }\n } else if (symbol.importKind === 'namespace') {\n binding.namespaceBinding = symbol.placeholder;\n if (symbol.kind === 'type') {\n binding.typeNamespaceBinding = true;\n }\n }\n }\n // default to named binding\n if (\n symbol.importKind === 'named' ||\n (!names.length && !binding.defaultBinding && !binding.namespaceBinding)\n ) {\n let name = symbol.placeholder;\n const fileResolvedName = file.resolvedNames.get(symbol.id);\n if (fileResolvedName) {\n const symbolFileResolvedName = symbolFile.resolvedNames.get(symbol.id);\n if (symbolFileResolvedName) {\n if (symbolFileResolvedName !== fileResolvedName) {\n name = symbolFileResolvedName;\n binding.aliases[name] = fileResolvedName;\n }\n } else if (symbol.name && fileResolvedName !== symbol.name) {\n name = symbol.name;\n binding.aliases[name] = symbol.placeholder;\n }\n }\n names.push(name);\n if (symbol.kind === 'type') {\n typeNames.push(name);\n }\n }\n // cast type names to names to allow for cleaner API,\n // otherwise users would have to define the same values twice\n for (const typeName of typeNames) {\n if (!names.includes(typeName)) {\n names.push(typeName);\n }\n }\n binding.names = names;\n binding.typeNames = typeNames;\n return binding;\n};\n\nexport const mergeBindings = (target: IBinding, source: IBinding): void => {\n target.aliases = { ...target.aliases, ...source.aliases };\n if (source.defaultBinding !== undefined) {\n target.defaultBinding = source.defaultBinding;\n }\n target.names = [\n ...new Set([...(target.names ?? []), ...(source.names ?? [])]),\n ];\n if (source.namespaceBinding !== undefined) {\n target.namespaceBinding = source.namespaceBinding;\n }\n if (source.typeDefaultBinding !== undefined) {\n target.typeDefaultBinding = source.typeDefaultBinding;\n }\n target.typeNames = [\n ...new Set([...(target.typeNames ?? []), ...(source.typeNames ?? [])]),\n ];\n if (source.typeNamespaceBinding !== undefined) {\n target.typeNamespaceBinding = source.typeNamespaceBinding;\n }\n};\n","import type { IBiMap } from './types';\n\nexport class BiMap<Key, Value> implements IBiMap<Key, Value> {\n private map = new Map<Key, Value>();\n private reverse = new Map<Value, Key>();\n\n delete(key: Key): boolean {\n const value = this.map.get(key);\n if (value !== undefined) {\n this.reverse.delete(value);\n }\n return this.map.delete(key);\n }\n\n deleteValue(value: Value): boolean {\n const key = this.reverse.get(value);\n if (key !== undefined) {\n this.map.delete(key);\n }\n return this.reverse.delete(value);\n }\n\n entries(): IterableIterator<[Key, Value]> {\n return this.map.entries();\n }\n\n get(key: Key): Value | undefined {\n return this.map.get(key);\n }\n\n getKey(value: Value): Key | undefined {\n return this.reverse.get(value);\n }\n\n hasKey(key: Key): boolean {\n return this.map.has(key);\n }\n\n hasValue(value: Value): boolean {\n return this.reverse.has(value);\n }\n\n keys(): IterableIterator<Key> {\n return this.map.keys();\n }\n\n set(key: Key, value: Value): this {\n const oldValue = this.map.get(key);\n if (oldValue !== undefined && oldValue !== value) {\n this.reverse.delete(oldValue);\n }\n const oldKey = this.reverse.get(value);\n if (oldKey !== undefined && oldKey !== key) {\n this.map.delete(oldKey);\n }\n this.map.set(key, value);\n this.reverse.set(value, key);\n return this;\n }\n\n get size(): number {\n return this.map.size;\n }\n\n values(): IterableIterator<Value> {\n return this.map.values();\n }\n\n [Symbol.iterator](): IterableIterator<[Key, Value]> {\n return this.map[Symbol.iterator]();\n }\n}\n","import { BiMap } from '../bimap/bimap';\nimport type {\n IFileIdentifier,\n IFileIn,\n IFileOut,\n IFileRegistry,\n} from './types';\n\nexport class FileRegistry implements IFileRegistry {\n private _id: number = 0;\n private referenceOrder: Set<number> = new Set();\n private registerOrder: Set<number> = new Set();\n private selectorToId: Map<string, number> = new Map();\n private values: Map<number, IFileOut> = new Map();\n\n get(identifier: IFileIdentifier): IFileOut | undefined {\n const file = this.identifierToFile(identifier);\n\n if (file.id !== undefined) {\n return this.values.get(file.id);\n }\n\n const selector =\n file.selector !== undefined ? JSON.stringify(file.selector) : undefined;\n\n if (selector) {\n const id = this.selectorToId.get(selector);\n if (id !== undefined) {\n return this.values.get(id);\n }\n }\n\n return;\n }\n\n get id(): number {\n return this._id++;\n }\n\n private identifierToFile(\n identifier: IFileIdentifier,\n ): Pick<IFileIn, 'id' | 'selector'> {\n return typeof identifier === 'number'\n ? { id: identifier }\n : { selector: identifier };\n }\n\n isRegistered(identifier: IFileIdentifier): boolean {\n const file = this.get(identifier);\n return file ? this.registerOrder.has(file.id) : false;\n }\n\n reference(identifier: IFileIdentifier): IFileOut {\n const file = this.identifierToFile(identifier);\n return this.register(file);\n }\n\n *referenced(): IterableIterator<IFileOut> {\n for (const id of this.referenceOrder.values()) {\n yield this.values.get(id)!;\n }\n }\n\n register(file: IFileIn): IFileOut {\n if (file.id !== undefined) {\n const result = this.values.get(file.id);\n if (!result) {\n throw new Error(\n `File with ID ${file.id} not found. To register a new file, leave the ID undefined.`,\n );\n }\n return result;\n }\n\n const hasOtherKeys = Object.keys(file).some(\n (key) => !['id', 'selector'].includes(key),\n );\n\n let result: IFileOut | undefined;\n\n const selector =\n file.selector !== undefined ? JSON.stringify(file.selector) : undefined;\n if (selector) {\n const id = this.selectorToId.get(selector);\n if (id !== undefined) {\n result = this.values.get(id);\n if (!result) {\n throw new Error(\n `File with ID ${id} not found. The selector ${selector} matched an ID, but there was no result. This is likely an issue with the application logic.`,\n );\n }\n if (!hasOtherKeys) {\n return result;\n }\n }\n }\n\n const id = result?.id !== undefined ? result.id : this.id;\n result = {\n ...result,\n ...file, // clone to avoid mutation\n id,\n resolvedNames: result?.resolvedNames ?? new BiMap(),\n symbols: result?.symbols ?? {\n body: [],\n exports: [],\n imports: [],\n },\n };\n this.values.set(id, result);\n\n if (hasOtherKeys) {\n this.registerOrder.add(id);\n if (this.referenceOrder.has(id)) {\n this.referenceOrder.delete(id);\n }\n } else {\n this.referenceOrder.add(id);\n }\n\n if (selector) {\n this.selectorToId.set(selector, id);\n }\n\n return result;\n }\n\n *registered(): IterableIterator<IFileOut> {\n for (const id of this.registerOrder.values()) {\n yield this.values.get(id)!;\n }\n }\n}\n","/**\n * Wraps an ID in namespace to avoid collisions when replacing it.\n *\n * @param symbolId Stringified symbol ID to use.\n * @returns The wrapped placeholder ID.\n */\nexport const wrapId = (symbolId: string): string => `_heyapi_${symbolId}_`;\n\n/**\n * Unwraps an ID from namespace.\n *\n * @param wrappedId The wrapped placeholder ID.\n * @returns Stringified ID to use.\n */\nconst unwrapId = (wrappedId: string): string =>\n wrappedId.slice('_heyapi_'.length, -1);\n\n/**\n * Returns a RegExp instance to match ID placeholders.\n *\n * @returns RegExp instance to match ID placeholders.\n */\nconst createPlaceholderRegExp = (): RegExp => new RegExp(wrapId('\\\\d+'), 'g');\n\n/**\n *\n * @param source The source string to replace.\n * @param replacerFn Accepts a symbol ID, returns resolved symbol name.\n * @returns The replaced source string.\n */\nexport const renderIds = (\n source: string,\n replacerFn: (symbolId: number) => string | undefined,\n): string =>\n source.replace(createPlaceholderRegExp(), (match) => {\n const symbolId = Number.parseInt(unwrapId(match), 10);\n return replacerFn(symbolId) || match;\n });\n","import type { ISymbolMeta } from '../extensions/types';\nimport { wrapId } from '../renderer/utils';\nimport type {\n ISymbolIdentifier,\n ISymbolIn,\n ISymbolOut,\n ISymbolRegistry,\n} from './types';\n\ntype IndexEntry = [string, unknown];\ntype IndexKeySpace = ReadonlyArray<IndexEntry>;\ntype QueryCacheKey = string;\ntype SymbolId = number;\n\nexport class SymbolRegistry implements ISymbolRegistry {\n private _id: SymbolId = 0;\n private indices: Map<IndexEntry[0], Map<IndexEntry[1], Set<SymbolId>>> =\n new Map();\n private nodes: Map<SymbolId, unknown> = new Map();\n private queryCache: Map<QueryCacheKey, ReadonlyArray<SymbolId>> = new Map();\n private queryCacheDependencies: Map<QueryCacheKey, Set<QueryCacheKey>> =\n new Map();\n private registerOrder: Set<SymbolId> = new Set();\n private stubCache: Map<QueryCacheKey, SymbolId> = new Map();\n private stubs: Set<SymbolId> = new Set();\n private values: Map<SymbolId, ISymbolOut> = new Map();\n\n get(identifier: ISymbolIdentifier): ISymbolOut | undefined {\n return typeof identifier === 'number'\n ? this.values.get(identifier)\n : this.query(identifier)[0];\n }\n\n getValue(symbolId: SymbolId): unknown {\n return this.nodes.get(symbolId);\n }\n\n hasValue(symbolId: SymbolId): boolean {\n return this.nodes.has(symbolId);\n }\n\n get id(): SymbolId {\n return this._id++;\n }\n\n isRegistered(identifier: ISymbolIdentifier): boolean {\n const symbol = this.get(identifier);\n return symbol ? this.registerOrder.has(symbol.id) : false;\n }\n\n query(filter: ISymbolMeta): ReadonlyArray<ISymbolOut> {\n const cacheKey = this.buildCacheKey(filter);\n const cachedIds = this.queryCache.get(cacheKey);\n if (cachedIds) {\n return cachedIds.map((symbolId) => this.values.get(symbolId)!);\n }\n const sets: Array<Set<SymbolId>> = [];\n const indexKeySpace = this.buildIndexKeySpace(filter);\n const cacheDependencies = new Set<QueryCacheKey>();\n let missed = false;\n for (const indexEntry of indexKeySpace) {\n cacheDependencies.add(this.serializeIndexEntry(indexEntry));\n const values = this.indices.get(indexEntry[0]);\n if (!values) {\n missed = true;\n break;\n }\n const set = values.get(indexEntry[1]);\n if (!set) {\n missed = true;\n break;\n }\n sets.push(set);\n }\n if (missed || !sets.length) {\n this.queryCacheDependencies.set(cacheKey, cacheDependencies);\n this.queryCache.set(cacheKey, []);\n return [];\n }\n let result = new Set(sets[0]);\n for (const set of sets.slice(1)) {\n result = new Set([...result].filter((symbolId) => set.has(symbolId)));\n }\n const resultIds = [...result];\n this.queryCacheDependencies.set(cacheKey, cacheDependencies);\n this.queryCache.set(cacheKey, resultIds);\n return resultIds.map((symbolId) => this.values.get(symbolId)!);\n }\n\n reference(meta: ISymbolMeta): ISymbolOut {\n const [registered] = this.query(meta);\n if (registered) return registered;\n const cacheKey = this.buildCacheKey(meta);\n const cachedId = this.stubCache.get(cacheKey);\n if (cachedId !== undefined) return this.values.get(cachedId)!;\n const id = this.id;\n const stub: ISymbolOut = {\n exportFrom: [],\n id,\n meta,\n placeholder: wrapId(String(id)),\n };\n this.values.set(stub.id, stub);\n this.stubs.add(stub.id);\n this.stubCache.set(cacheKey, stub.id);\n return stub;\n }\n\n register(symbol: ISymbolIn): ISymbolOut {\n const id = symbol.id !== undefined ? symbol.id : this.id;\n const result: ISymbolOut = {\n ...symbol, // clone to avoid mutation\n exportFrom: symbol.exportFrom ?? [],\n id,\n placeholder: symbol.placeholder ?? wrapId(String(id)),\n };\n this.values.set(result.id, result);\n this.registerOrder.add(result.id);\n if (result.meta) {\n const indexKeySpace = this.buildIndexKeySpace(result.meta);\n this.indexSymbol(result.id, indexKeySpace);\n this.invalidateCache(indexKeySpace);\n this.replaceStubs(result, indexKeySpace);\n }\n return result;\n }\n\n *registered(): IterableIterator<ISymbolOut> {\n for (const id of this.registerOrder.values()) {\n yield this.values.get(id)!;\n }\n }\n\n setValue(symbolId: SymbolId, value: unknown): Map<SymbolId, unknown> {\n return this.nodes.set(symbolId, value);\n }\n\n private buildCacheKey(filter: ISymbolMeta): QueryCacheKey {\n const indexKeySpace = this.buildIndexKeySpace(filter);\n return indexKeySpace\n .map((indexEntry) => this.serializeIndexEntry(indexEntry))\n .sort() // ensure order-insensitivity\n .join('|');\n }\n\n private buildIndexKeySpace(meta: ISymbolMeta, prefix = ''): IndexKeySpace {\n const entries: Array<IndexEntry> = [];\n for (const [key, value] of Object.entries(meta)) {\n const path = prefix ? `${prefix}.${key}` : key;\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n entries.push(...this.buildIndexKeySpace(value as ISymbolMeta, path));\n } else {\n entries.push([path, value]);\n }\n }\n return entries;\n }\n\n private indexSymbol(symbolId: SymbolId, indexKeySpace: IndexKeySpace): void {\n for (const [key, value] of indexKeySpace) {\n if (!this.indices.has(key)) this.indices.set(key, new Map());\n const values = this.indices.get(key)!;\n const set = values.get(value) ?? new Set();\n set.add(symbolId);\n values.set(value, set);\n }\n }\n\n private invalidateCache(indexKeySpace: IndexKeySpace): void {\n const changed = indexKeySpace.map((indexEntry) =>\n this.serializeIndexEntry(indexEntry),\n );\n for (const [\n cacheKey,\n cacheDependencies,\n ] of this.queryCacheDependencies.entries()) {\n for (const key of changed) {\n if (cacheDependencies.has(key)) {\n this.queryCacheDependencies.delete(cacheKey);\n this.queryCache.delete(cacheKey);\n break;\n }\n }\n }\n }\n\n private isSubset(sub: IndexKeySpace, sup: IndexKeySpace): boolean {\n const supMap = new Map(sup);\n for (const [key, value] of sub) {\n if (!supMap.has(key) || supMap.get(key) !== value) {\n return false;\n }\n }\n return true;\n }\n\n private replaceStubs(symbol: ISymbolOut, indexKeySpace: IndexKeySpace): void {\n for (const stubId of this.stubs.values()) {\n const stub = this.values.get(stubId);\n if (\n stub?.meta &&\n this.isSubset(this.buildIndexKeySpace(stub.meta), indexKeySpace)\n ) {\n const cacheKey = this.buildCacheKey(stub.meta);\n this.stubCache.delete(cacheKey);\n this.values.set(stubId, Object.assign(stub, symbol));\n this.stubs.delete(stubId);\n }\n }\n }\n\n private serializeIndexEntry(indexEntry: IndexEntry): string {\n return `${indexEntry[0]}:${JSON.stringify(indexEntry[1])}`;\n }\n}\n","import path from 'node:path';\n\nimport type { IProjectRenderMeta } from '../extensions/types';\nimport { FileRegistry } from '../files/registry';\nimport type { IFileOut, IFileSelector } from '../files/types';\nimport type { IOutput } from '../output/types';\nimport type { IRenderer } from '../renderer/types';\nimport { SymbolRegistry } from '../symbols/registry';\nimport type { ISymbolOut } from '../symbols/types';\nimport type { IProject } from './types';\n\nconst externalSourceSymbol = '@';\n\nexport class Project implements IProject {\n private symbolIdToFileIds: Map<number, Set<number>> = new Map();\n\n readonly defaultFileName: string;\n readonly files = new FileRegistry();\n readonly fileName?: (name: string) => string;\n readonly renderers: Record<string, IRenderer> = {};\n readonly root: string;\n readonly symbols = new SymbolRegistry();\n\n constructor({\n defaultFileName,\n fileName,\n renderers,\n root,\n }: Pick<IProject, 'defaultFileName' | 'fileName' | 'renderers' | 'root'>) {\n this.defaultFileName = defaultFileName ?? 'main';\n this.fileName = typeof fileName === 'string' ? () => fileName : fileName;\n this.renderers = renderers;\n this.root = root;\n }\n\n private getRenderer(file: IFileOut): IRenderer | undefined {\n return file.extension ? this.renderers[file.extension] : undefined;\n }\n\n private prepareFiles(): void {\n // TODO: infer extension from symbols\n const extension = '.ts';\n for (const symbol of this.symbols.registered()) {\n const selector = this.symbolToFileSelector(symbol);\n const file = this.files.reference(selector);\n file.symbols.body.push(symbol.id);\n // update symbol->files map\n const symbolIdToFileIds =\n this.symbolIdToFileIds.get(symbol.id) ?? new Set();\n symbolIdToFileIds.add(file.id);\n this.symbolIdToFileIds.set(symbol.id, symbolIdToFileIds);\n // update re-exports\n for (const exportFrom of symbol.exportFrom) {\n const exportSelector = [exportFrom];\n const exportFile = this.files.reference(exportSelector);\n if (exportFile.id !== file.id) {\n exportFile.symbols.exports.push(symbol.id);\n }\n }\n }\n for (const file of this.files.referenced()) {\n if (!file.selector) continue;\n if (file.selector[0] === externalSourceSymbol) {\n const filePath = file.selector[1];\n if (!filePath) {\n this.files.register({\n external: true,\n selector: file.selector,\n });\n continue;\n }\n const extension = path.extname(filePath);\n if (!extension) {\n this.files.register({\n external: true,\n path: filePath,\n selector: file.selector,\n });\n continue;\n }\n this.files.register({\n extension,\n external: true,\n path: filePath,\n selector: file.selector,\n });\n continue;\n }\n const dirs = file.selector.slice(0, -1);\n let name = file.selector[file.selector.length - 1]!;\n name = this.fileName?.(name) || name;\n this.files.register({\n extension,\n name,\n path: path.resolve(this.root, ...dirs, `${name}${extension}`),\n selector: file.selector,\n });\n }\n\n // TODO: track symbol dependencies and inject imports into files\n // based on symbol references so the render step can just render\n }\n\n render(meta?: IProjectRenderMeta): ReadonlyArray<IOutput> {\n this.prepareFiles();\n const files: Map<number, IOutput> = new Map();\n for (const file of this.files.registered()) {\n if (file.external || !file.path) continue;\n const renderer = this.getRenderer(file);\n if (!renderer) continue;\n files.set(file.id, {\n content: renderer.renderSymbols(file, this, meta),\n path: file.path,\n });\n }\n for (const [fileId, value] of files.entries()) {\n const file = this.files.get(fileId)!;\n const renderer = this.getRenderer(file)!;\n const content = renderer.renderFile(value.content, file, this, meta);\n if (content) {\n files.set(file.id, { ...value, content });\n } else {\n files.delete(file.id);\n }\n }\n return Array.from(files.values());\n }\n\n symbolIdToFiles(symbolId: number): ReadonlyArray<IFileOut> {\n const fileIds = this.symbolIdToFileIds.get(symbolId);\n return Array.from(fileIds ?? []).map((fileId) => this.files.get(fileId)!);\n }\n\n private symbolToFileSelector(symbol: ISymbolOut): IFileSelector {\n if (symbol.external) {\n return [externalSourceSymbol, symbol.external];\n }\n const filePath = symbol.getFilePath?.(symbol);\n if (filePath) {\n return filePath.split('/');\n }\n return [this.defaultFileName];\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED