@superfunctions/cli 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 (54) hide show
  1. package/README.md +248 -0
  2. package/dist/cli.d.ts +6 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +114 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/generate.d.ts +5 -0
  7. package/dist/commands/generate.d.ts.map +1 -0
  8. package/dist/commands/generate.js +233 -0
  9. package/dist/commands/generate.js.map +1 -0
  10. package/dist/commands/status.d.ts +5 -0
  11. package/dist/commands/status.d.ts.map +1 -0
  12. package/dist/commands/status.js +148 -0
  13. package/dist/commands/status.js.map +1 -0
  14. package/dist/index.d.ts +39 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +9 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/types/library-schema.d.ts +24 -0
  19. package/dist/types/library-schema.d.ts.map +1 -0
  20. package/dist/types/library-schema.js +2 -0
  21. package/dist/types/library-schema.js.map +1 -0
  22. package/dist/utils/adapter-helper.d.ts +21 -0
  23. package/dist/utils/adapter-helper.d.ts.map +1 -0
  24. package/dist/utils/adapter-helper.js +217 -0
  25. package/dist/utils/adapter-helper.js.map +1 -0
  26. package/dist/utils/config.d.ts +4 -0
  27. package/dist/utils/config.d.ts.map +1 -0
  28. package/dist/utils/config.js +31 -0
  29. package/dist/utils/config.js.map +1 -0
  30. package/dist/utils/discover-configs.d.ts +11 -0
  31. package/dist/utils/discover-configs.d.ts.map +1 -0
  32. package/dist/utils/discover-configs.js +76 -0
  33. package/dist/utils/discover-configs.js.map +1 -0
  34. package/dist/utils/generators.d.ts +31 -0
  35. package/dist/utils/generators.d.ts.map +1 -0
  36. package/dist/utils/generators.js +302 -0
  37. package/dist/utils/generators.js.map +1 -0
  38. package/dist/utils/introspection.d.ts +55 -0
  39. package/dist/utils/introspection.d.ts.map +1 -0
  40. package/dist/utils/introspection.js +263 -0
  41. package/dist/utils/introspection.js.map +1 -0
  42. package/dist/utils/libraries.d.ts +7 -0
  43. package/dist/utils/libraries.d.ts.map +1 -0
  44. package/dist/utils/libraries.js +28 -0
  45. package/dist/utils/libraries.js.map +1 -0
  46. package/dist/utils/load-library-config.d.ts +6 -0
  47. package/dist/utils/load-library-config.d.ts.map +1 -0
  48. package/dist/utils/load-library-config.js +34 -0
  49. package/dist/utils/load-library-config.js.map +1 -0
  50. package/dist/utils/schema-diff.d.ts +48 -0
  51. package/dist/utils/schema-diff.d.ts.map +1 -0
  52. package/dist/utils/schema-diff.js +105 -0
  53. package/dist/utils/schema-diff.js.map +1 -0
  54. package/package.json +54 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"introspection.js","sourceRoot":"","sources":["../../src/utils/introspection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface DetectedLibrary {
2
+ name: string;
3
+ packagePath: string;
4
+ version?: string;
5
+ }
6
+ export declare function detectInstalledLibraries(rootDir?: string): DetectedLibrary[];
7
+ //# sourceMappingURL=libraries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libraries.d.ts","sourceRoot":"","sources":["../../src/utils/libraries.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,MAAsB,GAAG,eAAe,EAAE,CAsB3F"}
@@ -0,0 +1,28 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ export function detectInstalledLibraries(rootDir = process.cwd()) {
4
+ const nodeModules = path.join(rootDir, 'node_modules', '@superfunctions');
5
+ if (!fs.existsSync(nodeModules))
6
+ return [];
7
+ const names = fs.readdirSync(nodeModules).filter((n) => !['db', 'cli'].includes(n));
8
+ const results = [];
9
+ for (const n of names) {
10
+ const pkgDir = path.join(nodeModules, n);
11
+ const pkgJson = path.join(pkgDir, 'package.json');
12
+ if (fs.existsSync(pkgJson)) {
13
+ try {
14
+ const pkg = JSON.parse(fs.readFileSync(pkgJson, 'utf-8'));
15
+ results.push({
16
+ name: `@superfunctions/${n}`,
17
+ packagePath: pkgDir,
18
+ version: pkg.version
19
+ });
20
+ }
21
+ catch {
22
+ results.push({ name: `@superfunctions/${n}`, packagePath: pkgDir });
23
+ }
24
+ }
25
+ }
26
+ return results;
27
+ }
28
+ //# sourceMappingURL=libraries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libraries.js","sourceRoot":"","sources":["../../src/utils/libraries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,MAAM,UAAU,wBAAwB,CAAC,UAAkB,OAAO,CAAC,GAAG,EAAE;IACtE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC;IAC1E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAClD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,mBAAmB,CAAC,EAAE;oBAC5B,WAAW,EAAE,MAAM;oBACnB,OAAO,EAAE,GAAG,CAAC,OAAO;iBACrB,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Load library config file
3
+ * Handles TS/JS/MJS with proper runtime compilation
4
+ */
5
+ export declare function loadLibraryConfig(configPath: string): Promise<any>;
6
+ //# sourceMappingURL=load-library-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-library-config.d.ts","sourceRoot":"","sources":["../../src/utils/load-library-config.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,GAAG,CAAC,CA8Bd"}
@@ -0,0 +1,34 @@
1
+ import path from 'node:path';
2
+ import { pathToFileURL } from 'node:url';
3
+ /**
4
+ * Load library config file
5
+ * Handles TS/JS/MJS with proper runtime compilation
6
+ */
7
+ export async function loadLibraryConfig(configPath) {
8
+ const ext = path.extname(configPath);
9
+ if (ext === '.ts') {
10
+ // Use jiti for TypeScript (like better-auth does)
11
+ const jiti = await import('jiti').then(m => m.default || m);
12
+ const loader = jiti(process.cwd(), {
13
+ interopDefault: true,
14
+ extensions: ['.ts', '.js', '.mjs'],
15
+ });
16
+ const loaded = loader(configPath);
17
+ // jiti with interopDefault wraps named exports in a default object
18
+ // So for "export const config = {...}", loaded.default = { config: {...} }
19
+ // and loaded.config = {...}
20
+ // Prefer loaded.config over loaded.default to avoid getting wrapped object
21
+ if (loaded.config !== undefined) {
22
+ return loaded.config;
23
+ }
24
+ if (loaded.default !== undefined) {
25
+ return loaded.default;
26
+ }
27
+ return loaded;
28
+ }
29
+ // JS/MJS - use dynamic import
30
+ const fileUrl = pathToFileURL(configPath).href;
31
+ const loaded = await import(fileUrl);
32
+ return loaded.default || loaded.config || loaded;
33
+ }
34
+ //# sourceMappingURL=load-library-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-library-config.js","sourceRoot":"","sources":["../../src/utils/load-library-config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAkB;IAElB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAErC,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,kDAAkD;QAClD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE;YACjC,cAAc,EAAE,IAAI;YACpB,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;SACnC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAElC,mEAAmE;QACnE,2EAA2E;QAC3E,4BAA4B;QAC5B,2EAA2E;QAC3E,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,8BAA8B;IAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC;AACnD,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { TableSchema } from '@superfunctions/db';
2
+ import type { DatabaseTable } from './introspection.js';
3
+ export interface SchemaDiff {
4
+ missing: string[];
5
+ extra: string[];
6
+ mismatched: Array<{
7
+ table: string;
8
+ reason: string;
9
+ }>;
10
+ }
11
+ export interface LibrarySchemaRequirement {
12
+ namespace: string;
13
+ version: number;
14
+ tables: TableSchema[];
15
+ }
16
+ export interface TableDiff {
17
+ tableName: string;
18
+ action: 'create' | 'alter' | 'drop';
19
+ missingColumns?: string[];
20
+ extraColumns?: string[];
21
+ columnChanges?: Array<{
22
+ column: string;
23
+ change: string;
24
+ }>;
25
+ }
26
+ export interface MigrationPlan {
27
+ namespace: string;
28
+ fromVersion: number;
29
+ toVersion: number;
30
+ changes: TableDiff[];
31
+ }
32
+ /**
33
+ * Compare required schemas against current state
34
+ */
35
+ export declare function diffSchemas(required: LibrarySchemaRequirement[], currentVersions: Record<string, number>): Record<string, {
36
+ required: number;
37
+ current: number;
38
+ status: 'outdated' | 'up-to-date' | 'not-installed';
39
+ }>;
40
+ /**
41
+ * Compare required table schemas against current database tables
42
+ */
43
+ export declare function diffTables(required: TableSchema[], current: DatabaseTable[]): TableDiff[];
44
+ /**
45
+ * Create migration plan from schema diff
46
+ */
47
+ export declare function createMigrationPlan(namespace: string, fromVersion: number, toVersion: number, tableDiffs: TableDiff[]): MigrationPlan;
48
+ //# sourceMappingURL=schema-diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-diff.d.ts","sourceRoot":"","sources":["../../src/utils/schema-diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,KAAK,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,wBAAwB,EAAE,EACpC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,eAAe,CAAA;CAAE,CAAC,CAa5G;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,aAAa,EAAE,GACvB,SAAS,EAAE,CAqFb;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,SAAS,EAAE,GACtB,aAAa,CAOf"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Compare required schemas against current state
3
+ */
4
+ export function diffSchemas(required, currentVersions) {
5
+ const result = {};
6
+ for (const req of required) {
7
+ const current = currentVersions[req.namespace] ?? 0;
8
+ result[req.namespace] = {
9
+ required: req.version,
10
+ current,
11
+ status: current === 0 ? 'not-installed' : current < req.version ? 'outdated' : 'up-to-date',
12
+ };
13
+ }
14
+ return result;
15
+ }
16
+ /**
17
+ * Compare required table schemas against current database tables
18
+ */
19
+ export function diffTables(required, current) {
20
+ const diffs = [];
21
+ const currentMap = new Map(current.map((t) => [t.name, t]));
22
+ const requiredMap = new Map(required.map((t) => [t.modelName, t]));
23
+ // Check for missing tables (need to create)
24
+ for (const reqTable of required) {
25
+ if (!currentMap.has(reqTable.modelName)) {
26
+ diffs.push({
27
+ tableName: reqTable.modelName,
28
+ action: 'create',
29
+ });
30
+ }
31
+ }
32
+ // Check for extra tables (might want to drop)
33
+ for (const curTable of current) {
34
+ if (!requiredMap.has(curTable.name)) {
35
+ diffs.push({
36
+ tableName: curTable.name,
37
+ action: 'drop',
38
+ });
39
+ }
40
+ }
41
+ // Check for schema mismatches (need to alter)
42
+ for (const reqTable of required) {
43
+ const curTable = currentMap.get(reqTable.modelName);
44
+ if (!curTable)
45
+ continue;
46
+ const missingColumns = [];
47
+ const extraColumns = [];
48
+ const columnChanges = [];
49
+ const curColMap = new Map(curTable.columns.map((c) => [c.columnName, c]));
50
+ const reqFieldMap = reqTable.fields;
51
+ // Check for missing columns
52
+ for (const [fieldName, fieldSchema] of Object.entries(reqFieldMap)) {
53
+ const colName = fieldSchema.fieldName ?? fieldName;
54
+ if (!curColMap.has(colName)) {
55
+ missingColumns.push(colName);
56
+ }
57
+ else {
58
+ // Check for type/constraint changes
59
+ const curCol = curColMap.get(colName);
60
+ const changes = [];
61
+ if (fieldSchema.required && curCol.isNullable) {
62
+ changes.push('changed to NOT NULL');
63
+ }
64
+ if (!fieldSchema.required && !curCol.isNullable) {
65
+ changes.push('changed to NULLABLE');
66
+ }
67
+ if (changes.length > 0) {
68
+ columnChanges.push({
69
+ column: colName,
70
+ change: changes.join(', '),
71
+ });
72
+ }
73
+ }
74
+ }
75
+ // Check for extra columns
76
+ for (const curCol of curTable.columns) {
77
+ const found = Object.entries(reqFieldMap).some(([fieldName, fieldSchema]) => (fieldSchema.fieldName ?? fieldName) === curCol.columnName);
78
+ if (!found) {
79
+ extraColumns.push(curCol.columnName);
80
+ }
81
+ }
82
+ if (missingColumns.length > 0 || extraColumns.length > 0 || columnChanges.length > 0) {
83
+ diffs.push({
84
+ tableName: reqTable.modelName,
85
+ action: 'alter',
86
+ missingColumns,
87
+ extraColumns,
88
+ columnChanges,
89
+ });
90
+ }
91
+ }
92
+ return diffs;
93
+ }
94
+ /**
95
+ * Create migration plan from schema diff
96
+ */
97
+ export function createMigrationPlan(namespace, fromVersion, toVersion, tableDiffs) {
98
+ return {
99
+ namespace,
100
+ fromVersion,
101
+ toVersion,
102
+ changes: tableDiffs,
103
+ };
104
+ }
105
+ //# sourceMappingURL=schema-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-diff.js","sourceRoot":"","sources":["../../src/utils/schema-diff.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@superfunctions/cli",
3
+ "version": "0.1.0",
4
+ "description": "CLI tool for schema management and migrations for Superfunctions libraries",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "superfunctions": "./dist/cli.js"
10
+ },
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "test": "vitest",
17
+ "test:watch": "vitest --watch",
18
+ "lint": "echo 'lint not configured'",
19
+ "typecheck": "tsc --noEmit",
20
+ "clean": "rm -rf dist"
21
+ },
22
+ "dependencies": {
23
+ "@superfunctions/db": "*",
24
+ "commander": "^12.0.0",
25
+ "chalk": "^5.3.0",
26
+ "glob": "^10.3.10",
27
+ "jiti": "^2.0.0"
28
+ },
29
+ "devDependencies": {
30
+ "typescript": "^5.6.0",
31
+ "vitest": "^3.2.4",
32
+ "@types/node": "^22.0.0"
33
+ },
34
+ "keywords": [
35
+ "cli",
36
+ "migration",
37
+ "schema",
38
+ "database",
39
+ "superfunctions"
40
+ ],
41
+ "author": "21n",
42
+ "license": "MIT",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/21nCo/super-functions.git",
46
+ "directory": "packages/cli"
47
+ },
48
+ "bugs": {
49
+ "url": "https://github.com/21nCo/super-functions/issues"
50
+ },
51
+ "publishConfig": {
52
+ "access": "public"
53
+ }
54
+ }