@seedprotocol/sdk 0.3.26 → 0.3.28

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/dist/bin.js CHANGED
@@ -11,8 +11,17 @@ import './src/helpers/FileManager/BaseFileManager.js';
11
11
  import './src/node/helpers/ArweaveClient.js';
12
12
  import { INIT_SCRIPT_SUCCESS_MESSAGE } from './src/helpers/constants.js';
13
13
  import { PathResolver } from './src/node/PathResolver.js';
14
+ import { createDrizzleSchemaFilesFromConfig } from './src/node/codegen/drizzle.js';
14
15
  import { rimrafSync } from 'rimraf';
15
16
  import { getTsImport } from './src/node/helpers/index.js';
17
+ import { seeds } from './src/seedSchema/SeedSchema.js';
18
+ import { versions } from './src/seedSchema/VersionSchema.js';
19
+ import { metadata } from './src/seedSchema/MetadataSchema.js';
20
+ import { appState } from './src/seedSchema/AppStateSchema.js';
21
+ import { models } from './src/seedSchema/ModelSchema.js';
22
+ import { modelUids } from './src/seedSchema/ModelUidSchema.js';
23
+ import './src/seedSchema/PropertyUidSchema.js';
24
+ import { config } from './src/seedSchema/ConfigSchema.js';
16
25
  import { commandExists } from './src/helpers/scripts.js';
17
26
 
18
27
  const __filename = fileURLToPath(import.meta.url);
@@ -83,36 +92,33 @@ const seedDatabase = async (seedDataPath, dotSeedDir) => {
83
92
  }
84
93
  const sqlite = new Database(dbPath);
85
94
  const db = drizzle(sqlite);
86
- // Import the generated schema files
87
- const schemaPath = path.join(actualDotSeedDir, 'schema');
88
- const { appState: generatedAppState, config: generatedConfig, metadata: generatedMetadata, models: generatedModels, modelUids: generatedModelUids, seeds: generatedSeeds, versions: generatedVersions } = await import(schemaPath + '/index.ts');
89
95
  // Seed each table based on the provided data
90
96
  if (seedData.appState && seedData.appState.length > 0) {
91
- await db.insert(generatedAppState).values(seedData.appState);
97
+ await db.insert(appState).values(seedData.appState);
92
98
  console.log('Seeded appState table');
93
99
  }
94
100
  if (seedData.config && seedData.config.length > 0) {
95
- await db.insert(generatedConfig).values(seedData.config);
101
+ await db.insert(config).values(seedData.config);
96
102
  console.log('Seeded config table');
97
103
  }
98
104
  if (seedData.models && seedData.models.length > 0) {
99
- await db.insert(generatedModels).values(seedData.models);
105
+ await db.insert(models).values(seedData.models);
100
106
  console.log('Seeded models table');
101
107
  }
102
108
  if (seedData.modelUids && seedData.modelUids.length > 0) {
103
- await db.insert(generatedModelUids).values(seedData.modelUids);
109
+ await db.insert(modelUids).values(seedData.modelUids);
104
110
  console.log('Seeded modelUids table');
105
111
  }
106
112
  if (seedData.metadata && seedData.metadata.length > 0) {
107
- await db.insert(generatedMetadata).values(seedData.metadata);
113
+ await db.insert(metadata).values(seedData.metadata);
108
114
  console.log('Seeded metadata table');
109
115
  }
110
116
  if (seedData.seeds && seedData.seeds.length > 0) {
111
- await db.insert(generatedSeeds).values(seedData.seeds);
117
+ await db.insert(seeds).values(seedData.seeds);
112
118
  console.log('Seeded seeds table');
113
119
  }
114
120
  if (seedData.versions && seedData.versions.length > 0) {
115
- await db.insert(generatedVersions).values(seedData.versions);
121
+ await db.insert(versions).values(seedData.versions);
116
122
  console.log('Seeded versions table');
117
123
  }
118
124
  console.log('[Seed Protocol] Successfully seeded database');
@@ -162,16 +168,45 @@ const init = (args) => {
162
168
  }
163
169
  // Remove dotSeedDir to start fresh each time
