@yongdall/plugins 0.5.0 → 0.5.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/index.d.mts
CHANGED
|
@@ -18,11 +18,11 @@ declare function loadPluginProfiles<T extends object>(name: string, type?: "scri
|
|
|
18
18
|
* @template {object} T
|
|
19
19
|
* @overload
|
|
20
20
|
* @param {string} name
|
|
21
|
-
* @param {(config: any, plugin:
|
|
21
|
+
* @param {(config: any, plugin: string, load: (path: string) => Promise<any>) => Iterable<T> | AsyncIterable<T>} preprocess
|
|
22
22
|
* @param {'script' | 'data'} [type]
|
|
23
23
|
* @returns {AsyncIterableIterator<T>}
|
|
24
24
|
*/
|
|
25
|
-
declare function loadPluginProfiles<T extends object>(name: string, preprocess: (config: any, plugin:
|
|
25
|
+
declare function loadPluginProfiles<T extends object>(name: string, preprocess: (config: any, plugin: string, load: (path: string) => Promise<any>) => Iterable<T> | AsyncIterable<T>, type?: "script" | "data" | undefined): AsyncIterableIterator<T>;
|
|
26
26
|
/**
|
|
27
27
|
* @template {object} T
|
|
28
28
|
* @param {string} name
|
package/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { i as plugins_default, n as loadPluginProfiles, r as loadPluginScripts, t as loadPluginProfileAndPaths } from "./plugins-
|
|
1
|
+
import { i as plugins_default, n as loadPluginProfiles, r as loadPluginScripts, t as loadPluginProfileAndPaths } from "./plugins-BsoRxhdM.mjs";
|
|
2
2
|
|
|
3
3
|
export { plugins_default as default, loadPluginProfileAndPaths, loadPluginProfiles, loadPluginScripts };
|
package/package.json
CHANGED
|
@@ -107,7 +107,7 @@ async function* loadPluginProfileAndPaths(name, type) {
|
|
|
107
107
|
/**
|
|
108
108
|
* @template {object} T
|
|
109
109
|
* @param {string} name
|
|
110
|
-
* @param {(config: any, plugin:
|
|
110
|
+
* @param {(config: any, plugin: string, load: (path: string) => Promise<any>) => Iterable<T> | AsyncIterable<T>} preprocess
|
|
111
111
|
* @param {'script' | 'data'} [type]
|
|
112
112
|
* @returns {AsyncIterableIterator<T>}
|
|
113
113
|
*/
|
|
@@ -142,14 +142,14 @@ async function* loadPluginsByPreprocess(name, preprocess, type) {
|
|
|
142
142
|
* @template {object} T
|
|
143
143
|
* @overload
|
|
144
144
|
* @param {string} name
|
|
145
|
-
* @param {(config: any, plugin:
|
|
145
|
+
* @param {(config: any, plugin: string, load: (path: string) => Promise<any>) => Iterable<T> | AsyncIterable<T>} preprocess
|
|
146
146
|
* @param {'script' | 'data'} [type]
|
|
147
147
|
* @returns {AsyncIterableIterator<T>}
|
|
148
148
|
*/
|
|
149
149
|
/**
|
|
150
150
|
* @template {object} T
|
|
151
151
|
* @param {string} name
|
|
152
|
-
* @param {((config: any, plugin:
|
|
152
|
+
* @param {((config: any, plugin: string, load: (path: string) => Promise<any>) => Iterable<T> | AsyncIterable<T>) | 'script' | 'data'} [preprocess]
|
|
153
153
|
* @param {'script' | 'data'} [type]
|
|
154
154
|
* @returns {AsyncIterableIterator<[plugin: string, config: T, path: string] | T>}
|
|
155
155
|
*/
|
|
@@ -173,4 +173,4 @@ async function* loadPluginScripts(name) {
|
|
|
173
173
|
|
|
174
174
|
//#endregion
|
|
175
175
|
export { plugins_default as i, loadPluginProfiles as n, loadPluginScripts as r, loadPluginProfileAndPaths as t };
|
|
176
|
-
//# sourceMappingURL=plugins-
|
|
176
|
+
//# sourceMappingURL=plugins-BsoRxhdM.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins-BsoRxhdM.mjs","names":[],"sources":["../../cli/plugins/index.mjs"],"sourcesContent":["import * as pathFn from 'node:path';\nimport * as fsPromises from 'node:fs/promises';\nimport { pluginIdRegex } from '@yongdall/common';\nimport { loadCfgWithPath, loadProjectConfiguration, loadProjectConfigurationPath } from '@yongdall/configuration';\nimport loadConfiguration, { loadConfigurationWithPath } from '@yongdall/load-configuration';\n\n\n/**\n * \n * @param {string} root \n * @param {string} name \n */\nasync function findNodeModule(root, name) {\n\tfor (let basepath = root; ;) {\n\t\tconst path = pathFn.resolve(basepath, 'node_modules', name);\n\t\tconst packageJson = await fsPromises.readFile(pathFn.resolve(path, 'package.json'), 'utf-8').then(v => JSON.parse(v)).catch(() => null);\n\t\tconst version = packageJson?.version;\n\t\tif (version && typeof version === 'string') {\n\t\t\treturn path;\n\t\t}\n\t\tconst parent = pathFn.dirname(basepath);\n\t\tif (parent === basepath) { break; }\n\t\tbasepath = parent;\n\t}\n\treturn null;\n}\n/**\n * @returns {Promise<[string, string | boolean | {path?: string; development?: boolean}, string][]>}\n */\nasync function getPlugins() {\n\tconst result = await loadCfgWithPath('plugins').catch(() => { });\n\tconst [path, pluginList] = result && result[1] ? result : [\n\t\tawait loadProjectConfigurationPath(),\n\t\tawait loadProjectConfiguration().then(v => v.plugins),\n\t];\n\tif (!pluginList) { return []; }\n\tconst basePath = pathFn.dirname(path);\n\tif (Array.isArray(pluginList)) {\n\t\treturn pluginList.map(a => [a, true, basePath]);\n\t}\n\treturn Object.entries(pluginList).map(([a, b]) => [a, b, basePath]);\n}\n/**\n * \n * @param {string} plugin \n * @param {string | boolean | { path?: string; development?: boolean }} define \n * @param {string} basePath \n * @returns \n */\nasync function loadPlugin(plugin, define, basePath) {\n\tconst r = pluginIdRegex.exec(plugin);\n\tif (!r) { throw new Error(`无效的应用名称:${plugin}`); }\n\tconst path = typeof define === 'object' && define ? define.path : define;\n\tconst development = typeof define === 'object' && define ? define.development : false;\n\n\tconst url = typeof path === 'string' ? path : '';\n\tconst index = url.indexOf('#');\n\tconst packagePath = index >= 0 ? url.slice(0, index) : url;\n\tconst packageName = pluginIdRegex.test(packagePath) ? packagePath : '';\n\n\tconst source = !packageName && packagePath\n\t\t? pathFn.resolve(basePath, packagePath)\n\t\t: await findNodeModule(basePath, packageName || plugin);\n\tif (!source) { throw new Error(`找不到应用:${plugin}`); }\n\tlet pluginPath = source;\n\n\tif (index >= 0) {\n\t\tconst dirOptional = url[index + 1] === '?';\n\t\tconst dir = url.slice(dirOptional ? index + 2 : index + 1);\n\t\tif (dir) {\n\t\t\tconst pluginDir = pathFn.join(pluginPath, dir);\n\t\t\tif (await fsPromises.stat(pluginDir).then(s => s.isDirectory(), () => false)) {\n\t\t\t\tpluginPath = pluginDir;\n\t\t\t} else if (!dirOptional) {\n\t\t\t\tthrow new Error(`找不到应用 ${plugin} 的目录: ${dir}`);\n\t\t\t}\n\t\t}\n\t}\n\t/** @type {{label?: string; configurator?: any}?} */\n\tconst data = await loadConfiguration(pathFn.resolve(pluginPath, `yongdall.plugin`), 'data').catch(() => null);\n\treturn {\n\t\troot: pluginPath,\n\t\tsource,\n\t\tdevelopment: Boolean(development),\n\t\tlabel: data?.label,\n\t\tconfigurator: data?.configurator,\n\t};\n}\n\n/** @type {Record<string, {root: string; source: string; development: boolean; configurator?: any; label?: string}>} */\nconst pluginRoots = Object.create(null);\nfor (const [plugin, define, basePath] of await getPlugins()) {\n\tif (!define) { continue; }\n\n\tpluginRoots[plugin] = await loadPlugin(plugin, define, basePath);\n}\n\nexport default pluginRoots;\n\n/** \n * @template {object} T\n * @param {string} name\n * @param {'script' | 'data'} [type] \n * @returns {AsyncIterableIterator<[plugin: string, config: T, path: string]>}\n */\nexport async function* loadPluginProfileAndPaths(name, type) {\n\tfor (const [plugin, { root }] of Object.entries(pluginRoots)) {\n\t\t/** @type {[string, T | null] | null} */\n\t\tconst result = await loadConfigurationWithPath(pathFn.resolve(root, `${name}.yongdall`), type)\n\t\t\t|| await loadConfigurationWithPath(pathFn.resolve(root, `yongdall/${name}`), type)\n\t\t\t|| await loadConfigurationWithPath(pathFn.resolve(root, `${name}/yongdall`), type);\n\t\tif (!result) { continue; }\n\t\tconst [path, config] = result;\n\t\tif (!config) { continue; }\n\t\tyield [plugin, config, path];\n\t}\n}\n\n/** \n * @template {object} T\n * @param {string} name\n * @param {(config: any, plugin: string, load: (path: string) => Promise<any>) => Iterable<T> | AsyncIterable<T>} preprocess\n * @param {'script' | 'data'} [type] \n * @returns {AsyncIterableIterator<T>}\n */\nasync function* loadPluginsByPreprocess(name, preprocess, type) {\n\tfor await (const [plugin, config, path] of loadPluginProfileAndPaths(name, type)) {\n\t\tconst basePath = pathFn.dirname(path);\n\t\tyield* preprocess(config, plugin, path => {\n\t\t\tconst index = path.indexOf('#');\n\t\t\tconst file = index < 0 ? path : path.slice(0, index);\n\t\t\treturn import(pathFn.resolve(basePath, file)).then(mod => {\n\t\t\t\tconst key = index < 0 ? path.slice(index + 1) : '';\n\t\t\t\tlet val = mod;\n\t\t\t\tfor (const k of key.split('.').filter(Boolean)) {\n\t\t\t\t\tif (!val || typeof val !== 'object') { return; }\n\t\t\t\t\tval = val[k];\n\t\t\t\t}\n\t\t\t\tif (typeof val === 'function') {\n\t\t\t\t\treturn val();\n\t\t\t\t}\n\t\t\t}, (e) => {\n\t\t\t\tconsole.error(e);\n\t\t\t});\n\t\t});\n\t}\n}\n\n\n/** \n * @template {object} T\n * @overload\n * @param {string} name\n * @param {'script' | 'data'} [type] \n * @returns {AsyncIterableIterator<[plugin: string, config: T, path: string]>}\n */\n/** \n * @template {object} T\n * @overload\n * @param {string} name\n * @param {(config: any, plugin: string, load: (path: string) => Promise<any>) => Iterable<T> | AsyncIterable<T>} preprocess\n * @param {'script' | 'data'} [type] \n * @returns {AsyncIterableIterator<T>}\n */\n/** \n * @template {object} T\n * @param {string} name\n * @param {((config: any, plugin: string, load: (path: string) => Promise<any>) => Iterable<T> | AsyncIterable<T>) | 'script' | 'data'} [preprocess]\n * @param {'script' | 'data'} [type] \n * @returns {AsyncIterableIterator<[plugin: string, config: T, path: string] | T>}\n */\nexport function loadPluginProfiles(name, preprocess, type) {\n\tif (typeof preprocess === 'function') {\n\t\treturn loadPluginsByPreprocess(name, preprocess, type);\n\t}\n\treturn loadPluginProfileAndPaths(name, preprocess);\n}\n\n/** \n * @template {object} T\n * @param {string} name\n * @returns {AsyncIterableIterator<[plugin: string, config: T]>}\n */\nexport async function* loadPluginScripts(name) {\n\tfor (const [plugin, { root }] of Object.entries(pluginRoots)) {\n\t\t/** @type {T | null} */\n\t\tconst result = await loadConfiguration(pathFn.resolve(root, `${name}.yongdall`), 'script')\n\t\t\t|| await loadConfiguration(pathFn.resolve(root, `yongdall/${name}`), 'script')\n\t\t\t|| await loadConfiguration(pathFn.resolve(root, `${name}/yongdall`), 'script');\n\t\tif (result === null) { continue; }\n\t\tyield [plugin, result];\n\t}\n}\n"],"mappings":"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"}
|
package/yongdall/enumeration.mjs
CHANGED
package/plugins-B8XzRV-_.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugins-B8XzRV-_.mjs","names":[],"sources":["../../cli/plugins/index.mjs"],"sourcesContent":["import * as pathFn from 'node:path';\nimport * as fsPromises from 'node:fs/promises';\nimport { pluginIdRegex } from '@yongdall/common';\nimport { loadCfgWithPath, loadProjectConfiguration, loadProjectConfigurationPath } from '@yongdall/configuration';\nimport loadConfiguration, { loadConfigurationWithPath } from '@yongdall/load-configuration';\n\n\n/**\n * \n * @param {string} root \n * @param {string} name \n */\nasync function findNodeModule(root, name) {\n\tfor (let basepath = root; ;) {\n\t\tconst path = pathFn.resolve(basepath, 'node_modules', name);\n\t\tconst packageJson = await fsPromises.readFile(pathFn.resolve(path, 'package.json'), 'utf-8').then(v => JSON.parse(v)).catch(() => null);\n\t\tconst version = packageJson?.version;\n\t\tif (version && typeof version === 'string') {\n\t\t\treturn path;\n\t\t}\n\t\tconst parent = pathFn.dirname(basepath);\n\t\tif (parent === basepath) { break; }\n\t\tbasepath = parent;\n\t}\n\treturn null;\n}\n/**\n * @returns {Promise<[string, string | boolean | {path?: string; development?: boolean}, string][]>}\n */\nasync function getPlugins() {\n\tconst result = await loadCfgWithPath('plugins').catch(() => { });\n\tconst [path, pluginList] = result && result[1] ? result : [\n\t\tawait loadProjectConfigurationPath(),\n\t\tawait loadProjectConfiguration().then(v => v.plugins),\n\t];\n\tif (!pluginList) { return []; }\n\tconst basePath = pathFn.dirname(path);\n\tif (Array.isArray(pluginList)) {\n\t\treturn pluginList.map(a => [a, true, basePath]);\n\t}\n\treturn Object.entries(pluginList).map(([a, b]) => [a, b, basePath]);\n}\n/**\n * \n * @param {string} plugin \n * @param {string | boolean | { path?: string; development?: boolean }} define \n * @param {string} basePath \n * @returns \n */\nasync function loadPlugin(plugin, define, basePath) {\n\tconst r = pluginIdRegex.exec(plugin);\n\tif (!r) { throw new Error(`无效的应用名称:${plugin}`); }\n\tconst path = typeof define === 'object' && define ? define.path : define;\n\tconst development = typeof define === 'object' && define ? define.development : false;\n\n\tconst url = typeof path === 'string' ? path : '';\n\tconst index = url.indexOf('#');\n\tconst packagePath = index >= 0 ? url.slice(0, index) : url;\n\tconst packageName = pluginIdRegex.test(packagePath) ? packagePath : '';\n\n\tconst source = !packageName && packagePath\n\t\t? pathFn.resolve(basePath, packagePath)\n\t\t: await findNodeModule(basePath, packageName || plugin);\n\tif (!source) { throw new Error(`找不到应用:${plugin}`); }\n\tlet pluginPath = source;\n\n\tif (index >= 0) {\n\t\tconst dirOptional = url[index + 1] === '?';\n\t\tconst dir = url.slice(dirOptional ? index + 2 : index + 1);\n\t\tif (dir) {\n\t\t\tconst pluginDir = pathFn.join(pluginPath, dir);\n\t\t\tif (await fsPromises.stat(pluginDir).then(s => s.isDirectory(), () => false)) {\n\t\t\t\tpluginPath = pluginDir;\n\t\t\t} else if (!dirOptional) {\n\t\t\t\tthrow new Error(`找不到应用 ${plugin} 的目录: ${dir}`);\n\t\t\t}\n\t\t}\n\t}\n\t/** @type {{label?: string; configurator?: any}?} */\n\tconst data = await loadConfiguration(pathFn.resolve(pluginPath, `yongdall.plugin`), 'data').catch(() => null);\n\treturn {\n\t\troot: pluginPath,\n\t\tsource,\n\t\tdevelopment: Boolean(development),\n\t\tlabel: data?.label,\n\t\tconfigurator: data?.configurator,\n\t};\n}\n\n/** @type {Record<string, {root: string; source: string; development: boolean; configurator?: any; label?: string}>} */\nconst pluginRoots = Object.create(null);\nfor (const [plugin, define, basePath] of await getPlugins()) {\n\tif (!define) { continue; }\n\n\tpluginRoots[plugin] = await loadPlugin(plugin, define, basePath);\n}\n\nexport default pluginRoots;\n\n/** \n * @template {object} T\n * @param {string} name\n * @param {'script' | 'data'} [type] \n * @returns {AsyncIterableIterator<[plugin: string, config: T, path: string]>}\n */\nexport async function* loadPluginProfileAndPaths(name, type) {\n\tfor (const [plugin, { root }] of Object.entries(pluginRoots)) {\n\t\t/** @type {[string, T | null] | null} */\n\t\tconst result = await loadConfigurationWithPath(pathFn.resolve(root, `${name}.yongdall`), type)\n\t\t\t|| await loadConfigurationWithPath(pathFn.resolve(root, `yongdall/${name}`), type)\n\t\t\t|| await loadConfigurationWithPath(pathFn.resolve(root, `${name}/yongdall`), type);\n\t\tif (!result) { continue; }\n\t\tconst [path, config] = result;\n\t\tif (!config) { continue; }\n\t\tyield [plugin, config, path];\n\t}\n}\n\n/** \n * @template {object} T\n * @param {string} name\n * @param {(config: any, plugin: any, load: (path: string) => Promise<any>) => Iterable<T> | AsyncIterable<T>} preprocess\n * @param {'script' | 'data'} [type] \n * @returns {AsyncIterableIterator<T>}\n */\nasync function* loadPluginsByPreprocess(name, preprocess, type) {\n\tfor await (const [plugin, config, path] of loadPluginProfileAndPaths(name, type)) {\n\t\tconst basePath = pathFn.dirname(path);\n\t\tyield* preprocess(config, plugin, path => {\n\t\t\tconst index = path.indexOf('#');\n\t\t\tconst file = index < 0 ? path : path.slice(0, index);\n\t\t\treturn import(pathFn.resolve(basePath, file)).then(mod => {\n\t\t\t\tconst key = index < 0 ? path.slice(index + 1) : '';\n\t\t\t\tlet val = mod;\n\t\t\t\tfor (const k of key.split('.').filter(Boolean)) {\n\t\t\t\t\tif (!val || typeof val !== 'object') { return; }\n\t\t\t\t\tval = val[k];\n\t\t\t\t}\n\t\t\t\tif (typeof val === 'function') {\n\t\t\t\t\treturn val();\n\t\t\t\t}\n\t\t\t}, (e) => {\n\t\t\t\tconsole.error(e);\n\t\t\t});\n\t\t});\n\t}\n}\n\n\n/** \n * @template {object} T\n * @overload\n * @param {string} name\n * @param {'script' | 'data'} [type] \n * @returns {AsyncIterableIterator<[plugin: string, config: T, path: string]>}\n */\n/** \n * @template {object} T\n * @overload\n * @param {string} name\n * @param {(config: any, plugin: any, load: (path: string) => Promise<any>) => Iterable<T> | AsyncIterable<T>} preprocess\n * @param {'script' | 'data'} [type] \n * @returns {AsyncIterableIterator<T>}\n */\n/** \n * @template {object} T\n * @param {string} name\n * @param {((config: any, plugin: any, load: (path: string) => Promise<any>) => Iterable<T> | AsyncIterable<T>) | 'script' | 'data'} [preprocess]\n * @param {'script' | 'data'} [type] \n * @returns {AsyncIterableIterator<[plugin: string, config: T, path: string] | T>}\n */\nexport function loadPluginProfiles(name, preprocess, type) {\n\tif (typeof preprocess === 'function') {\n\t\treturn loadPluginsByPreprocess(name, preprocess, type);\n\t}\n\treturn loadPluginProfileAndPaths(name, preprocess);\n}\n\n/** \n * @template {object} T\n * @param {string} name\n * @returns {AsyncIterableIterator<[plugin: string, config: T]>}\n */\nexport async function* loadPluginScripts(name) {\n\tfor (const [plugin, { root }] of Object.entries(pluginRoots)) {\n\t\t/** @type {T | null} */\n\t\tconst result = await loadConfiguration(pathFn.resolve(root, `${name}.yongdall`), 'script')\n\t\t\t|| await loadConfiguration(pathFn.resolve(root, `yongdall/${name}`), 'script')\n\t\t\t|| await loadConfiguration(pathFn.resolve(root, `${name}/yongdall`), 'script');\n\t\tif (result === null) { continue; }\n\t\tyield [plugin, result];\n\t}\n}\n"],"mappings":"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"}
|