@powerhousedao/analytics-engine-browser 0.6.0 → 0.6.2

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/package.json CHANGED
@@ -1,40 +1,47 @@
1
1
  {
2
2
  "name": "@powerhousedao/analytics-engine-browser",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
4
  "license": "AGPL-3.0-only",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "type": "module",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/powerhouse-inc/analytics-engine"
8
+ },
8
9
  "publishConfig": {
9
10
  "access": "public"
10
11
  },
12
+ "type": "module",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/src/index.d.ts",
16
+ "default": "./build/index.js"
17
+ }
18
+ },
11
19
  "files": [
12
- "dist"
20
+ "./build/index.js",
21
+ "./build/index.js.map",
22
+ "./dist/index.d.ts"
13
23
  ],
14
- "scripts": {
15
- "dev": "tsc-watch",
16
- "build": "rm -rf dist/ && tsc",
17
- "test": "vitest run"
18
- },
19
24
  "dependencies": {
20
- "@electric-sql/pglite": "^0.2.12",
21
- "date-fns": "^3.6.0",
22
- "events": "^3.3.0",
23
- "knex": "^3.1.0",
24
- "luxon": "^3.5.0",
25
- "util": "^0.12.5"
25
+ "vite-plugin-node-polyfills": "0.25.0",
26
+ "@electric-sql/pglite": "0.3.15",
27
+ "date-fns": "4.1.0",
28
+ "events": "3.3.0",
29
+ "util": "0.12.5",
30
+ "knex": "3.1.0",
31
+ "luxon": "3.7.2",
32
+ "@powerhousedao/analytics-engine-core": "0.6.2",
33
+ "@powerhousedao/analytics-engine-knex": "0.6.2"
26
34
  },
27
35
  "devDependencies": {
28
- "@types/luxon": "^3.4.2",
29
- "@types/node": "^22.4.2",
30
- "@vitest/browser": "^2.1.1",
31
- "playwright": "^1.47.2",
32
- "tsc-watch": "^6.2.0",
33
- "typescript": "^5.6.3",
34
- "vitest": "^2.1.1"
36
+ "@vitest/browser": "4.0.18",
37
+ "@vitest/browser-playwright": "4.0.18",
38
+ "@types/luxon": "3.7.1",
39
+ "playwright": "1.58.2",
40
+ "vitest": "4.0.18"
35
41
  },
