@longzai-intelligence-oxlint/lzi-builder-config-plugin 0.1.24

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/README.md ADDED
@@ -0,0 +1,12 @@
1
+ # @longzai-intelligence-oxlint/lzi-builder-config-plugin
2
+
3
+ Longzai Intelligence Oxlint 的 lzi-builder 构建配置治理插件,治理 bin 产物的 shebang 注入形态。
4
+
5
+ ## 简介
6
+
7
+ lzi-builder 产物缺 shebang 会让 npm 安装链软链直执行交系统 shell 解析而报语法错误。本插件在静态检查阶段校验 bin 指向 dist 产物的包是否在构建配置注入 banner,防止缺陷复发。规范正源见 architecture 仓 `cli-bin-shebang` 指南。
8
+
9
+ ## 能力
10
+
11
+ - `require-bin-banner` — 校验 bin 指向 dist 产物的包在 `lzi-builder.config.ts` 注入 shebang banner,同时拦截可发布包 bin 直指 src 源码的发布形态违规
12
+ - 同时兼容 Oxlint 与 ESLint 运行时
@@ -0,0 +1,9 @@
1
+ import "../rolldown-runtime-BqT_7tdF.js";
2
+ import { OxlintRules } from "@longzai-intelligence-oxlint/core";
3
+ //#region src/configs/recommended.config.d.ts
4
+ /**
5
+ * 推荐规则集
6
+ */
7
+ declare const recommended: OxlintRules;
8
+ //#endregion
9
+ export { recommended };
@@ -0,0 +1 @@
1
+ import"../rolldown-runtime-BqT_7tdF.js";const e={"@longzai-intelligence-oxlint/lzi-builder-config-plugin/require-bin-banner":`error`};export{e as recommended};
@@ -0,0 +1,18 @@
1
+ import "./rolldown-runtime-BqT_7tdF.js";
2
+ //#region src/rules/require-bin-banner.rule.d.ts
3
+ /**
4
+ * 要求 bin 指向 dist 产物的包注入 shebang banner 的门禁规则
5
+ *
6
+ * @remarks
7
+ * 以构建配置文件为守卫文件,判定本配置文本与同级 bin 字段的匹配关系
8
+ * 统一配置在同目录存在 builder 主配置时不具权威性,跳过判定
9
+ */
10
+ declare const requireBinBannerRule: import("@oxlint/plugins").Rule;
11
+ //#endregion
12
+ //#region src/index.d.ts
13
+ /**
14
+ * lzi-builder-config 插件实例
15
+ */
16
+ declare const lziBuilderConfigPlugin: import("@oxlint/plugins").Plugin;
17
+ //#endregion
18
+ export { lziBuilderConfigPlugin as default, lziBuilderConfigPlugin, requireBinBannerRule };
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ import"./rolldown-runtime-BqT_7tdF.js";import{defineRule as e,eslintCompatPlugin as t}from"@oxlint/plugins";import{existsSync as n,readFileSync as r}from"node:fs";import{dirname as i,join as a}from"node:path";const o=/(^|\/)lzi-builder\.config\.(ts|mts)$/,s=`lzi.config.ts`,c=[`lzi-builder.config.ts`,`lzi-builder.config.mts`],l=/banner\s*:\s*['"]#!/,u=/banner\s*:\s*\{[^}]*#!/,d=/(^|\/)dist\//,f=/(^|\/)src\//;function p(e){return typeof e==`object`&&!!e}function m(e){let t=e.replace(/\\/g,`/`);return o.test(t)||t.endsWith(`/${s}`)}function h(e){let t=e.bin;return typeof t==`string`?[t]:p(t)?Object.values(t).filter(e=>typeof e==`string`):[]}function g(e){return l.test(e)||u.test(e)}function _(e){let t=a(e,`package.json`);if(!n(t))return null;try{let e=JSON.parse(r(t,`utf8`));return p(e)?e:null}catch{return null}}function v(e,t){let n=h(e);return n.length===0?null:n.some(e=>d.test(e.replace(/^\.\//,``)))?g(t)?null:`missingBanner`:e.private===!0?null:n.some(e=>f.test(e.replace(/^\.\//,``)))?`binPointsToSource`:null}const y={missingBanner:`bin 入口指向 dist 产物但构建配置缺少 banner,发布后经 npm 软链直执行会交系统 shell 解析而报语法错误。请配置 "banner: '#!/usr/bin/env bun'",规范见 architecture 仓 "docs/best-practices/build-and-toolchain/guides/cli-bin-shebang.md"。`,binPointsToSource:`可发布包的 bin 入口指向 src 源码,安装链软链直指 TS 源码无法执行。请将 bin 指向 "dist" 产物并配置 banner。`},b=e({meta:{type:`problem`,docs:{description:`要求 bin 指向 dist 产物的包在构建配置注入 shebang banner`}},createOnce(e){return{before(){let t=e.filename;if(!m(t))return!1},Program(t){let r=i(e.filename);if(e.filename.replace(/\\/g,`/`).endsWith(`/${s}`)&&c.some(e=>n(a(r,e))))return;let o=_(r);if(o===null)return;let l=v(o,e.sourceCode.text);l!==null&&e.report({node:t,message:y[l]})}}}}),x=t({meta:{name:`@longzai-intelligence-oxlint/lzi-builder-config-plugin`},rules:{"require-bin-banner":b}});export{x as default,x as lziBuilderConfigPlugin,b as requireBinBannerRule};
@@ -0,0 +1 @@
1
+ import"node:module";export{};
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@longzai-intelligence-oxlint/lzi-builder-config-plugin",
3
+ "version": "0.1.24",
4
+ "license": "UNLICENSED",
5
+ "files": [
6
+ "dist"
7
+ ],
8
+ "type": "module",
9
+ "main": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ },
16
+ "./configs/recommended": {
17
+ "types": "./dist/configs/recommended.d.ts",
18
+ "import": "./dist/configs/recommended.js"
19
+ }
20
+ },
21
+ "scripts": {
22
+ "build": "lzi-builder",
23
+ "build:prod": "NODE_ENV=production bun run build",
24
+ "prepublishOnly": "bun run build:prod",
25
+ "dev": "lzi-builder --watch",
26
+ "clean": "lzi-dev-cli clean",
27
+ "test": "vitest run",
28
+ "test:watch": "vitest",
29
+ "test:coverage": "vitest run --coverage",
30
+ "lint": "oxlint && oxfmt --check",
31
+ "lint:fix": "oxlint --fix && oxfmt",
32
+ "typecheck": "bun run typecheck:app && bun run typecheck:node && bun run typecheck:test",
33
+ "typecheck:app": "lzi-tsgo typecheck tsconfig/app.json",
34
+ "typecheck:node": "lzi-tsgo typecheck tsconfig/node.json",
35
+ "typecheck:test": "lzi-tsgo typecheck tsconfig/test.json"
36
+ },
37
+ "dependencies": {
38
+ "@longzai-intelligence-oxlint/core": "0.1.24",
39
+ "@oxlint/plugins": "^1.74.0"
40
+ },
41
+ "devDependencies": {
42
+ "@vitest/coverage-v8": "^4.1.10"
43
+ },
44
+ "peerDependencies": {
45
+ "oxlint": ">=1.0.0"
46
+ }
47
+ }