mythik-cli 0.1.1 → 0.1.3
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/README.md +189 -31
- package/dist/api.d.ts +2 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +1 -0
- package/dist/api.js.map +1 -1
- package/dist/cli.js +160 -22
- package/dist/cli.js.map +1 -1
- package/dist/commands/init-store.d.ts +18 -0
- package/dist/commands/init-store.d.ts.map +1 -0
- package/dist/commands/init-store.js +90 -0
- package/dist/commands/init-store.js.map +1 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +58 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/config.d.ts +14 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +150 -0
- package/dist/config.js.map +1 -1
- package/dist/stores/resolver.d.ts +2 -6
- package/dist/stores/resolver.d.ts.map +1 -1
- package/dist/stores/resolver.js +76 -22
- package/dist/stores/resolver.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import type { SpecStore, VersionedSpecStore
|
|
2
|
-
import type
|
|
1
|
+
import type { EnvironmentStore, SpecStore, VersionedSpecStore } from 'mythik';
|
|
2
|
+
import { type MythikConfig } from '../config.js';
|
|
3
3
|
export declare function resolveStore(config: MythikConfig): SpecStore;
|
|
4
|
-
/**
|
|
5
|
-
* Resolve a VersionedSpecStore + EnvironmentStore from config.
|
|
6
|
-
* Currently only memory store has a versioned implementation.
|
|
7
|
-
*/
|
|
8
4
|
export declare function resolveVersionedStore(config: MythikConfig): {
|
|
9
5
|
store: VersionedSpecStore;
|
|
10
6
|
envStore: EnvironmentStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/stores/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/stores/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAkB9E,OAAO,EAGL,KAAK,YAAY,EAElB,MAAM,cAAc,CAAC;AAoDtB,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAuB5D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG;IAC3D,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,CAwCA"}
|
package/dist/stores/resolver.js
CHANGED
|
@@ -1,5 +1,54 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { FileSpecStore,
|
|
1
|
+
import { MemoryEnvironmentStore, MemorySpecStore, MemoryVersionedSpecStore, SupabaseEnvironmentStore, SupabaseSpecStore, SupabaseVersionedSpecStore, } from 'mythik';
|
|
2
|
+
import { createSqlDriver, FileSpecStore, SqlEnvironmentStore, SqlSpecStore, SqlVersionedSpecStore, } from 'mythik/server';
|
|
3
|
+
import { isSqlStoreType, SUPPORTED_STORE_TYPES, } from '../config.js';
|
|
4
|
+
function requireSqlConfig(config) {
|
|
5
|
+
if (!isSqlStoreType(config.store)) {
|
|
6
|
+
throw new Error(`Store "${config.store}" is not a SQL dialect store.`);
|
|
7
|
+
}
|
|
8
|
+
if (!config.sql) {
|
|
9
|
+
throw new Error(`SQL config for "${config.store}" is missing.`);
|
|
10
|
+
}
|
|
11
|
+
if (config.sql.dialect !== config.store) {
|
|
12
|
+
throw new Error(`SQL config dialect "${config.sql.dialect}" does not match store "${config.store}".`);
|
|
13
|
+
}
|
|
14
|
+
return config.sql;
|
|
15
|
+
}
|
|
16
|
+
function createDriverBackedStore(config) {
|
|
17
|
+
const sql = requireSqlConfig(config);
|
|
18
|
+
const driver = createSqlDriver({ dialect: sql.dialect, connection: sql.connection });
|
|
19
|
+
return new SqlSpecStore({ driver, table: sql.table, closeDriver: true });
|
|
20
|
+
}
|
|
21
|
+
function sharedDriverHandle(driver, ref) {
|
|
22
|
+
return {
|
|
23
|
+
get dialect() { return driver.dialect; },
|
|
24
|
+
get capabilities() { return driver.capabilities; },
|
|
25
|
+
connect: () => driver.connect(),
|
|
26
|
+
close: async () => {
|
|
27
|
+
if (ref.closed)
|
|
28
|
+
return;
|
|
29
|
+
ref.count -= 1;
|
|
30
|
+
if (ref.count <= 0) {
|
|
31
|
+
ref.closed = true;
|
|
32
|
+
await driver.close();
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
transaction: (run) => driver.transaction(run),
|
|
36
|
+
query: (statement, params) => driver.query(statement, params),
|
|
37
|
+
exec: (statement, params) => driver.exec(statement, params),
|
|
38
|
+
quoteIdent: (identifier) => driver.quoteIdent(identifier),
|
|
39
|
+
quoteQualified: (...identifiers) => driver.quoteQualified(...identifiers),
|
|
40
|
+
compileNamedParams: (statement, params) => driver.compileNamedParams(statement, params),
|
|
41
|
+
paginate: (statement, limit, offset) => driver.paginate(statement, limit, offset),
|
|
42
|
+
countQuery: (statement) => driver.countQuery(statement),
|
|
43
|
+
totalsQuery: (statement) => driver.totalsQuery(statement),
|
|
44
|
+
buildInsertReturning: (table, values, returning) => driver.buildInsertReturning(table, values, returning),
|
|
45
|
+
buildUpdateReturning: (table, values, where, returning) => driver.buildUpdateReturning(table, values, where, returning),
|
|
46
|
+
buildDelete: (table, where) => driver.buildDelete(table, where),
|
|
47
|
+
buildUpsert: (table, values, keys) => driver.buildUpsert(table, values, keys),
|
|
48
|
+
tableExists: (table) => driver.tableExists(table),
|
|
49
|
+
mapError: (error) => driver.mapError(error),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
3
52
|
export function resolveStore(config) {
|
|
4
53
|
switch (config.store) {
|
|
5
54
|
case 'supabase':
|
|
@@ -8,38 +57,24 @@ export function resolveStore(config) {
|
|
|
8
57
|
}
|
|
9
58
|
return new SupabaseSpecStore(config.supabase);
|
|
10
59
|
case 'sqlserver':
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return
|
|
60
|
+
case 'postgres':
|
|
61
|
+
case 'mysql':
|
|
62
|
+
case 'sqlite':
|
|
63
|
+
return createDriverBackedStore(config);
|
|
15
64
|
case 'file':
|
|
16
65
|
return new FileSpecStore({ directory: config.file?.dir ?? './specs' });
|
|
17
66
|
case 'memory':
|
|
18
67
|
return new MemorySpecStore();
|
|
19
68
|
default:
|
|
20
|
-
throw new Error(`Unknown store: "${config.store}". Available:
|
|
69
|
+
throw new Error(`Unknown store: "${config.store}". Available: ${SUPPORTED_STORE_TYPES.join(', ')}`);
|
|
21
70
|
}
|
|
22
71
|
}
|
|
23
|
-
/**
|
|
24
|
-
* Resolve a VersionedSpecStore + EnvironmentStore from config.
|
|
25
|
-
* Currently only memory store has a versioned implementation.
|
|
26
|
-
*/
|
|
27
72
|
export function resolveVersionedStore(config) {
|
|
28
73
|
if (config.store === 'memory') {
|
|
29
74
|
const store = new MemoryVersionedSpecStore();
|
|
30
75
|
const envStore = new MemoryEnvironmentStore();
|
|
31
76
|
return { store, envStore };
|
|
32
77
|
}
|
|
33
|
-
if (config.store === 'sqlserver') {
|
|
34
|
-
if (!config.sqlserver?.server || !config.sqlserver?.database) {
|
|
35
|
-
throw new Error('SQL Server config requires "server" and "database"');
|
|
36
|
-
}
|
|
37
|
-
const store = new SqlServerVersionedSpecStore(config.sqlserver);
|
|
38
|
-
// Environment store uses its own fixed table — don't pass the --table override
|
|
39
|
-
const { table: _, ...envConfig } = config.sqlserver;
|
|
40
|
-
const envStore = new SqlServerEnvironmentStore(envConfig);
|
|
41
|
-
return { store, envStore };
|
|
42
|
-
}
|
|
43
78
|
if (config.store === 'supabase') {
|
|
44
79
|
if (!config.supabase?.url || !config.supabase?.apiKey) {
|
|
45
80
|
throw new Error('Supabase config requires "url" and "apiKey"');
|
|
@@ -49,6 +84,25 @@ export function resolveVersionedStore(config) {
|
|
|
49
84
|
const envStore = new SupabaseEnvironmentStore(envConfig);
|
|
50
85
|
return { store, envStore };
|
|
51
86
|
}
|
|
52
|
-
|
|
87
|
+
if (isSqlStoreType(config.store)) {
|
|
88
|
+
const sql = requireSqlConfig(config);
|
|
89
|
+
const driver = createSqlDriver({ dialect: sql.dialect, connection: sql.connection });
|
|
90
|
+
const closeRef = { count: 2, closed: false };
|
|
91
|
+
return {
|
|
92
|
+
store: new SqlVersionedSpecStore({
|
|
93
|
+
driver: sharedDriverHandle(driver, closeRef),
|
|
94
|
+
table: sql.table,
|
|
95
|
+
versionsTable: sql.versionsTable,
|
|
96
|
+
snapshotInterval: sql.snapshotInterval,
|
|
97
|
+
closeDriver: true,
|
|
98
|
+
}),
|
|
99
|
+
envStore: new SqlEnvironmentStore({
|
|
100
|
+
driver: sharedDriverHandle(driver, closeRef),
|
|
101
|
+
table: sql.environmentsTable,
|
|
102
|
+
closeDriver: true,
|
|
103
|
+
}),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
throw new Error(`Versioned store not yet available for "${config.store}". Currently supported: memory, sqlserver, postgres, mysql, sqlite, supabase.`);
|
|
53
107
|
}
|
|
54
108
|
//# sourceMappingURL=resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/stores/resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/stores/resolver.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mythik-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Command-line and programmatic tooling for validating, linting, pushing, patching, and versioning Mythik specs.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"@inquirer/prompts": "^7.0.0",
|
|
47
47
|
"@toon-format/toon": "^2.1.0",
|
|
48
48
|
"commander": "^13.0.0",
|
|
49
|
-
"mythik": "0.1.
|
|
49
|
+
"mythik": "0.1.3"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@types/node": "^25.5.2"
|