seo-testing-tool 1.0.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.
- package/LICENSE +21 -0
- package/README.md +228 -0
- package/dist/auth/GoogleOAuthService.d.ts +31 -0
- package/dist/auth/GoogleOAuthService.d.ts.map +1 -0
- package/dist/auth/GoogleOAuthService.js +69 -0
- package/dist/auth/GoogleOAuthService.js.map +1 -0
- package/dist/auth/TokenManager.d.ts +56 -0
- package/dist/auth/TokenManager.d.ts.map +1 -0
- package/dist/auth/TokenManager.js +190 -0
- package/dist/auth/TokenManager.js.map +1 -0
- package/dist/cli/commands.d.ts +36 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +471 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/formatters.d.ts +24 -0
- package/dist/cli/formatters.d.ts.map +1 -0
- package/dist/cli/formatters.js +175 -0
- package/dist/cli/formatters.js.map +1 -0
- package/dist/cli.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +62 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/AnalysisConfig.d.ts +13 -0
- package/dist/config/AnalysisConfig.d.ts.map +1 -0
- package/dist/config/AnalysisConfig.js +10 -0
- package/dist/config/AnalysisConfig.js.map +1 -0
- package/dist/config/env.d.ts +30 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +77 -0
- package/dist/config/env.js.map +1 -0
- package/dist/database/DatabaseService.d.ts +106 -0
- package/dist/database/DatabaseService.d.ts.map +1 -0
- package/dist/database/DatabaseService.js +180 -0
- package/dist/database/DatabaseService.js.map +1 -0
- package/dist/database/TimeSeriesService.d.ts +53 -0
- package/dist/database/TimeSeriesService.d.ts.map +1 -0
- package/dist/database/TimeSeriesService.js +122 -0
- package/dist/database/TimeSeriesService.js.map +1 -0
- package/dist/database/db.d.ts +20 -0
- package/dist/database/db.d.ts.map +1 -0
- package/dist/database/db.js +60 -0
- package/dist/database/db.js.map +1 -0
- package/dist/database/schema.d.ts +687 -0
- package/dist/database/schema.d.ts.map +1 -0
- package/dist/database/schema.js +62 -0
- package/dist/database/schema.js.map +1 -0
- package/dist/demo.d.ts +13 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/demo.js +149 -0
- package/dist/demo.js.map +1 -0
- package/dist/gsc/GSCDataFetcher.d.ts +100 -0
- package/dist/gsc/GSCDataFetcher.d.ts.map +1 -0
- package/dist/gsc/GSCDataFetcher.js +398 -0
- package/dist/gsc/GSCDataFetcher.js.map +1 -0
- package/dist/gsc/GSCPermissionService.d.ts +20 -0
- package/dist/gsc/GSCPermissionService.d.ts.map +1 -0
- package/dist/gsc/GSCPermissionService.js +84 -0
- package/dist/gsc/GSCPermissionService.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/notifications/NotificationService.d.ts +64 -0
- package/dist/notifications/NotificationService.d.ts.map +1 -0
- package/dist/notifications/NotificationService.js +115 -0
- package/dist/notifications/NotificationService.js.map +1 -0
- package/dist/orchestrator/SEOExperimentOrchestrator.d.ts +69 -0
- package/dist/orchestrator/SEOExperimentOrchestrator.d.ts.map +1 -0
- package/dist/orchestrator/SEOExperimentOrchestrator.js +199 -0
- package/dist/orchestrator/SEOExperimentOrchestrator.js.map +1 -0
- package/dist/services/ExportService.d.ts +52 -0
- package/dist/services/ExportService.d.ts.map +1 -0
- package/dist/services/ExportService.js +238 -0
- package/dist/services/ExportService.js.map +1 -0
- package/dist/smoke-test.d.ts +10 -0
- package/dist/smoke-test.d.ts.map +1 -0
- package/dist/smoke-test.js +73 -0
- package/dist/smoke-test.js.map +1 -0
- package/dist/stats/StatisticalEngine.d.ts +48 -0
- package/dist/stats/StatisticalEngine.d.ts.map +1 -0
- package/dist/stats/StatisticalEngine.js +205 -0
- package/dist/stats/StatisticalEngine.js.map +1 -0
- package/dist/stats/TDistribution.d.ts +28 -0
- package/dist/stats/TDistribution.d.ts.map +1 -0
- package/dist/stats/TDistribution.js +120 -0
- package/dist/stats/TDistribution.js.map +1 -0
- package/drizzle/0000_hot_whiplash.sql +51 -0
- package/drizzle/0001_open_photon.sql +9 -0
- package/drizzle/0002_faulty_the_watchers.sql +1 -0
- package/drizzle/meta/0000_snapshot.json +360 -0
- package/drizzle/meta/0001_snapshot.json +428 -0
- package/drizzle/meta/0002_snapshot.json +420 -0
- package/drizzle/meta/_journal.json +27 -0
- package/package.json +89 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Distribuzione t di Student - Implementazione self-contained
|
|
3
|
+
*
|
|
4
|
+
* Calcola p-value reali per il Welch's t-test senza dipendenze esterne.
|
|
5
|
+
* Usa l'approssimazione di Lanczos per log-gamma e l'algoritmo di Lentz
|
|
6
|
+
* per la regularized incomplete beta function.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Logaritmo naturale della funzione Gamma.
|
|
10
|
+
* Usa l'approssimazione di Lanczos con 6 coefficienti (~15 cifre di precisione).
|
|
11
|
+
*/
|
|
12
|
+
export declare function lnGamma(x: number): number;
|
|
13
|
+
/**
|
|
14
|
+
* Regularized Incomplete Beta Function I_x(a, b).
|
|
15
|
+
* Usa l'algoritmo di Lentz per la continued fraction evaluation.
|
|
16
|
+
*/
|
|
17
|
+
export declare function regularizedIncompleteBeta(x: number, a: number, b: number): number;
|
|
18
|
+
/**
|
|
19
|
+
* CDF della distribuzione t di Student.
|
|
20
|
+
* P(T <= t) per una variabile t con df gradi di libertà.
|
|
21
|
+
*/
|
|
22
|
+
export declare function studentTCDF(t: number, df: number): number;
|
|
23
|
+
/**
|
|
24
|
+
* P-value two-tailed per il test t di Student.
|
|
25
|
+
* Calcola P(|T| > |t|) = I_x(df/2, 1/2) dove x = df/(df + t²).
|
|
26
|
+
*/
|
|
27
|
+
export declare function twoTailedPValue(t: number, df: number): number;
|
|
28
|
+
//# sourceMappingURL=TDistribution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TDistribution.d.ts","sourceRoot":"","sources":["../../src/stats/TDistribution.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAazC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAoDjF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAazD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAQ7D"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Distribuzione t di Student - Implementazione self-contained
|
|
3
|
+
*
|
|
4
|
+
* Calcola p-value reali per il Welch's t-test senza dipendenze esterne.
|
|
5
|
+
* Usa l'approssimazione di Lanczos per log-gamma e l'algoritmo di Lentz
|
|
6
|
+
* per la regularized incomplete beta function.
|
|
7
|
+
*/
|
|
8
|
+
const LANCZOS_COEFFICIENTS = [
|
|
9
|
+
76.18009172947146,
|
|
10
|
+
-86.50532032941677,
|
|
11
|
+
24.01409824083091,
|
|
12
|
+
-1.231739572450155,
|
|
13
|
+
0.1208650973866179e-2,
|
|
14
|
+
-0.5395239384953e-5,
|
|
15
|
+
];
|
|
16
|
+
/**
|
|
17
|
+
* Logaritmo naturale della funzione Gamma.
|
|
18
|
+
* Usa l'approssimazione di Lanczos con 6 coefficienti (~15 cifre di precisione).
|
|
19
|
+
*/
|
|
20
|
+
export function lnGamma(x) {
|
|
21
|
+
if (x <= 0)
|
|
22
|
+
throw new Error('lnGamma richiede x > 0');
|
|
23
|
+
let y = x;
|
|
24
|
+
let tmp = x + 5.5;
|
|
25
|
+
tmp -= (x + 0.5) * Math.log(tmp);
|
|
26
|
+
let ser = 1.000000000190015;
|
|
27
|
+
for (const coeff of LANCZOS_COEFFICIENTS) {
|
|
28
|
+
ser += coeff / ++y;
|
|
29
|
+
}
|
|
30
|
+
return -tmp + Math.log((2.5066282746310005 * ser) / x);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Regularized Incomplete Beta Function I_x(a, b).
|
|
34
|
+
* Usa l'algoritmo di Lentz per la continued fraction evaluation.
|
|
35
|
+
*/
|
|
36
|
+
export function regularizedIncompleteBeta(x, a, b) {
|
|
37
|
+
if (x === 0)
|
|
38
|
+
return 0;
|
|
39
|
+
if (x === 1)
|
|
40
|
+
return 1;
|
|
41
|
+
// Relazione di simmetria per convergenza ottimale
|
|
42
|
+
if (x > (a + 1) / (a + b + 2)) {
|
|
43
|
+
return 1 - regularizedIncompleteBeta(1 - x, b, a);
|
|
44
|
+
}
|
|
45
|
+
const lnBeta = lnGamma(a) + lnGamma(b) - lnGamma(a + b);
|
|
46
|
+
const front = Math.exp(Math.log(x) * a + Math.log(1 - x) * b - lnBeta) / a;
|
|
47
|
+
// Lentz continued fraction per I_x(a, b)
|
|
48
|
+
const maxIterations = 200;
|
|
49
|
+
const epsilon = 1e-10;
|
|
50
|
+
const tiny = 1e-30;
|
|
51
|
+
let c = 1;
|
|
52
|
+
let d = 1 - ((a + b) * x) / (a + 1);
|
|
53
|
+
if (Math.abs(d) < tiny)
|
|
54
|
+
d = tiny;
|
|
55
|
+
d = 1 / d;
|
|
56
|
+
let result = d;
|
|
57
|
+
for (let m = 1; m <= maxIterations; m++) {
|
|
58
|
+
// Numeratore per termine dispari d_{2m-1}
|
|
59
|
+
let numerator = (m * (b - m) * x) / ((a + 2 * m - 1) * (a + 2 * m));
|
|
60
|
+
d = 1 + numerator * d;
|
|
61
|
+
if (Math.abs(d) < tiny)
|
|
62
|
+
d = tiny;
|
|
63
|
+
c = 1 + numerator / c;
|
|
64
|
+
if (Math.abs(c) < tiny)
|
|
65
|
+
c = tiny;
|
|
66
|
+
d = 1 / d;
|
|
67
|
+
result *= d * c;
|
|
68
|
+
// Numeratore per termine pari d_{2m}
|
|
69
|
+
numerator = (-(a + m) * (a + b + m) * x) / ((a + 2 * m) * (a + 2 * m + 1));
|
|
70
|
+
d = 1 + numerator * d;
|
|
71
|
+
if (Math.abs(d) < tiny)
|
|
72
|
+
d = tiny;
|
|
73
|
+
c = 1 + numerator / c;
|
|
74
|
+
if (Math.abs(c) < tiny)
|
|
75
|
+
c = tiny;
|
|
76
|
+
d = 1 / d;
|
|
77
|
+
const delta = d * c;
|
|
78
|
+
result *= delta;
|
|
79
|
+
// Convergenza raggiunta
|
|
80
|
+
if (Math.abs(delta - 1) < epsilon) {
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Clamp per sicurezza numerica
|
|
85
|
+
return Math.max(0, Math.min(1, front * result));
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* CDF della distribuzione t di Student.
|
|
89
|
+
* P(T <= t) per una variabile t con df gradi di libertà.
|
|
90
|
+
*/
|
|
91
|
+
export function studentTCDF(t, df) {
|
|
92
|
+
if (df <= 0)
|
|
93
|
+
throw new Error('Gradi di libertà devono essere > 0');
|
|
94
|
+
if (!isFinite(t))
|
|
95
|
+
return t > 0 ? 1 : 0;
|
|
96
|
+
if (t === 0)
|
|
97
|
+
return 0.5;
|
|
98
|
+
const x = df / (df + t * t);
|
|
99
|
+
const ibeta = regularizedIncompleteBeta(x, df / 2, 0.5);
|
|
100
|
+
if (t > 0) {
|
|
101
|
+
return 1 - 0.5 * ibeta;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
return 0.5 * ibeta;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* P-value two-tailed per il test t di Student.
|
|
109
|
+
* Calcola P(|T| > |t|) = I_x(df/2, 1/2) dove x = df/(df + t²).
|
|
110
|
+
*/
|
|
111
|
+
export function twoTailedPValue(t, df) {
|
|
112
|
+
if (isNaN(t) || isNaN(df) || df <= 0)
|
|
113
|
+
return 1;
|
|
114
|
+
if (!isFinite(t))
|
|
115
|
+
return 0;
|
|
116
|
+
const absT = Math.abs(t);
|
|
117
|
+
const x = df / (df + absT * absT);
|
|
118
|
+
return Math.max(0, Math.min(1, regularizedIncompleteBeta(x, df / 2, 0.5)));
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=TDistribution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TDistribution.js","sourceRoot":"","sources":["../../src/stats/TDistribution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
CREATE TABLE `AuditLog` (
|
|
2
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
3
|
+
`testId` text NOT NULL,
|
|
4
|
+
`action` text NOT NULL,
|
|
5
|
+
`userId` text NOT NULL,
|
|
6
|
+
`timestamp` text DEFAULT (datetime('now')) NOT NULL
|
|
7
|
+
);
|
|
8
|
+
--> statement-breakpoint
|
|
9
|
+
CREATE INDEX `AuditLog_testId_idx` ON `AuditLog` (`testId`);--> statement-breakpoint
|
|
10
|
+
CREATE INDEX `AuditLog_userId_idx` ON `AuditLog` (`userId`);--> statement-breakpoint
|
|
11
|
+
CREATE TABLE `Metric` (
|
|
12
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
13
|
+
`testId` text NOT NULL,
|
|
14
|
+
`date` text NOT NULL,
|
|
15
|
+
`clicks` integer NOT NULL,
|
|
16
|
+
`impressions` integer NOT NULL,
|
|
17
|
+
`gapFilled` integer DEFAULT false NOT NULL,
|
|
18
|
+
`filledAt` text,
|
|
19
|
+
`createdAt` text DEFAULT (datetime('now')) NOT NULL,
|
|
20
|
+
FOREIGN KEY (`testId`) REFERENCES `Test`(`id`) ON UPDATE no action ON DELETE cascade
|
|
21
|
+
);
|
|
22
|
+
--> statement-breakpoint
|
|
23
|
+
CREATE UNIQUE INDEX `Metric_testId_date_key` ON `Metric` (`testId`,`date`);--> statement-breakpoint
|
|
24
|
+
CREATE INDEX `Metric_testId_date_idx` ON `Metric` (`testId`,`date`);--> statement-breakpoint
|
|
25
|
+
CREATE TABLE `Test` (
|
|
26
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
27
|
+
`name` text NOT NULL,
|
|
28
|
+
`urls` text DEFAULT '[]' NOT NULL,
|
|
29
|
+
`siteUrl` text NOT NULL,
|
|
30
|
+
`startDate` text NOT NULL,
|
|
31
|
+
`splitDate` text NOT NULL,
|
|
32
|
+
`status` text DEFAULT 'running' NOT NULL,
|
|
33
|
+
`lastSyncAt` text,
|
|
34
|
+
`lastPValue` real,
|
|
35
|
+
`lastImprovement` real,
|
|
36
|
+
`userId` text NOT NULL,
|
|
37
|
+
`sharedWith` text DEFAULT '[]' NOT NULL,
|
|
38
|
+
`createdAt` text DEFAULT (datetime('now')) NOT NULL,
|
|
39
|
+
`updatedAt` text DEFAULT (datetime('now')) NOT NULL,
|
|
40
|
+
FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON UPDATE no action ON DELETE no action
|
|
41
|
+
);
|
|
42
|
+
--> statement-breakpoint
|
|
43
|
+
CREATE INDEX `Test_userId_idx` ON `Test` (`userId`);--> statement-breakpoint
|
|
44
|
+
CREATE INDEX `Test_status_idx` ON `Test` (`status`);--> statement-breakpoint
|
|
45
|
+
CREATE TABLE `User` (
|
|
46
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
47
|
+
`email` text NOT NULL,
|
|
48
|
+
`createdAt` text DEFAULT (datetime('now')) NOT NULL
|
|
49
|
+
);
|
|
50
|
+
--> statement-breakpoint
|
|
51
|
+
CREATE UNIQUE INDEX `User_email_unique` ON `User` (`email`);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
CREATE TABLE `OAuthToken` (
|
|
2
|
+
`userId` text PRIMARY KEY NOT NULL,
|
|
3
|
+
`accessToken` text NOT NULL,
|
|
4
|
+
`refreshToken` text NOT NULL,
|
|
5
|
+
`expiresAt` integer NOT NULL,
|
|
6
|
+
`createdAt` text DEFAULT (datetime('now')) NOT NULL,
|
|
7
|
+
`updatedAt` text DEFAULT (datetime('now')) NOT NULL,
|
|
8
|
+
FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON UPDATE no action ON DELETE no action
|
|
9
|
+
);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE `Test` DROP COLUMN `sharedWith`;
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "6",
|
|
3
|
+
"dialect": "sqlite",
|
|
4
|
+
"id": "ec839ca6-e49d-4acf-aa97-acadcd716c66",
|
|
5
|
+
"prevId": "00000000-0000-0000-0000-000000000000",
|
|
6
|
+
"tables": {
|
|
7
|
+
"AuditLog": {
|
|
8
|
+
"name": "AuditLog",
|
|
9
|
+
"columns": {
|
|
10
|
+
"id": {
|
|
11
|
+
"name": "id",
|
|
12
|
+
"type": "text",
|
|
13
|
+
"primaryKey": true,
|
|
14
|
+
"notNull": true,
|
|
15
|
+
"autoincrement": false
|
|
16
|
+
},
|
|
17
|
+
"testId": {
|
|
18
|
+
"name": "testId",
|
|
19
|
+
"type": "text",
|
|
20
|
+
"primaryKey": false,
|
|
21
|
+
"notNull": true,
|
|
22
|
+
"autoincrement": false
|
|
23
|
+
},
|
|
24
|
+
"action": {
|
|
25
|
+
"name": "action",
|
|
26
|
+
"type": "text",
|
|
27
|
+
"primaryKey": false,
|
|
28
|
+
"notNull": true,
|
|
29
|
+
"autoincrement": false
|
|
30
|
+
},
|
|
31
|
+
"userId": {
|
|
32
|
+
"name": "userId",
|
|
33
|
+
"type": "text",
|
|
34
|
+
"primaryKey": false,
|
|
35
|
+
"notNull": true,
|
|
36
|
+
"autoincrement": false
|
|
37
|
+
},
|
|
38
|
+
"timestamp": {
|
|
39
|
+
"name": "timestamp",
|
|
40
|
+
"type": "text",
|
|
41
|
+
"primaryKey": false,
|
|
42
|
+
"notNull": true,
|
|
43
|
+
"autoincrement": false,
|
|
44
|
+
"default": "(datetime('now'))"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"indexes": {
|
|
48
|
+
"AuditLog_testId_idx": {
|
|
49
|
+
"name": "AuditLog_testId_idx",
|
|
50
|
+
"columns": [
|
|
51
|
+
"testId"
|
|
52
|
+
],
|
|
53
|
+
"isUnique": false
|
|
54
|
+
},
|
|
55
|
+
"AuditLog_userId_idx": {
|
|
56
|
+
"name": "AuditLog_userId_idx",
|
|
57
|
+
"columns": [
|
|
58
|
+
"userId"
|
|
59
|
+
],
|
|
60
|
+
"isUnique": false
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"foreignKeys": {},
|
|
64
|
+
"compositePrimaryKeys": {},
|
|
65
|
+
"uniqueConstraints": {},
|
|
66
|
+
"checkConstraints": {}
|
|
67
|
+
},
|
|
68
|
+
"Metric": {
|
|
69
|
+
"name": "Metric",
|
|
70
|
+
"columns": {
|
|
71
|
+
"id": {
|
|
72
|
+
"name": "id",
|
|
73
|
+
"type": "integer",
|
|
74
|
+
"primaryKey": true,
|
|
75
|
+
"notNull": true,
|
|
76
|
+
"autoincrement": true
|
|
77
|
+
},
|
|
78
|
+
"testId": {
|
|
79
|
+
"name": "testId",
|
|
80
|
+
"type": "text",
|
|
81
|
+
"primaryKey": false,
|
|
82
|
+
"notNull": true,
|
|
83
|
+
"autoincrement": false
|
|
84
|
+
},
|
|
85
|
+
"date": {
|
|
86
|
+
"name": "date",
|
|
87
|
+
"type": "text",
|
|
88
|
+
"primaryKey": false,
|
|
89
|
+
"notNull": true,
|
|
90
|
+
"autoincrement": false
|
|
91
|
+
},
|
|
92
|
+
"clicks": {
|
|
93
|
+
"name": "clicks",
|
|
94
|
+
"type": "integer",
|
|
95
|
+
"primaryKey": false,
|
|
96
|
+
"notNull": true,
|
|
97
|
+
"autoincrement": false
|
|
98
|
+
},
|
|
99
|
+
"impressions": {
|
|
100
|
+
"name": "impressions",
|
|
101
|
+
"type": "integer",
|
|
102
|
+
"primaryKey": false,
|
|
103
|
+
"notNull": true,
|
|
104
|
+
"autoincrement": false
|
|
105
|
+
},
|
|
106
|
+
"gapFilled": {
|
|
107
|
+
"name": "gapFilled",
|
|
108
|
+
"type": "integer",
|
|
109
|
+
"primaryKey": false,
|
|
110
|
+
"notNull": true,
|
|
111
|
+
"autoincrement": false,
|
|
112
|
+
"default": false
|
|
113
|
+
},
|
|
114
|
+
"filledAt": {
|
|
115
|
+
"name": "filledAt",
|
|
116
|
+
"type": "text",
|
|
117
|
+
"primaryKey": false,
|
|
118
|
+
"notNull": false,
|
|
119
|
+
"autoincrement": false
|
|
120
|
+
},
|
|
121
|
+
"createdAt": {
|
|
122
|
+
"name": "createdAt",
|
|
123
|
+
"type": "text",
|
|
124
|
+
"primaryKey": false,
|
|
125
|
+
"notNull": true,
|
|
126
|
+
"autoincrement": false,
|
|
127
|
+
"default": "(datetime('now'))"
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
"indexes": {
|
|
131
|
+
"Metric_testId_date_key": {
|
|
132
|
+
"name": "Metric_testId_date_key",
|
|
133
|
+
"columns": [
|
|
134
|
+
"testId",
|
|
135
|
+
"date"
|
|
136
|
+
],
|
|
137
|
+
"isUnique": true
|
|
138
|
+
},
|
|
139
|
+
"Metric_testId_date_idx": {
|
|
140
|
+
"name": "Metric_testId_date_idx",
|
|
141
|
+
"columns": [
|
|
142
|
+
"testId",
|
|
143
|
+
"date"
|
|
144
|
+
],
|
|
145
|
+
"isUnique": false
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
"foreignKeys": {
|
|
149
|
+
"Metric_testId_Test_id_fk": {
|
|
150
|
+
"name": "Metric_testId_Test_id_fk",
|
|
151
|
+
"tableFrom": "Metric",
|
|
152
|
+
"tableTo": "Test",
|
|
153
|
+
"columnsFrom": [
|
|
154
|
+
"testId"
|
|
155
|
+
],
|
|
156
|
+
"columnsTo": [
|
|
157
|
+
"id"
|
|
158
|
+
],
|
|
159
|
+
"onDelete": "cascade",
|
|
160
|
+
"onUpdate": "no action"
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
"compositePrimaryKeys": {},
|
|
164
|
+
"uniqueConstraints": {},
|
|
165
|
+
"checkConstraints": {}
|
|
166
|
+
},
|
|
167
|
+
"Test": {
|
|
168
|
+
"name": "Test",
|
|
169
|
+
"columns": {
|
|
170
|
+
"id": {
|
|
171
|
+
"name": "id",
|
|
172
|
+
"type": "text",
|
|
173
|
+
"primaryKey": true,
|
|
174
|
+
"notNull": true,
|
|
175
|
+
"autoincrement": false
|
|
176
|
+
},
|
|
177
|
+
"name": {
|
|
178
|
+
"name": "name",
|
|
179
|
+
"type": "text",
|
|
180
|
+
"primaryKey": false,
|
|
181
|
+
"notNull": true,
|
|
182
|
+
"autoincrement": false
|
|
183
|
+
},
|
|
184
|
+
"urls": {
|
|
185
|
+
"name": "urls",
|
|
186
|
+
"type": "text",
|
|
187
|
+
"primaryKey": false,
|
|
188
|
+
"notNull": true,
|
|
189
|
+
"autoincrement": false,
|
|
190
|
+
"default": "'[]'"
|
|
191
|
+
},
|
|
192
|
+
"siteUrl": {
|
|
193
|
+
"name": "siteUrl",
|
|
194
|
+
"type": "text",
|
|
195
|
+
"primaryKey": false,
|
|
196
|
+
"notNull": true,
|
|
197
|
+
"autoincrement": false
|
|
198
|
+
},
|
|
199
|
+
"startDate": {
|
|
200
|
+
"name": "startDate",
|
|
201
|
+
"type": "text",
|
|
202
|
+
"primaryKey": false,
|
|
203
|
+
"notNull": true,
|
|
204
|
+
"autoincrement": false
|
|
205
|
+
},
|
|
206
|
+
"splitDate": {
|
|
207
|
+
"name": "splitDate",
|
|
208
|
+
"type": "text",
|
|
209
|
+
"primaryKey": false,
|
|
210
|
+
"notNull": true,
|
|
211
|
+
"autoincrement": false
|
|
212
|
+
},
|
|
213
|
+
"status": {
|
|
214
|
+
"name": "status",
|
|
215
|
+
"type": "text",
|
|
216
|
+
"primaryKey": false,
|
|
217
|
+
"notNull": true,
|
|
218
|
+
"autoincrement": false,
|
|
219
|
+
"default": "'running'"
|
|
220
|
+
},
|
|
221
|
+
"lastSyncAt": {
|
|
222
|
+
"name": "lastSyncAt",
|
|
223
|
+
"type": "text",
|
|
224
|
+
"primaryKey": false,
|
|
225
|
+
"notNull": false,
|
|
226
|
+
"autoincrement": false
|
|
227
|
+
},
|
|
228
|
+
"lastPValue": {
|
|
229
|
+
"name": "lastPValue",
|
|
230
|
+
"type": "real",
|
|
231
|
+
"primaryKey": false,
|
|
232
|
+
"notNull": false,
|
|
233
|
+
"autoincrement": false
|
|
234
|
+
},
|
|
235
|
+
"lastImprovement": {
|
|
236
|
+
"name": "lastImprovement",
|
|
237
|
+
"type": "real",
|
|
238
|
+
"primaryKey": false,
|
|
239
|
+
"notNull": false,
|
|
240
|
+
"autoincrement": false
|
|
241
|
+
},
|
|
242
|
+
"userId": {
|
|
243
|
+
"name": "userId",
|
|
244
|
+
"type": "text",
|
|
245
|
+
"primaryKey": false,
|
|
246
|
+
"notNull": true,
|
|
247
|
+
"autoincrement": false
|
|
248
|
+
},
|
|
249
|
+
"sharedWith": {
|
|
250
|
+
"name": "sharedWith",
|
|
251
|
+
"type": "text",
|
|
252
|
+
"primaryKey": false,
|
|
253
|
+
"notNull": true,
|
|
254
|
+
"autoincrement": false,
|
|
255
|
+
"default": "'[]'"
|
|
256
|
+
},
|
|
257
|
+
"createdAt": {
|
|
258
|
+
"name": "createdAt",
|
|
259
|
+
"type": "text",
|
|
260
|
+
"primaryKey": false,
|
|
261
|
+
"notNull": true,
|
|
262
|
+
"autoincrement": false,
|
|
263
|
+
"default": "(datetime('now'))"
|
|
264
|
+
},
|
|
265
|
+
"updatedAt": {
|
|
266
|
+
"name": "updatedAt",
|
|
267
|
+
"type": "text",
|
|
268
|
+
"primaryKey": false,
|
|
269
|
+
"notNull": true,
|
|
270
|
+
"autoincrement": false,
|
|
271
|
+
"default": "(datetime('now'))"
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
"indexes": {
|
|
275
|
+
"Test_userId_idx": {
|
|
276
|
+
"name": "Test_userId_idx",
|
|
277
|
+
"columns": [
|
|
278
|
+
"userId"
|
|
279
|
+
],
|
|
280
|
+
"isUnique": false
|
|
281
|
+
},
|
|
282
|
+
"Test_status_idx": {
|
|
283
|
+
"name": "Test_status_idx",
|
|
284
|
+
"columns": [
|
|
285
|
+
"status"
|
|
286
|
+
],
|
|
287
|
+
"isUnique": false
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
"foreignKeys": {
|
|
291
|
+
"Test_userId_User_id_fk": {
|
|
292
|
+
"name": "Test_userId_User_id_fk",
|
|
293
|
+
"tableFrom": "Test",
|
|
294
|
+
"tableTo": "User",
|
|
295
|
+
"columnsFrom": [
|
|
296
|
+
"userId"
|
|
297
|
+
],
|
|
298
|
+
"columnsTo": [
|
|
299
|
+
"id"
|
|
300
|
+
],
|
|
301
|
+
"onDelete": "no action",
|
|
302
|
+
"onUpdate": "no action"
|
|
303
|
+
}
|
|
304
|
+
},
|
|
305
|
+
"compositePrimaryKeys": {},
|
|
306
|
+
"uniqueConstraints": {},
|
|
307
|
+
"checkConstraints": {}
|
|
308
|
+
},
|
|
309
|
+
"User": {
|
|
310
|
+
"name": "User",
|
|
311
|
+
"columns": {
|
|
312
|
+
"id": {
|
|
313
|
+
"name": "id",
|
|
314
|
+
"type": "text",
|
|
315
|
+
"primaryKey": true,
|
|
316
|
+
"notNull": true,
|
|
317
|
+
"autoincrement": false
|
|
318
|
+
},
|
|
319
|
+
"email": {
|
|
320
|
+
"name": "email",
|
|
321
|
+
"type": "text",
|
|
322
|
+
"primaryKey": false,
|
|
323
|
+
"notNull": true,
|
|
324
|
+
"autoincrement": false
|
|
325
|
+
},
|
|
326
|
+
"createdAt": {
|
|
327
|
+
"name": "createdAt",
|
|
328
|
+
"type": "text",
|
|
329
|
+
"primaryKey": false,
|
|
330
|
+
"notNull": true,
|
|
331
|
+
"autoincrement": false,
|
|
332
|
+
"default": "(datetime('now'))"
|
|
333
|
+
}
|
|
334
|
+
},
|
|
335
|
+
"indexes": {
|
|
336
|
+
"User_email_unique": {
|
|
337
|
+
"name": "User_email_unique",
|
|
338
|
+
"columns": [
|
|
339
|
+
"email"
|
|
340
|
+
],
|
|
341
|
+
"isUnique": true
|
|
342
|
+
}
|
|
343
|
+
},
|
|
344
|
+
"foreignKeys": {},
|
|
345
|
+
"compositePrimaryKeys": {},
|
|
346
|
+
"uniqueConstraints": {},
|
|
347
|
+
"checkConstraints": {}
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
"views": {},
|
|
351
|
+
"enums": {},
|
|
352
|
+
"_meta": {
|
|
353
|
+
"schemas": {},
|
|
354
|
+
"tables": {},
|
|
355
|
+
"columns": {}
|
|
356
|
+
},
|
|
357
|
+
"internal": {
|
|
358
|
+
"indexes": {}
|
|
359
|
+
}
|
|
360
|
+
}
|