@lintai/sdk 0.1.0

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.
@@ -0,0 +1,128 @@
1
+ export type Predicate<T = any> = (value: T) => boolean;
2
+ type QueryKind = "functions" | "imports" | "calls" | "typeRefs";
3
+ type QueryOperation = {
4
+ type: "in";
5
+ value: string;
6
+ } | {
7
+ type: "from";
8
+ value: string;
9
+ } | {
10
+ type: "to";
11
+ value: string;
12
+ } | {
13
+ type: "where";
14
+ handler: Predicate<any>;
15
+ } | {
16
+ type: "calling";
17
+ query: QueryValue;
18
+ } | {
19
+ type: "transitivelyCalling";
20
+ query: QueryValue;
21
+ };
22
+ export type FunctionView = {
23
+ name: string;
24
+ kind: string;
25
+ filePath: string;
26
+ containerName: string;
27
+ semanticKey: string;
28
+ containsAwait: boolean;
29
+ isExported: boolean;
30
+ isAsync: boolean;
31
+ parameterCount: number;
32
+ returnTypeText: string;
33
+ parameterTypeTexts: string[];
34
+ sourceLocation: SourceLocation;
35
+ };
36
+ export type ImportedSymbolView = {
37
+ name: string;
38
+ kind: "default" | "namespace" | "named";
39
+ isTypeOnly: boolean;
40
+ };
41
+ export type ImportEdgeView = {
42
+ specifier: string;
43
+ fromPath: string;
44
+ toPath: string;
45
+ semanticKey: string;
46
+ importedSymbols: ImportedSymbolView[];
47
+ hasDefaultImport: boolean;
48
+ hasNamespaceImport: boolean;
49
+ hasNamedImports: boolean;
50
+ isTypeOnly: boolean;
51
+ sourceLocation: SourceLocation;
52
+ };
53
+ export type CallEdgeView = {
54
+ fromName: string;
55
+ toName: string;
56
+ fromPath: string;
57
+ toPath: string;
58
+ semanticKey: string;
59
+ sourceLocation: SourceLocation;
60
+ };
61
+ export type TypeRefView = {
62
+ name: string;
63
+ filePath: string;
64
+ targetPath: string;
65
+ semanticKey: string;
66
+ sourceLocation: SourceLocation;
67
+ };
68
+ export type SourceLocation = {
69
+ file: string;
70
+ startLine: number;
71
+ startColumn: number;
72
+ endLine: number;
73
+ endColumn: number;
74
+ };
75
+ export type AssertionContext = {
76
+ assertion_id: string;
77
+ };
78
+ export type RuleContext<Env, Setup> = {
79
+ env: Env;
80
+ setup: Setup;
81
+ };
82
+ export type AssertionValue = {
83
+ __lintaiKind: "assertion";
84
+ terminal: "isEmpty";
85
+ query: QueryValue;
86
+ };
87
+ export type QueryValue = {
88
+ __lintaiKind: "query";
89
+ entity: QueryKind;
90
+ ops: QueryOperation[];
91
+ in(pattern: string): QueryValue;
92
+ from(pattern: string): QueryValue;
93
+ to(pattern: string): QueryValue;
94
+ where(predicate: Predicate<any>): QueryValue;
95
+ calling(other: QueryValue): QueryValue;
96
+ transitivelyCalling(other: QueryValue): QueryValue;
97
+ isEmpty(): AssertionValue;
98
+ };
99
+ type InternalRuleSpec<Env, Setup, Value> = {
100
+ id: string;
101
+ versionValue?: number;
102
+ setupFn?: (() => Setup) | ((ctx: {
103
+ env: Env;
104
+ workspaceRoot: string;
105
+ }) => Setup);
106
+ assertFn?: (ctx: RuleContext<Env, Setup>) => AssertionValue | Record<string, AssertionValue>;
107
+ messageFn?: (value: Value, ctx: AssertionContext) => string;
108
+ };
109
+ declare class RuleDefinition<Env, Setup, Value> {
110
+ private readonly spec;
111
+ readonly id: string;
112
+ readonly versionValue?: number;
113
+ readonly setupFn?: InternalRuleSpec<Env, Setup, Value>["setupFn"];
114
+ readonly assertFn?: InternalRuleSpec<Env, Setup, Value>["assertFn"];
115
+ readonly messageFn?: InternalRuleSpec<Env, Setup, Value>["messageFn"];
116
+ constructor(spec: InternalRuleSpec<Env, Setup, Value>);
117
+ version(versionValue: number): RuleDefinition<Env, Setup, Value>;
118
+ setup<NextSetup>(setupFn: InternalRuleSpec<Env, NextSetup, Value>["setupFn"]): RuleDefinition<Env, NextSetup, Value>;
119
+ assert(assertFn: InternalRuleSpec<Env, Setup, Value>["assertFn"]): RuleDefinition<Env, Setup, Value>;
120
+ message(messageFn: InternalRuleSpec<Env, Setup, Value>["messageFn"]): RuleDefinition<Env, Setup, Value>;
121
+ }
122
+ export declare function rule<Env = Record<string, any>, Setup = Record<string, never>, Value = any>(id: string): RuleDefinition<Env, Setup, Value>;
123
+ export declare function functions(): QueryValue;
124
+ export declare function imports(): QueryValue;
125
+ export declare function calls(): QueryValue;
126
+ export declare function typeRefs(): QueryValue;
127
+ export {};
128
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,89 @@
1
+ class RuleDefinition {
2
+ spec;
3
+ id;
4
+ versionValue;
5
+ setupFn;
6
+ assertFn;
7
+ messageFn;
8
+ constructor(spec) {
9
+ this.spec = spec;
10
+ this.id = spec.id;
11
+ this.versionValue = spec.versionValue;
12
+ this.setupFn = spec.setupFn;
13
+ this.assertFn = spec.assertFn;
14
+ this.messageFn = spec.messageFn;
15
+ }
16
+ version(versionValue) {
17
+ return new RuleDefinition({ ...this.spec, versionValue });
18
+ }
19
+ setup(setupFn) {
20
+ return new RuleDefinition({
21
+ ...this.spec,
22
+ setupFn,
23
+ });
24
+ }
25
+ assert(assertFn) {
26
+ return new RuleDefinition({
27
+ ...this.spec,
28
+ assertFn,
29
+ });
30
+ }
31
+ message(messageFn) {
32
+ return new RuleDefinition({
33
+ ...this.spec,
34
+ messageFn,
35
+ });
36
+ }
37
+ }
38
+ function createQuery(entity, ops = []) {
39
+ const query = {
40
+ __lintaiKind: "query",
41
+ entity,
42
+ ops,
43
+ in(pattern) {
44
+ return createQuery(entity, [...ops, { type: "in", value: pattern }]);
45
+ },
46
+ from(pattern) {
47
+ return createQuery(entity, [...ops, { type: "from", value: pattern }]);
48
+ },
49
+ to(pattern) {
50
+ return createQuery(entity, [...ops, { type: "to", value: pattern }]);
51
+ },
52
+ where(predicate) {
53
+ return createQuery(entity, [...ops, { type: "where", handler: predicate }]);
54
+ },
55
+ calling(other) {
56
+ return createQuery(entity, [...ops, { type: "calling", query: other }]);
57
+ },
58
+ transitivelyCalling(other) {
59
+ return createQuery(entity, [
60
+ ...ops,
61
+ { type: "transitivelyCalling", query: other },
62
+ ]);
63
+ },
64
+ isEmpty() {
65
+ return {
66
+ __lintaiKind: "assertion",
67
+ terminal: "isEmpty",
68
+ query,
69
+ };
70
+ },
71
+ };
72
+ return query;
73
+ }
74
+ export function rule(id) {
75
+ return new RuleDefinition({ id });
76
+ }
77
+ export function functions() {
78
+ return createQuery("functions");
79
+ }
80
+ export function imports() {
81
+ return createQuery("imports");
82
+ }
83
+ export function calls() {
84
+ return createQuery("calls");
85
+ }
86
+ export function typeRefs() {
87
+ return createQuery("typeRefs");
88
+ }
89
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2GA,MAAM,cAAc;IAOU;IANpB,EAAE,CAAS;IACX,YAAY,CAAU;IACtB,OAAO,CAAkD;IACzD,QAAQ,CAAmD;IAC3D,SAAS,CAAoD;IAEtE,YAA6B,IAAyC;QAAzC,SAAI,GAAJ,IAAI,CAAqC;QACrE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,YAAoB;QAC3B,OAAO,IAAI,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CACJ,OAA2D;QAE3D,OAAO,IAAI,cAAc,CAAwB;YAChD,GAAI,IAAI,CAAC,IAA2D;YACpE,OAAO;SACP,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,CACL,QAAyD;QAEzD,OAAO,IAAI,cAAc,CAAC;YACzB,GAAG,IAAI,CAAC,IAAI;YACZ,QAAQ;SACR,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,CACN,SAA2D;QAE3D,OAAO,IAAI,cAAc,CAAC;YACzB,GAAG,IAAI,CAAC,IAAI;YACZ,SAAS;SACT,CAAC,CAAC;IACJ,CAAC;CACD;AAED,SAAS,WAAW,CAAC,MAAiB,EAAE,MAAwB,EAAE;IACjE,MAAM,KAAK,GAAe;QACzB,YAAY,EAAE,OAAO;QACrB,MAAM;QACN,GAAG;QACH,EAAE,CAAC,OAAe;YACjB,OAAO,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,OAAe;YACnB,OAAO,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,EAAE,CAAC,OAAe;YACjB,OAAO,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,KAAK,CAAC,SAAyB;YAC9B,OAAO,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,CAAC,KAAiB;YACxB,OAAO,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC;QACD,mBAAmB,CAAC,KAAiB;YACpC,OAAO,WAAW,CAAC,MAAM,EAAE;gBAC1B,GAAG,GAAG;gBACN,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE;aAC7C,CAAC,CAAC;QACJ,CAAC;QACD,OAAO;YACN,OAAO;gBACN,YAAY,EAAE,WAAW;gBACzB,QAAQ,EAAE,SAAS;gBACnB,KAAK;aACL,CAAC;QACH,CAAC;KACD,CAAC;IACF,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,IAAI,CACnB,EAAU;IAEV,OAAO,IAAI,cAAc,CAAoB,EAAE,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,SAAS;IACxB,OAAO,WAAW,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,OAAO;IACtB,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,KAAK;IACpB,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,QAAQ;IACvB,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@lintai/sdk",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "files": [
6
+ "dist"
7
+ ],
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ },
13
+ "./package.json": "./package.json"
14
+ },
15
+ "main": "dist/index.js",
16
+ "types": "dist/index.d.ts",
17
+ "dependencies": {
18
+ "zod": "^3.24.2"
19
+ },
20
+ "devDependencies": {
21
+ "typescript": "^5.7.0"
22
+ },
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "scripts": {
27
+ "build": "tsc",
28
+ "dev": "tsc --watch"
29
+ }
30
+ }