@itwin/workspace-editor 3.0.0-dev.173 → 3.0.0-dev.177
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/.rush/temp/package-deps_cover.json +5 -5
- package/.rush/temp/package-deps_docs.json +5 -5
- package/.rush/temp/package-deps_lint.json +5 -5
- package/.rush/temp/shrinkwrap-deps.json +175 -174
- package/LICENSE.md +1 -1
- package/lib/WorkspaceEditor.js +7 -7
- package/lib/WorkspaceEditor.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -9
- package/src/WorkspaceEditor.ts +10 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceEditor.js","sourceRoot":"","sources":["../src/WorkspaceEditor.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as fs from \"fs\";\r\nimport * as glob from \"glob\";\r\nimport { join } from \"path\";\r\nimport * as readline from \"readline\";\r\nimport * as Yargs from \"yargs\";\r\nimport {\r\n CloudSqlite, EditableWorkspaceDb, IModelHost, IModelHostConfiguration, IModelJsFs, ITwinWorkspaceDb, WorkspaceContainerId, WorkspaceDbName,\r\n WorkspaceResourceName,\r\n} from \"@itwin/core-backend\";\r\nimport { DbResult, StopWatch } from \"@itwin/core-bentley\";\r\nimport { LocalDirName, LocalFileName } from \"@itwin/core-common\";\r\n\r\n// cspell:ignore nodir\r\n/* eslint-disable id-blacklist,no-console */\r\n\r\n/** Properties for accessing a blob storage account. */\r\ninterface BlobAccountProps {\r\n /** Token that provides required access (read/write/create/etc.) for blob store operation. */\r\n sasToken: string;\r\n /** Name for blob store user account */\r\n accountName: string;\r\n /** The string that identifies the storage type. Default = \"azure?sas=1\" */\r\n storageType: string;\r\n}\r\n\r\n/** Allows overriding the location of WorkspaceDbs. If not present, defaults to `${homedir}/iTwin/Workspace` */\r\ninterface EditorOpts extends BlobAccountProps {\r\n /** Directory for WorkspaceDbs */\r\n directory?: LocalDirName;\r\n containerId: WorkspaceContainerId;\r\n}\r\n\r\n/** Id of WorkspaceDb for operation */\r\ninterface WorkspaceDbOpt extends EditorOpts {\r\n dbName: WorkspaceDbName;\r\n}\r\n\r\n/** Resource type names */\r\ntype RscType = \"blob\" | \"string\" | \"file\";\r\n\r\n/** Options for adding, updating, extracting, or deleting resources from a WorkspaceDb */\r\ninterface ResourceOption extends WorkspaceDbOpt {\r\n rscName?: WorkspaceResourceName;\r\n update: boolean;\r\n type: RscType;\r\n}\r\n\r\n/** Options for deleting resources from a WorkspaceDb */\r\ninterface DeleteResourceOpts extends ResourceOption {\r\n rscName: WorkspaceResourceName;\r\n}\r\n\r\n/** Options for extracting resources from a WorkspaceDb */\r\ninterface ExtractResourceOpts extends ResourceOption {\r\n rscName: WorkspaceResourceName;\r\n fileName: LocalFileName;\r\n}\r\n\r\n/** Options for adding or updating local files as resources into a WorkspaceDb */\r\ninterface AddFileOptions extends ResourceOption {\r\n files: LocalFileName;\r\n root?: LocalDirName;\r\n}\r\n\r\n/** Options for listing the resources in a WorkspaceDb */\r\ninterface ListOptions extends WorkspaceDbOpt {\r\n strings?: boolean;\r\n files?: boolean;\r\n blobs?: boolean;\r\n}\r\n\r\ninterface TransferOptions extends BlobAccountProps, WorkspaceDbOpt {\r\n /** If present, name of local file for download. */\r\n localFile?: string;\r\n}\r\n\r\n/** Options for uploading a WorkspaceDb to blob storage */\r\ninterface UploadOptions extends TransferOptions {\r\n initialize: boolean;\r\n replace: boolean;\r\n}\r\n\r\n/** Create a new empty WorkspaceDb */\r\nasync function createWorkspaceDb(args: WorkspaceDbOpt) {\r\n const wsFile = new EditableWorkspaceDb(args.dbName, IModelHost.appWorkspace.getContainer(args));\r\n wsFile.create();\r\n console.log(`created WorkspaceDb ${wsFile.sqliteDb.nativeDb.getFilePath()}`);\r\n wsFile.close();\r\n}\r\n\r\n/** open, call a function to process, then close a WorkspaceDb */\r\nfunction processWorkspace<W extends ITwinWorkspaceDb, T extends WorkspaceDbOpt>(args: T, ws: W, fn: (ws: W, args: T) => void) {\r\n ws.open();\r\n console.log(`WorkspaceDb [${ws.sqliteDb.nativeDb.getFilePath()}]`);\r\n try {\r\n fn(ws, args);\r\n } finally {\r\n ws.close();\r\n }\r\n}\r\n\r\n/** Open for write, call a function to process, then close a WorkspaceDb */\r\nfunction editWorkspace<T extends WorkspaceDbOpt>(args: T, fn: (ws: EditableWorkspaceDb, args: T) => void) {\r\n processWorkspace(args, new EditableWorkspaceDb(args.dbName, IModelHost.appWorkspace.getContainer(args)), fn);\r\n}\r\n\r\n/** Open for read, call a function to process, then close a WorkspaceDb */\r\nfunction readWorkspace<T extends WorkspaceDbOpt>(args: T, fn: (ws: ITwinWorkspaceDb, args: T) => void) {\r\n processWorkspace(args, new ITwinWorkspaceDb(args.dbName, IModelHost.appWorkspace.getContainer(args)), fn);\r\n}\r\n\r\n/** List the contents of a WorkspaceDb */\r\nasync function listWorkspaceDb(args: ListOptions) {\r\n readWorkspace(args, (file, args) => {\r\n if (!args.strings && !args.blobs && !args.files)\r\n args.blobs = args.files = args.strings = true;\r\n\r\n if (args.strings) {\r\n console.log(\" strings:\");\r\n file.sqliteDb.withSqliteStatement(\"SELECT id,value FROM strings\", (stmt) => {\r\n while (DbResult.BE_SQLITE_ROW === stmt.step())\r\n console.log(` name=[${stmt.getValueString(0)}], size=${stmt.getValueString(1).length}`);\r\n });\r\n }\r\n if (args.blobs) {\r\n console.log(\" blobs:\");\r\n file.sqliteDb.withSqliteStatement(\"SELECT id,value FROM blobs\", (stmt) => {\r\n while (DbResult.BE_SQLITE_ROW === stmt.step())\r\n console.log(` name=[${stmt.getValueString(0)}], size=${stmt.getValueBlob(1).length}`);\r\n });\r\n }\r\n if (args.files) {\r\n console.log(\" files:\");\r\n file.sqliteDb.withSqliteStatement(\"SELECT name FROM be_EmbedFile\", (stmt) => {\r\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n const embed = file.queryFileResource(stmt.getValueString(0));\r\n if (embed) {\r\n const info = embed.info;\r\n const date = new Date(info.date);\r\n console.log(` name=[${stmt.getValueString(0)}], size=${info.size}, ext=\"${info.fileExt}\", date=${date.toString()}`);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n}\r\n\r\n/** Add or Update files into a WorkspaceDb. */\r\nasync function addResource(args: AddFileOptions) {\r\n editWorkspace(args, (wsFile, args) => {\r\n glob.sync(args.files, { cwd: args.root ?? process.cwd(), nodir: true }).forEach((filePath) => {\r\n const file = args.root ? join(args.root, filePath) : filePath;\r\n if (!IModelJsFs.existsSync(file))\r\n throw new Error(`file [${file}] does not exist`);\r\n const name = args.rscName ?? filePath;\r\n try {\r\n if (args.type === \"string\") {\r\n const val = fs.readFileSync(file, \"utf-8\");\r\n wsFile[args.update ? \"updateString\" : \"addString\"](name, val);\r\n } else if (args.type === \"blob\") {\r\n const val = fs.readFileSync(file);\r\n wsFile[args.update ? \"updateBlob\" : \"addBlob\"](name, val);\r\n } else {\r\n wsFile[args.update ? \"updateFile\" : \"addFile\"](name, file);\r\n }\r\n console.log(` ${args.update ? \"updated\" : \"added\"} \"${file}\" as ${args.type} resource [${name}]`);\r\n } catch (e: any) {\r\n console.error(e.message);\r\n }\r\n });\r\n });\r\n}\r\n\r\n/** Extract a single resource from a WorkspaceDb into a local file */\r\nasync function extractResource(args: ExtractResourceOpts) {\r\n readWorkspace(args, (file, args) => {\r\n const verify = <T>(val: T | undefined): T => {\r\n if (val === undefined)\r\n throw new Error(` ${args.type} resource \"${args.rscName}\" does not exist`);\r\n return val;\r\n };\r\n\r\n if (args.type === \"string\") {\r\n fs.writeFileSync(args.fileName, verify(file.getString(args.rscName)));\r\n } else if (args.type === \"blob\") {\r\n fs.writeFileSync(args.fileName, verify(file.getBlob(args.rscName)));\r\n } else {\r\n verify(file.getFile(args.rscName, args.fileName));\r\n }\r\n console.log(` ${args.type} resource [${args.rscName}] extracted to \"${args.fileName}\"`);\r\n });\r\n}\r\n\r\n/** Delete a single resource from a WorkspaceDb */\r\nasync function deleteResource(args: DeleteResourceOpts) {\r\n editWorkspace(args, (wsFile, args) => {\r\n if (args.type === \"string\")\r\n wsFile.removeString(args.rscName);\r\n else if (args.type === \"blob\")\r\n wsFile.removeBlob(args.rscName);\r\n else\r\n wsFile.removeFile(args.rscName);\r\n console.log(` deleted ${args.type} resource [${args.rscName}]`);\r\n });\r\n}\r\n\r\nfunction getDbFileName(args: WorkspaceDbOpt): LocalFileName {\r\n return new ITwinWorkspaceDb(args.dbName, IModelHost.appWorkspace.getContainer(args)).localFile;\r\n}\r\n\r\n/** Vacuum a local WorkspaceDb file, usually immediately prior to uploading. */\r\nasync function vacuumWorkspaceDb(args: WorkspaceDbOpt) {\r\n const localFile = getDbFileName(args);\r\n IModelHost.platform.DgnDb.vacuum(localFile);\r\n console.log(`${localFile} vacuumed`);\r\n}\r\n\r\n/** Either upload or download a WorkspaceDb to/from a WorkspaceContainer. Shows progress % during transfer */\r\nasync function performTransfer(direction: CloudSqlite.TransferDirection, args: TransferOptions) {\r\n const localFile = args.localFile ?? getDbFileName(args);\r\n const info = `${direction} ${localFile}, containerId=${args.containerId}, WorkspaceDbName=${args.dbName} : `;\r\n\r\n let last = 0;\r\n const onProgress = (loaded: number, total: number) => {\r\n if (loaded > last) {\r\n last = loaded;\r\n const message = ` ${(loaded * 100 / total).toFixed(2)}%`;\r\n readline.cursorTo(process.stdout, info.length);\r\n process.stdout.write(message);\r\n }\r\n return 0;\r\n };\r\n process.stdout.write(info);\r\n const timer = new StopWatch(direction, true);\r\n await CloudSqlite.transferDb(direction, { ...args, localFile, onProgress });\r\n readline.cursorTo(process.stdout, info.length);\r\n process.stdout.write(`complete, ${timer.elapsedSeconds.toString()} seconds`);\r\n}\r\n\r\n/** Upload a WorkspaceDb to a WorkspaceContainer. */\r\nasync function uploadWorkspaceDb(args: UploadOptions) {\r\n if (args.initialize)\r\n await CloudSqlite.initializeContainer(args);\r\n return performTransfer(\"upload\", args);\r\n}\r\n\r\n/** Download a WorkspaceDb from a WorkspaceContainer. */\r\nasync function downloadWorkspaceDb(args: TransferOptions) {\r\n return performTransfer(\"download\", args);\r\n}\r\n\r\n/** Delete a WorkspaceDb from a WorkspaceContainer. */\r\nasync function deleteWorkspaceDb(args: BlobAccountProps & WorkspaceDbOpt) {\r\n await CloudSqlite.deleteDb(args);\r\n console.log(`deleted WorkspaceDb [${args.dbName}] from containerId: ${args.containerId}`);\r\n}\r\n\r\n/** Start `IModelHost`, then run a WorkspaceEditor command. Errors are logged to console. */\r\nfunction runCommand<T extends EditorOpts>(cmd: (args: T) => Promise<void>) {\r\n return async (args: T) => {\r\n try {\r\n const config = new IModelHostConfiguration();\r\n if (args.directory)\r\n config.workspace = { containerDir: args.directory };\r\n await IModelHost.startup(config);\r\n await cmd(args);\r\n } catch (e: any) {\r\n console.error(e.message);\r\n }\r\n };\r\n}\r\n\r\n/** Parse and execute WorkspaceEditor commands */\r\nasync function main() {\r\n const type = { alias: \"t\", describe: \"the type of resource\", choices: [\"blob\", \"string\", \"file\"], required: true };\r\n const update = { alias: \"u\", describe: \"update (i.e. replace) rather than add the files\", boolean: true, default: false };\r\n Yargs.usage(\"Edits or lists contents of a WorkspaceDb\");\r\n Yargs.wrap(Math.min(130, Yargs.terminalWidth()));\r\n Yargs.strict();\r\n Yargs.config();\r\n Yargs.default(\"config\", \"workspaceEditor.json\");\r\n Yargs.help();\r\n Yargs.version(\"V2.0\");\r\n Yargs.options({\r\n directory: { alias: \"d\", describe: \"directory to use for WorkspaceContainers\", string: true },\r\n containerId: { alias: \"c\", describe: \"WorkspaceContainerId for WorkspaceDb\", string: true, required: true },\r\n sasToken: { alias: \"s\", describe: \"shared access signature token\", string: true, default: \"\" },\r\n accountName: { alias: \"a\", describe: \"cloud storage account name for container\", string: true, default: \"\" },\r\n storageType: { describe: \"storage module type\", string: true, default: \"azure?sas=1\" },\r\n });\r\n Yargs.command({\r\n command: \"create <dbName>\",\r\n describe: \"create a new WorkspaceDb\",\r\n handler: runCommand(createWorkspaceDb),\r\n });\r\n Yargs.command({\r\n command: \"list <dbName>\",\r\n describe: \"list the contents of a WorkspaceDb\",\r\n builder: {\r\n strings: { alias: \"s\", describe: \"list string resources\", boolean: true, default: false },\r\n blobs: { alias: \"b\", describe: \"list blob resources\", boolean: true, default: false },\r\n files: { alias: \"f\", describe: \"list file resources\", boolean: true, default: false },\r\n },\r\n handler: runCommand(listWorkspaceDb),\r\n });\r\n Yargs.command({\r\n command: \"add <dbName> <files>\",\r\n describe: \"add or update files into a WorkspaceDb\",\r\n builder: {\r\n name: { alias: \"n\", describe: \"resource name for file\", string: true },\r\n root: { alias: \"r\", describe: \"root directory. Path parts after this will be saved in resource name\", string: true },\r\n update,\r\n type,\r\n },\r\n handler: runCommand(addResource),\r\n });\r\n Yargs.command({\r\n command: \"extract <dbName> <rscName> <fileName>\",\r\n describe: \"extract a resource from a WorkspaceDb into a local file\",\r\n builder: { type },\r\n handler: runCommand(extractResource),\r\n });\r\n Yargs.command({\r\n command: \"deleteResource <dbName> <rscName>\",\r\n describe: \"delete a resource from a WorkspaceDb\",\r\n builder: { type },\r\n handler: runCommand(deleteResource),\r\n });\r\n Yargs.command({\r\n command: \"upload <dbName>\",\r\n describe: \"upload a WorkspaceDb to cloud storage\",\r\n builder: {\r\n initialize: { alias: \"i\", describe: \"initialize container\", boolean: true, default: false },\r\n localFile: { alias: \"l\", describe: \"name of source local file\", string: true, required: false },\r\n },\r\n handler: runCommand(uploadWorkspaceDb),\r\n });\r\n Yargs.command({\r\n command: \"download <dbName>\",\r\n describe: \"download a WorkspaceDb from cloud storage to local file\",\r\n builder: {\r\n localFile: { alias: \"l\", describe: \"name of target local file\", string: true, required: false },\r\n },\r\n handler: runCommand(downloadWorkspaceDb),\r\n });\r\n Yargs.command({\r\n command: \"deleteDb <dbName>\",\r\n describe: \"delete a WorkspaceDb from cloud storage\",\r\n handler: runCommand(deleteWorkspaceDb),\r\n });\r\n Yargs.command({\r\n command: \"vacuum <dbName>\",\r\n describe: \"vacuum a WorkspaceDb\",\r\n handler: runCommand(vacuumWorkspaceDb),\r\n });\r\n Yargs.demandCommand();\r\n Yargs.argv;\r\n}\r\n\r\nvoid main();\r\n"]}
|
|
1
|
+
{"version":3,"file":"WorkspaceEditor.js","sourceRoot":"","sources":["../src/WorkspaceEditor.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as fs from \"fs\";\r\nimport * as glob from \"glob\";\r\nimport { join } from \"path\";\r\nimport * as readline from \"readline\";\r\nimport * as Yargs from \"yargs\";\r\nimport {\r\n CloudSqlite,\r\n EditableWorkspaceDb, IModelHost, IModelHostConfiguration, IModelJsFs, ITwinWorkspaceDb, WorkspaceContainerId, WorkspaceDbName,\r\n WorkspaceResourceName,\r\n} from \"@itwin/core-backend\";\r\nimport { DbResult, StopWatch } from \"@itwin/core-bentley\";\r\nimport { LocalDirName, LocalFileName } from \"@itwin/core-common\";\r\n\r\n// cspell:ignore nodir\r\n/* eslint-disable id-blacklist,no-console */\r\n\r\n/** Properties for accessing a blob storage account. */\r\ninterface BlobAccountProps {\r\n /** Token that provides required access (read/write/create/etc.) for blob store operation. */\r\n sasToken: string;\r\n /** Name for blob store user account */\r\n accountName: string;\r\n /** The string that identifies the storage type. Default = \"azure?sas=1\" */\r\n storageType: string;\r\n}\r\n\r\n/** Allows overriding the location of WorkspaceDbs. If not present, defaults to `${homedir}/iTwin/Workspace` */\r\ninterface EditorOpts extends BlobAccountProps {\r\n /** Directory for WorkspaceDbs */\r\n directory?: LocalDirName;\r\n containerId: WorkspaceContainerId;\r\n}\r\n\r\n/** Id of WorkspaceDb for operation */\r\ninterface WorkspaceDbOpt extends EditorOpts {\r\n dbName: WorkspaceDbName;\r\n}\r\n\r\n/** Resource type names */\r\ntype RscType = \"blob\" | \"string\" | \"file\";\r\n\r\n/** Options for adding, updating, extracting, or deleting resources from a WorkspaceDb */\r\ninterface ResourceOption extends WorkspaceDbOpt {\r\n rscName?: WorkspaceResourceName;\r\n update: boolean;\r\n type: RscType;\r\n}\r\n\r\n/** Options for deleting resources from a WorkspaceDb */\r\ninterface RemoveResourceOpts extends ResourceOption {\r\n rscName: WorkspaceResourceName;\r\n}\r\n\r\n/** Options for extracting resources from a WorkspaceDb */\r\ninterface ExtractResourceOpts extends ResourceOption {\r\n rscName: WorkspaceResourceName;\r\n fileName: LocalFileName;\r\n}\r\n\r\n/** Options for adding or updating local files as resources into a WorkspaceDb */\r\ninterface AddFileOptions extends ResourceOption {\r\n files: LocalFileName;\r\n root?: LocalDirName;\r\n}\r\n\r\n/** Options for listing the resources in a WorkspaceDb */\r\ninterface ListOptions extends WorkspaceDbOpt {\r\n strings?: boolean;\r\n files?: boolean;\r\n blobs?: boolean;\r\n}\r\n\r\ninterface TransferOptions extends BlobAccountProps, WorkspaceDbOpt {\r\n /** If present, name of local file for download. */\r\n localFile?: string;\r\n}\r\n\r\n/** Options for uploading a WorkspaceDb to blob storage */\r\ninterface UploadOptions extends TransferOptions {\r\n initialize: boolean;\r\n replace: boolean;\r\n}\r\n\r\n/** Create a new empty WorkspaceDb */\r\nasync function createWorkspaceDb(args: WorkspaceDbOpt) {\r\n const wsFile = new EditableWorkspaceDb(args.dbName, IModelHost.appWorkspace.getContainer(args));\r\n wsFile.create();\r\n console.log(`created WorkspaceDb ${wsFile.sqliteDb.nativeDb.getFilePath()}`);\r\n wsFile.close();\r\n}\r\n\r\n/** open, call a function to process, then close a WorkspaceDb */\r\nfunction processWorkspace<W extends ITwinWorkspaceDb, T extends WorkspaceDbOpt>(args: T, ws: W, fn: (ws: W, args: T) => void) {\r\n ws.open();\r\n console.log(`WorkspaceDb [${ws.sqliteDb.nativeDb.getFilePath()}]`);\r\n try {\r\n fn(ws, args);\r\n } finally {\r\n ws.close();\r\n }\r\n}\r\n\r\n/** Open for write, call a function to process, then close a WorkspaceDb */\r\nfunction editWorkspace<T extends WorkspaceDbOpt>(args: T, fn: (ws: EditableWorkspaceDb, args: T) => void) {\r\n processWorkspace(args, new EditableWorkspaceDb(args.dbName, IModelHost.appWorkspace.getContainer(args)), fn);\r\n}\r\n\r\n/** Open for read, call a function to process, then close a WorkspaceDb */\r\nfunction readWorkspace<T extends WorkspaceDbOpt>(args: T, fn: (ws: ITwinWorkspaceDb, args: T) => void) {\r\n processWorkspace(args, new ITwinWorkspaceDb(args.dbName, IModelHost.appWorkspace.getContainer(args)), fn);\r\n}\r\n\r\n/** List the contents of a WorkspaceDb */\r\nasync function listWorkspaceDb(args: ListOptions) {\r\n readWorkspace(args, (file, args) => {\r\n if (!args.strings && !args.blobs && !args.files)\r\n args.blobs = args.files = args.strings = true;\r\n\r\n if (args.strings) {\r\n console.log(\" strings:\");\r\n file.sqliteDb.withSqliteStatement(\"SELECT id,value FROM strings\", (stmt) => {\r\n while (DbResult.BE_SQLITE_ROW === stmt.step())\r\n console.log(` name=[${stmt.getValueString(0)}], size=${stmt.getValueString(1).length}`);\r\n });\r\n }\r\n if (args.blobs) {\r\n console.log(\" blobs:\");\r\n file.sqliteDb.withSqliteStatement(\"SELECT id,value FROM blobs\", (stmt) => {\r\n while (DbResult.BE_SQLITE_ROW === stmt.step())\r\n console.log(` name=[${stmt.getValueString(0)}], size=${stmt.getValueBlob(1).length}`);\r\n });\r\n }\r\n if (args.files) {\r\n console.log(\" files:\");\r\n file.sqliteDb.withSqliteStatement(\"SELECT name FROM be_EmbedFile\", (stmt) => {\r\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n const embed = file.queryFileResource(stmt.getValueString(0));\r\n if (embed) {\r\n const info = embed.info;\r\n const date = new Date(info.date);\r\n console.log(` name=[${stmt.getValueString(0)}], size=${info.size}, ext=\"${info.fileExt}\", date=${date.toString()}`);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n}\r\n\r\n/** Add or Update files into a WorkspaceDb. */\r\nasync function addResource(args: AddFileOptions) {\r\n editWorkspace(args, (wsFile, args) => {\r\n glob.sync(args.files, { cwd: args.root ?? process.cwd(), nodir: true }).forEach((filePath) => {\r\n const file = args.root ? join(args.root, filePath) : filePath;\r\n if (!IModelJsFs.existsSync(file))\r\n throw new Error(`file [${file}] does not exist`);\r\n const name = args.rscName ?? filePath;\r\n try {\r\n if (args.type === \"string\") {\r\n const val = fs.readFileSync(file, \"utf-8\");\r\n wsFile[args.update ? \"updateString\" : \"addString\"](name, val);\r\n } else if (args.type === \"blob\") {\r\n const val = fs.readFileSync(file);\r\n wsFile[args.update ? \"updateBlob\" : \"addBlob\"](name, val);\r\n } else {\r\n wsFile[args.update ? \"updateFile\" : \"addFile\"](name, file);\r\n }\r\n console.log(` ${args.update ? \"updated\" : \"added\"} \"${file}\" as ${args.type} resource [${name}]`);\r\n } catch (e: any) {\r\n console.error(e.message);\r\n }\r\n });\r\n });\r\n}\r\n\r\n/** Extract a single resource from a WorkspaceDb into a local file */\r\nasync function extractResource(args: ExtractResourceOpts) {\r\n readWorkspace(args, (file, args) => {\r\n const verify = <T>(val: T | undefined): T => {\r\n if (val === undefined)\r\n throw new Error(` ${args.type} resource \"${args.rscName}\" does not exist`);\r\n return val;\r\n };\r\n\r\n if (args.type === \"string\") {\r\n fs.writeFileSync(args.fileName, verify(file.getString(args.rscName)));\r\n } else if (args.type === \"blob\") {\r\n fs.writeFileSync(args.fileName, verify(file.getBlob(args.rscName)));\r\n } else {\r\n verify(file.getFile(args.rscName, args.fileName));\r\n }\r\n console.log(` ${args.type} resource [${args.rscName}] extracted to \"${args.fileName}\"`);\r\n });\r\n}\r\n\r\n/** Remove a single resource from a WorkspaceDb */\r\nasync function removeResource(args: RemoveResourceOpts) {\r\n editWorkspace(args, (wsFile, args) => {\r\n if (args.type === \"string\")\r\n wsFile.removeString(args.rscName);\r\n else if (args.type === \"blob\")\r\n wsFile.removeBlob(args.rscName);\r\n else\r\n wsFile.removeFile(args.rscName);\r\n console.log(` removed ${args.type} resource [${args.rscName}]`);\r\n });\r\n}\r\n\r\nfunction getDbFileName(args: WorkspaceDbOpt): LocalFileName {\r\n return new ITwinWorkspaceDb(args.dbName, IModelHost.appWorkspace.getContainer(args)).localFile;\r\n}\r\n\r\n/** Vacuum a local WorkspaceDb file, usually immediately prior to uploading. */\r\nasync function vacuumWorkspaceDb(args: WorkspaceDbOpt) {\r\n const localFile = getDbFileName(args);\r\n IModelHost.platform.DgnDb.vacuum(localFile);\r\n console.log(`${localFile} vacuumed`);\r\n}\r\n\r\n/** Either upload or download a WorkspaceDb to/from a WorkspaceContainer. Shows progress % during transfer */\r\nasync function performTransfer(direction: CloudSqlite.TransferDirection, args: TransferOptions) {\r\n const localFile = args.localFile ?? getDbFileName(args);\r\n const info = `${direction} ${localFile}, containerId=${args.containerId}, WorkspaceDbName=${args.dbName} : `;\r\n\r\n let last = 0;\r\n const onProgress = (loaded: number, total: number) => {\r\n if (loaded > last) {\r\n last = loaded;\r\n const message = ` ${(loaded * 100 / total).toFixed(2)}%`;\r\n readline.cursorTo(process.stdout, info.length);\r\n process.stdout.write(message);\r\n }\r\n return 0;\r\n };\r\n process.stdout.write(info);\r\n const timer = new StopWatch(direction, true);\r\n await CloudSqlite.transferDb(direction, { ...args, localFile, onProgress });\r\n readline.cursorTo(process.stdout, info.length);\r\n process.stdout.write(`complete, ${timer.elapsedSeconds.toString()} seconds`);\r\n}\r\n\r\n/** Upload a WorkspaceDb to a WorkspaceContainer. */\r\nasync function uploadWorkspaceDb(args: UploadOptions) {\r\n if (args.initialize)\r\n await CloudSqlite.initializeContainer(args);\r\n return performTransfer(\"upload\", args);\r\n}\r\n\r\n/** Download a WorkspaceDb from a WorkspaceContainer. */\r\nasync function downloadWorkspaceDb(args: TransferOptions) {\r\n return performTransfer(\"download\", args);\r\n}\r\n\r\n/** Delete a WorkspaceDb from a WorkspaceContainer. */\r\nasync function deleteWorkspaceDb(args: BlobAccountProps & WorkspaceDbOpt) {\r\n await CloudSqlite.deleteDb(args);\r\n console.log(`deleted WorkspaceDb [${args.dbName}] from containerId: ${args.containerId}`);\r\n}\r\n\r\n/** Start `IModelHost`, then run a WorkspaceEditor command. Errors are logged to console. */\r\nfunction runCommand<T extends EditorOpts>(cmd: (args: T) => Promise<void>) {\r\n return async (args: T) => {\r\n try {\r\n const config = new IModelHostConfiguration();\r\n if (args.directory)\r\n config.workspace = { containerDir: args.directory };\r\n await IModelHost.startup(config);\r\n await cmd(args);\r\n } catch (e: any) {\r\n console.error(e.message);\r\n }\r\n };\r\n}\r\n\r\n/** Parse and execute WorkspaceEditor commands */\r\nasync function main() {\r\n const type = { alias: \"t\", describe: \"the type of resource\", choices: [\"blob\", \"string\", \"file\"], required: true };\r\n const update = { alias: \"u\", describe: \"update (i.e. replace) rather than add the files\", boolean: true, default: false };\r\n Yargs.usage(\"Edits or lists contents of a WorkspaceDb\");\r\n Yargs.wrap(Math.min(130, Yargs.terminalWidth()));\r\n Yargs.strict();\r\n Yargs.config();\r\n Yargs.default(\"config\", \"workspaceEditor.json\");\r\n Yargs.help();\r\n Yargs.version(\"V2.0\");\r\n Yargs.options({\r\n directory: { alias: \"d\", describe: \"directory to use for WorkspaceContainers\", string: true },\r\n containerId: { alias: \"c\", describe: \"WorkspaceContainerId for WorkspaceDb\", string: true, required: true },\r\n sasToken: { alias: \"s\", describe: \"shared access signature token\", string: true, default: \"\" },\r\n accountName: { alias: \"a\", describe: \"cloud storage account name for container\", string: true, default: \"\" },\r\n storageType: { describe: \"storage module type\", string: true, default: \"azure?sas=1\" },\r\n });\r\n Yargs.command({\r\n command: \"create <dbName>\",\r\n describe: \"create a new WorkspaceDb\",\r\n handler: runCommand(createWorkspaceDb),\r\n });\r\n Yargs.command({\r\n command: \"list <dbName>\",\r\n describe: \"list the contents of a WorkspaceDb\",\r\n builder: {\r\n strings: { alias: \"s\", describe: \"list string resources\", boolean: true, default: false },\r\n blobs: { alias: \"b\", describe: \"list blob resources\", boolean: true, default: false },\r\n files: { alias: \"f\", describe: \"list file resources\", boolean: true, default: false },\r\n },\r\n handler: runCommand(listWorkspaceDb),\r\n });\r\n Yargs.command({\r\n command: \"add <dbName> <files>\",\r\n describe: \"add or update files into a WorkspaceDb\",\r\n builder: {\r\n name: { alias: \"n\", describe: \"resource name for file\", string: true },\r\n root: { alias: \"r\", describe: \"root directory. Path parts after this will be saved in resource name\", string: true },\r\n update,\r\n type,\r\n },\r\n handler: runCommand(addResource),\r\n });\r\n Yargs.command({\r\n command: \"extract <dbName> <rscName> <fileName>\",\r\n describe: \"extract a resource from a WorkspaceDb into a local file\",\r\n builder: { type },\r\n handler: runCommand(extractResource),\r\n });\r\n Yargs.command({\r\n command: \"remove <dbName> <rscName>\",\r\n describe: \"remove a resource from a WorkspaceDb\",\r\n builder: { type },\r\n handler: runCommand(removeResource),\r\n });\r\n Yargs.command({\r\n command: \"upload <dbName>\",\r\n describe: \"upload a WorkspaceDb to cloud storage\",\r\n builder: {\r\n initialize: { alias: \"i\", describe: \"initialize container\", boolean: true, default: false },\r\n localFile: { alias: \"l\", describe: \"name of source local file\", string: true, required: false },\r\n },\r\n handler: runCommand(uploadWorkspaceDb),\r\n });\r\n Yargs.command({\r\n command: \"download <dbName>\",\r\n describe: \"download a WorkspaceDb from cloud storage to local file\",\r\n builder: {\r\n localFile: { alias: \"l\", describe: \"name of target local file\", string: true, required: false },\r\n },\r\n handler: runCommand(downloadWorkspaceDb),\r\n });\r\n Yargs.command({\r\n command: \"delete <dbName>\",\r\n describe: \"delete a WorkspaceDb from cloud storage\",\r\n handler: runCommand(deleteWorkspaceDb),\r\n });\r\n Yargs.command({\r\n command: \"vacuum <dbName>\",\r\n describe: \"vacuum a WorkspaceDb\",\r\n handler: runCommand(vacuumWorkspaceDb),\r\n });\r\n Yargs.demandCommand();\r\n Yargs.argv;\r\n}\r\n\r\nvoid main();\r\n"]}
|