164
170
  if (fs.existsSync(dotSeedDir)) {
171
+ fs.rmSync(dotSeedDir, { recursive: true, force: true });
172
+ }
173
+ console.log('[Seed Protocol] dotSeedDir', dotSeedDir);
174
+ const drizzleKitCommand = `npx --yes tsx ${drizzleKitPath}`;
175
+ const ensureIndexExports = (dirPath) => {
165
176
  try {
166
- fs.rmSync(dotSeedDir, { recursive: true, force: true });
177
+ // Get all file names in the directory
178
+ const files = fs.readdirSync(dirPath);
179
+ // Filter for .ts files excluding index.ts
180
+ const tsFiles = files.filter((file) => file.endsWith('.ts') && file !== 'index.ts');
181
+ // Check if index.ts exists
182
+ const indexFilePath = path.join(dirPath, 'index.ts');
183
+ try {
184
+ fs.accessSync(indexFilePath);
185
+ }
186
+ catch (error) {
187
+ console.error(`index.ts not found in the directory: ${dirPath}`);
188
+ return;
189
+ }
190
+ // Read the content of index.ts
191
+ const indexContent = fs.readFileSync(indexFilePath, 'utf8');
192
+ // Create export statements for each .ts file
193
+ const exportStatements = tsFiles.map((file) => `export * from './${path.basename(file, '.ts')}';`);
194
+ // Check if each export statement is already present in index.ts
195
+ const missingExports = exportStatements.filter((statement) => !indexContent.includes(statement));
196
+ if (missingExports.length > 0) {
197
+ // Append missing export statements to index.ts
198
+ const newContent = indexContent + '\n' + missingExports.join('\n') + '\n';
199
+ fs.writeFileSync(indexFilePath, newContent, 'utf8');
200
+ console.log(`Updated index.ts with missing exports:\n${missingExports.join('\n')}`);
201
+ }
202
+ else {
203
+ console.log('All exports are already present in index.ts');
204
+ }
167
205
  }
168
206
  catch (error) {
169
- // If rmSync fails, try using rimraf as fallback
170
- rimrafSync(dotSeedDir);
207
+ console.error(`Error processing directory: ${dirPath}`, error);
171
208
  }
172
- }
173
- console.log('[Seed Protocol] dotSeedDir', dotSeedDir);
174
- const drizzleKitCommand = `npx --yes tsx ${drizzleKitPath}`;
209
+ };
175
210
  const copyDotSeedFilesToAppFiles = async (_appFilesDirPath) => {
176
211
  console.log('[Seed Protocol] Copying dot seed files to app files');
177
212
  const { endpoints } = await getTsImport(configFilePath);
@@ -190,42 +225,23 @@ const init = (args) => {
190
225
  rimrafSync(`${outputDirPath}/**/index.ts`, { glob: true });
191
226
  };
192
227
  const updateSchema = async (pathToConfig, pathToMeta) => {
193
- try {
194
- // Create a project-specific Drizzle Kit configuration
195
- const projectConfigPath = path.join(dotSeedDir, 'drizzle.config.ts');
196
- const projectConfig = `import { defineConfig } from 'drizzle-kit'
197
-
198
- export default defineConfig({
199
- schema: '${path.join(dotSeedDir, 'schema')}',
200
- dialect: 'sqlite',
201
- out: '${path.join(dotSeedDir, 'db')}',
202
- dbCredentials: {
203
- url: '${path.join(dotSeedDir, 'db', 'app_db.sqlite3')}',
204
- },
205
- })`;
206
- fs.writeFileSync(projectConfigPath, projectConfig);
207
- if (!fs.existsSync(pathToMeta)) {
208
- console.log(`${drizzleKitCommand} generate --config=${projectConfigPath}`);
209
- execSync(`${drizzleKitCommand} generate --config=${projectConfigPath}`, { stdio: 'inherit' });
210
- }
211
- console.log(`${drizzleKitCommand} migrate --config=${projectConfigPath}`);
212
- execSync(`${drizzleKitCommand} migrate --config=${projectConfigPath}`, { stdio: 'inherit' });
213
- }
214
- catch (error) {
215
- console.error('[Seed Protocol] Error running Drizzle Kit commands:', error);
216
- throw error;
228
+ if (!fs.existsSync(pathToMeta)) {
229
+ console.log(`${drizzleKitCommand} generate --config=${pathToConfig}`);
230
+ execSync(`${drizzleKitCommand} generate --config=${pathToConfig}`);
217
231
  }
232
+ execSync(`${drizzleKitCommand} migrate --config=${pathToConfig}`);
218
233
  };
219
234
  const runCommands = async () => {
220
235
  const tsxExists = commandExists('tsx');
221
236
  if (!tsxExists) {
222
237
  execSync(`npm install -g tsx`, { stdio: 'inherit' });
223
238
  }
239
+ await createDrizzleSchemaFilesFromConfig(configFilePath, appSchemaDir);
240
+ ensureIndexExports(appSchemaDir);
224
241
  await updateSchema(drizzleDbConfigPath, appMetaDir);
225
242
  const seedDataFilePath = path.join(__dirname, 'seedData.json');
226
243
  await seedDatabase(seedDataFilePath, dotSeedDir);
227
244
  };
228
- // Copy the schema files from src/seedSchema to .seed/schema
229
245
  copyDirectoryRecursively(path.join(pathResolver.getSdkRootDir(), 'src', 'seedSchema'), path.join(dotSeedDir, 'schema'));
230
246
  // copyDirectoryRecursively(
231
247
  // path.join(pathResolver.getSdkRootDir(), 'node', 'codegen'),
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sources":["../../scripts/bin.ts"],"sourcesContent":["#!/usr/bin/env node\nimport path from 'path'\nimport fs from 'fs'\nimport { execSync, } from 'child_process'\nimport { fileURLToPath, pathToFileURL } from 'url'\nimport process from 'node:process'\nimport '@/node/helpers/EasClient'\nimport '@/node/helpers/QueryClient'\nimport '@/node/helpers/FileManager'\nimport '@/node/helpers/ArweaveClient'\nimport { INIT_SCRIPT_SUCCESS_MESSAGE, SCHEMA_TS } from '@/helpers/constants'\nimport { PathResolver } from '@/node/PathResolver'\n\nimport { rimrafSync } from 'rimraf'\nimport { getTsImport } from '@/node/helpers'\nimport { ModelClassType } from '@/types/model'\nimport { appState, config, metadata, models, modelUids, seeds, versions } from '@/seedSchema'\nimport { commandExists } from '@/helpers/scripts'\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = path.dirname(__filename)\n\nlet a\n\na = process.argv.splice(2)\nconst pathResolver = PathResolver.getInstance()\n\n/**\n * Copy a directory and all its contents recursively\n * @param {string} sourceDir - Path to the source directory\n * @param {string} targetDir - Path to the target directory\n */\nfunction copyDirectoryRecursively(sourceDir: string, targetDir: string) {\n // Create the target directory if it doesn't exist\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true });\n }\n\n // Read all entries in the source directory\n const entries = fs.readdirSync(sourceDir);\n\n // Process each entry\n for (const entry of entries) {\n // Skip __tests__ directories to prevent recursive copying\n if (entry === '__tests__') {\n console.log(`Skipping __tests__ directory: ${path.join(sourceDir, entry)}`);\n continue;\n }\n\n const sourcePath = path.join(sourceDir, entry);\n const targetPath = path.join(targetDir, entry);\n \n // Check if the entry is a file or directory\n const stats = fs.statSync(sourcePath);\n \n if (stats.isFile()) {\n // Copy the file directly\n fs.copyFileSync(sourcePath, targetPath);\n console.log(`Copied file: ${sourcePath} → ${targetPath}`);\n } \n else if (stats.isDirectory()) {\n // Recursively copy the subdirectory\n copyDirectoryRecursively(sourcePath, targetPath);\n }\n }\n}\n\nconst seedDatabase = async (seedDataPath: string, dotSeedDir?: string) => {\n console.log('[Seed Protocol] Running seed script')\n\n try {\n // Import better-sqlite3 dynamically to handle optional dependency\n let drizzle: any\n let Database: any\n \n try {\n const drizzleModule = await import('drizzle-orm/better-sqlite3')\n const betterSqlite3Module = await import('better-sqlite3')\n drizzle = drizzleModule.drizzle\n Database = betterSqlite3Module.default\n } catch (importError) {\n console.error('[Seed Protocol] Error: better-sqlite3 is required for seeding the database.')\n console.error('[Seed Protocol] Please install better-sqlite3: npm install better-sqlite3')\n process.exit(1)\n }\n \n // Read the seed data file\n const seedData = JSON.parse(fs.readFileSync(seedDataPath, 'utf-8'))\n \n // Connect to the database\n const actualDotSeedDir = dotSeedDir || pathResolver.getDotSeedDir()\n const dbDir = path.join(actualDotSeedDir, 'db')\n const dbPath = path.join(dbDir, 'app_db.sqlite3')\n \n // Ensure the database directory exists\n if (!fs.existsSync(dbDir)) {\n fs.mkdirSync(dbDir, { recursive: true })\n }\n \n const sqlite = new Database(dbPath)\n const db = drizzle(sqlite)\n \n // Import the generated schema files\n const schemaPath = path.join(actualDotSeedDir, 'schema')\n const { appState: generatedAppState, config: generatedConfig, metadata: generatedMetadata, models: generatedModels, modelUids: generatedModelUids, seeds: generatedSeeds, versions: generatedVersions } = await import(schemaPath + '/index.ts')\n \n // Seed each table based on the provided data\n if (seedData.appState && seedData.appState.length > 0) {\n await db.insert(generatedAppState).values(seedData.appState)\n console.log('Seeded appState table')\n }\n \n if (seedData.config && seedData.config.length > 0) {\n await db.insert(generatedConfig).values(seedData.config)\n console.log('Seeded config table')\n }\n \n if (seedData.models && seedData.models.length > 0) {\n await db.insert(generatedModels).values(seedData.models)\n console.log('Seeded models table')\n }\n \n if (seedData.modelUids && seedData.modelUids.length > 0) {\n await db.insert(generatedModelUids).values(seedData.modelUids)\n console.log('Seeded modelUids table')\n }\n \n if (seedData.metadata && seedData.metadata.length > 0) {\n await db.insert(generatedMetadata).values(seedData.metadata)\n console.log('Seeded metadata table')\n }\n \n if (seedData.seeds && seedData.seeds.length > 0) {\n await db.insert(generatedSeeds).values(seedData.seeds)\n console.log('Seeded seeds table')\n }\n \n if (seedData.versions && seedData.versions.length > 0) {\n await db.insert(generatedVersions).values(seedData.versions)\n console.log('Seeded versions table')\n }\n \n console.log('[Seed Protocol] Successfully seeded database')\n } catch (error) {\n console.error('[Seed Protocol] Error seeding database:', error)\n process.exit(1)\n }\n}\n\nconst init = (args: string[],) => {\n console.log('args:', args)\n\n if (args && args.length) {\n if (args[0] === 'init') {\n console.log('[Seed Protocol] Running init script')\n\n let appFilesDirPath = args[2] || undefined\n let schemaFileDir = args[1]\n\n if (schemaFileDir && schemaFileDir.startsWith('.')) {\n const relativePath = schemaFileDir.replace('./', '')\n if (!process.cwd().includes(relativePath)) {\n schemaFileDir = path.resolve(schemaFileDir,)\n }\n if (process.cwd().includes(relativePath)) {\n schemaFileDir = process.cwd()\n }\n }\n\n if (!schemaFileDir && !process.cwd().includes('seed-protocol-sdk')) {\n schemaFileDir = process.cwd()\n }\n\n console.log('[Seed Protocol] schemaFileDir', schemaFileDir)\n\n if (!schemaFileDir) {\n // Use the new config file finding logic\n const foundConfigFile = pathResolver.findConfigFile()\n if (foundConfigFile) {\n schemaFileDir = path.dirname(foundConfigFile)\n } else {\n console.error('No config file found. Please create a seed.config.ts, seed.schema.ts, or schema.ts file in your project root.')\n return\n }\n }\n\n const {\n dotSeedDir,\n appSchemaDir,\n appMetaDir,\n drizzleDbConfigPath,\n drizzleKitPath,\n sdkRootDir,\n } = pathResolver.getAppPaths(schemaFileDir)\n\n // Find the actual config file in the schema file directory\n const configFilePath = pathResolver.findConfigFile(schemaFileDir)\n if (!configFilePath) {\n console.error('Config file not found in the specified directory.')\n return\n }\n\n // Remove dotSeedDir to start fresh each time\n if (fs.existsSync(dotSeedDir)) {\n try {\n fs.rmSync(dotSeedDir, { recursive: true, force: true })\n } catch (error) {\n // If rmSync fails, try using rimraf as fallback\n rimrafSync(dotSeedDir)\n }\n }\n\n console.log('[Seed Protocol] dotSeedDir', dotSeedDir)\n\n const tsconfigArg = `--tsconfig ${sdkRootDir}/tsconfig.json`\n\n const drizzleKitCommand = `npx --yes tsx ${drizzleKitPath}`\n\n\n\n const copyDotSeedFilesToAppFiles = async (_appFilesDirPath: string) => {\n console.log('[Seed Protocol] Copying dot seed files to app files')\n const { endpoints } = await getTsImport<{\n models: Record<string, ModelClassType>,\n endpoints: Record<string, string>\n }>(configFilePath)\n\n const outputDirPath = endpoints.localOutputDir || _appFilesDirPath\n\n const exists = await fs.promises.access(outputDirPath).then(() => true).catch(() => false)\n if (exists) {\n await fs.promises.rm(outputDirPath, { recursive: true, force: true })\n }\n \n console.log(`[Seed Protocol] making dir at ${outputDirPath}`)\n fs.mkdirSync(outputDirPath, { recursive: true })\n console.log('[Seed Protocol] copying app files')\n \n // Use copyDirectoryRecursively instead of fs.cpSync to exclude __tests__ directories\n copyDirectoryRecursively(dotSeedDir, outputDirPath)\n \n console.log('[Seed Protocol] removing sqlite3 files and index.ts files')\n rimrafSync(`${outputDirPath}/**/*.sqlite3`, { glob: true })\n rimrafSync(`${outputDirPath}/**/index.ts`, { glob: true })\n }\n\n const updateSchema = async (pathToConfig: string, pathToMeta: string) => {\n try {\n // Create a project-specific Drizzle Kit configuration\n const projectConfigPath = path.join(dotSeedDir, 'drizzle.config.ts')\n const projectConfig = `import { defineConfig } from 'drizzle-kit'\n\nexport default defineConfig({\n schema: '${path.join(dotSeedDir, 'schema')}',\n dialect: 'sqlite',\n out: '${path.join(dotSeedDir, 'db')}',\n dbCredentials: {\n url: '${path.join(dotSeedDir, 'db', 'app_db.sqlite3')}',\n },\n})`\n \n fs.writeFileSync(projectConfigPath, projectConfig)\n \n if (!fs.existsSync(pathToMeta)) {\n console.log(`${drizzleKitCommand} generate --config=${projectConfigPath}`)\n execSync(\n `${drizzleKitCommand} generate --config=${projectConfigPath}`,\n { stdio: 'inherit' }\n )\n }\n console.log(`${drizzleKitCommand} migrate --config=${projectConfigPath}`)\n execSync(`${drizzleKitCommand} migrate --config=${projectConfigPath}`, { stdio: 'inherit' })\n } catch (error) {\n console.error('[Seed Protocol] Error running Drizzle Kit commands:', error)\n throw error\n }\n }\n\n const runCommands = async () => {\n const tsxExists = commandExists('tsx')\n if (!tsxExists) {\n execSync(`npm install -g tsx`, {stdio: 'inherit'})\n }\n\n await updateSchema(drizzleDbConfigPath, appMetaDir!)\n const seedDataFilePath = path.join(__dirname, 'seedData.json')\n await seedDatabase(seedDataFilePath, dotSeedDir)\n }\n\n // Copy the schema files from src/seedSchema to .seed/schema\n copyDirectoryRecursively(\n path.join(pathResolver.getSdkRootDir(), 'src', 'seedSchema'),\n path.join(dotSeedDir, 'schema'),\n )\n\n // copyDirectoryRecursively(\n // path.join(pathResolver.getSdkRootDir(), 'node', 'codegen'),\n // path.join(dotSeedDir, 'codegen'),\n // )\n\n console.log('copying', configFilePath, path.join(dotSeedDir, 'seed.config.ts'))\n\n fs.copyFileSync(configFilePath, path.join(dotSeedDir, 'seed.config.ts'))\n\n runCommands()\n .then(() => {\n if (!appFilesDirPath) {\n console.log('[Seed Protocol] Finished running init script')\n } else {\n return copyDotSeedFilesToAppFiles(appFilesDirPath)\n }\n })\n .then(() => {\n console.log(INIT_SCRIPT_SUCCESS_MESSAGE)\n })\n } else if (args[0] === 'seed' && args[1]) {\n seedDatabase(args[1])\n } else {\n console.log('Unknown command. Available commands:')\n console.log('init [schemaPath] [appFilesPath] - Initialize the database')\n console.log('seed [seedDataPath] - Seed the database with data from JSON file')\n }\n }\n}\n\nconst calledFrom = pathToFileURL(process.argv[1]).href\n\nconsole.log('calledFrom', calledFrom)\n\nif (\n calledFrom.endsWith('node_modules/.bin/seed') ||\n import.meta.url.endsWith('@seedprotocol/sdk/node/bin.js') ||\n import.meta.url.endsWith('scripts/bin.ts') ||\n import.meta.url.endsWith('dist/bin.js')\n) {\n // module was not imported but called directly\n init(a)\n}\n\nexport { init }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bin.js","sources":["../../scripts/bin.ts"],"sourcesContent":["#!/usr/bin/env node\nimport path from 'path'\nimport fs from 'fs'\nimport { execSync, } from 'child_process'\nimport { fileURLToPath, pathToFileURL } from 'url'\nimport process from 'node:process'\nimport '@/node/helpers/EasClient'\nimport '@/node/helpers/QueryClient'\nimport '@/node/helpers/FileManager'\nimport '@/node/helpers/ArweaveClient'\nimport { INIT_SCRIPT_SUCCESS_MESSAGE, SCHEMA_TS } from '@/helpers/constants'\nimport { PathResolver } from '@/node/PathResolver'\nimport { createDrizzleSchemaFilesFromConfig } from '@/node/codegen'\nimport { rimrafSync } from 'rimraf'\nimport { getTsImport } from '@/node/helpers'\nimport { ModelClassType } from '@/types/model'\nimport { appState, config, metadata, models, modelUids, seeds, versions } from '@/seedSchema'\nimport { commandExists } from '@/helpers/scripts'\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = path.dirname(__filename)\n\nlet a\n\na = process.argv.splice(2)\nconst pathResolver = PathResolver.getInstance()\n\n/**\n * Copy a directory and all its contents recursively\n * @param {string} sourceDir - Path to the source directory\n * @param {string} targetDir - Path to the target directory\n */\nfunction copyDirectoryRecursively(sourceDir: string, targetDir: string) {\n // Create the target directory if it doesn't exist\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true });\n }\n\n // Read all entries in the source directory\n const entries = fs.readdirSync(sourceDir);\n\n // Process each entry\n for (const entry of entries) {\n // Skip __tests__ directories to prevent recursive copying\n if (entry === '__tests__') {\n console.log(`Skipping __tests__ directory: ${path.join(sourceDir, entry)}`);\n continue;\n }\n\n const sourcePath = path.join(sourceDir, entry);\n const targetPath = path.join(targetDir, entry);\n \n // Check if the entry is a file or directory\n const stats = fs.statSync(sourcePath);\n \n if (stats.isFile()) {\n // Copy the file directly\n fs.copyFileSync(sourcePath, targetPath);\n console.log(`Copied file: ${sourcePath} → ${targetPath}`);\n } \n else if (stats.isDirectory()) {\n // Recursively copy the subdirectory\n copyDirectoryRecursively(sourcePath, targetPath);\n }\n }\n}\n\nconst seedDatabase = async (seedDataPath: string, dotSeedDir?: string) => {\n console.log('[Seed Protocol] Running seed script')\n\n try {\n // Import better-sqlite3 dynamically to handle optional dependency\n let drizzle: any\n let Database: any\n \n try {\n const drizzleModule = await import('drizzle-orm/better-sqlite3')\n const betterSqlite3Module = await import('better-sqlite3')\n drizzle = drizzleModule.drizzle\n Database = betterSqlite3Module.default\n } catch (importError) {\n console.error('[Seed Protocol] Error: better-sqlite3 is required for seeding the database.')\n console.error('[Seed Protocol] Please install better-sqlite3: npm install better-sqlite3')\n process.exit(1)\n }\n \n // Read the seed data file\n const seedData = JSON.parse(fs.readFileSync(seedDataPath, 'utf-8'))\n \n // Connect to the database\n const actualDotSeedDir = dotSeedDir || pathResolver.getDotSeedDir()\n const dbDir = path.join(actualDotSeedDir, 'db')\n const dbPath = path.join(dbDir, 'app_db.sqlite3')\n \n // Ensure the database directory exists\n if (!fs.existsSync(dbDir)) {\n fs.mkdirSync(dbDir, { recursive: true })\n }\n \n const sqlite = new Database(dbPath)\n const db = drizzle(sqlite)\n \n // Seed each table based on the provided data\n if (seedData.appState && seedData.appState.length > 0) {\n await db.insert(appState).values(seedData.appState)\n console.log('Seeded appState table')\n }\n \n if (seedData.config && seedData.config.length > 0) {\n await db.insert(config).values(seedData.config)\n console.log('Seeded config table')\n }\n \n if (seedData.models && seedData.models.length > 0) {\n await db.insert(models).values(seedData.models)\n console.log('Seeded models table')\n }\n \n if (seedData.modelUids && seedData.modelUids.length > 0) {\n await db.insert(modelUids).values(seedData.modelUids)\n console.log('Seeded modelUids table')\n }\n \n if (seedData.metadata && seedData.metadata.length > 0) {\n await db.insert(metadata).values(seedData.metadata)\n console.log('Seeded metadata table')\n }\n \n if (seedData.seeds && seedData.seeds.length > 0) {\n await db.insert(seeds).values(seedData.seeds)\n console.log('Seeded seeds table')\n }\n \n if (seedData.versions && seedData.versions.length > 0) {\n await db.insert(versions).values(seedData.versions)\n console.log('Seeded versions table')\n }\n \n console.log('[Seed Protocol] Successfully seeded database')\n } catch (error) {\n console.error('[Seed Protocol] Error seeding database:', error)\n process.exit(1)\n }\n}\n\nconst init = (args: string[],) => {\n console.log('args:', args)\n\n if (args && args.length) {\n if (args[0] === 'init') {\n console.log('[Seed Protocol] Running init script')\n\n let appFilesDirPath = args[2] || undefined\n let schemaFileDir = args[1]\n\n if (schemaFileDir && schemaFileDir.startsWith('.')) {\n const relativePath = schemaFileDir.replace('./', '')\n if (!process.cwd().includes(relativePath)) {\n schemaFileDir = path.resolve(schemaFileDir,)\n }\n if (process.cwd().includes(relativePath)) {\n schemaFileDir = process.cwd()\n }\n }\n\n if (!schemaFileDir && !process.cwd().includes('seed-protocol-sdk')) {\n schemaFileDir = process.cwd()\n }\n\n console.log('[Seed Protocol] schemaFileDir', schemaFileDir)\n\n if (!schemaFileDir) {\n // Use the new config file finding logic\n const foundConfigFile = pathResolver.findConfigFile()\n if (foundConfigFile) {\n schemaFileDir = path.dirname(foundConfigFile)\n } else {\n console.error('No config file found. Please create a seed.config.ts, seed.schema.ts, or schema.ts file in your project root.')\n return\n }\n }\n\n const {\n dotSeedDir,\n appSchemaDir,\n appMetaDir,\n drizzleDbConfigPath,\n drizzleKitPath,\n sdkRootDir,\n } = pathResolver.getAppPaths(schemaFileDir)\n\n // Find the actual config file in the schema file directory\n const configFilePath = pathResolver.findConfigFile(schemaFileDir)\n if (!configFilePath) {\n console.error('Config file not found in the specified directory.')\n return\n }\n\n // Remove dotSeedDir to start fresh each time\n if (fs.existsSync(dotSeedDir)) {\n fs.rmSync(dotSeedDir, { recursive: true, force: true })\n }\n\n console.log('[Seed Protocol] dotSeedDir', dotSeedDir)\n\n const tsconfigArg = `--tsconfig ${sdkRootDir}/tsconfig.json`\n\n const drizzleKitCommand = `npx --yes tsx ${drizzleKitPath}`\n\n const ensureIndexExports = (dirPath: string): void => {\n try {\n // Get all file names in the directory\n const files = fs.readdirSync(dirPath)\n\n // Filter for .ts files excluding index.ts\n const tsFiles = files.filter(\n (file) => file.endsWith('.ts') && file !== 'index.ts',\n )\n\n // Check if index.ts exists\n const indexFilePath = path.join(dirPath, 'index.ts')\n try {\n fs.accessSync(indexFilePath)\n } catch (error) {\n console.error(`index.ts not found in the directory: ${dirPath}`)\n return\n }\n\n // Read the content of index.ts\n const indexContent = fs.readFileSync(indexFilePath, 'utf8')\n\n // Create export statements for each .ts file\n const exportStatements = tsFiles.map(\n (file) => `export * from './${path.basename(file, '.ts')}';`,\n )\n\n // Check if each export statement is already present in index.ts\n const missingExports = exportStatements.filter(\n (statement) => !indexContent.includes(statement),\n )\n\n if (missingExports.length > 0) {\n // Append missing export statements to index.ts\n const newContent =\n indexContent + '\\n' + missingExports.join('\\n') + '\\n'\n fs.writeFileSync(indexFilePath, newContent, 'utf8')\n console.log(\n `Updated index.ts with missing exports:\\n${missingExports.join('\\n')}`,\n )\n } else {\n console.log('All exports are already present in index.ts')\n }\n } catch (error) {\n console.error(`Error processing directory: ${dirPath}`, error)\n }\n }\n\n const copyDotSeedFilesToAppFiles = async (_appFilesDirPath: string) => {\n console.log('[Seed Protocol] Copying dot seed files to app files')\n const { endpoints } = await getTsImport<{\n models: Record<string, ModelClassType>,\n endpoints: Record<string, string>\n }>(configFilePath)\n\n const outputDirPath = endpoints.localOutputDir || _appFilesDirPath\n\n const exists = await fs.promises.access(outputDirPath).then(() => true).catch(() => false)\n if (exists) {\n await fs.promises.rm(outputDirPath, { recursive: true, force: true })\n }\n \n console.log(`[Seed Protocol] making dir at ${outputDirPath}`)\n fs.mkdirSync(outputDirPath, { recursive: true })\n console.log('[Seed Protocol] copying app files')\n \n // Use copyDirectoryRecursively instead of fs.cpSync to exclude __tests__ directories\n copyDirectoryRecursively(dotSeedDir, outputDirPath)\n \n console.log('[Seed Protocol] removing sqlite3 files and index.ts files')\n rimrafSync(`${outputDirPath}/**/*.sqlite3`, { glob: true })\n rimrafSync(`${outputDirPath}/**/index.ts`, { glob: true })\n }\n\n const updateSchema = async (pathToConfig: string, pathToMeta: string) => {\n if (!fs.existsSync(pathToMeta)) {\n console.log(`${drizzleKitCommand} generate --config=${pathToConfig}`)\n execSync(\n `${drizzleKitCommand} generate --config=${pathToConfig}`,\n )\n }\n execSync(`${drizzleKitCommand} migrate --config=${pathToConfig}`)\n }\n\n const runCommands = async () => {\n const tsxExists = commandExists('tsx')\n if (!tsxExists) {\n execSync(`npm install -g tsx`, {stdio: 'inherit'})\n }\n\n await createDrizzleSchemaFilesFromConfig(configFilePath, appSchemaDir)\n ensureIndexExports(appSchemaDir!)\n await updateSchema(drizzleDbConfigPath, appMetaDir!)\n const seedDataFilePath = path.join(__dirname, 'seedData.json')\n await seedDatabase(seedDataFilePath, dotSeedDir)\n }\n\n copyDirectoryRecursively(\n path.join(pathResolver.getSdkRootDir(), 'src', 'seedSchema'),\n path.join(dotSeedDir, 'schema'),\n )\n\n // copyDirectoryRecursively(\n // path.join(pathResolver.getSdkRootDir(), 'node', 'codegen'),\n // path.join(dotSeedDir, 'codegen'),\n // )\n\n console.log('copying', configFilePath, path.join(dotSeedDir, 'seed.config.ts'))\n\n fs.copyFileSync(configFilePath, path.join(dotSeedDir, 'seed.config.ts'))\n\n runCommands()\n .then(() => {\n if (!appFilesDirPath) {\n console.log('[Seed Protocol] Finished running init script')\n } else {\n return copyDotSeedFilesToAppFiles(appFilesDirPath)\n }\n })\n .then(() => {\n console.log(INIT_SCRIPT_SUCCESS_MESSAGE)\n })\n } else if (args[0] === 'seed' && args[1]) {\n seedDatabase(args[1])\n } else {\n console.log('Unknown command. Available commands:')\n console.log('init [schemaPath] [appFilesPath] - Initialize the database')\n console.log('seed [seedDataPath] - Seed the database with data from JSON file')\n }\n }\n}\n\nconst calledFrom = pathToFileURL(process.argv[1]).href\n\nconsole.log('calledFrom', calledFrom)\n\nif (\n calledFrom.endsWith('node_modules/.bin/seed') ||\n import.meta.url.endsWith('@seedprotocol/sdk/node/bin.js') ||\n import.meta.url.endsWith('scripts/bin.ts') ||\n import.meta.url.endsWith('dist/bin.js')\n) {\n // module was not imported but called directly\n init(a)\n}\n\nexport { init }\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../scripts/bin.ts"],"names":[],"mappings":";AAMA,OAAO,0BAA0B,CAAA;AACjC,OAAO,4BAA4B,CAAA;AACnC,OAAO,4BAA4B,CAAA;AACnC,OAAO,8BAA8B,CAAA;AA4IrC,QAAA,MAAM,IAAI,SAAU,MAAM,EAAE,SA8K3B,CAAA;AAgBD,OAAO,EAAE,IAAI,EAAE,CAAA"}
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../scripts/bin.ts"],"names":[],"mappings":";AAMA,OAAO,0BAA0B,CAAA;AACjC,OAAO,4BAA4B,CAAA;AACnC,OAAO,4BAA4B,CAAA;AACnC,OAAO,8BAA8B,CAAA;AAwIrC,QAAA,MAAM,IAAI,SAAU,MAAM,EAAE,SAkM3B,CAAA;AAgBD,OAAO,EAAE,IAAI,EAAE,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { ZERO_BYTES, ZERO_BYTES32, ZERO_ADDRESS } from '@ethereum-attestation-service/eas-sdk';
2
2
 
3
+ const SCHEMA_NJK = 'schema.njk';
3
4
  // Primary config file name for Seed Protocol SDK
4
5
  const SEED_CONFIG_FILE = 'seed.config.ts';
5
6
  // Fallback config file names (in order of preference)
@@ -80,5 +81,5 @@ var ImageSize;
80
81
  const CLIENT_NOT_INITIALIZED = 'ClientManager is not initialized. Please call init() first.';
81
82
  const INIT_SCRIPT_SUCCESS_MESSAGE = '[Seed Protocol] Finished running init script';
82
83
 
83
- export { CLIENT_NOT_INITIALIZED, INIT_SCRIPT_SUCCESS_MESSAGE, INTERNAL_DATA_TYPES, INTERNAL_PROPERTY_NAMES, ImageSize, SEED_CONFIG_FALLBACKS, SEED_CONFIG_FILE, VERSION_SCHEMA_UID_OPTIMISM_SEPOLIA, defaultAttestationData };
84
+ export { CLIENT_NOT_INITIALIZED, INIT_SCRIPT_SUCCESS_MESSAGE, INTERNAL_DATA_TYPES, INTERNAL_PROPERTY_NAMES, ImageSize, SCHEMA_NJK, SEED_CONFIG_FALLBACKS, SEED_CONFIG_FILE, VERSION_SCHEMA_UID_OPTIMISM_SEPOLIA, defaultAttestationData };
84
85
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../../src/helpers/constants.ts"],"sourcesContent":["import {\n AttestationRequestData,\n ZERO_BYTES,\n ZERO_BYTES32,\n ZERO_ADDRESS,\n} from '@ethereum-attestation-service/eas-sdk'\n\n\nexport const SCHEMA_NJK = 'schema.njk'\n// Primary config file name for Seed Protocol SDK\nexport const SEED_CONFIG_FILE = 'seed.config.ts'\n// Fallback config file names (in order of preference)\nexport const SEED_CONFIG_FALLBACKS = ['seed.schema.ts', 'schema.ts']\n// Legacy constant for backward compatibility\nexport const SCHEMA_TS = SEED_CONFIG_FILE\n\nexport const INTERNAL_DATA_TYPES = {\n Text: {\n eas: 'string',\n },\n Number: {\n eas: 'uint8',\n },\n Image: {\n eas: 'string',\n },\n Relation: {\n eas: 'bytes32',\n },\n List: {\n eas: 'bytes32[]',\n },\n File: {\n eas: 'string',\n },\n Json: {\n eas: 'string',\n },\n Blob: {\n eas: 'bytes32',\n },\n}\n\nexport const INTERNAL_PROPERTY_NAMES = [\n 'localId',\n 'uid',\n 'seedLocalId',\n 'seedUid',\n 'schemaUid',\n 'attestationCreatedAt',\n 'attestationRaw',\n 'createdAt',\n 'updatedAt',\n 'lastVersionPublishedAt',\n 'latestVersionLocalId',\n 'latestVersionUid',\n 'lastLocalUpdateAt',\n 'modelName',\n 'storageTransactionId',\n 'refSeedType',\n 'refValueType',\n 'refResolvedValue',\n 'refResolvedDisplayValue',\n 'type',\n // Image\n 'src',\n 'alt',\n //\n 'versionLocalId',\n 'versionsCount',\n 'versionUid',\n '_markedForDeletion',\n]\n\nexport const VERSION_SCHEMA_UID_OPTIMISM_SEPOLIA =\n '0x13c0fd59d69dbce40501a41f8b37768d26dd2e2bb0cad64615334d84f7b9bdf6'\n\nexport const defaultAttestationData: AttestationRequestData = {\n recipient: ZERO_ADDRESS,\n revocable: true,\n value: BigInt(0),\n refUID: ZERO_BYTES32,\n expirationTime: BigInt(0),\n data: ZERO_BYTES,\n}\n\nexport enum ImageSize {\n EXTRA_SMALL = 480,\n SMALL = 760,\n MEDIUM = 1024,\n LARGE = 1440,\n EXTRA_LARGE = 1920,\n}\n\nexport const CLIENT_NOT_INITIALIZED = 'ClientManager is not initialized. Please call init() first.'\n\nexport const INIT_SCRIPT_SUCCESS_MESSAGE = '[Seed Protocol] Finished running init script'\n"],"names":[],"mappings":";;AASA;AACO,MAAM,gBAAgB,GAAG;AAChC;MACa,qBAAqB,GAAG,CAAC,gBAAgB,EAAE,WAAW;AAI5D,MAAM,mBAAmB,GAAG;AACjC,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,EAAE,OAAO;AACb,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,WAAW;AACjB,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;;AAGI,MAAM,uBAAuB,GAAG;IACrC,SAAS;IACT,KAAK;IACL,aAAa;IACb,SAAS;IACT,WAAW;IACX,sBAAsB;IACtB,gBAAgB;IAChB,WAAW;IACX,WAAW;IACX,wBAAwB;IACxB,sBAAsB;IACtB,kBAAkB;IAClB,mBAAmB;IACnB,WAAW;IACX,sBAAsB;IACtB,aAAa;IACb,cAAc;IACd,kBAAkB;IAClB,yBAAyB;IACzB,MAAM;;IAEN,KAAK;IACL,KAAK;;IAEL,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,oBAAoB;;AAGf,MAAM,mCAAmC,GAC9C;AAEK,MAAM,sBAAsB,GAA2B;AAC5D,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAChB,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;AACzB,IAAA,IAAI,EAAE,UAAU;;IAGN;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,GAAA,GAAA,CAAA,GAAA,aAAiB;AACjB,IAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,GAAA,CAAA,GAAA,OAAW;AACX,IAAA,SAAA,CAAA,SAAA,CAAA,QAAA,CAAA,GAAA,IAAA,CAAA,GAAA,QAAa;AACb,IAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,IAAA,CAAA,GAAA,OAAY;AACZ,IAAA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,GAAA,IAAA,CAAA,GAAA,aAAkB;AACpB,CAAC,EANW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;AAQd,MAAM,sBAAsB,GAAG;AAE/B,MAAM,2BAA2B,GAAG;;;;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../../src/helpers/constants.ts"],"sourcesContent":["import {\n AttestationRequestData,\n ZERO_BYTES,\n ZERO_BYTES32,\n ZERO_ADDRESS,\n} from '@ethereum-attestation-service/eas-sdk'\n\n\nexport const SCHEMA_NJK = 'schema.njk'\n// Primary config file name for Seed Protocol SDK\nexport const SEED_CONFIG_FILE = 'seed.config.ts'\n// Fallback config file names (in order of preference)\nexport const SEED_CONFIG_FALLBACKS = ['seed.schema.ts', 'schema.ts']\n// Legacy constant for backward compatibility\nexport const SCHEMA_TS = SEED_CONFIG_FILE\n\nexport const INTERNAL_DATA_TYPES = {\n Text: {\n eas: 'string',\n },\n Number: {\n eas: 'uint8',\n },\n Image: {\n eas: 'string',\n },\n Relation: {\n eas: 'bytes32',\n },\n List: {\n eas: 'bytes32[]',\n },\n File: {\n eas: 'string',\n },\n Json: {\n eas: 'string',\n },\n Blob: {\n eas: 'bytes32',\n },\n}\n\nexport const INTERNAL_PROPERTY_NAMES = [\n 'localId',\n 'uid',\n 'seedLocalId',\n 'seedUid',\n 'schemaUid',\n 'attestationCreatedAt',\n 'attestationRaw',\n 'createdAt',\n 'updatedAt',\n 'lastVersionPublishedAt',\n 'latestVersionLocalId',\n 'latestVersionUid',\n 'lastLocalUpdateAt',\n 'modelName',\n 'storageTransactionId',\n 'refSeedType',\n 'refValueType',\n 'refResolvedValue',\n 'refResolvedDisplayValue',\n 'type',\n // Image\n 'src',\n 'alt',\n //\n 'versionLocalId',\n 'versionsCount',\n 'versionUid',\n '_markedForDeletion',\n]\n\nexport const VERSION_SCHEMA_UID_OPTIMISM_SEPOLIA =\n '0x13c0fd59d69dbce40501a41f8b37768d26dd2e2bb0cad64615334d84f7b9bdf6'\n\nexport const defaultAttestationData: AttestationRequestData = {\n recipient: ZERO_ADDRESS,\n revocable: true,\n value: BigInt(0),\n refUID: ZERO_BYTES32,\n expirationTime: BigInt(0),\n data: ZERO_BYTES,\n}\n\nexport enum ImageSize {\n EXTRA_SMALL = 480,\n SMALL = 760,\n MEDIUM = 1024,\n LARGE = 1440,\n EXTRA_LARGE = 1920,\n}\n\nexport const CLIENT_NOT_INITIALIZED = 'ClientManager is not initialized. Please call init() first.'\n\nexport const INIT_SCRIPT_SUCCESS_MESSAGE = '[Seed Protocol] Finished running init script'\n"],"names":[],"mappings":";;AAQO,MAAM,UAAU,GAAG;AAC1B;AACO,MAAM,gBAAgB,GAAG;AAChC;MACa,qBAAqB,GAAG,CAAC,gBAAgB,EAAE,WAAW;AAI5D,MAAM,mBAAmB,GAAG;AACjC,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,EAAE,OAAO;AACb,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,WAAW;AACjB,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,GAAG,EAAE,SAAS;AACf,KAAA;;AAGI,MAAM,uBAAuB,GAAG;IACrC,SAAS;IACT,KAAK;IACL,aAAa;IACb,SAAS;IACT,WAAW;IACX,sBAAsB;IACtB,gBAAgB;IAChB,WAAW;IACX,WAAW;IACX,wBAAwB;IACxB,sBAAsB;IACtB,kBAAkB;IAClB,mBAAmB;IACnB,WAAW;IACX,sBAAsB;IACtB,aAAa;IACb,cAAc;IACd,kBAAkB;IAClB,yBAAyB;IACzB,MAAM;;IAEN,KAAK;IACL,KAAK;;IAEL,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,oBAAoB;;AAGf,MAAM,mCAAmC,GAC9C;AAEK,MAAM,sBAAsB,GAA2B;AAC5D,IAAA,SAAS,EAAE,YAAY;AACvB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAChB,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;AACzB,IAAA,IAAI,EAAE,UAAU;;IAGN;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,GAAA,GAAA,CAAA,GAAA,aAAiB;AACjB,IAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,GAAA,CAAA,GAAA,OAAW;AACX,IAAA,SAAA,CAAA,SAAA,CAAA,QAAA,CAAA,GAAA,IAAA,CAAA,GAAA,QAAa;AACb,IAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,IAAA,CAAA,GAAA,OAAY;AACZ,IAAA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,GAAA,IAAA,CAAA,GAAA,aAAkB;AACpB,CAAC,EANW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;AAQd,MAAM,sBAAsB,GAAG;AAE/B,MAAM,2BAA2B,GAAG;;;;"}
@@ -2,8 +2,8 @@ import path from 'path';
2
2
  import pluralize from 'pluralize';
3
3
  import { camelCase, snakeCase } from 'lodash-es';
4
4
  import * as nunjucks from 'nunjucks';
5
- import '../../helpers/constants.js';
6
- import '../helpers/index.js';
5
+ import { SCHEMA_NJK } from '../../helpers/constants.js';
6
+ import { getTsImport } from '../helpers/index.js';
7
7
  import fs from 'fs';
8
8
  import { PathResolver } from '../PathResolver.js';
9
9
  import debug from 'debug';
@@ -33,6 +33,42 @@ const env = new nunjucks.Environment(TemplateLoader);
33
33
  env.addFilter('camelCase', camelCase);
34
34
  env.addFilter('snakeCase', snakeCase);
35
35
  env.addFilter('pluralize', pluralize);
36
+ const refNamesToExcludeFromRelations = [
37
+ 'Text',
38
+ 'Number',
39
+ 'Boolean',
40
+ 'Date',
41
+ ];
42
+ const generateDrizzleSchemaCode = (modelName, modelClass) => {
43
+ const listProperties = Object.entries(modelClass.schema).filter(([key, propertyDef]) => propertyDef?.dataType === 'List' && !refNamesToExcludeFromRelations.includes(propertyDef?.ref));
44
+ const pathResolver = PathResolver.getInstance();
45
+ const { templatePath } = pathResolver.getAppPaths();
46
+ const filePath = path.join(templatePath, SCHEMA_NJK);
47
+ const schemaCode = env.render(filePath, {
48
+ modelName,
49
+ modelClass,
50
+ listProperties,
51
+ });
52
+ return schemaCode;
53
+ };
54
+ const createDrizzleSchemaFilesFromConfig = async (configFilePath, outputDirPath) => {
55
+ const pathResolver = PathResolver.getInstance();
56
+ const { dotSeedDir, appSchemaDir } = pathResolver.getAppPaths();
57
+ console.log('createDrizzleSchemaFilesFromConfig', configFilePath, outputDirPath);
58
+ // Use provided config file path or find the config file in the project root
59
+ const schemaFilePath = configFilePath || pathResolver.findConfigFile() || path.join(dotSeedDir, 'seed.config.ts');
60
+ console.log('schemaFilePath', schemaFilePath);
61
+ const { models, } = await getTsImport(schemaFilePath);
62
+ const writeToDir = outputDirPath || appSchemaDir;
63
+ for (const [modelName, modelClass] of Object.entries(models)) {
64
+ const code = generateDrizzleSchemaCode(modelName, modelClass);
65
+ if (!fs.existsSync(writeToDir)) {
66
+ fs.mkdirSync(writeToDir);
67
+ }
68
+ const filePath = path.join(writeToDir, `${modelName}Schema.ts`);
69
+ await fs.promises.writeFile(filePath, code).catch((e) => console.error(e));
70
+ }
71
+ };
36
72
  // Helper to determine TypeScript type based on property type
37
73
  const seedTypeToJsType = (propertyType) => {
38
74
  switch (propertyType) {
@@ -68,5 +104,5 @@ const generateModelCode = (values) => {
68
104
  return njkEnv.render('model.njk', { modelName, properties });
69
105
  };
70
106
 
71
- export { generateModelCode };
107
+ export { createDrizzleSchemaFilesFromConfig, generateDrizzleSchemaCode, generateModelCode };
72
108
  //# sourceMappingURL=drizzle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"drizzle.js","sources":["../../../../../src/node/codegen/drizzle.ts"],"sourcesContent":["import path from 'path'\nimport pluralize from 'pluralize'\nimport { camelCase, snakeCase } from 'lodash-es'\nimport * as nunjucks from 'nunjucks'\nimport { ILoader } from 'nunjucks'\nimport { ModelClassType } from '@/types'\nimport { SCHEMA_NJK } from '@/helpers/constants'\nimport { getTsImport } from '@/node/helpers'\nimport fs from 'fs'\nimport {PathResolver} from '@/node/PathResolver'\nimport debug from 'debug'\n\nconst logger = debug('seedSdk:codegen:drizzle')\n\n\nconst TemplateLoader: ILoader = {\n getSource: (name: string) => {\n const pathResolver = PathResolver.getInstance()\n const { templatePath } = pathResolver.getAppPaths()\n let templateFilePath = templatePath\n if (name.includes(templatePath)) {\n templateFilePath = name\n } else {\n templateFilePath = path.join(templatePath, path.basename(name))\n }\n const src = fs.readFileSync(templateFilePath, 'utf-8')\n\n return {\n path: name,\n src,\n noCache: false,\n }\n },\n}\n\n// Configure Nunjucks\nconst env = new nunjucks.Environment(TemplateLoader)\n\nenv.addFilter('camelCase', camelCase)\nenv.addFilter('snakeCase', snakeCase)\nenv.addFilter('pluralize', pluralize)\n\nconst refNamesToExcludeFromRelations = [\n 'Text',\n 'Number',\n 'Boolean',\n 'Date',\n]\n\nexport const generateDrizzleSchemaCode = (\n modelName: string,\n modelClass: ModelClassType,\n): string => {\n const listProperties = Object.entries(modelClass.schema).filter(\n ([key, propertyDef]) => propertyDef?.dataType === 'List' && !refNamesToExcludeFromRelations.includes(propertyDef?.ref!),\n )\n\n const pathResolver = PathResolver.getInstance()\n const { templatePath } = pathResolver.getAppPaths()\n const filePath = path.join(templatePath, SCHEMA_NJK)\n\n const schemaCode = env.render(filePath, {\n modelName,\n modelClass,\n listProperties,\n })\n\n return schemaCode\n}\n\nexport const createDrizzleSchemaFilesFromConfig = async (\n configFilePath: string | undefined,\n outputDirPath: string | undefined,\n) => {\n const pathResolver = PathResolver.getInstance()\n const { dotSeedDir, appSchemaDir } = pathResolver.getAppPaths()\n console.log('createDrizzleSchemaFilesFromConfig', configFilePath, outputDirPath)\n\n // Use provided config file path or find the config file in the project root\n const schemaFilePath = configFilePath || pathResolver.findConfigFile() || path.join(dotSeedDir, 'seed.config.ts')\n console.log('schemaFilePath', schemaFilePath)\n\n const { models, } = await getTsImport<{\n models: Record<string, ModelClassType>\n }>(schemaFilePath)\n\n const writeToDir = outputDirPath || appSchemaDir\n\n for (const [modelName, modelClass] of Object.entries(models)) {\n const code = generateDrizzleSchemaCode(modelName, modelClass)\n\n if (!fs.existsSync(writeToDir)) {\n fs.mkdirSync(writeToDir)\n }\n\n const filePath = path.join(writeToDir, `${modelName}Schema.ts`)\n\n await fs.promises.writeFile(filePath, code).catch((e) => console.error(e))\n }\n}\n\n // Helper to determine TypeScript type based on property type\n const seedTypeToJsType = (propertyType: string): string => {\n switch (propertyType) {\n case 'Text':\n return 'string';\n case 'Number':\n return 'number';\n case 'Boolean':\n return 'boolean';\n case 'Date':\n return 'string';\n case 'List':\n return 'string[]';\n case 'Relation':\n return 'string';\n case 'Image':\n return 'string';\n case 'File':\n return 'string';\n default:\n return 'any';\n }\n};\n\n\nexport const generateModelCode = (values: Record<string, any>): string => {\n const { modelName, properties } = values;\n const pathResolver = PathResolver.getInstance()\n const { templatePath } = pathResolver.getAppPaths()\n\n if (modelName === 'Text' || modelName === 'TestModel') {\n logger(`Model name is ${modelName}.`)\n }\n\n const njkEnv = new nunjucks.Environment(new nunjucks.FileSystemLoader(templatePath))\n njkEnv.addFilter('seedTypeToJsType', seedTypeToJsType)\n return njkEnv.render('model.njk', { modelName, properties })\n};\n"],"names":[],"mappings":";;;;;;;;;;AAYA,MAAM,MAAM,GAAG,KAAK,CAAC,yBAAyB,CAAC;AAG/C,MAAM,cAAc,GAAY;AAC9B,IAAA,SAAS,EAAE,CAAC,IAAY,KAAI;AAC1B,QAAA,MAAM,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE;QAC/C,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC,WAAW,EAAE;QACnD,IAAI,gBAAgB,GAAG,YAAY;AACnC,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;YAC/B,gBAAgB,GAAG,IAAI;QACzB;aAAO;AACL,YAAA,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjE;QACA,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC;QAEtD,OAAO;AACL,YAAA,IAAI,EAAE,IAAI;YACV,GAAG;AACH,YAAA,OAAO,EAAE,KAAK;SACf;IACH,CAAC;CACF;AAED;AACA,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC;AAEpD,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC;AACrC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC;AACrC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC;AA6DpC;AACA,MAAM,gBAAgB,GAAG,CAAC,YAAoB,KAAY;IACzD,QAAQ,YAAY;AAClB,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,QAAQ;AACjB,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,QAAQ;AACjB,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,SAAS;AAClB,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,QAAQ;AACjB,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,UAAU;AACnB,QAAA,KAAK,UAAU;AACb,YAAA,OAAO,QAAQ;AACjB,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,QAAQ;AACjB,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,QAAQ;AACjB,QAAA;AACE,YAAA,OAAO,KAAK;;AAElB,CAAC;AAGM,MAAM,iBAAiB,GAAG,CAAC,MAA2B,KAAY;AACvE,IAAA,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM;AACxC,IAAA,MAAM,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE;IAC/C,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC,WAAW,EAAE;IAEnD,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,WAAW,EAAE;AACrD,QAAA,MAAM,CAAC,CAAA,cAAA,EAAiB,SAAS,CAAA,CAAA,CAAG,CAAC;IACvC;AAEA,IAAA,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;AACpF,IAAA,MAAM,CAAC,SAAS,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;AACtD,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAC9D;;;;"}
1
+ {"version":3,"file":"drizzle.js","sources":["../../../../../src/node/codegen/drizzle.ts"],"sourcesContent":["import path from 'path'\nimport pluralize from 'pluralize'\nimport { camelCase, snakeCase } from 'lodash-es'\nimport * as nunjucks from 'nunjucks'\nimport { ILoader } from 'nunjucks'\nimport { ModelClassType } from '@/types'\nimport { SCHEMA_NJK } from '@/helpers/constants'\nimport { getTsImport } from '@/node/helpers'\nimport fs from 'fs'\nimport {PathResolver} from '@/node/PathResolver'\nimport debug from 'debug'\n\nconst logger = debug('seedSdk:codegen:drizzle')\n\n\nconst TemplateLoader: ILoader = {\n getSource: (name: string) => {\n const pathResolver = PathResolver.getInstance()\n const { templatePath } = pathResolver.getAppPaths()\n let templateFilePath = templatePath\n if (name.includes(templatePath)) {\n templateFilePath = name\n } else {\n templateFilePath = path.join(templatePath, path.basename(name))\n }\n const src = fs.readFileSync(templateFilePath, 'utf-8')\n\n return {\n path: name,\n src,\n noCache: false,\n }\n },\n}\n\n// Configure Nunjucks\nconst env = new nunjucks.Environment(TemplateLoader)\n\nenv.addFilter('camelCase', camelCase)\nenv.addFilter('snakeCase', snakeCase)\nenv.addFilter('pluralize', pluralize)\n\nconst refNamesToExcludeFromRelations = [\n 'Text',\n 'Number',\n 'Boolean',\n 'Date',\n]\n\nexport const generateDrizzleSchemaCode = (\n modelName: string,\n modelClass: ModelClassType,\n): string => {\n const listProperties = Object.entries(modelClass.schema).filter(\n ([key, propertyDef]) => propertyDef?.dataType === 'List' && !refNamesToExcludeFromRelations.includes(propertyDef?.ref!),\n )\n\n const pathResolver = PathResolver.getInstance()\n const { templatePath } = pathResolver.getAppPaths()\n const filePath = path.join(templatePath, SCHEMA_NJK)\n\n const schemaCode = env.render(filePath, {\n modelName,\n modelClass,\n listProperties,\n })\n\n return schemaCode\n}\n\nexport const createDrizzleSchemaFilesFromConfig = async (\n configFilePath: string | undefined,\n outputDirPath: string | undefined,\n) => {\n const pathResolver = PathResolver.getInstance()\n const { dotSeedDir, appSchemaDir } = pathResolver.getAppPaths()\n console.log('createDrizzleSchemaFilesFromConfig', configFilePath, outputDirPath)\n\n // Use provided config file path or find the config file in the project root\n const schemaFilePath = configFilePath || pathResolver.findConfigFile() || path.join(dotSeedDir, 'seed.config.ts')\n console.log('schemaFilePath', schemaFilePath)\n\n const { models, } = await getTsImport<{\n models: Record<string, ModelClassType>\n }>(schemaFilePath)\n\n const writeToDir = outputDirPath || appSchemaDir\n\n for (const [modelName, modelClass] of Object.entries(models)) {\n const code = generateDrizzleSchemaCode(modelName, modelClass)\n\n if (!fs.existsSync(writeToDir)) {\n fs.mkdirSync(writeToDir)\n }\n\n const filePath = path.join(writeToDir, `${modelName}Schema.ts`)\n\n await fs.promises.writeFile(filePath, code).catch((e) => console.error(e))\n }\n}\n\n // Helper to determine TypeScript type based on property type\n const seedTypeToJsType = (propertyType: string): string => {\n switch (propertyType) {\n case 'Text':\n return 'string';\n case 'Number':\n return 'number';\n case 'Boolean':\n return 'boolean';\n case 'Date':\n return 'string';\n case 'List':\n return 'string[]';\n case 'Relation':\n return 'string';\n case 'Image':\n return 'string';\n case 'File':\n return 'string';\n default:\n return 'any';\n }\n};\n\n\nexport const generateModelCode = (values: Record<string, any>): string => {\n const { modelName, properties } = values;\n const pathResolver = PathResolver.getInstance()\n const { templatePath } = pathResolver.getAppPaths()\n\n if (modelName === 'Text' || modelName === 'TestModel') {\n logger(`Model name is ${modelName}.`)\n }\n\n const njkEnv = new nunjucks.Environment(new nunjucks.FileSystemLoader(templatePath))\n njkEnv.addFilter('seedTypeToJsType', seedTypeToJsType)\n return njkEnv.render('model.njk', { modelName, properties })\n};\n"],"names":[],"mappings":"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"}
@@ -1,10 +1,12 @@
1
1
  import { sqliteTable, blob, text, integer } from 'drizzle-orm/sqlite-core';
2
2
 
3
- sqliteTable('config', {
3
+ const config = sqliteTable('config', {
4
4
  id: integer('id').primaryKey({ autoIncrement: true }),
5
5
  key: text('key').notNull(),
6
6
  text: text('text'),
7
7
  json: text('json'),
8
8
  blob: blob('blob'),
9
9
  });
10
+
11
+ export { config };
10
12
  //# sourceMappingURL=ConfigSchema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigSchema.js","sources":["../../../../src/seedSchema/ConfigSchema.ts"],"sourcesContent":["import { integer, sqliteTable, text, blob, } from 'drizzle-orm/sqlite-core'\nimport { InferSelectModel } from 'drizzle-orm'\n\nexport const config = sqliteTable(\n 'config',\n {\n id: integer('id').primaryKey({ autoIncrement: true }),\n key: text('key').notNull(),\n text: text('text'),\n json: text('json'),\n blob: blob('blob'),\n }\n)\n\nexport type configType = InferSelectModel<typeof config>"],"names":[],"mappings":";;AAGsB,WAAW,CAC/B,QAAQ,EACR;AACE,IAAA,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACrD,IAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE;AAC1B,IAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;AAClB,IAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;AAClB,IAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;AACnB,CAAA"}
1
+ {"version":3,"file":"ConfigSchema.js","sources":["../../../../src/seedSchema/ConfigSchema.ts"],"sourcesContent":["import { integer, sqliteTable, text, blob, } from 'drizzle-orm/sqlite-core'\nimport { InferSelectModel } from 'drizzle-orm'\n\nexport const config = sqliteTable(\n 'config',\n {\n id: integer('id').primaryKey({ autoIncrement: true }),\n key: text('key').notNull(),\n text: text('text'),\n json: text('json'),\n blob: blob('blob'),\n }\n)\n\nexport type configType = InferSelectModel<typeof config>"],"names":[],"mappings":";;AAGO,MAAM,MAAM,GAAG,WAAW,CAC/B,QAAQ,EACR;AACE,IAAA,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACrD,IAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE;AAC1B,IAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;AAClB,IAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;AAClB,IAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;AACnB,CAAA;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seedprotocol/sdk",
3
- "version": "0.3.26",
3
+ "version": "0.3.28",
4
4
  "description": "The SDK for Seed Protocol",
5
5
  "type": "module",
6
6
  "engines": {