@initx-plugin/core 0.1.1 → 0.1.3

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.d.mts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { MatcherRules } from 'matchinitx';
2
+ import * as npm_plugin_kit from 'npm-plugin-kit';
2
3
 
3
4
  declare const INITX_DIR: string;
4
5
  declare const STORE_DIR: string;
@@ -18,10 +19,9 @@ interface PackageInfo {
18
19
  homepage?: string;
19
20
  }
20
21
  interface InitxPluginInfo {
21
- /**
22
- * Plugin name
23
- */
24
22
  name: string;
23
+ version: string;
24
+ description: string;
25
25
  /**
26
26
  * Plugin root path
27
27
  */
@@ -37,6 +37,9 @@ type MatchedPlugin = HandlerInfo & {
37
37
  declare function fetchPlugins(): Promise<InitxPluginInfo[]>;
38
38
  declare function loadPlugins(): Promise<LoadPluginResult[]>;
39
39
  declare function matchPlugins(plugins: LoadPluginResult[], { key, cliOptions }: InitxBaseContext, ...others: string[]): Promise<MatchedPlugin[]>;
40
+ /**
41
+ * @deprecated Use npm-plugin-kit instead
42
+ */
40
43
  declare function withPluginPrefix(commands: string[]): string[];
41
44
 
42
45
  type InitxRuleFields<TRule extends object = object> = TRule & {
@@ -114,10 +117,14 @@ declare abstract class InitxPlugin<TStore extends object = object> {
114
117
  private executeHandle;
115
118
  }
116
119
 
117
- declare function detectManager(): boolean;
120
+ declare function detectManager(): Promise<boolean>;
118
121
  declare function installManager(): Promise<void>;
119
122
 
123
+ type Constructor<T> = new (...args: any[]) => T;
124
+ declare const pluginSystem: npm_plugin_kit.PluginSystem<Constructor<InitxPlugin<object>>>;
125
+
120
126
  declare function createStore(name: string, defaultStore?: Record<string, any>): Record<string, any>;
121
127
  declare function writeStore(name: string): void;
122
128
 
123
- export { type HandlerInfo, INITX_DIR, type InitxBaseContext, type InitxContext, type InitxMatcherRules, InitxPlugin, type InitxPluginInfo, type LoadPluginResult, type MatchedPlugin, NODE_MODULES_DIR, PLUGIN_DIR, type PackageInfo, STORE_DIR, STORE_FILE_NAME, createStore, detectManager, fetchPlugins, installManager, loadPlugins, matchPlugins, withPluginPrefix, writeStore };
129
+ export { INITX_DIR, InitxPlugin, NODE_MODULES_DIR, PLUGIN_DIR, STORE_DIR, STORE_FILE_NAME, createStore, detectManager, fetchPlugins, installManager, loadPlugins, matchPlugins, pluginSystem, withPluginPrefix, writeStore };
130
+ export type { HandlerInfo, InitxBaseContext, InitxContext, InitxMatcherRules, InitxPluginInfo, LoadPluginResult, MatchedPlugin, PackageInfo };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { MatcherRules } from 'matchinitx';
2
+ import * as npm_plugin_kit from 'npm-plugin-kit';
2
3
 
3
4
  declare const INITX_DIR: string;
4
5
  declare const STORE_DIR: string;
@@ -18,10 +19,9 @@ interface PackageInfo {
18
19
  homepage?: string;
19
20
  }
20
21
  interface InitxPluginInfo {
21
- /**
22
- * Plugin name
23
- */
24
22
  name: string;
23
+ version: string;
24
+ description: string;
25
25
  /**
26
26
  * Plugin root path
27
27
  */
@@ -37,6 +37,9 @@ type MatchedPlugin = HandlerInfo & {
37
37
  declare function fetchPlugins(): Promise<InitxPluginInfo[]>;
38
38
  declare function loadPlugins(): Promise<LoadPluginResult[]>;
39
39
  declare function matchPlugins(plugins: LoadPluginResult[], { key, cliOptions }: InitxBaseContext, ...others: string[]): Promise<MatchedPlugin[]>;
40
+ /**
41
+ * @deprecated Use npm-plugin-kit instead
42
+ */
40
43
  declare function withPluginPrefix(commands: string[]): string[];
41
44
 
42
45
  type InitxRuleFields<TRule extends object = object> = TRule & {
@@ -114,10 +117,14 @@ declare abstract class InitxPlugin<TStore extends object = object> {
114
117
  private executeHandle;
115
118
  }
116
119
 
117
- declare function detectManager(): boolean;
120
+ declare function detectManager(): Promise<boolean>;
118
121
  declare function installManager(): Promise<void>;
119
122
 
123
+ type Constructor<T> = new (...args: any[]) => T;
124
+ declare const pluginSystem: npm_plugin_kit.PluginSystem<Constructor<InitxPlugin<object>>>;
125
+
120
126
  declare function createStore(name: string, defaultStore?: Record<string, any>): Record<string, any>;
121
127
  declare function writeStore(name: string): void;
122
128
 
123
- export { type HandlerInfo, INITX_DIR, type InitxBaseContext, type InitxContext, type InitxMatcherRules, InitxPlugin, type InitxPluginInfo, type LoadPluginResult, type MatchedPlugin, NODE_MODULES_DIR, PLUGIN_DIR, type PackageInfo, STORE_DIR, STORE_FILE_NAME, createStore, detectManager, fetchPlugins, installManager, loadPlugins, matchPlugins, withPluginPrefix, writeStore };
129
+ export { INITX_DIR, InitxPlugin, NODE_MODULES_DIR, PLUGIN_DIR, STORE_DIR, STORE_FILE_NAME, createStore, detectManager, fetchPlugins, installManager, loadPlugins, matchPlugins, pluginSystem, withPluginPrefix, writeStore };
130
+ export type { HandlerInfo, InitxBaseContext, InitxContext, InitxMatcherRules, InitxPluginInfo, LoadPluginResult, MatchedPlugin, PackageInfo };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{homedir as D}from"node:os";import c from"fs-extra";import p,{resolve as f}from"pathe";import{useInitxMatcher as R}from"matchinitx";import{defu as E}from"defu";import M from"node:process";import{c as J}from"@initx-plugin/utils";const m=f(D(),".initx"),y=f(m,"stores"),h="store.json",u=f(m,"plugins"),S=c.existsSync(f(u,"lib"))?"lib/node_modules":"node_modules";let d=!1,g={};const x=o=>p.resolve(y,o,h);function I(o,t={}){c.ensureDirSync(p.resolve(y,o));const n=x(o),s=i=>(k(n,i),L(i));if(!c.existsSync(n))return s(t);let e;try{const i=c.readJsonSync(n);e=E(i,t)}catch{e=t}return s(e)}function w(o){d&&k(x(o),g)}function k(o,t){c.writeJsonSync(o,t,{spaces:2})}function L(o={}){const t=s=>typeof s=="object"&&s!==null&&new Set(["[object Object]","[object Array]"]).has(Object.prototype.toString.call(s)),n=s=>new Proxy(s,{get(e,i){const r=Reflect.get(e,i);return t(r)?n(r):r},set(e,i,r){const a=Reflect.set(e,i,r);return d=!0,a},deleteProperty(e,i){const r=Reflect.deleteProperty(e,i);return d=!0,r}});return g=n(o),g}const P={plugin:/^(?:@initx-plugin\/|initx-plugin-)/,exclude:/@initx-plugin\/(?:core|utils)$/};async function v(o){const t=p.resolve(o,"package.json");if(!c.existsSync(t))return[];const n=c.readJsonSync(t),{dependencies:s={},devDependencies:e={}}=n,i=[];return Object.keys({...s,...e}).forEach(r=>{if(!P.plugin.test(r)||P.exclude.test(r))return;const a=p.resolve(o,"node_modules",r);c.existsSync(a)&&i.push({name:r,root:a})}),i}async function N(){return v(M.cwd())}async function O(){return c.existsSync(u)?v(u):(c.ensureDirSync(u),[])}async function T(){const o=await N(),t=o.map(({name:e})=>e),n=[...(await O()).filter(({name:e})=>!t.includes(e)),...o],s=await import("importx");return Promise.all(n.map(async({root:e})=>{const i=await s.import(e,import.meta.url).then(a=>a.default),r=c.readJsonSync(p.resolve(e,"package.json"));return{packageInfo:{root:e,name:r.name,version:r.version,description:r.description,author:r.author,homepage:r.homepage},instance:new i}}))}async function $(o,{key:t,cliOptions:n},...s){const e=[];for(const i of o){const{instance:r,packageInfo:a}=i,b=await r.run({key:t,cliOptions:n,packageInfo:a,optionsList:Object.keys(n).filter(l=>n[l]===!0).map(l=>`--${l}`)},...s);e.push(...b.map(l=>({handler:l.handler,description:l.description,packageInfo:a})))}return e}function A(o,t){return o.some(n=>typeof n=="string"||typeof n>"u"?n===t:n.test(t))}function j(o){return o.push("--prefix",u),o}class H{defaultStore;async run(t,...n){const s=R((e,...i)=>({handler:()=>this.executeHandle(t,e,...i),...e}));return(await Promise.all(s.match(this.rules,t.key,...n).map(async e=>e.verify&&!e.verify(t,...n)||e.optional&&!A(e.optional,n[0])?!1:e))).filter(Boolean)}async executeHandle(t,n,...s){const e=I(t.packageInfo.name,this.defaultStore);await this.handle({...t,rule:n,store:e},...s),w(t.packageInfo.name)}}const _="@initx-plugin/manager";function U(){return c.existsSync(f(u,S,_))}async function B(){await J("npm",j(["install",_]))}export{m as INITX_DIR,H as InitxPlugin,S as NODE_MODULES_DIR,u as PLUGIN_DIR,y as STORE_DIR,h as STORE_FILE_NAME,I as createStore,U as detectManager,O as fetchPlugins,B as installManager,T as loadPlugins,$ as matchPlugins,j as withPluginPrefix,w as writeStore};
1
+ import{homedir as j}from"node:os";import c from"fs-extra";import u,{resolve as m}from"pathe";import{useInitxMatcher as b}from"matchinitx";import{defu as D}from"defu";import R from"node:process";import{createNpmPlugin as E}from"npm-plugin-kit";const y=m(j(),".initx"),g=m(y,"stores"),S="store.json",p=m(y,"plugins"),M=c.existsSync(m(p,"lib"))?"lib/node_modules":"node_modules";let h=!1,x={};const v=e=>u.resolve(g,e,S);function w(e,o={}){c.ensureDirSync(u.resolve(g,e));const t=v(e),r=i=>(k(t,i),N(i));if(!c.existsSync(t))return r(o);let n;try{const i=c.readJsonSync(t);n=D(i,o)}catch{n=o}return r(n)}function I(e){h&&k(v(e),x)}function k(e,o){c.writeJsonSync(e,o,{spaces:2})}function N(e={}){const o=r=>typeof r=="object"&&r!==null&&new Set(["[object Object]","[object Array]"]).has(Object.prototype.toString.call(r)),t=r=>new Proxy(r,{get(n,i){const s=Reflect.get(n,i);return o(s)?t(s):s},set(n,i,s){const a=Reflect.set(n,i,s);return h=!0,a},deleteProperty(n,i){const s=Reflect.deleteProperty(n,i);return h=!0,s}});return x=t(e),x}const f=E("initx",{pluginDir:p}),d={plugin:/^(?:@initx-plugin\/|initx-plugin-)/,exclude:/@initx-plugin\/(?:core|utils)$/};async function J(e){const o=u.resolve(e,"package.json");if(!c.existsSync(o))return[];const t=c.readJsonSync(o),{dependencies:r={},devDependencies:n={}}=t,i=[];return Object.keys({...r,...n}).forEach(s=>{if(!d.plugin.test(s)||d.exclude.test(s))return;const a=u.resolve(e,"node_modules",s);c.existsSync(a)&&i.push({name:s,version:t.version,description:t.description,root:a})}),i}async function L(){return J(R.cwd())}async function P(){return(await f.list()).filter(e=>d.plugin.test(e.name)&&!d.exclude.test(e.name)).map(e=>({name:e.name,version:e.version,description:e.description,root:u.resolve(p,"node_modules",e.name)}))}async function T(){const e=await L(),o=e.map(({name:r})=>r),t=[...(await P()).filter(({name:r})=>!o.includes(r)),...e];return Promise.all(t.map(async({name:r,root:n})=>{const i=await f.load(r),s=c.readJsonSync(u.resolve(n,"package.json"));return{packageInfo:{root:n,name:s.name,version:s.version,description:s.description,author:s.author,homepage:s.homepage},instance:new i}}))}async function A(e,{key:o,cliOptions:t},...r){const n=[];for(const i of e){const{instance:s,packageInfo:a}=i,_=await s.run({key:o,cliOptions:t,packageInfo:a,optionsList:Object.keys(t).filter(l=>t[l]===!0).map(l=>`--${l}`)},...r);n.push(..._.map(l=>({handler:l.handler,description:l.description,packageInfo:a})))}return n}function H(e,o){return e.some(t=>typeof t=="string"||typeof t>"u"?t===o:t.test(o))}function U(e){return e.push("--prefix",p),e}class B{defaultStore;async run(o,...t){const r=b((n,...i)=>({handler:()=>this.executeHandle(o,n,...i),...n}));return(await Promise.all(r.match(this.rules,o.key,...t).map(async n=>n.verify&&!n.verify(o,...t)||n.optional&&!H(n.optional,t[0])?!1:n))).filter(Boolean)}async executeHandle(o,t,...r){const n=w(o.packageInfo.name,this.defaultStore);await this.handle({...o,rule:t,store:n},...r),I(o.packageInfo.name)}}const O="@initx-plugin/manager";async function F(){try{return(await f.list()).some(e=>e.name===O)}catch{return!1}}async function G(){await f.install(O)}export{y as INITX_DIR,B as InitxPlugin,M as NODE_MODULES_DIR,p as PLUGIN_DIR,g as STORE_DIR,S as STORE_FILE_NAME,w as createStore,F as detectManager,P as fetchPlugins,G as installManager,T as loadPlugins,A as matchPlugins,f as pluginSystem,U as withPluginPrefix,I as writeStore};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@initx-plugin/core",
3
3
  "type": "module",
4
- "version": "0.1.1",
4
+ "version": "0.1.3",
5
5
  "description": "core module for initx plugins",
6
6
  "license": "MIT",
7
7
  "homepage": "https://github.com/initx-collective/initx#readme",
@@ -23,11 +23,11 @@
23
23
  ],
24
24
  "dependencies": {
25
25
  "defu": "^6.1.4",
26
- "fs-extra": "^11.3.0",
27
- "importx": "^0.5.2",
26
+ "fs-extra": "^11.3.1",
28
27
  "matchinitx": "^0.0.4",
28
+ "npm-plugin-kit": "^0.3.1",
29
29
  "pathe": "^2.0.3",
30
- "@initx-plugin/utils": "0.1.1"
30
+ "@initx-plugin/utils": "0.1.3"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@types/fs-extra": "^11.0.4"