@effect-dynamodb/language-service 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,192 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.enhanceQuickInfo = enhanceQuickInfo;
37
+ const Cache = __importStar(require("../core/Cache"));
38
+ const EntityResolver_1 = require("../core/EntityResolver");
39
+ const OperationDetector_1 = require("../core/OperationDetector");
40
+ const ParamsBuilder_1 = require("../core/ParamsBuilder");
41
+ const tooltip_1 = require("../formatters/tooltip");
42
+ function enhanceQuickInfo(typescript, info, fileName, position, prior) {
43
+ try {
44
+ const program = info.languageService.getProgram();
45
+ if (!program)
46
+ return prior;
47
+ const sourceFile = program.getSourceFile(fileName);
48
+ if (!sourceFile)
49
+ return prior;
50
+ // Get or resolve entity + collection configs for this file (with version-based caching)
51
+ const scriptInfo = info.project.getScriptInfo(fileName);
52
+ const version = scriptInfo ? Number(scriptInfo.getLatestVersion()) : 0;
53
+ let entities = Cache.getEntities(fileName, version);
54
+ let collections = Cache.getCollections(fileName, version);
55
+ if (!entities) {
56
+ entities = resolveEntitiesFromAllSources(typescript, program, sourceFile);
57
+ collections = resolveCollectionsFromAllSources(typescript, program, sourceFile);
58
+ Cache.setEntities(fileName, version, entities, collections ?? []);
59
+ }
60
+ if (entities.length === 0 && (!collections || collections.length === 0))
61
+ return prior;
62
+ // Detect operation at cursor (pass both entities and collections)
63
+ const operation = (0, OperationDetector_1.detectOperation)(typescript, sourceFile, position, entities, collections ?? []);
64
+ if (!operation)
65
+ return prior;
66
+ // Build DynamoDB params and format tooltip
67
+ const params = (0, ParamsBuilder_1.buildParams)(operation);
68
+ if (!params)
69
+ return prior;
70
+ const tooltip = (0, tooltip_1.formatTooltip)(params);
71
+ // Append to existing quickinfo
72
+ return appendToQuickInfo(typescript, prior, tooltip, sourceFile, position);
73
+ }
74
+ catch {
75
+ // Graceful degradation — never break the language service
76
+ return prior;
77
+ }
78
+ }
79
+ function resolveEntitiesFromAllSources(typescript, program, currentFile) {
80
+ // Resolve from current file (with cross-file variable resolution)
81
+ const entities = [...(0, EntityResolver_1.resolveEntities)(typescript, currentFile, program)];
82
+ const resolvedFiles = new Set([currentFile.fileName]);
83
+ const checker = program.getTypeChecker();
84
+ for (const stmt of currentFile.statements) {
85
+ if (!typescript.isImportDeclaration(stmt))
86
+ continue;
87
+ if (!typescript.isStringLiteral(stmt.moduleSpecifier))
88
+ continue;
89
+ const filesToCheck = new Set();
90
+ // Follow the module specifier to its source file
91
+ const moduleSym = checker.getSymbolAtLocation(stmt.moduleSpecifier);
92
+ if (moduleSym) {
93
+ for (const decl of moduleSym.getDeclarations() ?? []) {
94
+ filesToCheck.add(decl.getSourceFile().fileName);
95
+ }
96
+ }
97
+ // Follow named imports to their actual declaration files (handles barrel re-exports)
98
+ if (stmt.importClause?.namedBindings &&
99
+ typescript.isNamedImports(stmt.importClause.namedBindings)) {
100
+ for (const specifier of stmt.importClause.namedBindings.elements) {
101
+ const sym = checker.getSymbolAtLocation(specifier.name);
102
+ if (!sym)
103
+ continue;
104
+ const aliased = sym.flags & typescript.SymbolFlags.Alias ? checker.getAliasedSymbol(sym) : sym;
105
+ for (const decl of aliased.getDeclarations() ?? []) {
106
+ filesToCheck.add(decl.getSourceFile().fileName);
107
+ }
108
+ }
109
+ }
110
+ for (const fileName of filesToCheck) {
111
+ if (resolvedFiles.has(fileName))
112
+ continue;
113
+ resolvedFiles.add(fileName);
114
+ const importedFile = program.getSourceFile(fileName);
115
+ if (importedFile) {
116
+ entities.push(...(0, EntityResolver_1.resolveEntities)(typescript, importedFile, program));
117
+ }
118
+ }
119
+ }
120
+ return entities;
121
+ }
122
+ function resolveCollectionsFromAllSources(typescript, program, currentFile) {
123
+ const collections = [...(0, EntityResolver_1.resolveCollections)(typescript, currentFile)];
124
+ const resolvedFiles = new Set([currentFile.fileName]);
125
+ const checker = program.getTypeChecker();
126
+ for (const stmt of currentFile.statements) {
127
+ if (!typescript.isImportDeclaration(stmt))
128
+ continue;
129
+ if (!typescript.isStringLiteral(stmt.moduleSpecifier))
130
+ continue;
131
+ const filesToCheck = new Set();
132
+ const moduleSym = checker.getSymbolAtLocation(stmt.moduleSpecifier);
133
+ if (moduleSym) {
134
+ for (const decl of moduleSym.getDeclarations() ?? []) {
135
+ filesToCheck.add(decl.getSourceFile().fileName);
136
+ }
137
+ }
138
+ if (stmt.importClause?.namedBindings &&
139
+ typescript.isNamedImports(stmt.importClause.namedBindings)) {
140
+ for (const specifier of stmt.importClause.namedBindings.elements) {
141
+ const sym = checker.getSymbolAtLocation(specifier.name);
142
+ if (!sym)
143
+ continue;
144
+ const aliased = sym.flags & typescript.SymbolFlags.Alias ? checker.getAliasedSymbol(sym) : sym;
145
+ for (const decl of aliased.getDeclarations() ?? []) {
146
+ filesToCheck.add(decl.getSourceFile().fileName);
147
+ }
148
+ }
149
+ }
150
+ for (const fileName of filesToCheck) {
151
+ if (resolvedFiles.has(fileName))
152
+ continue;
153
+ resolvedFiles.add(fileName);
154
+ const importedFile = program.getSourceFile(fileName);
155
+ if (importedFile) {
156
+ collections.push(...(0, EntityResolver_1.resolveCollections)(typescript, importedFile));
157
+ }
158
+ }
159
+ }
160
+ return collections;
161
+ }
162
+ function appendToQuickInfo(typescript, prior, tooltip, _sourceFile, position) {
163
+ const displayParts = [...(prior?.displayParts ?? [])];
164
+ const documentationParts = [...(prior?.documentation ?? [])];
165
+ // Add separator if there's existing documentation
166
+ if (documentationParts.length > 0) {
167
+ documentationParts.push({
168
+ kind: "lineBreak",
169
+ text: "\n",
170
+ });
171
+ documentationParts.push({
172
+ kind: "lineBreak",
173
+ text: "\n",
174
+ });
175
+ }
176
+ // Add our DynamoDB info with a heading and code block
177
+ documentationParts.push({
178
+ kind: "text",
179
+ text: `---\n**effect-dynamodb** — Native DynamoDB operation\n\`\`\`\n${tooltip}\n\`\`\``,
180
+ });
181
+ // Use prior's text span or create one
182
+ const textSpan = prior?.textSpan ?? { start: position, length: 0 };
183
+ return {
184
+ kind: prior?.kind ?? typescript.ScriptElementKind.unknown,
185
+ kindModifiers: prior?.kindModifiers ?? "",
186
+ textSpan,
187
+ displayParts,
188
+ documentation: documentationParts,
189
+ tags: prior?.tags ?? [],
190
+ };
191
+ }
192
+ //# sourceMappingURL=quickinfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickinfo.js","sourceRoot":"","sources":["../../src/features/quickinfo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { DynamoDBParams } from "../core/ParamsBuilder";
2
+ export declare function formatTooltip(params: DynamoDBParams): string;
3
+ //# sourceMappingURL=tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../src/formatters/tooltip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE3D,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA2E5D"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatTooltip = formatTooltip;
4
+ function formatTooltip(params) {
5
+ // Info-only tooltips (no command params to render)
6
+ const hasCommandParams = params.Key || params.Item || params.KeyConditionExpression || params.UpdateExpression;
7
+ if (params.info && !hasCommandParams) {
8
+ return params.info;
9
+ }
10
+ const lines = [];
11
+ lines.push(`${params.command}({`);
12
+ lines.push(` TableName: "${params.TableName}",`);
13
+ if (params.IndexName) {
14
+ lines.push(` IndexName: "${params.IndexName}",`);
15
+ }
16
+ if (params.Key) {
17
+ lines.push(" Key: {");
18
+ for (const [field, value] of Object.entries(params.Key)) {
19
+ lines.push(` ${field}: "${value}",`);
20
+ }
21
+ lines.push(" },");
22
+ }
23
+ if (params.Item) {
24
+ lines.push(" Item: {");
25
+ for (const [field, value] of Object.entries(params.Item)) {
26
+ lines.push(` ${field}: "${value}",`);
27
+ }
28
+ lines.push(" ... // model fields");
29
+ lines.push(" },");
30
+ }
31
+ if (params.KeyConditionExpression) {
32
+ lines.push(` KeyConditionExpression: "${params.KeyConditionExpression}",`);
33
+ }
34
+ if (params.FilterExpression) {
35
+ lines.push(` FilterExpression: "${params.FilterExpression}",`);
36
+ }
37
+ if (params.UpdateExpression) {
38
+ lines.push(` UpdateExpression: "${params.UpdateExpression}",`);
39
+ }
40
+ if (params.ConditionExpression) {
41
+ lines.push(` ConditionExpression: "${params.ConditionExpression}",`);
42
+ }
43
+ if (params.ExpressionAttributeNames) {
44
+ lines.push(` ExpressionAttributeNames: {`);
45
+ for (const [key, value] of Object.entries(params.ExpressionAttributeNames)) {
46
+ lines.push(` "${key}": "${value}",`);
47
+ }
48
+ lines.push(" },");
49
+ }
50
+ if (params.ExpressionAttributeValues) {
51
+ lines.push(` ExpressionAttributeValues: {`);
52
+ for (const [key, value] of Object.entries(params.ExpressionAttributeValues)) {
53
+ lines.push(` "${key}": "${value}",`);
54
+ }
55
+ lines.push(" },");
56
+ }
57
+ lines.push("})");
58
+ if (params.info) {
59
+ lines.push("");
60
+ lines.push(params.info);
61
+ }
62
+ return lines.join("\n");
63
+ }
64
+ //# sourceMappingURL=tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../src/formatters/tooltip.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type ts from "typescript";
2
+ declare function init(modules: {
3
+ typescript: typeof ts;
4
+ }): {
5
+ create: (info: ts.server.PluginCreateInfo) => ts.LanguageService;
6
+ };
7
+ export = init;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAA;AAIhC,iBAAS,IAAI,CAAC,OAAO,EAAE;IAAE,UAAU,EAAE,OAAO,EAAE,CAAA;CAAE;mBACxB,EAAE,CAAC,MAAM,CAAC,gBAAgB,KAAG,EAAE,CAAC,eAAe;EAwBtE;AAED,SAAS,IAAI,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ const diagnostics_1 = require("./features/diagnostics");
3
+ const quickinfo_1 = require("./features/quickinfo");
4
+ function init(modules) {
5
+ function create(info) {
6
+ const proxy = Object.create(null);
7
+ for (const k of Object.keys(info.languageService)) {
8
+ const original = info.languageService[k];
9
+ if (typeof original === "function") {
10
+ ;
11
+ proxy[k] = (...args) => original.apply(info.languageService, args);
12
+ }
13
+ }
14
+ proxy.getQuickInfoAtPosition = (fileName, position) => {
15
+ const prior = info.languageService.getQuickInfoAtPosition(fileName, position);
16
+ return (0, quickinfo_1.enhanceQuickInfo)(modules.typescript, info, fileName, position, prior);
17
+ };
18
+ proxy.getSemanticDiagnostics = (fileName) => {
19
+ const prior = info.languageService.getSemanticDiagnostics(fileName);
20
+ return (0, diagnostics_1.getDiagnostics)(modules.typescript, info, fileName, prior);
21
+ };
22
+ return proxy;
23
+ }
24
+ return { create };
25
+ }
26
+ module.exports = init;
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,wDAAuD;AACvD,oDAAuD;AAEvD,SAAS,IAAI,CAAC,OAAkC;IAC9C,SAAS,MAAM,CAAC,IAAgC;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAuB,CAAA;QACvD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAoC,EAAE,CAAC;YACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACxC,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACnC,CAAC;gBAAC,KAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAoB,EAAE,EAAE,CAC9C,QAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC;QAED,KAAK,CAAC,sBAAsB,GAAG,CAAC,QAAgB,EAAE,QAAgB,EAAE,EAAE;YACpE,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YAC7E,OAAO,IAAA,4BAAgB,EAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;QAC9E,CAAC,CAAA;QAED,KAAK,CAAC,sBAAsB,GAAG,CAAC,QAAgB,EAAE,EAAE;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAA;YACnE,OAAO,IAAA,4BAAc,EAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;QAClE,CAAC,CAAA;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,CAAA;AACnB,CAAC;AAED,iBAAS,IAAI,CAAA"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@effect-dynamodb/language-service",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript Language Service Plugin for effect-dynamodb — shows DynamoDB operations on hover",
5
+ "license": "MIT",
6
+ "author": "Justin Menga",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/jmenga/effect-dynamodb",
10
+ "directory": "packages/language-service"
11
+ },
12
+ "homepage": "https://jmenga.github.io/effect-dynamodb",
13
+ "bugs": {
14
+ "url": "https://github.com/jmenga/effect-dynamodb/issues"
15
+ },
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "keywords": [
20
+ "effect-dynamodb",
21
+ "typescript",
22
+ "language-service",
23
+ "ts-plugin",
24
+ "dynamodb"
25
+ ],
26
+ "main": "dist/index.js",
27
+ "types": "dist/index.d.ts",
28
+ "files": [
29
+ "dist",
30
+ "README.md",
31
+ "LICENSE"
32
+ ],
33
+ "scripts": {
34
+ "build": "tsc",
35
+ "test": "vitest run",
36
+ "test:watch": "vitest",
37
+ "check": "tsc --noEmit"
38
+ },
39
+ "peerDependencies": {
40
+ "typescript": ">=5.7.0"
41
+ },
42
+ "devDependencies": {
43
+ "typescript": "^5.7.0",
44
+ "vitest": "^4.1.0"
45
+ }
46
+ }