36
- "peerDependencies": {
37
- "@powerhousedao/analytics-engine-core": "0.5.0",
38
- "@powerhousedao/analytics-engine-knex": "0.5.1"
42
+ "scripts": {
43
+ "bundle": "bun run ./bundle.ts",
44
+ "dev": "pnpm tsc -b -w",
45
+ "test": "vitest --run ./**/*.test.ts"
39
46
  }
40
- }
47
+ }
@@ -1,7 +0,0 @@
1
- import { MemoryAnalyticsStore, MemoryAnalyticsStoreOptions } from "./MemoryAnalyticsStore.js";
2
- export type BrowserAnalyticsStoreOptions = MemoryAnalyticsStoreOptions & {
3
- databaseName: string;
4
- };
5
- export declare class BrowserAnalyticsStore extends MemoryAnalyticsStore {
6
- constructor(options?: BrowserAnalyticsStoreOptions);
7
- }
@@ -1,14 +0,0 @@
1
- import { MemoryAnalyticsStore, } from "./MemoryAnalyticsStore.js";
2
- import { IdbFs, PGlite } from "@electric-sql/pglite";
3
- export class BrowserAnalyticsStore extends MemoryAnalyticsStore {
4
- constructor(options = { databaseName: "analytics" }) {
5
- if (!options.pgLiteFactory) {
6
- options.pgLiteFactory = async () => PGlite.create({
7
- fs: new IdbFs(options.databaseName),
8
- relaxedDurability: true,
9
- });
10
- }
11
- super(options);
12
- }
13
- }
14
- //# sourceMappingURL=BrowserAnalyticsStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BrowserAnalyticsStore.js","sourceRoot":"","sources":["../src/BrowserAnalyticsStore.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,GAErB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAMrD,MAAM,OAAO,qBAAsB,SAAQ,oBAAoB;IAC7D,YACE,UAAwC,EAAE,YAAY,EAAE,WAAW,EAAE;QAErE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3B,OAAO,CAAC,aAAa,GAAG,KAAK,IAAI,EAAE,CACjC,MAAM,CAAC,MAAM,CAAC;gBACZ,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;gBACnC,iBAAiB,EAAE,IAAI;aACxB,CAAC,CAAC;QACP,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF"}
@@ -1,23 +0,0 @@
1
- import { IAnalyticsProfiler } from "@powerhousedao/analytics-engine-core";
2
- import { KnexAnalyticsStore, SqlQueryLogger, SqlResultsLogger } from "@powerhousedao/analytics-engine-knex";
3
- import { Knex } from "knex";
4
- import { PGlite } from "@electric-sql/pglite";
5
- export type MemoryAnalyticsStoreOptions = {
6
- pgLiteFactory?: () => Promise<PGlite>;
7
- knex?: Knex;
8
- queryLogger?: SqlQueryLogger;
9
- resultsLogger?: SqlResultsLogger;
10
- profiler?: IAnalyticsProfiler;
11
- };
12
- export declare class MemoryAnalyticsStore extends KnexAnalyticsStore {
13
- private _pgLiteFactory;
14
- private _queryLogger;
15
- private _resultsLogger;
16
- private _pgExecutor;
17
- private _profiler;
18
- private _sql;
19
- constructor({ knex, pgLiteFactory, queryLogger, resultsLogger, profiler, }?: MemoryAnalyticsStoreOptions);
20
- init(): Promise<void>;
21
- raw(sql: string): Promise<any[]>;
22
- destroy(): Promise<void>;
23
- }
@@ -1,129 +0,0 @@
1
- import { PassthroughAnalyticsProfiler, } from "@powerhousedao/analytics-engine-core";
2
- import { KnexAnalyticsStore, } from "@powerhousedao/analytics-engine-knex";
3
- import knexFactory from "knex";
4
- import { parseRawResults, PGLiteQueryExecutor } from "./PgLiteExecutor.js";
5
- import { PGlite } from "@electric-sql/pglite";
6
- const initSql = `
7
-
8
- create table if not exists "AnalyticsSeries"
9
- (
10
- id serial primary key,
11
- source varchar(255) not null,
12
- start timestamp not null,
13
- "end" timestamp,
14
- metric varchar(255) not null,
15
- value real not null,
16
- unit varchar(255),
17
- fn varchar(255) not null,
18
- params json
19
- );
20
-
21
- create unique index if not exists "AnalyticsSeries_pkey"
22
- on "AnalyticsSeries" (id);
23
-
24
- create index if not exists analyticsseries_end_index
25
- on "AnalyticsSeries" ("end");
26
-
27
- create index if not exists analyticsseries_fn_index
28
- on "AnalyticsSeries" (fn);
29
-
30
- create index if not exists analyticsseries_metric_index
31
- on "AnalyticsSeries" (metric);
32
-
33
- create index if not exists analyticsseries_source_index
34
- on "AnalyticsSeries" (source);
35
-
36
- create index if not exists analyticsseries_start_index
37
- on "AnalyticsSeries" (start);
38
-
39
- create index if not exists analyticsseries_unit_index
40
- on "AnalyticsSeries" (unit);
41
-
42
- create index if not exists analyticsseries_value_index
43
- on "AnalyticsSeries" (value);
44
-
45
- create table if not exists "AnalyticsDimension"
46
- (
47
- id serial primary key,
48
- dimension varchar(255) not null,
49
- path varchar(255) not null,
50
- label varchar(255),
51
- icon varchar(1000),
52
- description text
53
- );
54
-
55
- create unique index if not exists "AnalyticsDimension_pkey"
56
- on "AnalyticsDimension" (id);
57
-
58
- create index if not exists analyticsdimension_dimension_index
59
- on "AnalyticsDimension" (dimension);
60
-
61
- create index if not exists analyticsdimension_path_index
62
- on "AnalyticsDimension" (path);
63
-
64
- create table if not exists "AnalyticsSeries_AnalyticsDimension"
65
- (
66
- "seriesId" integer not null
67
- constraint analyticsseries_analyticsdimension_seriesid_foreign
68
- references "AnalyticsSeries"
69
- on delete cascade,
70
- "dimensionId" integer not null
71
- constraint analyticsseries_analyticsdimension_dimensionid_foreign
72
- references "AnalyticsDimension"
73
- on delete cascade
74
- );
75
-
76
- create index if not exists analyticsseries_analyticsdimension_dimensionid_index
77
- on "AnalyticsSeries_AnalyticsDimension" ("dimensionId");
78
-
79
- create index if not exists analyticsseries_analyticsdimension_seriesid_index
80
- on "AnalyticsSeries_AnalyticsDimension" ("seriesId");
81
-
82
- `;
83
- export class MemoryAnalyticsStore extends KnexAnalyticsStore {
84
- _pgLiteFactory;
85
- _queryLogger;
86
- _resultsLogger;
87
- _pgExecutor;
88
- _profiler;
89
- _sql = null;
90
- constructor({ knex, pgLiteFactory, queryLogger, resultsLogger, profiler, } = {}) {
91
- if (!profiler) {
92
- profiler = new PassthroughAnalyticsProfiler();
93
- }
94
- const executor = new PGLiteQueryExecutor(profiler, queryLogger, resultsLogger);
95
- super({
96
- executor,
97
- knex: knex ||
98
- knexFactory({
99
- client: "pg",
100
- useNullAsDefault: true,
101
- }),
102
- });
103
- this._pgLiteFactory = pgLiteFactory || PGlite.create;
104
- this._queryLogger = queryLogger || (() => { });
105
- this._resultsLogger = resultsLogger || (() => { });
106
- this._profiler = profiler;
107
- this._pgExecutor = executor;
108
- }
109
- async init() {
110
- this._sql = await this._pgLiteFactory();
111
- // init executor
112
- this._pgExecutor.init(this._sql);
113
- // create tables if they do not exist
114
- await this._sql.exec(initSql);
115
- }
116
- async raw(sql) {
117
- this._queryLogger(-1, sql);
118
- return await this._profiler.record("QueryRaw", async () => {
119
- const results = await this._sql?.exec(sql);
120
- this._resultsLogger(-1, results);
121
- return parseRawResults(results || []);
122
- });
123
- }
124
- async destroy() {
125
- super.destroy();
126
- this._sql?.close();
127
- }
128
- }
129
- //# sourceMappingURL=MemoryAnalyticsStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MemoryAnalyticsStore.js","sourceRoot":"","sources":["../src/MemoryAnalyticsStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,4BAA4B,GAC7B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,kBAAkB,GAGnB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,WAAqB,MAAM,MAAM,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4Ef,CAAC;AAUF,MAAM,OAAO,oBAAqB,SAAQ,kBAAkB;IAClD,cAAc,CAAwB;IACtC,YAAY,CAAiB;IAC7B,cAAc,CAAmB;IACjC,WAAW,CAAsB;IACjC,SAAS,CAAqB;IAC9B,IAAI,GAAkB,IAAI,CAAC;IAEnC,YAAmB,EACjB,IAAI,EACJ,aAAa,EACb,WAAW,EACX,aAAa,EACb,QAAQ,MACuB,EAAE;QACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,IAAI,4BAA4B,EAAE,CAAC;QAChD,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CACtC,QAAQ,EACR,WAAW,EACX,aAAa,CACd,CAAC;QAEF,KAAK,CAAC;YACJ,QAAQ;YACR,IAAI,EACF,IAAI;gBACJ,WAAW,CAAC;oBACV,MAAM,EAAE,IAAI;oBACZ,gBAAgB,EAAE,IAAI;iBACvB,CAAC;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC;QACrD,IAAI,CAAC,YAAY,GAAG,WAAW,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,cAAc,GAAG,aAAa,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAExC,gBAAgB;QAChB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjC,qCAAqC;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW;QAC1B,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAE3B,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAE3C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAEjC,OAAO,eAAe,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,KAAK,CAAC,OAAO,EAAE,CAAC;QAEhB,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
@@ -1,15 +0,0 @@
1
- import { PGlite } from "@electric-sql/pglite";
2
- import { IAnalyticsProfiler } from "@powerhousedao/analytics-engine-core";
3
- import { IKnexQueryExecutor, SqlQueryLogger, SqlResultsLogger } from "@powerhousedao/analytics-engine-knex";
4
- import { Knex } from "knex";
5
- export declare const parseRawResults: (rawResults: any[]) => any[];
6
- export declare class PGLiteQueryExecutor implements IKnexQueryExecutor {
7
- private readonly _profiler;
8
- private readonly _queryLogger?;
9
- private readonly _resultsLogger?;
10
- private _index;
11
- private _sql;
12
- constructor(_profiler: IAnalyticsProfiler, _queryLogger?: SqlQueryLogger | undefined, _resultsLogger?: SqlResultsLogger | undefined);
13
- init(sql: PGlite): void;
14
- execute<T extends {}, U>(query: Knex.QueryBuilder<T, U>): Promise<any>;
15
- }
@@ -1,58 +0,0 @@
1
- export const parseRawResults = (rawResults) => {
2
- const allValues = [];
3
- for (const returnValue of rawResults.values() || []) {
4
- const { fields, rows } = returnValue;
5
- const values = new Array(rows.length);
6
- for (let i = 0, iLen = values.length; i < iLen; i++) {
7
- const row = rows[i];
8
- const value = {};
9
- for (let j = 0, jLen = fields.length; j < jLen; j++) {
10
- // todo: switch on dataTypeID
11
- const { name, dataTypeID } = fields[j];
12
- value[name] = row[name];
13
- }
14
- values[i] = value;
15
- }
16
- allValues.push(...values);
17
- }
18
- return allValues;
19
- };
20
- export class PGLiteQueryExecutor {
21
- _profiler;
22
- _queryLogger;
23
- _resultsLogger;
24
- _index = 0;
25
- _sql = null;
26
- constructor(_profiler, _queryLogger, _resultsLogger) {
27
- this._profiler = _profiler;
28
- this._queryLogger = _queryLogger;
29
- this._resultsLogger = _resultsLogger;
30
- //
31
- }
32
- init(sql) {
33
- this._sql = sql;
34
- }
35
- async execute(query) {
36
- if (!this._sql) {
37
- throw new Error("PGLiteQueryExecutor not initialized");
38
- }
39
- const raw = query.toString();
40
- const index = this._index++;
41
- if (this._queryLogger) {
42
- this._queryLogger(index, raw);
43
- }
44
- const results = await this._profiler.record("Query", async () => {
45
- const rawResults = await this._sql?.exec(raw);
46
- if (!rawResults) {
47
- return;
48
- }
49
- const allValues = parseRawResults(rawResults);
50
- return allValues;
51
- });
52
- if (this._resultsLogger) {
53
- this._resultsLogger(index, results);
54
- }
55
- return results;
56
- }
57
- }
58
- //# sourceMappingURL=PgLiteExecutor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PgLiteExecutor.js","sourceRoot":"","sources":["../src/PgLiteExecutor.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,UAAiB,EAAE,EAAE;IACnD,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,KAAK,MAAM,WAAW,IAAI,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QACpD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YACpD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,KAAK,GAAQ,EAAE,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpD,6BAA6B;gBAC7B,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YAED,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACpB,CAAC;QAED,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,OAAO,mBAAmB;IAKX;IACA;IACA;IANX,MAAM,GAAW,CAAC,CAAC;IACnB,IAAI,GAAkB,IAAI,CAAC;IAEnC,YACmB,SAA6B,EAC7B,YAA6B,EAC7B,cAAiC;QAFjC,cAAS,GAAT,SAAS,CAAoB;QAC7B,iBAAY,GAAZ,YAAY,CAAiB;QAC7B,mBAAc,GAAd,cAAc,CAAmB;QAElD,EAAE;IACJ,CAAC;IAED,IAAI,CAAC,GAAW;QACd,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,OAAO,CAAkB,KAA8B;QAC3D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,OAAO,GAAQ,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YAC9C,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
package/dist/index.d.ts DELETED
@@ -1,4 +0,0 @@
1
- export { MemoryAnalyticsStore } from "./MemoryAnalyticsStore.js";
2
- export { BrowserAnalyticsStore } from "./BrowserAnalyticsStore.js";
3
- export type { MemoryAnalyticsStoreOptions } from "./MemoryAnalyticsStore.js";
4
- export type { BrowserAnalyticsStoreOptions } from "./BrowserAnalyticsStore.js";
package/dist/index.js DELETED
@@ -1,3 +0,0 @@
1
- export { MemoryAnalyticsStore } from "./MemoryAnalyticsStore.js";
2
- export { BrowserAnalyticsStore } from "./BrowserAnalyticsStore.js";
3
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}