wn-turso 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.
Files changed (68) hide show
  1. package/LICENSE +21 -0
  2. package/dist/adapters/adapter.d.ts +53 -0
  3. package/dist/adapters/adapter.d.ts.map +1 -0
  4. package/dist/adapters/adapter.js +4 -0
  5. package/dist/adapters/embedded-adapter.d.ts +24 -0
  6. package/dist/adapters/embedded-adapter.d.ts.map +1 -0
  7. package/dist/adapters/embedded-adapter.js +78 -0
  8. package/dist/adapters/index.d.ts +7 -0
  9. package/dist/adapters/index.d.ts.map +1 -0
  10. package/dist/adapters/index.js +5 -0
  11. package/dist/adapters/remote-adapter.d.ts +21 -0
  12. package/dist/adapters/remote-adapter.d.ts.map +1 -0
  13. package/dist/adapters/remote-adapter.js +49 -0
  14. package/dist/cli/index.d.ts +6 -0
  15. package/dist/cli/index.d.ts.map +1 -0
  16. package/dist/cli/index.js +61 -0
  17. package/dist/config.d.ts +77 -0
  18. package/dist/config.d.ts.map +1 -0
  19. package/dist/config.js +37 -0
  20. package/dist/database/index.d.ts +10 -0
  21. package/dist/database/index.d.ts.map +1 -0
  22. package/dist/database/index.js +8 -0
  23. package/dist/database/kysely-query-service.d.ts +32 -0
  24. package/dist/database/kysely-query-service.d.ts.map +1 -0
  25. package/dist/database/kysely-query-service.js +39 -0
  26. package/dist/database/turso-connection.d.ts +15 -0
  27. package/dist/database/turso-connection.d.ts.map +1 -0
  28. package/dist/database/turso-connection.js +29 -0
  29. package/dist/database/turso-database.d.ts +49 -0
  30. package/dist/database/turso-database.d.ts.map +1 -0
  31. package/dist/database/turso-database.js +124 -0
  32. package/dist/database/turso-dialect.d.ts +16 -0
  33. package/dist/database/turso-dialect.d.ts.map +1 -0
  34. package/dist/database/turso-dialect.js +25 -0
  35. package/dist/database/turso-driver.d.ts +25 -0
  36. package/dist/database/turso-driver.d.ts.map +1 -0
  37. package/dist/database/turso-driver.js +43 -0
  38. package/dist/index.d.ts +11 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +15 -0
  41. package/dist/pipeline/index.d.ts +10 -0
  42. package/dist/pipeline/index.d.ts.map +1 -0
  43. package/dist/pipeline/index.js +13 -0
  44. package/dist/pipeline/operators.d.ts +65 -0
  45. package/dist/pipeline/operators.d.ts.map +1 -0
  46. package/dist/pipeline/operators.js +174 -0
  47. package/dist/pipeline/pipeline-builder.d.ts +107 -0
  48. package/dist/pipeline/pipeline-builder.d.ts.map +1 -0
  49. package/dist/pipeline/pipeline-builder.js +181 -0
  50. package/dist/pipeline/sink.d.ts +22 -0
  51. package/dist/pipeline/sink.d.ts.map +1 -0
  52. package/dist/pipeline/sink.js +63 -0
  53. package/dist/pipeline/source.d.ts +20 -0
  54. package/dist/pipeline/source.d.ts.map +1 -0
  55. package/dist/pipeline/source.js +66 -0
  56. package/dist/pipeline/streams.d.ts +18 -0
  57. package/dist/pipeline/streams.d.ts.map +1 -0
  58. package/dist/pipeline/streams.js +115 -0
  59. package/dist/pipeline/types.d.ts +86 -0
  60. package/dist/pipeline/types.d.ts.map +1 -0
  61. package/dist/pipeline/types.js +4 -0
  62. package/dist/wordnet/index.d.ts +5 -0
  63. package/dist/wordnet/index.d.ts.map +1 -0
  64. package/dist/wordnet/index.js +4 -0
  65. package/dist/wordnet/turso-wordnet.d.ts +85 -0
  66. package/dist/wordnet/turso-wordnet.d.ts.map +1 -0
  67. package/dist/wordnet/turso-wordnet.js +107 -0
  68. package/package.json +80 -0
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Pipeline types
3
+ */
4
+ /**
5
+ * Pipeline result after transfer
6
+ */
7
+ export interface PipelineResult {
8
+ /** Total rows processed */
9
+ processed: number;
10
+ /** Rows successfully inserted */
11
+ inserted: number;
12
+ /** Rows skipped (filtered out or null from transform) */
13
+ skipped: number;
14
+ /** Rows that failed */
15
+ errors: number;
16
+ /** Duration in milliseconds */
17
+ duration: number;
18
+ }
19
+ /**
20
+ * Progress callback for pipeline operations
21
+ */
22
+ export interface PipelineProgress {
23
+ /** Current row number */
24
+ current: number;
25
+ /** Total rows (if known) */
26
+ total?: number;
27
+ /** Rows processed so far */
28
+ processed: number;
29
+ /** Rows skipped so far */
30
+ skipped: number;
31
+ /** Rows with errors so far */
32
+ errors: number;
33
+ }
34
+ export type ProgressCallback = (progress: PipelineProgress) => void;
35
+ /**
36
+ * Pipeline source - reads data from a database
37
+ */
38
+ export interface PipelineSource<T> {
39
+ /** Read rows as async iterable */
40
+ read(): AsyncIterable<T>;
41
+ /** Get total count (optional) */
42
+ count?(): Promise<number>;
43
+ /** Get source name for logging */
44
+ name?: string;
45
+ }
46
+ /**
47
+ * Pipeline sink - writes data to a database
48
+ */
49
+ export interface PipelineSink<T> {
50
+ /** Write rows from async iterable */
51
+ write(data: AsyncIterable<T>): Promise<PipelineResult>;
52
+ /** Get sink name for logging */
53
+ name?: string;
54
+ }
55
+ /**
56
+ * Options for creating a source
57
+ */
58
+ export interface SourceOptions<T> {
59
+ /** Batch size for reading */
60
+ batchSize?: number;
61
+ /** Where clause modifier */
62
+ where?: (qb: any) => any;
63
+ /** Order by clause */
64
+ orderBy?: string;
65
+ /** Limit rows */
66
+ limit?: number;
67
+ /** Skip rows */
68
+ offset?: number;
69
+ }
70
+ /**
71
+ * Options for creating a sink
72
+ */
73
+ export interface SinkOptions {
74
+ /** Batch size for writing */
75
+ batchSize?: number;
76
+ /** Conflict resolution strategy */
77
+ onConflict?: 'ignore' | 'replace' | 'error';
78
+ /** Progress callback */
79
+ onProgress?: ProgressCallback;
80
+ }
81
+ /**
82
+ * Operator function type
83
+ * Transforms an async iterable into another async iterable
84
+ */
85
+ export type Operator<In, Out> = (input: AsyncIterable<In>) => AsyncIterable<Out>;
86
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/pipeline/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,kCAAkC;IAClC,IAAI,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;IACzB,iCAAiC;IACjC,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,qCAAqC;IACrC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACvD,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,GAAG,CAAC;IACzB,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;IAC5C,wBAAwB;IACxB,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,EAAE,EAAE,GAAG,IAAI,CAC9B,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC,KACrB,aAAa,CAAC,GAAG,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Pipeline types
3
+ */
4
+ export {};
@@ -0,0 +1,5 @@
1
+ /**
2
+ * WordNet module exports
3
+ */
4
+ export { TursoWordnet, type TursoWordnetOptions } from './turso-wordnet.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wordnet/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * WordNet module exports
3
+ */
4
+ export { TursoWordnet } from './turso-wordnet.js';
@@ -0,0 +1,85 @@
1
+ /**
2
+ * TursoWordnet - Main user-facing class for WordNet queries via Turso
3
+ */
4
+ import type { Synset, Word, Sense, Lexicon, PartOfSpeech } from 'wn-ts-core';
5
+ import { TursoDatabase } from '../database/turso-database.js';
6
+ import type { TursoDatabaseConfig } from '../config.js';
7
+ export interface TursoWordnetOptions {
8
+ /** Enable verbose logging */
9
+ verbose?: boolean;
10
+ }
11
+ /**
12
+ * TursoWordnet provides a high-level interface for WordNet queries
13
+ * using Turso as the database backend.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const wn = new TursoWordnet({
18
+ * url: 'libsql://db-org.turso.io',
19
+ * authToken: process.env.TURSO_AUTH_TOKEN,
20
+ * mode: 'remote',
21
+ * });
22
+ *
23
+ * await wn.initialize();
24
+ * const synsets = await wn.synsets({ form: 'computer', language: 'en' });
25
+ * await wn.close();
26
+ * ```
27
+ */
28
+ export declare class TursoWordnet {
29
+ private database?;
30
+ private config;
31
+ private options;
32
+ constructor(config: TursoDatabaseConfig, options?: TursoWordnetOptions);
33
+ /**
34
+ * Initialize the WordNet connection
35
+ */
36
+ initialize(): Promise<void>;
37
+ /**
38
+ * Query synsets
39
+ */
40
+ synsets(options?: {
41
+ form?: string;
42
+ pos?: PartOfSpeech;
43
+ language?: string;
44
+ }): Promise<Synset[]>;
45
+ /**
46
+ * Query words
47
+ */
48
+ words(options?: {
49
+ form?: string;
50
+ pos?: PartOfSpeech;
51
+ language?: string;
52
+ }): Promise<Word[]>;
53
+ /**
54
+ * Query senses
55
+ */
56
+ senses(options?: {
57
+ wordIdOrForm?: string;
58
+ }): Promise<Sense[]>;
59
+ /**
60
+ * Get all lexicons
61
+ */
62
+ lexicons(): Promise<Lexicon[]>;
63
+ /**
64
+ * Get lemmas for a synset
65
+ */
66
+ getSynsetLemmas(synsetId: string): Promise<string[]>;
67
+ /**
68
+ * Sync embedded replica with remote (only for embedded mode)
69
+ */
70
+ sync(): Promise<void>;
71
+ /**
72
+ * Check if initialized
73
+ */
74
+ isInitialized(): boolean;
75
+ /**
76
+ * Close the connection
77
+ */
78
+ close(): Promise<void>;
79
+ /**
80
+ * Get the underlying database instance
81
+ */
82
+ getDatabase(): TursoDatabase;
83
+ private getQueryService;
84
+ }
85
+ //# sourceMappingURL=turso-wordnet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turso-wordnet.d.ts","sourceRoot":"","sources":["../../src/wordnet/turso-wordnet.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,OAAO,CAAsB;gBAEzB,MAAM,EAAE,mBAAmB,EAAE,OAAO,GAAE,mBAAwB;IAK1E;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;OAEG;IACG,OAAO,CAAC,OAAO,CAAC,EAAE;QACtB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,YAAY,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIrB;;OAEG;IACG,KAAK,CAAC,OAAO,CAAC,EAAE;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,YAAY,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAInB;;OAEG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAIpB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAIpC;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAO1D;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACH,WAAW,IAAI,aAAa;IAO5B,OAAO,CAAC,eAAe;CAMxB"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * TursoWordnet - Main user-facing class for WordNet queries via Turso
3
+ */
4
+ import { TursoDatabase } from '../database/turso-database.js';
5
+ /**
6
+ * TursoWordnet provides a high-level interface for WordNet queries
7
+ * using Turso as the database backend.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const wn = new TursoWordnet({
12
+ * url: 'libsql://db-org.turso.io',
13
+ * authToken: process.env.TURSO_AUTH_TOKEN,
14
+ * mode: 'remote',
15
+ * });
16
+ *
17
+ * await wn.initialize();
18
+ * const synsets = await wn.synsets({ form: 'computer', language: 'en' });
19
+ * await wn.close();
20
+ * ```
21
+ */
22
+ export class TursoWordnet {
23
+ database;
24
+ config;
25
+ options;
26
+ constructor(config, options = {}) {
27
+ this.config = config;
28
+ this.options = options;
29
+ }
30
+ /**
31
+ * Initialize the WordNet connection
32
+ */
33
+ async initialize() {
34
+ this.database = new TursoDatabase(this.config);
35
+ await this.database.initialize();
36
+ }
37
+ /**
38
+ * Query synsets
39
+ */
40
+ async synsets(options) {
41
+ return this.getQueryService().getSynsets(options);
42
+ }
43
+ /**
44
+ * Query words
45
+ */
46
+ async words(options) {
47
+ return this.getQueryService().getWords(options);
48
+ }
49
+ /**
50
+ * Query senses
51
+ */
52
+ async senses(options) {
53
+ return this.getQueryService().getSenses(options);
54
+ }
55
+ /**
56
+ * Get all lexicons
57
+ */
58
+ async lexicons() {
59
+ return this.getQueryService().getLexicons();
60
+ }
61
+ /**
62
+ * Get lemmas for a synset
63
+ */
64
+ async getSynsetLemmas(synsetId) {
65
+ const words = await this.getQueryService().getWordsBySynsetAndLanguage(synsetId);
66
+ return words.map((w) => w.lemma);
67
+ }
68
+ /**
69
+ * Sync embedded replica with remote (only for embedded mode)
70
+ */
71
+ async sync() {
72
+ if (!this.database) {
73
+ throw new Error('Not initialized');
74
+ }
75
+ await this.database.sync();
76
+ }
77
+ /**
78
+ * Check if initialized
79
+ */
80
+ isInitialized() {
81
+ return this.database?.isInitialized() ?? false;
82
+ }
83
+ /**
84
+ * Close the connection
85
+ */
86
+ async close() {
87
+ if (this.database) {
88
+ await this.database.close();
89
+ this.database = undefined;
90
+ }
91
+ }
92
+ /**
93
+ * Get the underlying database instance
94
+ */
95
+ getDatabase() {
96
+ if (!this.database) {
97
+ throw new Error('Not initialized');
98
+ }
99
+ return this.database;
100
+ }
101
+ getQueryService() {
102
+ if (!this.database) {
103
+ throw new Error('Not initialized');
104
+ }
105
+ return this.database.getQueryService();
106
+ }
107
+ }
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "wn-turso",
3
+ "version": "0.1.0",
4
+ "description": "Turso/libsql database backend and data pipeline utilities for WordNet",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ },
14
+ "./database": {
15
+ "types": "./dist/database/index.d.ts",
16
+ "import": "./dist/database/index.js"
17
+ },
18
+ "./adapters": {
19
+ "types": "./dist/adapters/index.d.ts",
20
+ "import": "./dist/adapters/index.js"
21
+ },
22
+ "./pipeline": {
23
+ "types": "./dist/pipeline/index.d.ts",
24
+ "import": "./dist/pipeline/index.js"
25
+ },
26
+ "./config": {
27
+ "types": "./dist/config.d.ts",
28
+ "import": "./dist/config.js"
29
+ }
30
+ },
31
+ "bin": {
32
+ "wn-turso": "./dist/cli/index.js"
33
+ },
34
+ "files": [
35
+ "dist",
36
+ "README.md"
37
+ ],
38
+ "keywords": [
39
+ "wordnet",
40
+ "turso",
41
+ "libsql",
42
+ "sqlite",
43
+ "serverless",
44
+ "edge",
45
+ "database",
46
+ "pipeline",
47
+ "etl"
48
+ ],
49
+ "dependencies": {
50
+ "@libsql/client": "^0.14.0",
51
+ "kysely": "^0.28.3",
52
+ "wn-ts-core": "0.6.0"
53
+ },
54
+ "devDependencies": {
55
+ "@types/node": "^20.10.0",
56
+ "rimraf": "^5.0.0",
57
+ "typescript": "5.8.3",
58
+ "vitest": "3.2.4"
59
+ },
60
+ "engines": {
61
+ "node": ">=18"
62
+ },
63
+ "repository": {
64
+ "type": "git",
65
+ "url": "https://github.com/fustilio/wordnet-playground.git",
66
+ "directory": "packages/wn-turso"
67
+ },
68
+ "license": "MIT",
69
+ "scripts": {
70
+ "build": "tsc",
71
+ "dev": "tsc --watch",
72
+ "clean": "rimraf dist",
73
+ "prebuild": "pnpm run clean",
74
+ "postbuild": "node scripts/make-executable.cjs",
75
+ "typecheck": "tsc --noEmit",
76
+ "test": "vitest run",
77
+ "test:watch": "vitest",
78
+ "test:e2e": "vitest run tests/e2e"
79
+ }
80
+ }