@contember/cli 2.0.0-alpha.18 → 2.0.0-alpha.20
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/development/src/commands/project/ProjectPrintSchemaCommand.cjs +13 -2
- package/dist/development/src/commands/project/ProjectPrintSchemaCommand.cjs.map +1 -1
- package/dist/development/src/commands/project/ProjectPrintSchemaCommand.js +14 -3
- package/dist/development/src/commands/project/ProjectPrintSchemaCommand.js.map +1 -1
- package/dist/development/src/commands/transfer/ExportCommand.cjs +2 -0
- package/dist/development/src/commands/transfer/ExportCommand.cjs.map +1 -1
- package/dist/development/src/commands/transfer/ExportCommand.js +2 -0
- package/dist/development/src/commands/transfer/ExportCommand.js.map +1 -1
- package/dist/development/src/commands/transfer/TransferCommand.cjs +2 -0
- package/dist/development/src/commands/transfer/TransferCommand.cjs.map +1 -1
- package/dist/development/src/commands/transfer/TransferCommand.js +2 -0
- package/dist/development/src/commands/transfer/TransferCommand.js.map +1 -1
- package/dist/development/src/lib/tenant/TenantClient.cjs +1 -1
- package/dist/development/src/lib/tenant/TenantClient.cjs.map +1 -1
- package/dist/development/src/lib/tenant/TenantClient.js +2 -2
- package/dist/development/src/lib/tenant/TenantClient.js.map +1 -1
- package/dist/development/src/lib/transfer/DataTransferClient.cjs +2 -2
- package/dist/development/src/lib/transfer/DataTransferClient.cjs.map +1 -1
- package/dist/development/src/lib/transfer/DataTransferClient.js +2 -2
- package/dist/development/src/lib/transfer/DataTransferClient.js.map +1 -1
- package/dist/production/src/commands/project/ProjectPrintSchemaCommand.cjs +13 -2
- package/dist/production/src/commands/project/ProjectPrintSchemaCommand.cjs.map +1 -1
- package/dist/production/src/commands/project/ProjectPrintSchemaCommand.js +14 -3
- package/dist/production/src/commands/project/ProjectPrintSchemaCommand.js.map +1 -1
- package/dist/production/src/commands/transfer/ExportCommand.cjs +2 -0
- package/dist/production/src/commands/transfer/ExportCommand.cjs.map +1 -1
- package/dist/production/src/commands/transfer/ExportCommand.js +2 -0
- package/dist/production/src/commands/transfer/ExportCommand.js.map +1 -1
- package/dist/production/src/commands/transfer/TransferCommand.cjs +2 -0
- package/dist/production/src/commands/transfer/TransferCommand.cjs.map +1 -1
- package/dist/production/src/commands/transfer/TransferCommand.js +2 -0
- package/dist/production/src/commands/transfer/TransferCommand.js.map +1 -1
- package/dist/production/src/lib/tenant/TenantClient.cjs +1 -1
- package/dist/production/src/lib/tenant/TenantClient.cjs.map +1 -1
- package/dist/production/src/lib/tenant/TenantClient.js +2 -2
- package/dist/production/src/lib/tenant/TenantClient.js.map +1 -1
- package/dist/production/src/lib/transfer/DataTransferClient.cjs +2 -2
- package/dist/production/src/lib/transfer/DataTransferClient.cjs.map +1 -1
- package/dist/production/src/lib/transfer/DataTransferClient.js +2 -2
- package/dist/production/src/lib/transfer/DataTransferClient.js.map +1 -1
- package/dist/types/commands/project/ProjectPrintSchemaCommand.d.ts +4 -0
- package/dist/types/commands/project/ProjectPrintSchemaCommand.d.ts.map +1 -1
- package/dist/types/commands/transfer/ExportCommand.d.ts +1 -0
- package/dist/types/commands/transfer/ExportCommand.d.ts.map +1 -1
- package/dist/types/commands/transfer/TransferCommand.d.ts +1 -0
- package/dist/types/commands/transfer/TransferCommand.d.ts.map +1 -1
- package/dist/types/lib/transfer/DataTransferClient.d.ts +2 -1
- package/dist/types/lib/transfer/DataTransferClient.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -18
- package/src/commands/project/ProjectPrintSchemaCommand.ts +19 -3
- package/src/commands/transfer/ExportCommand.ts +3 -0
- package/src/commands/transfer/TransferCommand.ts +3 -0
- package/src/lib/tenant/TenantClient.ts +1 -1
- package/src/lib/transfer/DataTransferClient.ts +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectPrintSchemaCommand.js","sources":["../../../../../../packages/cli/src/commands/project/ProjectPrintSchemaCommand.ts"],"sourcesContent":["import { Command, CommandConfiguration, Input } from '@contember/cli-common'\nimport {\n\tAuthorizator,\n\tEntityRulesResolver,\n\tGraphQlSchemaBuilderFactory,\n\tIntrospectionSchemaDefinitionFactory,\n\tIntrospectionSchemaFactory,\n\tPermissionFactory,\n} from '@contember/engine-content-api'\nimport { printSchema } from 'graphql'\nimport { mergeSchemas } from '@graphql-tools/schema'\nimport { normalizeSchema } from '@contember/schema-utils'\nimport { SchemaLoader } from '../../lib/schema/SchemaLoader'\nimport { SchemaVersionBuilder } from '@contember/migrations-client'\nimport { validateSchemaAndPrintErrors } from '../../lib/schema/SchemaValidationHelper'\n\ntype Args = {\n}\n\ntype Options = {\n\trole?: string[]\n\tnormalize?: boolean\n\tformat?: 'graphql' | 'introspection' | 'schema'\n\tsource?: 'migrations' | 'definition'\n}\n\nexport class ProjectPrintSchemaCommand extends Command<Args, Options> {\n\tconstructor(\n\t\tprivate readonly schemaLoader: SchemaLoader,\n\t\tprivate readonly schemaVersionBuilder: SchemaVersionBuilder,\n\t) {\n\t\tsuper()\n\t}\n\n\tprotected configure(configuration: CommandConfiguration<Args, Options>): void {\n\t\tconfiguration.description('Prints project schema')\n\t\tconfiguration.option('format').valueRequired().description('graphql|introspection|schema')\n\t\tconfiguration.option('source').valueRequired().description('migrations|definition')\n\t\tconfiguration.option('role').valueArray()\n\t\tconfiguration.option('normalize').valueNone()\n\t}\n\n\tprotected async execute(input: Input<Args, Options>): Promise<number> {\n\t\tconst format = input.getOption('format') || 'graphql'\n\n\n\t\tconst schema = input.getOption('source') === 'migrations'\n\t\t\t? await this.schemaVersionBuilder.buildSchema()\n\t\t\t: await this.schemaLoader.loadSchema()\n\n\t\tif (!validateSchemaAndPrintErrors(
|
|
1
|
+
{"version":3,"file":"ProjectPrintSchemaCommand.js","sources":["../../../../../../packages/cli/src/commands/project/ProjectPrintSchemaCommand.ts"],"sourcesContent":["import { Command, CommandConfiguration, Input } from '@contember/cli-common'\nimport {\n\tAuthorizator,\n\tEntityRulesResolver,\n\tGraphQlSchemaBuilderFactory,\n\tIntrospectionSchemaDefinitionFactory,\n\tIntrospectionSchemaFactory,\n\tPermissionFactory,\n} from '@contember/engine-content-api'\nimport { printSchema } from 'graphql'\nimport { mergeSchemas } from '@graphql-tools/schema'\nimport { emptySchema, normalizeSchema } from '@contember/schema-utils'\nimport { SchemaLoader } from '../../lib/schema/SchemaLoader'\nimport { SchemaVersionBuilder } from '@contember/migrations-client'\nimport { validateSchemaAndPrintErrors } from '../../lib/schema/SchemaValidationHelper'\n\ntype Args = {\n}\n\ntype Options = {\n\trole?: string[]\n\tnormalize?: boolean\n\tformat?: 'graphql' | 'introspection' | 'schema'\n\tsource?: 'migrations' | 'definition'\n\t['omit-acl']?: boolean\n\t['omit-validation']?: boolean\n\t['omit-actions']?: boolean\n\t['omit-settings']?: boolean\n}\n\nexport class ProjectPrintSchemaCommand extends Command<Args, Options> {\n\tconstructor(\n\t\tprivate readonly schemaLoader: SchemaLoader,\n\t\tprivate readonly schemaVersionBuilder: SchemaVersionBuilder,\n\t) {\n\t\tsuper()\n\t}\n\n\tprotected configure(configuration: CommandConfiguration<Args, Options>): void {\n\t\tconfiguration.description('Prints project schema')\n\t\tconfiguration.option('format').valueRequired().description('graphql|introspection|schema')\n\t\tconfiguration.option('source').valueRequired().description('migrations|definition')\n\t\tconfiguration.option('role').valueArray()\n\t\tconfiguration.option('normalize').valueNone()\n\t\tconfiguration.option('omit-acl').valueNone()\n\t\tconfiguration.option('omit-validation').valueNone()\n\t\tconfiguration.option('omit-actions').valueNone()\n\t\tconfiguration.option('omit-settings').valueNone()\n\t}\n\n\tprotected async execute(input: Input<Args, Options>): Promise<number> {\n\t\tconst format = input.getOption('format') || 'graphql'\n\n\n\t\tconst schema = input.getOption('source') === 'migrations'\n\t\t\t? await this.schemaVersionBuilder.buildSchema()\n\t\t\t: await this.schemaLoader.loadSchema()\n\n\t\tconst filteredSchema = {\n\t\t\tmodel: schema.model,\n\t\t\tacl: input.getOption('omit-acl') ? emptySchema.acl : schema.acl,\n\t\t\tvalidation: input.getOption('omit-validation') ? emptySchema.validation : schema.validation,\n\t\t\tactions: input.getOption('omit-actions') ? emptySchema.actions : schema.actions,\n\t\t\tsettings: input.getOption('omit-settings') ? emptySchema.settings : schema.settings,\n\t\t}\n\n\t\tif (!validateSchemaAndPrintErrors(filteredSchema, 'Defined schema is invalid:')) {\n\t\t\treturn 1\n\t\t}\n\n\t\tconst permissionFactory = new PermissionFactory()\n\t\tconst inputRoles = input.getOption('role')\n\t\tconst schemaNormalized = input.getOption('normalize') ? normalizeSchema(filteredSchema) : filteredSchema\n\t\tconst permissions = permissionFactory.create(schemaNormalized, inputRoles || ['admin'])\n\t\tconst schemaBuilderFactory = new GraphQlSchemaBuilderFactory()\n\t\tconst authorizator = new Authorizator(permissions, schemaNormalized.acl.customPrimary ?? false)\n\t\tconst introspection = new IntrospectionSchemaFactory(\n\t\t\tschemaNormalized.model,\n\t\t\tnew EntityRulesResolver(schemaNormalized.validation, schemaNormalized.model),\n\t\t\tauthorizator,\n\t\t)\n\n\t\tconst printByLine = (out: string) => {\n\t\t\tout.split('\\n').forEach(line => {\n\t\t\t\tprocess.stdout.write(line + '\\n')\n\t\t\t})\n\t\t}\n\t\tif (format === 'schema') {\n\t\t\tif (inputRoles) {\n\t\t\t\tthrow `--roles option is not supported for \"schema\" format`\n\t\t\t}\n\t\t\tconst jsonString = JSON.stringify(schemaNormalized, null, '\\t')\n\t\t\tprintByLine(jsonString)\n\t\t} else if (format === 'introspection') {\n\t\t\tprintByLine(JSON.stringify(introspection.create(), null, '\\t'))\n\t\t} else if (format === 'graphql') {\n\t\t\tconst contentSchema = schemaBuilderFactory.create(schemaNormalized.model, authorizator).build()\n\t\t\tconst introspectionSchemaFactory = new IntrospectionSchemaDefinitionFactory(introspection)\n\t\t\tconst introspectionSchema = introspectionSchemaFactory.create()\n\t\t\tconst gqlSchema = mergeSchemas({\n\t\t\t\tschemas: [contentSchema, introspectionSchema],\n\t\t\t})\n\t\t\tgqlSchema.description = '' // this enforces schema definition print\n\t\t\tconst printedSchema = printSchema(gqlSchema).replace('\"\"\"\"\"\"\\n', '') // remove empty comment\n\t\t\tprintByLine(printedSchema)\n\t\t} else {\n\t\t\tthrow `Unknown format ${format}`\n\t\t}\n\n\t\treturn 0\n\t}\n}\n"],"names":[],"mappings":";;;;;;AA8BO,MAAM,kCAAkC,QAAuB;AAAA,EACrE,YACkB,cACA,sBAChB;AACK;AAHW,SAAA,eAAA;AACA,SAAA,uBAAA;AAAA,EAGlB;AAAA,EAEU,UAAU,eAA0D;AAC7E,kBAAc,YAAY,uBAAuB;AACjD,kBAAc,OAAO,QAAQ,EAAE,cAAc,EAAE,YAAY,8BAA8B;AACzF,kBAAc,OAAO,QAAQ,EAAE,cAAc,EAAE,YAAY,uBAAuB;AACpE,kBAAA,OAAO,MAAM,EAAE,WAAW;AAC1B,kBAAA,OAAO,WAAW,EAAE,UAAU;AAC9B,kBAAA,OAAO,UAAU,EAAE,UAAU;AAC7B,kBAAA,OAAO,iBAAiB,EAAE,UAAU;AACpC,kBAAA,OAAO,cAAc,EAAE,UAAU;AACjC,kBAAA,OAAO,eAAe,EAAE,UAAU;AAAA,EACjD;AAAA,EAEA,MAAgB,QAAQ,OAA8C;AACrE,UAAM,SAAS,MAAM,UAAU,QAAQ,KAAK;AAG5C,UAAM,SAAS,MAAM,UAAU,QAAQ,MAAM,eAC1C,MAAM,KAAK,qBAAqB,YAAY,IAC5C,MAAM,KAAK,aAAa,WAAW;AAEtC,UAAM,iBAAiB;AAAA,MACtB,OAAO,OAAO;AAAA,MACd,KAAK,MAAM,UAAU,UAAU,IAAI,YAAY,MAAM,OAAO;AAAA,MAC5D,YAAY,MAAM,UAAU,iBAAiB,IAAI,YAAY,aAAa,OAAO;AAAA,MACjF,SAAS,MAAM,UAAU,cAAc,IAAI,YAAY,UAAU,OAAO;AAAA,MACxE,UAAU,MAAM,UAAU,eAAe,IAAI,YAAY,WAAW,OAAO;AAAA,IAAA;AAG5E,QAAI,CAAC,6BAA6B,gBAAgB,4BAA4B,GAAG;AACzE,aAAA;AAAA,IACR;AAEM,UAAA,oBAAoB,IAAI;AACxB,UAAA,aAAa,MAAM,UAAU,MAAM;AACzC,UAAM,mBAAmB,MAAM,UAAU,WAAW,IAAI,gBAAgB,cAAc,IAAI;AAC1F,UAAM,cAAc,kBAAkB,OAAO,kBAAkB,cAAc,CAAC,OAAO,CAAC;AAChF,UAAA,uBAAuB,IAAI;AACjC,UAAM,eAAe,IAAI,aAAa,aAAa,iBAAiB,IAAI,iBAAiB,KAAK;AAC9F,UAAM,gBAAgB,IAAI;AAAA,MACzB,iBAAiB;AAAA,MACjB,IAAI,oBAAoB,iBAAiB,YAAY,iBAAiB,KAAK;AAAA,MAC3E;AAAA,IAAA;AAGK,UAAA,cAAc,CAAC,QAAgB;AACpC,UAAI,MAAM,IAAI,EAAE,QAAQ,CAAQ,SAAA;AACvB,gBAAA,OAAO,MAAM,OAAO,IAAI;AAAA,MAAA,CAChC;AAAA,IAAA;AAEF,QAAI,WAAW,UAAU;AACxB,UAAI,YAAY;AACT,cAAA;AAAA,MACP;AACA,YAAM,aAAa,KAAK,UAAU,kBAAkB,MAAM,GAAI;AAC9D,kBAAY,UAAU;AAAA,IAAA,WACZ,WAAW,iBAAiB;AACtC,kBAAY,KAAK,UAAU,cAAc,UAAU,MAAM,GAAI,CAAC;AAAA,IAAA,WACpD,WAAW,WAAW;AAChC,YAAM,gBAAgB,qBAAqB,OAAO,iBAAiB,OAAO,YAAY,EAAE;AAClF,YAAA,6BAA6B,IAAI,qCAAqC,aAAa;AACnF,YAAA,sBAAsB,2BAA2B;AACvD,YAAM,YAAY,aAAa;AAAA,QAC9B,SAAS,CAAC,eAAe,mBAAmB;AAAA,MAAA,CAC5C;AACD,gBAAU,cAAc;AACxB,YAAM,gBAAgB,YAAY,SAAS,EAAE,QAAQ,YAAY,EAAE;AACnE,kBAAY,aAAa;AAAA,IAAA,OACnB;AACN,YAAM,kBAAkB,MAAM;AAAA,IAC/B;AAEO,WAAA;AAAA,EACR;AACD;"}
|
|
@@ -20,6 +20,7 @@ class ExportCommand extends cliCommon.Command {
|
|
|
20
20
|
configuration.option("no-gzip-transfer").valueNone();
|
|
21
21
|
configuration.option("no-gzip-output").valueNone();
|
|
22
22
|
configuration.option("output").valueRequired();
|
|
23
|
+
configuration.option("exclude-table").valueArray();
|
|
23
24
|
}
|
|
24
25
|
async execute(input) {
|
|
25
26
|
const from = input.getArgument("source");
|
|
@@ -38,6 +39,7 @@ class ExportCommand extends cliCommon.Command {
|
|
|
38
39
|
const includeSystem = input.getOption("include-system") === true;
|
|
39
40
|
const response = await this.dataTransferClient.dataExport({
|
|
40
41
|
project,
|
|
42
|
+
excludeTables: input.getOption("exclude-table") ?? [],
|
|
41
43
|
includeSystem,
|
|
42
44
|
gzip: gzipTransfer
|
|
43
45
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportCommand.cjs","sources":["../../../../../../packages/cli/src/commands/transfer/ExportCommand.ts"],"sourcesContent":["import { Command, CommandConfiguration, Input } from '@contember/cli-common'\nimport { createWriteStream } from 'node:fs'\nimport { maskToken } from '../../lib/maskToken'\nimport { pipeline } from 'node:stream/promises'\nimport { printProgressLine } from '../../lib/transfer/stdio'\nimport { createGunzip, createGzip } from 'node:zlib'\nimport { RemoteProjectResolver } from '../../lib/project/RemoteProjectResolver'\nimport { DataTransferClient } from '../../lib/transfer/DataTransferClient'\n\ntype Args = {\n\tsource?: string\n}\ntype Options = {\n\t'include-system'?: boolean\n\t/** @deprecated */\n\t'no-gzip'?: boolean\n\t'no-gzip-output'?: boolean\n\t'no-gzip-transfer'?: boolean\n\toutput?: string\n}\n\nexport class ExportCommand extends Command<Args, Options> {\n\tconstructor(\n\t\tprivate readonly remoteProjectResolver: RemoteProjectResolver,\n\t\tprivate readonly dataTransferClient: DataTransferClient,\n\t) {\n\t\tsuper()\n\t}\n\n\tprotected configure(configuration: CommandConfiguration<Args, Options>): void {\n\t\tconfiguration.description('Export data from a project')\n\t\tconfiguration.argument('source').optional()\n\t\tconfiguration.option('include-system').valueNone()\n\t\tconfiguration.option('no-gzip').valueNone().deprecated()\n\t\tconfiguration.option('no-gzip-transfer').valueNone()\n\t\tconfiguration.option('no-gzip-output').valueNone()\n\t\tconfiguration.option('output').valueRequired()\n\t}\n\n\tprotected async execute(input: Input<Args, Options>): Promise<void | number> {\n\t\tconst from = input.getArgument('source')\n\t\tconst project = await this.remoteProjectResolver.resolve(from)\n\t\tif (!project) {\n\t\t\tthrow `Project not defined`\n\t\t}\n\n\t\tconsole.log('')\n\t\tconsole.log('Exporting data from a following project')\n\t\tconsole.log('')\n\t\tconsole.log(`Project name: ${project.name}`)\n\t\tconsole.log(`API URL: ${project.endpoint}`)\n\t\tconsole.log(`Token: ${maskToken(project.token)}`)\n\n\t\tconst gzipOutput = !input.getOption('no-gzip-output') && !input.getOption('no-gzip')\n\t\tconst gzipTransfer = !input.getOption('no-gzip-transfer')\n\n\t\tconst includeSystem = input.getOption('include-system') === true\n\n\t\tconst response = await this.dataTransferClient.dataExport({\n\t\t\tproject,\n\t\t\tincludeSystem,\n\t\t\tgzip: gzipTransfer,\n\t\t})\n\n\t\tlet transferred = 0\n\t\tlet start = Date.now()\n\t\tlet lastMbReported = 0\n\t\tconsole.log('')\n\t\tresponse.on('data', chunk => {\n\t\t\ttransferred += chunk.length\n\t\t\tconst currentMb = Math.floor(transferred / 1024 / 1024)\n\t\t\tif (currentMb > lastMbReported) {\n\t\t\t\tconst durationS = Math.floor((Date.now() - start) / 1000)\n\t\t\t\tprintProgressLine(`transferred ${currentMb} MiB; ${durationS} seconds`)\n\t\t\t\tlastMbReported = currentMb\n\t\t\t}\n\t\t})\n\n\t\tconst fileName = input.getOption('output') ?? `${project.name}.jsonl${gzipOutput ? '.gz' : ''}`\n\t\tconst fileStream = createWriteStream(fileName)\n\n\t\tconst responseStream = gzipOutput === gzipTransfer\n\t\t\t? response\n\t\t\t: response.pipe(gzipOutput ? createGzip() : createGunzip())\n\n\t\tawait pipeline(responseStream, fileStream)\n\n\t\tconsole.log('\\nExport done.')\n\t\tconsole.log(`Data saved to ${fileName}`)\n\t}\n}\n"],"names":["Command","maskToken","printProgressLine","createWriteStream","createGzip","createGunzip","pipeline"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"ExportCommand.cjs","sources":["../../../../../../packages/cli/src/commands/transfer/ExportCommand.ts"],"sourcesContent":["import { Command, CommandConfiguration, Input } from '@contember/cli-common'\nimport { createWriteStream } from 'node:fs'\nimport { maskToken } from '../../lib/maskToken'\nimport { pipeline } from 'node:stream/promises'\nimport { printProgressLine } from '../../lib/transfer/stdio'\nimport { createGunzip, createGzip } from 'node:zlib'\nimport { RemoteProjectResolver } from '../../lib/project/RemoteProjectResolver'\nimport { DataTransferClient } from '../../lib/transfer/DataTransferClient'\n\ntype Args = {\n\tsource?: string\n}\ntype Options = {\n\t'include-system'?: boolean\n\t/** @deprecated */\n\t'no-gzip'?: boolean\n\t'no-gzip-output'?: boolean\n\t'no-gzip-transfer'?: boolean\n\toutput?: string\n\t'exclude-table'?: string[]\n}\n\nexport class ExportCommand extends Command<Args, Options> {\n\tconstructor(\n\t\tprivate readonly remoteProjectResolver: RemoteProjectResolver,\n\t\tprivate readonly dataTransferClient: DataTransferClient,\n\t) {\n\t\tsuper()\n\t}\n\n\tprotected configure(configuration: CommandConfiguration<Args, Options>): void {\n\t\tconfiguration.description('Export data from a project')\n\t\tconfiguration.argument('source').optional()\n\t\tconfiguration.option('include-system').valueNone()\n\t\tconfiguration.option('no-gzip').valueNone().deprecated()\n\t\tconfiguration.option('no-gzip-transfer').valueNone()\n\t\tconfiguration.option('no-gzip-output').valueNone()\n\t\tconfiguration.option('output').valueRequired()\n\t\tconfiguration.option('exclude-table').valueArray()\n\t}\n\n\tprotected async execute(input: Input<Args, Options>): Promise<void | number> {\n\t\tconst from = input.getArgument('source')\n\t\tconst project = await this.remoteProjectResolver.resolve(from)\n\t\tif (!project) {\n\t\t\tthrow `Project not defined`\n\t\t}\n\n\t\tconsole.log('')\n\t\tconsole.log('Exporting data from a following project')\n\t\tconsole.log('')\n\t\tconsole.log(`Project name: ${project.name}`)\n\t\tconsole.log(`API URL: ${project.endpoint}`)\n\t\tconsole.log(`Token: ${maskToken(project.token)}`)\n\n\t\tconst gzipOutput = !input.getOption('no-gzip-output') && !input.getOption('no-gzip')\n\t\tconst gzipTransfer = !input.getOption('no-gzip-transfer')\n\n\t\tconst includeSystem = input.getOption('include-system') === true\n\n\t\tconst response = await this.dataTransferClient.dataExport({\n\t\t\tproject,\n\t\t\texcludeTables: input.getOption('exclude-table') ?? [],\n\t\t\tincludeSystem,\n\t\t\tgzip: gzipTransfer,\n\t\t})\n\n\t\tlet transferred = 0\n\t\tlet start = Date.now()\n\t\tlet lastMbReported = 0\n\t\tconsole.log('')\n\t\tresponse.on('data', chunk => {\n\t\t\ttransferred += chunk.length\n\t\t\tconst currentMb = Math.floor(transferred / 1024 / 1024)\n\t\t\tif (currentMb > lastMbReported) {\n\t\t\t\tconst durationS = Math.floor((Date.now() - start) / 1000)\n\t\t\t\tprintProgressLine(`transferred ${currentMb} MiB; ${durationS} seconds`)\n\t\t\t\tlastMbReported = currentMb\n\t\t\t}\n\t\t})\n\n\t\tconst fileName = input.getOption('output') ?? `${project.name}.jsonl${gzipOutput ? '.gz' : ''}`\n\t\tconst fileStream = createWriteStream(fileName)\n\n\t\tconst responseStream = gzipOutput === gzipTransfer\n\t\t\t? response\n\t\t\t: response.pipe(gzipOutput ? createGzip() : createGunzip())\n\n\t\tawait pipeline(responseStream, fileStream)\n\n\t\tconsole.log('\\nExport done.')\n\t\tconsole.log(`Data saved to ${fileName}`)\n\t}\n}\n"],"names":["Command","maskToken","printProgressLine","createWriteStream","createGzip","createGunzip","pipeline"],"mappings":";;;;;;;;AAsBO,MAAM,sBAAsBA,UAAAA,QAAuB;AAAA,EACzD,YACkB,uBACA,oBAChB;AACK;AAHW,SAAA,wBAAA;AACA,SAAA,qBAAA;AAAA,EAGlB;AAAA,EAEU,UAAU,eAA0D;AAC7E,kBAAc,YAAY,4BAA4B;AACxC,kBAAA,SAAS,QAAQ,EAAE,SAAS;AAC5B,kBAAA,OAAO,gBAAgB,EAAE,UAAU;AACjD,kBAAc,OAAO,SAAS,EAAE,YAAY,WAAW;AACzC,kBAAA,OAAO,kBAAkB,EAAE,UAAU;AACrC,kBAAA,OAAO,gBAAgB,EAAE,UAAU;AACnC,kBAAA,OAAO,QAAQ,EAAE,cAAc;AAC/B,kBAAA,OAAO,eAAe,EAAE,WAAW;AAAA,EAClD;AAAA,EAEA,MAAgB,QAAQ,OAAqD;AACtE,UAAA,OAAO,MAAM,YAAY,QAAQ;AACvC,UAAM,UAAU,MAAM,KAAK,sBAAsB,QAAQ,IAAI;AAC7D,QAAI,CAAC,SAAS;AACP,YAAA;AAAA,IACP;AAEA,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,yCAAyC;AACrD,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,iBAAiB,QAAQ,IAAI,EAAE;AAC3C,YAAQ,IAAI,YAAY,QAAQ,QAAQ,EAAE;AAC1C,YAAQ,IAAI,UAAUC,UAAAA,UAAU,QAAQ,KAAK,CAAC,EAAE;AAE1C,UAAA,aAAa,CAAC,MAAM,UAAU,gBAAgB,KAAK,CAAC,MAAM,UAAU,SAAS;AACnF,UAAM,eAAe,CAAC,MAAM,UAAU,kBAAkB;AAExD,UAAM,gBAAgB,MAAM,UAAU,gBAAgB,MAAM;AAE5D,UAAM,WAAW,MAAM,KAAK,mBAAmB,WAAW;AAAA,MACzD;AAAA,MACA,eAAe,MAAM,UAAU,eAAe,KAAK,CAAC;AAAA,MACpD;AAAA,MACA,MAAM;AAAA,IAAA,CACN;AAED,QAAI,cAAc;AACd,QAAA,QAAQ,KAAK;AACjB,QAAI,iBAAiB;AACrB,YAAQ,IAAI,EAAE;AACL,aAAA,GAAG,QAAQ,CAAS,UAAA;AAC5B,qBAAe,MAAM;AACrB,YAAM,YAAY,KAAK,MAAM,cAAc,OAAO,IAAI;AACtD,UAAI,YAAY,gBAAgB;AAC/B,cAAM,YAAY,KAAK,OAAO,KAAK,IAAI,IAAI,SAAS,GAAI;AACxDC,cAAA,kBAAkB,eAAe,SAAS,SAAS,SAAS,UAAU;AACrD,yBAAA;AAAA,MAClB;AAAA,IAAA,CACA;AAEK,UAAA,WAAW,MAAM,UAAU,QAAQ,KAAK,GAAG,QAAQ,IAAI,SAAS,aAAa,QAAQ,EAAE;AACvF,UAAA,aAAaC,0BAAkB,QAAQ;AAEvC,UAAA,iBAAiB,eAAe,eACnC,WACA,SAAS,KAAK,aAAaC,UAAAA,eAAeC,UAAAA,aAAc,CAAA;AAErD,UAAAC,SAAA,SAAS,gBAAgB,UAAU;AAEzC,YAAQ,IAAI,gBAAgB;AACpB,YAAA,IAAI,iBAAiB,QAAQ,EAAE;AAAA,EACxC;AACD;;"}
|
|
@@ -18,6 +18,7 @@ class ExportCommand extends Command {
|
|
|
18
18
|
configuration.option("no-gzip-transfer").valueNone();
|
|
19
19
|
configuration.option("no-gzip-output").valueNone();
|
|
20
20
|
configuration.option("output").valueRequired();
|
|
21
|
+
configuration.option("exclude-table").valueArray();
|
|
21
22
|
}
|
|
22
23
|
async execute(input) {
|
|
23
24
|
const from = input.getArgument("source");
|
|
@@ -36,6 +37,7 @@ class ExportCommand extends Command {
|
|
|
36
37
|
const includeSystem = input.getOption("include-system") === true;
|
|
37
38
|
const response = await this.dataTransferClient.dataExport({
|
|
38
39
|
project,
|
|
40
|
+
excludeTables: input.getOption("exclude-table") ?? [],
|
|
39
41
|
includeSystem,
|
|
40
42
|
gzip: gzipTransfer
|
|
41
43
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportCommand.js","sources":["../../../../../../packages/cli/src/commands/transfer/ExportCommand.ts"],"sourcesContent":["import { Command, CommandConfiguration, Input } from '@contember/cli-common'\nimport { createWriteStream } from 'node:fs'\nimport { maskToken } from '../../lib/maskToken'\nimport { pipeline } from 'node:stream/promises'\nimport { printProgressLine } from '../../lib/transfer/stdio'\nimport { createGunzip, createGzip } from 'node:zlib'\nimport { RemoteProjectResolver } from '../../lib/project/RemoteProjectResolver'\nimport { DataTransferClient } from '../../lib/transfer/DataTransferClient'\n\ntype Args = {\n\tsource?: string\n}\ntype Options = {\n\t'include-system'?: boolean\n\t/** @deprecated */\n\t'no-gzip'?: boolean\n\t'no-gzip-output'?: boolean\n\t'no-gzip-transfer'?: boolean\n\toutput?: string\n}\n\nexport class ExportCommand extends Command<Args, Options> {\n\tconstructor(\n\t\tprivate readonly remoteProjectResolver: RemoteProjectResolver,\n\t\tprivate readonly dataTransferClient: DataTransferClient,\n\t) {\n\t\tsuper()\n\t}\n\n\tprotected configure(configuration: CommandConfiguration<Args, Options>): void {\n\t\tconfiguration.description('Export data from a project')\n\t\tconfiguration.argument('source').optional()\n\t\tconfiguration.option('include-system').valueNone()\n\t\tconfiguration.option('no-gzip').valueNone().deprecated()\n\t\tconfiguration.option('no-gzip-transfer').valueNone()\n\t\tconfiguration.option('no-gzip-output').valueNone()\n\t\tconfiguration.option('output').valueRequired()\n\t}\n\n\tprotected async execute(input: Input<Args, Options>): Promise<void | number> {\n\t\tconst from = input.getArgument('source')\n\t\tconst project = await this.remoteProjectResolver.resolve(from)\n\t\tif (!project) {\n\t\t\tthrow `Project not defined`\n\t\t}\n\n\t\tconsole.log('')\n\t\tconsole.log('Exporting data from a following project')\n\t\tconsole.log('')\n\t\tconsole.log(`Project name: ${project.name}`)\n\t\tconsole.log(`API URL: ${project.endpoint}`)\n\t\tconsole.log(`Token: ${maskToken(project.token)}`)\n\n\t\tconst gzipOutput = !input.getOption('no-gzip-output') && !input.getOption('no-gzip')\n\t\tconst gzipTransfer = !input.getOption('no-gzip-transfer')\n\n\t\tconst includeSystem = input.getOption('include-system') === true\n\n\t\tconst response = await this.dataTransferClient.dataExport({\n\t\t\tproject,\n\t\t\tincludeSystem,\n\t\t\tgzip: gzipTransfer,\n\t\t})\n\n\t\tlet transferred = 0\n\t\tlet start = Date.now()\n\t\tlet lastMbReported = 0\n\t\tconsole.log('')\n\t\tresponse.on('data', chunk => {\n\t\t\ttransferred += chunk.length\n\t\t\tconst currentMb = Math.floor(transferred / 1024 / 1024)\n\t\t\tif (currentMb > lastMbReported) {\n\t\t\t\tconst durationS = Math.floor((Date.now() - start) / 1000)\n\t\t\t\tprintProgressLine(`transferred ${currentMb} MiB; ${durationS} seconds`)\n\t\t\t\tlastMbReported = currentMb\n\t\t\t}\n\t\t})\n\n\t\tconst fileName = input.getOption('output') ?? `${project.name}.jsonl${gzipOutput ? '.gz' : ''}`\n\t\tconst fileStream = createWriteStream(fileName)\n\n\t\tconst responseStream = gzipOutput === gzipTransfer\n\t\t\t? response\n\t\t\t: response.pipe(gzipOutput ? createGzip() : createGunzip())\n\n\t\tawait pipeline(responseStream, fileStream)\n\n\t\tconsole.log('\\nExport done.')\n\t\tconsole.log(`Data saved to ${fileName}`)\n\t}\n}\n"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"ExportCommand.js","sources":["../../../../../../packages/cli/src/commands/transfer/ExportCommand.ts"],"sourcesContent":["import { Command, CommandConfiguration, Input } from '@contember/cli-common'\nimport { createWriteStream } from 'node:fs'\nimport { maskToken } from '../../lib/maskToken'\nimport { pipeline } from 'node:stream/promises'\nimport { printProgressLine } from '../../lib/transfer/stdio'\nimport { createGunzip, createGzip } from 'node:zlib'\nimport { RemoteProjectResolver } from '../../lib/project/RemoteProjectResolver'\nimport { DataTransferClient } from '../../lib/transfer/DataTransferClient'\n\ntype Args = {\n\tsource?: string\n}\ntype Options = {\n\t'include-system'?: boolean\n\t/** @deprecated */\n\t'no-gzip'?: boolean\n\t'no-gzip-output'?: boolean\n\t'no-gzip-transfer'?: boolean\n\toutput?: string\n\t'exclude-table'?: string[]\n}\n\nexport class ExportCommand extends Command<Args, Options> {\n\tconstructor(\n\t\tprivate readonly remoteProjectResolver: RemoteProjectResolver,\n\t\tprivate readonly dataTransferClient: DataTransferClient,\n\t) {\n\t\tsuper()\n\t}\n\n\tprotected configure(configuration: CommandConfiguration<Args, Options>): void {\n\t\tconfiguration.description('Export data from a project')\n\t\tconfiguration.argument('source').optional()\n\t\tconfiguration.option('include-system').valueNone()\n\t\tconfiguration.option('no-gzip').valueNone().deprecated()\n\t\tconfiguration.option('no-gzip-transfer').valueNone()\n\t\tconfiguration.option('no-gzip-output').valueNone()\n\t\tconfiguration.option('output').valueRequired()\n\t\tconfiguration.option('exclude-table').valueArray()\n\t}\n\n\tprotected async execute(input: Input<Args, Options>): Promise<void | number> {\n\t\tconst from = input.getArgument('source')\n\t\tconst project = await this.remoteProjectResolver.resolve(from)\n\t\tif (!project) {\n\t\t\tthrow `Project not defined`\n\t\t}\n\n\t\tconsole.log('')\n\t\tconsole.log('Exporting data from a following project')\n\t\tconsole.log('')\n\t\tconsole.log(`Project name: ${project.name}`)\n\t\tconsole.log(`API URL: ${project.endpoint}`)\n\t\tconsole.log(`Token: ${maskToken(project.token)}`)\n\n\t\tconst gzipOutput = !input.getOption('no-gzip-output') && !input.getOption('no-gzip')\n\t\tconst gzipTransfer = !input.getOption('no-gzip-transfer')\n\n\t\tconst includeSystem = input.getOption('include-system') === true\n\n\t\tconst response = await this.dataTransferClient.dataExport({\n\t\t\tproject,\n\t\t\texcludeTables: input.getOption('exclude-table') ?? [],\n\t\t\tincludeSystem,\n\t\t\tgzip: gzipTransfer,\n\t\t})\n\n\t\tlet transferred = 0\n\t\tlet start = Date.now()\n\t\tlet lastMbReported = 0\n\t\tconsole.log('')\n\t\tresponse.on('data', chunk => {\n\t\t\ttransferred += chunk.length\n\t\t\tconst currentMb = Math.floor(transferred / 1024 / 1024)\n\t\t\tif (currentMb > lastMbReported) {\n\t\t\t\tconst durationS = Math.floor((Date.now() - start) / 1000)\n\t\t\t\tprintProgressLine(`transferred ${currentMb} MiB; ${durationS} seconds`)\n\t\t\t\tlastMbReported = currentMb\n\t\t\t}\n\t\t})\n\n\t\tconst fileName = input.getOption('output') ?? `${project.name}.jsonl${gzipOutput ? '.gz' : ''}`\n\t\tconst fileStream = createWriteStream(fileName)\n\n\t\tconst responseStream = gzipOutput === gzipTransfer\n\t\t\t? response\n\t\t\t: response.pipe(gzipOutput ? createGzip() : createGunzip())\n\n\t\tawait pipeline(responseStream, fileStream)\n\n\t\tconsole.log('\\nExport done.')\n\t\tconsole.log(`Data saved to ${fileName}`)\n\t}\n}\n"],"names":[],"mappings":";;;;;;AAsBO,MAAM,sBAAsB,QAAuB;AAAA,EACzD,YACkB,uBACA,oBAChB;AACK;AAHW,SAAA,wBAAA;AACA,SAAA,qBAAA;AAAA,EAGlB;AAAA,EAEU,UAAU,eAA0D;AAC7E,kBAAc,YAAY,4BAA4B;AACxC,kBAAA,SAAS,QAAQ,EAAE,SAAS;AAC5B,kBAAA,OAAO,gBAAgB,EAAE,UAAU;AACjD,kBAAc,OAAO,SAAS,EAAE,YAAY,WAAW;AACzC,kBAAA,OAAO,kBAAkB,EAAE,UAAU;AACrC,kBAAA,OAAO,gBAAgB,EAAE,UAAU;AACnC,kBAAA,OAAO,QAAQ,EAAE,cAAc;AAC/B,kBAAA,OAAO,eAAe,EAAE,WAAW;AAAA,EAClD;AAAA,EAEA,MAAgB,QAAQ,OAAqD;AACtE,UAAA,OAAO,MAAM,YAAY,QAAQ;AACvC,UAAM,UAAU,MAAM,KAAK,sBAAsB,QAAQ,IAAI;AAC7D,QAAI,CAAC,SAAS;AACP,YAAA;AAAA,IACP;AAEA,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,yCAAyC;AACrD,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,iBAAiB,QAAQ,IAAI,EAAE;AAC3C,YAAQ,IAAI,YAAY,QAAQ,QAAQ,EAAE;AAC1C,YAAQ,IAAI,UAAU,UAAU,QAAQ,KAAK,CAAC,EAAE;AAE1C,UAAA,aAAa,CAAC,MAAM,UAAU,gBAAgB,KAAK,CAAC,MAAM,UAAU,SAAS;AACnF,UAAM,eAAe,CAAC,MAAM,UAAU,kBAAkB;AAExD,UAAM,gBAAgB,MAAM,UAAU,gBAAgB,MAAM;AAE5D,UAAM,WAAW,MAAM,KAAK,mBAAmB,WAAW;AAAA,MACzD;AAAA,MACA,eAAe,MAAM,UAAU,eAAe,KAAK,CAAC;AAAA,MACpD;AAAA,MACA,MAAM;AAAA,IAAA,CACN;AAED,QAAI,cAAc;AACd,QAAA,QAAQ,KAAK;AACjB,QAAI,iBAAiB;AACrB,YAAQ,IAAI,EAAE;AACL,aAAA,GAAG,QAAQ,CAAS,UAAA;AAC5B,qBAAe,MAAM;AACrB,YAAM,YAAY,KAAK,MAAM,cAAc,OAAO,IAAI;AACtD,UAAI,YAAY,gBAAgB;AAC/B,cAAM,YAAY,KAAK,OAAO,KAAK,IAAI,IAAI,SAAS,GAAI;AACxD,0BAAkB,eAAe,SAAS,SAAS,SAAS,UAAU;AACrD,yBAAA;AAAA,MAClB;AAAA,IAAA,CACA;AAEK,UAAA,WAAW,MAAM,UAAU,QAAQ,KAAK,GAAG,QAAQ,IAAI,SAAS,aAAa,QAAQ,EAAE;AACvF,UAAA,aAAa,kBAAkB,QAAQ;AAEvC,UAAA,iBAAiB,eAAe,eACnC,WACA,SAAS,KAAK,aAAa,eAAe,aAAc,CAAA;AAErD,UAAA,SAAS,gBAAgB,UAAU;AAEzC,YAAQ,IAAI,gBAAgB;AACpB,YAAA,IAAI,iBAAiB,QAAQ,EAAE;AAAA,EACxC;AACD;"}
|
|
@@ -19,6 +19,7 @@ class TransferCommand extends cliCommon.Command {
|
|
|
19
19
|
configuration.option("include-system").valueNone();
|
|
20
20
|
configuration.option("no-gzip-transfer").valueNone();
|
|
21
21
|
configuration.option("yes").valueNone();
|
|
22
|
+
configuration.option("exclude-table").valueArray();
|
|
22
23
|
}
|
|
23
24
|
async execute(input) {
|
|
24
25
|
const source = input.getArgument("source");
|
|
@@ -50,6 +51,7 @@ class TransferCommand extends cliCommon.Command {
|
|
|
50
51
|
const exportResponse = await this.dataTransferClient.dataExport({
|
|
51
52
|
project: sourceProject,
|
|
52
53
|
includeSystem,
|
|
54
|
+
excludeTables: input.getOption("exclude-table") ?? [],
|
|
53
55
|
gzip: gzipTransfer
|
|
54
56
|
});
|
|
55
57
|
const ungzipedResponse = gzipTransfer ? exportResponse.pipe(node_zlib.createGunzip()) : exportResponse;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransferCommand.cjs","sources":["../../../../../../packages/cli/src/commands/transfer/TransferCommand.ts"],"sourcesContent":["import { Command, CommandConfiguration, Input } from '@contember/cli-common'\nimport { confirmImport } from './utils'\nimport { maskToken } from '../../lib/maskToken'\nimport { printProgressLine } from '../../lib/transfer/stdio'\nimport { readStream } from '../../lib/stream'\nimport { createGunzip } from 'node:zlib'\nimport { RemoteProjectResolver } from '../../lib/project/RemoteProjectResolver'\nimport { DataTransferClient } from '../../lib/transfer/DataTransferClient'\n\ntype Args = {\n\tsource: string\n\ttarget: string\n}\ntype Options = {\n\t'include-system'?: boolean\n\t'no-gzip-transfer'?: boolean\n\tyes: boolean\n}\n\nexport class TransferCommand extends Command<Args, Options> {\n\tconstructor(\n\t\tprivate readonly remoteProjectResolver: RemoteProjectResolver,\n\t\tprivate readonly dataTransferClient: DataTransferClient,\n\t) {\n\t\tsuper()\n\t}\n\n\tprotected configure(configuration: CommandConfiguration<Args, Options>): void {\n\t\tconfiguration.description('Transfer data between projects')\n\t\tconfiguration.argument('source')\n\t\tconfiguration.argument('target').optional()\n\t\tconfiguration.option('include-system').valueNone()\n\t\tconfiguration.option('no-gzip-transfer').valueNone()\n\t\tconfiguration.option('yes').valueNone()\n\t}\n\n\tprotected async execute(input: Input<Args, Options>): Promise<void | number> {\n\t\tconst source = input.getArgument('source')\n\t\tconst sourceProject = await this.remoteProjectResolver.resolve(source)\n\t\tif (!sourceProject) {\n\t\t\tthrow `Source project not defined`\n\t\t}\n\n\t\tconst target = input.getArgument('target')\n\t\tconst targetProject = await this.remoteProjectResolver.resolve(target)\n\t\tif (!targetProject) {\n\t\t\tthrow `Target project not defined`\n\t\t}\n\n\n\t\tconsole.log('')\n\t\tconsole.log('Transferring data between projects:')\n\t\tconsole.log('')\n\t\tconsole.log(`Source project name: ${sourceProject.name}`)\n\t\tconsole.log(`Source API URL: ${sourceProject.endpoint}`)\n\t\tconsole.log(`Source token: ${maskToken(sourceProject.token)}`)\n\t\tconsole.log('')\n\t\tconsole.log(`Target project name: ${targetProject.name}`)\n\t\tconsole.log(`Target API URL: ${targetProject.endpoint}`)\n\t\tconsole.log(`Target token: ${maskToken(targetProject.token)}`)\n\t\tconsole.log('')\n\t\tif (!await confirmImport(input)) {\n\t\t\treturn 1\n\t\t}\n\n\t\tconst includeSystem = input.getOption('include-system') === true\n\t\tconst gzipTransfer = !input.getOption('no-gzip-transfer')\n\t\tconst exportResponse = (await this.dataTransferClient.dataExport({\n\t\t\tproject: sourceProject,\n\t\t\tincludeSystem,\n\t\t\tgzip: gzipTransfer,\n\t\t}))\n\t\tconst ungzipedResponse = gzipTransfer ? exportResponse.pipe(createGunzip()) : exportResponse\n\t\tconst importResponse = await this.dataTransferClient.dataImport({\n\t\t\tstream: ungzipedResponse,\n\t\t\tproject: targetProject,\n\t\t\tprintProgress: printProgressLine,\n\t\t\tgzip: gzipTransfer,\n\t\t})\n\t\tconsole.log('')\n\n\t\tconst responseData = JSON.parse((await readStream(importResponse)).toString())\n\t\tif (responseData.ok) {\n\t\t\tconsole.log('Transfer done.')\n\t\t} else {\n\t\t\tconsole.error('Transfer failed:')\n\t\t\tconsole.log(responseData)\n\t\t}\n\t}\n}\n"],"names":["Command","maskToken","confirmImport","createGunzip","printProgressLine","readStream"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"TransferCommand.cjs","sources":["../../../../../../packages/cli/src/commands/transfer/TransferCommand.ts"],"sourcesContent":["import { Command, CommandConfiguration, Input } from '@contember/cli-common'\nimport { confirmImport } from './utils'\nimport { maskToken } from '../../lib/maskToken'\nimport { printProgressLine } from '../../lib/transfer/stdio'\nimport { readStream } from '../../lib/stream'\nimport { createGunzip } from 'node:zlib'\nimport { RemoteProjectResolver } from '../../lib/project/RemoteProjectResolver'\nimport { DataTransferClient } from '../../lib/transfer/DataTransferClient'\n\ntype Args = {\n\tsource: string\n\ttarget: string\n}\ntype Options = {\n\t'include-system'?: boolean\n\t'no-gzip-transfer'?: boolean\n\tyes: boolean\n\t'exclude-table'?: string[]\n}\n\nexport class TransferCommand extends Command<Args, Options> {\n\tconstructor(\n\t\tprivate readonly remoteProjectResolver: RemoteProjectResolver,\n\t\tprivate readonly dataTransferClient: DataTransferClient,\n\t) {\n\t\tsuper()\n\t}\n\n\tprotected configure(configuration: CommandConfiguration<Args, Options>): void {\n\t\tconfiguration.description('Transfer data between projects')\n\t\tconfiguration.argument('source')\n\t\tconfiguration.argument('target').optional()\n\t\tconfiguration.option('include-system').valueNone()\n\t\tconfiguration.option('no-gzip-transfer').valueNone()\n\t\tconfiguration.option('yes').valueNone()\n\t\tconfiguration.option('exclude-table').valueArray()\n\t}\n\n\tprotected async execute(input: Input<Args, Options>): Promise<void | number> {\n\t\tconst source = input.getArgument('source')\n\t\tconst sourceProject = await this.remoteProjectResolver.resolve(source)\n\t\tif (!sourceProject) {\n\t\t\tthrow `Source project not defined`\n\t\t}\n\n\t\tconst target = input.getArgument('target')\n\t\tconst targetProject = await this.remoteProjectResolver.resolve(target)\n\t\tif (!targetProject) {\n\t\t\tthrow `Target project not defined`\n\t\t}\n\n\n\t\tconsole.log('')\n\t\tconsole.log('Transferring data between projects:')\n\t\tconsole.log('')\n\t\tconsole.log(`Source project name: ${sourceProject.name}`)\n\t\tconsole.log(`Source API URL: ${sourceProject.endpoint}`)\n\t\tconsole.log(`Source token: ${maskToken(sourceProject.token)}`)\n\t\tconsole.log('')\n\t\tconsole.log(`Target project name: ${targetProject.name}`)\n\t\tconsole.log(`Target API URL: ${targetProject.endpoint}`)\n\t\tconsole.log(`Target token: ${maskToken(targetProject.token)}`)\n\t\tconsole.log('')\n\t\tif (!await confirmImport(input)) {\n\t\t\treturn 1\n\t\t}\n\n\t\tconst includeSystem = input.getOption('include-system') === true\n\t\tconst gzipTransfer = !input.getOption('no-gzip-transfer')\n\t\tconst exportResponse = (await this.dataTransferClient.dataExport({\n\t\t\tproject: sourceProject,\n\t\t\tincludeSystem,\n\t\t\texcludeTables: input.getOption('exclude-table') ?? [],\n\t\t\tgzip: gzipTransfer,\n\t\t}))\n\t\tconst ungzipedResponse = gzipTransfer ? exportResponse.pipe(createGunzip()) : exportResponse\n\t\tconst importResponse = await this.dataTransferClient.dataImport({\n\t\t\tstream: ungzipedResponse,\n\t\t\tproject: targetProject,\n\t\t\tprintProgress: printProgressLine,\n\t\t\tgzip: gzipTransfer,\n\t\t})\n\t\tconsole.log('')\n\n\t\tconst responseData = JSON.parse((await readStream(importResponse)).toString())\n\t\tif (responseData.ok) {\n\t\t\tconsole.log('Transfer done.')\n\t\t} else {\n\t\t\tconsole.error('Transfer failed:')\n\t\t\tconsole.log(responseData)\n\t\t}\n\t}\n}\n"],"names":["Command","maskToken","confirmImport","createGunzip","printProgressLine","readStream"],"mappings":";;;;;;;;AAoBO,MAAM,wBAAwBA,UAAAA,QAAuB;AAAA,EAC3D,YACkB,uBACA,oBAChB;AACK;AAHW,SAAA,wBAAA;AACA,SAAA,qBAAA;AAAA,EAGlB;AAAA,EAEU,UAAU,eAA0D;AAC7E,kBAAc,YAAY,gCAAgC;AAC1D,kBAAc,SAAS,QAAQ;AACjB,kBAAA,SAAS,QAAQ,EAAE,SAAS;AAC5B,kBAAA,OAAO,gBAAgB,EAAE,UAAU;AACnC,kBAAA,OAAO,kBAAkB,EAAE,UAAU;AACrC,kBAAA,OAAO,KAAK,EAAE,UAAU;AACxB,kBAAA,OAAO,eAAe,EAAE,WAAW;AAAA,EAClD;AAAA,EAEA,MAAgB,QAAQ,OAAqD;AACtE,UAAA,SAAS,MAAM,YAAY,QAAQ;AACzC,UAAM,gBAAgB,MAAM,KAAK,sBAAsB,QAAQ,MAAM;AACrE,QAAI,CAAC,eAAe;AACb,YAAA;AAAA,IACP;AAEM,UAAA,SAAS,MAAM,YAAY,QAAQ;AACzC,UAAM,gBAAgB,MAAM,KAAK,sBAAsB,QAAQ,MAAM;AACrE,QAAI,CAAC,eAAe;AACb,YAAA;AAAA,IACP;AAGA,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,qCAAqC;AACjD,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,wBAAwB,cAAc,IAAI,EAAE;AACxD,YAAQ,IAAI,mBAAmB,cAAc,QAAQ,EAAE;AACvD,YAAQ,IAAI,iBAAiBC,UAAAA,UAAU,cAAc,KAAK,CAAC,EAAE;AAC7D,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,wBAAwB,cAAc,IAAI,EAAE;AACxD,YAAQ,IAAI,mBAAmB,cAAc,QAAQ,EAAE;AACvD,YAAQ,IAAI,iBAAiBA,UAAAA,UAAU,cAAc,KAAK,CAAC,EAAE;AAC7D,YAAQ,IAAI,EAAE;AACd,QAAI,CAAC,MAAMC,oBAAc,KAAK,GAAG;AACzB,aAAA;AAAA,IACR;AAEA,UAAM,gBAAgB,MAAM,UAAU,gBAAgB,MAAM;AAC5D,UAAM,eAAe,CAAC,MAAM,UAAU,kBAAkB;AACxD,UAAM,iBAAkB,MAAM,KAAK,mBAAmB,WAAW;AAAA,MAChE,SAAS;AAAA,MACT;AAAA,MACA,eAAe,MAAM,UAAU,eAAe,KAAK,CAAC;AAAA,MACpD,MAAM;AAAA,IAAA,CACN;AACD,UAAM,mBAAmB,eAAe,eAAe,KAAKC,UAAA,aAAA,CAAc,IAAI;AAC9E,UAAM,iBAAiB,MAAM,KAAK,mBAAmB,WAAW;AAAA,MAC/D,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,eAAeC,MAAA;AAAA,MACf,MAAM;AAAA,IAAA,CACN;AACD,YAAQ,IAAI,EAAE;AAER,UAAA,eAAe,KAAK,OAAO,MAAMC,OAAAA,WAAW,cAAc,GAAG,UAAU;AAC7E,QAAI,aAAa,IAAI;AACpB,cAAQ,IAAI,gBAAgB;AAAA,IAAA,OACtB;AACN,cAAQ,MAAM,kBAAkB;AAChC,cAAQ,IAAI,YAAY;AAAA,IACzB;AAAA,EACD;AACD;;"}
|
|
@@ -17,6 +17,7 @@ class TransferCommand extends Command {
|
|
|
17
17
|
configuration.option("include-system").valueNone();
|
|
18
18
|
configuration.option("no-gzip-transfer").valueNone();
|
|
19
19
|
configuration.option("yes").valueNone();
|
|
20
|
+
configuration.option("exclude-table").valueArray();
|
|
20
21
|
}
|
|
21
22
|
async execute(input) {
|
|
22
23
|
const source = input.getArgument("source");
|
|
@@ -48,6 +49,7 @@ class TransferCommand extends Command {
|
|
|
48
49
|
const exportResponse = await this.dataTransferClient.dataExport({
|
|
49
50
|
project: sourceProject,
|
|
50
51
|
includeSystem,
|
|
52
|
+
excludeTables: input.getOption("exclude-table") ?? [],
|
|
51
53
|
gzip: gzipTransfer
|
|
52
54
|
});
|
|
53
55
|
const ungzipedResponse = gzipTransfer ? exportResponse.pipe(createGunzip()) : exportResponse;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransferCommand.js","sources":["../../../../../../packages/cli/src/commands/transfer/TransferCommand.ts"],"sourcesContent":["import { Command, CommandConfiguration, Input } from '@contember/cli-common'\nimport { confirmImport } from './utils'\nimport { maskToken } from '../../lib/maskToken'\nimport { printProgressLine } from '../../lib/transfer/stdio'\nimport { readStream } from '../../lib/stream'\nimport { createGunzip } from 'node:zlib'\nimport { RemoteProjectResolver } from '../../lib/project/RemoteProjectResolver'\nimport { DataTransferClient } from '../../lib/transfer/DataTransferClient'\n\ntype Args = {\n\tsource: string\n\ttarget: string\n}\ntype Options = {\n\t'include-system'?: boolean\n\t'no-gzip-transfer'?: boolean\n\tyes: boolean\n}\n\nexport class TransferCommand extends Command<Args, Options> {\n\tconstructor(\n\t\tprivate readonly remoteProjectResolver: RemoteProjectResolver,\n\t\tprivate readonly dataTransferClient: DataTransferClient,\n\t) {\n\t\tsuper()\n\t}\n\n\tprotected configure(configuration: CommandConfiguration<Args, Options>): void {\n\t\tconfiguration.description('Transfer data between projects')\n\t\tconfiguration.argument('source')\n\t\tconfiguration.argument('target').optional()\n\t\tconfiguration.option('include-system').valueNone()\n\t\tconfiguration.option('no-gzip-transfer').valueNone()\n\t\tconfiguration.option('yes').valueNone()\n\t}\n\n\tprotected async execute(input: Input<Args, Options>): Promise<void | number> {\n\t\tconst source = input.getArgument('source')\n\t\tconst sourceProject = await this.remoteProjectResolver.resolve(source)\n\t\tif (!sourceProject) {\n\t\t\tthrow `Source project not defined`\n\t\t}\n\n\t\tconst target = input.getArgument('target')\n\t\tconst targetProject = await this.remoteProjectResolver.resolve(target)\n\t\tif (!targetProject) {\n\t\t\tthrow `Target project not defined`\n\t\t}\n\n\n\t\tconsole.log('')\n\t\tconsole.log('Transferring data between projects:')\n\t\tconsole.log('')\n\t\tconsole.log(`Source project name: ${sourceProject.name}`)\n\t\tconsole.log(`Source API URL: ${sourceProject.endpoint}`)\n\t\tconsole.log(`Source token: ${maskToken(sourceProject.token)}`)\n\t\tconsole.log('')\n\t\tconsole.log(`Target project name: ${targetProject.name}`)\n\t\tconsole.log(`Target API URL: ${targetProject.endpoint}`)\n\t\tconsole.log(`Target token: ${maskToken(targetProject.token)}`)\n\t\tconsole.log('')\n\t\tif (!await confirmImport(input)) {\n\t\t\treturn 1\n\t\t}\n\n\t\tconst includeSystem = input.getOption('include-system') === true\n\t\tconst gzipTransfer = !input.getOption('no-gzip-transfer')\n\t\tconst exportResponse = (await this.dataTransferClient.dataExport({\n\t\t\tproject: sourceProject,\n\t\t\tincludeSystem,\n\t\t\tgzip: gzipTransfer,\n\t\t}))\n\t\tconst ungzipedResponse = gzipTransfer ? exportResponse.pipe(createGunzip()) : exportResponse\n\t\tconst importResponse = await this.dataTransferClient.dataImport({\n\t\t\tstream: ungzipedResponse,\n\t\t\tproject: targetProject,\n\t\t\tprintProgress: printProgressLine,\n\t\t\tgzip: gzipTransfer,\n\t\t})\n\t\tconsole.log('')\n\n\t\tconst responseData = JSON.parse((await readStream(importResponse)).toString())\n\t\tif (responseData.ok) {\n\t\t\tconsole.log('Transfer done.')\n\t\t} else {\n\t\t\tconsole.error('Transfer failed:')\n\t\t\tconsole.log(responseData)\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"TransferCommand.js","sources":["../../../../../../packages/cli/src/commands/transfer/TransferCommand.ts"],"sourcesContent":["import { Command, CommandConfiguration, Input } from '@contember/cli-common'\nimport { confirmImport } from './utils'\nimport { maskToken } from '../../lib/maskToken'\nimport { printProgressLine } from '../../lib/transfer/stdio'\nimport { readStream } from '../../lib/stream'\nimport { createGunzip } from 'node:zlib'\nimport { RemoteProjectResolver } from '../../lib/project/RemoteProjectResolver'\nimport { DataTransferClient } from '../../lib/transfer/DataTransferClient'\n\ntype Args = {\n\tsource: string\n\ttarget: string\n}\ntype Options = {\n\t'include-system'?: boolean\n\t'no-gzip-transfer'?: boolean\n\tyes: boolean\n\t'exclude-table'?: string[]\n}\n\nexport class TransferCommand extends Command<Args, Options> {\n\tconstructor(\n\t\tprivate readonly remoteProjectResolver: RemoteProjectResolver,\n\t\tprivate readonly dataTransferClient: DataTransferClient,\n\t) {\n\t\tsuper()\n\t}\n\n\tprotected configure(configuration: CommandConfiguration<Args, Options>): void {\n\t\tconfiguration.description('Transfer data between projects')\n\t\tconfiguration.argument('source')\n\t\tconfiguration.argument('target').optional()\n\t\tconfiguration.option('include-system').valueNone()\n\t\tconfiguration.option('no-gzip-transfer').valueNone()\n\t\tconfiguration.option('yes').valueNone()\n\t\tconfiguration.option('exclude-table').valueArray()\n\t}\n\n\tprotected async execute(input: Input<Args, Options>): Promise<void | number> {\n\t\tconst source = input.getArgument('source')\n\t\tconst sourceProject = await this.remoteProjectResolver.resolve(source)\n\t\tif (!sourceProject) {\n\t\t\tthrow `Source project not defined`\n\t\t}\n\n\t\tconst target = input.getArgument('target')\n\t\tconst targetProject = await this.remoteProjectResolver.resolve(target)\n\t\tif (!targetProject) {\n\t\t\tthrow `Target project not defined`\n\t\t}\n\n\n\t\tconsole.log('')\n\t\tconsole.log('Transferring data between projects:')\n\t\tconsole.log('')\n\t\tconsole.log(`Source project name: ${sourceProject.name}`)\n\t\tconsole.log(`Source API URL: ${sourceProject.endpoint}`)\n\t\tconsole.log(`Source token: ${maskToken(sourceProject.token)}`)\n\t\tconsole.log('')\n\t\tconsole.log(`Target project name: ${targetProject.name}`)\n\t\tconsole.log(`Target API URL: ${targetProject.endpoint}`)\n\t\tconsole.log(`Target token: ${maskToken(targetProject.token)}`)\n\t\tconsole.log('')\n\t\tif (!await confirmImport(input)) {\n\t\t\treturn 1\n\t\t}\n\n\t\tconst includeSystem = input.getOption('include-system') === true\n\t\tconst gzipTransfer = !input.getOption('no-gzip-transfer')\n\t\tconst exportResponse = (await this.dataTransferClient.dataExport({\n\t\t\tproject: sourceProject,\n\t\t\tincludeSystem,\n\t\t\texcludeTables: input.getOption('exclude-table') ?? [],\n\t\t\tgzip: gzipTransfer,\n\t\t}))\n\t\tconst ungzipedResponse = gzipTransfer ? exportResponse.pipe(createGunzip()) : exportResponse\n\t\tconst importResponse = await this.dataTransferClient.dataImport({\n\t\t\tstream: ungzipedResponse,\n\t\t\tproject: targetProject,\n\t\t\tprintProgress: printProgressLine,\n\t\t\tgzip: gzipTransfer,\n\t\t})\n\t\tconsole.log('')\n\n\t\tconst responseData = JSON.parse((await readStream(importResponse)).toString())\n\t\tif (responseData.ok) {\n\t\t\tconsole.log('Transfer done.')\n\t\t} else {\n\t\t\tconsole.error('Transfer failed:')\n\t\t\tconsole.log(responseData)\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;;;;AAoBO,MAAM,wBAAwB,QAAuB;AAAA,EAC3D,YACkB,uBACA,oBAChB;AACK;AAHW,SAAA,wBAAA;AACA,SAAA,qBAAA;AAAA,EAGlB;AAAA,EAEU,UAAU,eAA0D;AAC7E,kBAAc,YAAY,gCAAgC;AAC1D,kBAAc,SAAS,QAAQ;AACjB,kBAAA,SAAS,QAAQ,EAAE,SAAS;AAC5B,kBAAA,OAAO,gBAAgB,EAAE,UAAU;AACnC,kBAAA,OAAO,kBAAkB,EAAE,UAAU;AACrC,kBAAA,OAAO,KAAK,EAAE,UAAU;AACxB,kBAAA,OAAO,eAAe,EAAE,WAAW;AAAA,EAClD;AAAA,EAEA,MAAgB,QAAQ,OAAqD;AACtE,UAAA,SAAS,MAAM,YAAY,QAAQ;AACzC,UAAM,gBAAgB,MAAM,KAAK,sBAAsB,QAAQ,MAAM;AACrE,QAAI,CAAC,eAAe;AACb,YAAA;AAAA,IACP;AAEM,UAAA,SAAS,MAAM,YAAY,QAAQ;AACzC,UAAM,gBAAgB,MAAM,KAAK,sBAAsB,QAAQ,MAAM;AACrE,QAAI,CAAC,eAAe;AACb,YAAA;AAAA,IACP;AAGA,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,qCAAqC;AACjD,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,wBAAwB,cAAc,IAAI,EAAE;AACxD,YAAQ,IAAI,mBAAmB,cAAc,QAAQ,EAAE;AACvD,YAAQ,IAAI,iBAAiB,UAAU,cAAc,KAAK,CAAC,EAAE;AAC7D,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,wBAAwB,cAAc,IAAI,EAAE;AACxD,YAAQ,IAAI,mBAAmB,cAAc,QAAQ,EAAE;AACvD,YAAQ,IAAI,iBAAiB,UAAU,cAAc,KAAK,CAAC,EAAE;AAC7D,YAAQ,IAAI,EAAE;AACd,QAAI,CAAC,MAAM,cAAc,KAAK,GAAG;AACzB,aAAA;AAAA,IACR;AAEA,UAAM,gBAAgB,MAAM,UAAU,gBAAgB,MAAM;AAC5D,UAAM,eAAe,CAAC,MAAM,UAAU,kBAAkB;AACxD,UAAM,iBAAkB,MAAM,KAAK,mBAAmB,WAAW;AAAA,MAChE,SAAS;AAAA,MACT;AAAA,MACA,eAAe,MAAM,UAAU,eAAe,KAAK,CAAC;AAAA,MACpD,MAAM;AAAA,IAAA,CACN;AACD,UAAM,mBAAmB,eAAe,eAAe,KAAK,aAAA,CAAc,IAAI;AAC9E,UAAM,iBAAiB,MAAM,KAAK,mBAAmB,WAAW;AAAA,MAC/D,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,eAAe;AAAA,MACf,MAAM;AAAA,IAAA,CACN;AACD,YAAQ,IAAI,EAAE;AAER,UAAA,eAAe,KAAK,OAAO,MAAM,WAAW,cAAc,GAAG,UAAU;AAC7E,QAAI,aAAa,IAAI;AACpB,cAAQ,IAAI,gBAAgB;AAAA,IAAA,OACtB;AACN,cAAQ,MAAM,kBAAkB;AAChC,cAAQ,IAAI,YAAY;AAAA,IACzB;AAAA,EACD;AACD;"}
|
|
@@ -15,7 +15,7 @@ class TenantClient {
|
|
|
15
15
|
this.apiClient = apiClient;
|
|
16
16
|
}
|
|
17
17
|
static create(url, apiToken) {
|
|
18
|
-
const graphqlClient$1 = new graphqlClient.GraphQlClient(createTenantApiUrl(url), apiToken);
|
|
18
|
+
const graphqlClient$1 = new graphqlClient.GraphQlClient({ url: createTenantApiUrl(url), apiToken });
|
|
19
19
|
return new TenantClient(graphqlClient$1);
|
|
20
20
|
}
|
|
21
21
|
async createProject(slug, ignoreExisting = false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TenantClient.cjs","sources":["../../../../../../packages/cli/src/lib/tenant/TenantClient.ts"],"sourcesContent":["import { GraphQlClient } from '@contember/graphql-client'\n\nexport const createTenantApiUrl = (url: string) => {\n\tif (url.endsWith('/')) {\n\t\turl = url.substring(0, url.length - 1)\n\t}\n\tif (url.endsWith('/tenant')) {\n\t\treturn url\n\t}\n\treturn url + '/tenant'\n}\n\n\nexport class TenantClient {\n\tconstructor(private readonly apiClient: GraphQlClient) {}\n\n\tpublic static create(url: string, apiToken: string): TenantClient {\n\t\tconst graphqlClient = new GraphQlClient(createTenantApiUrl(url), apiToken)\n\t\treturn new TenantClient(graphqlClient)\n\t}\n\n\tpublic async createProject(slug: string, ignoreExisting = false): Promise<void> {\n\t\tconst query = `mutation($slug: String!) {\n createProject(projectSlug: $slug) {\n ok\n error {\n code\n }\n }\n}`\n\t\tconst result = await this.apiClient.execute<{\n\t\t\tcreateProject: { ok: boolean; error: { code: string } }\n\t\t}>(query, { variables: { slug } })\n\t\tif (!result.createProject.ok) {\n\t\t\tif (ignoreExisting && result.createProject.error.code === 'ALREADY_EXISTS') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthrow result.createProject.error.code\n\t\t}\n\t}\n}\n"],"names":["graphqlClient","GraphQlClient"],"mappings":";;;AAEa,MAAA,qBAAqB,CAAC,QAAgB;AAC9C,MAAA,IAAI,SAAS,GAAG,GAAG;AACtB,UAAM,IAAI,UAAU,GAAG,IAAI,SAAS,CAAC;AAAA,EACtC;AACI,MAAA,IAAI,SAAS,SAAS,GAAG;AACrB,WAAA;AAAA,EACR;AACA,SAAO,MAAM;AACd;AAGO,MAAM,aAAa;AAAA,EACzB,YAA6B,WAA0B;AAA1B,SAAA,YAAA;AAAA,EAA2B;AAAA,EAExD,OAAc,OAAO,KAAa,UAAgC;
|
|
1
|
+
{"version":3,"file":"TenantClient.cjs","sources":["../../../../../../packages/cli/src/lib/tenant/TenantClient.ts"],"sourcesContent":["import { GraphQlClient } from '@contember/graphql-client'\n\nexport const createTenantApiUrl = (url: string) => {\n\tif (url.endsWith('/')) {\n\t\turl = url.substring(0, url.length - 1)\n\t}\n\tif (url.endsWith('/tenant')) {\n\t\treturn url\n\t}\n\treturn url + '/tenant'\n}\n\n\nexport class TenantClient {\n\tconstructor(private readonly apiClient: GraphQlClient) {}\n\n\tpublic static create(url: string, apiToken: string): TenantClient {\n\t\tconst graphqlClient = new GraphQlClient({ url: createTenantApiUrl(url), apiToken })\n\t\treturn new TenantClient(graphqlClient)\n\t}\n\n\tpublic async createProject(slug: string, ignoreExisting = false): Promise<void> {\n\t\tconst query = `mutation($slug: String!) {\n createProject(projectSlug: $slug) {\n ok\n error {\n code\n }\n }\n}`\n\t\tconst result = await this.apiClient.execute<{\n\t\t\tcreateProject: { ok: boolean; error: { code: string } }\n\t\t}>(query, { variables: { slug } })\n\t\tif (!result.createProject.ok) {\n\t\t\tif (ignoreExisting && result.createProject.error.code === 'ALREADY_EXISTS') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthrow result.createProject.error.code\n\t\t}\n\t}\n}\n"],"names":["graphqlClient","GraphQlClient"],"mappings":";;;AAEa,MAAA,qBAAqB,CAAC,QAAgB;AAC9C,MAAA,IAAI,SAAS,GAAG,GAAG;AACtB,UAAM,IAAI,UAAU,GAAG,IAAI,SAAS,CAAC;AAAA,EACtC;AACI,MAAA,IAAI,SAAS,SAAS,GAAG;AACrB,WAAA;AAAA,EACR;AACA,SAAO,MAAM;AACd;AAGO,MAAM,aAAa;AAAA,EACzB,YAA6B,WAA0B;AAA1B,SAAA,YAAA;AAAA,EAA2B;AAAA,EAExD,OAAc,OAAO,KAAa,UAAgC;AAC3D,UAAAA,kBAAgB,IAAIC,cAAAA,cAAc,EAAE,KAAK,mBAAmB,GAAG,GAAG,SAAA,CAAU;AAC3E,WAAA,IAAI,aAAaD,eAAa;AAAA,EACtC;AAAA,EAEA,MAAa,cAAc,MAAc,iBAAiB,OAAsB;AAC/E,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQR,UAAA,SAAS,MAAM,KAAK,UAAU,QAEjC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAA,CAAG;AAC7B,QAAA,CAAC,OAAO,cAAc,IAAI;AAC7B,UAAI,kBAAkB,OAAO,cAAc,MAAM,SAAS,kBAAkB;AAC3E;AAAA,MACD;AACM,YAAA,OAAO,cAAc,MAAM;AAAA,IAClC;AAAA,EACD;AACD;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GraphQlClient
|
|
1
|
+
import { GraphQlClient } from "@contember/graphql-client";
|
|
2
2
|
const createTenantApiUrl = (url) => {
|
|
3
3
|
if (url.endsWith("/")) {
|
|
4
4
|
url = url.substring(0, url.length - 1);
|
|
@@ -13,7 +13,7 @@ class TenantClient {
|
|
|
13
13
|
this.apiClient = apiClient;
|
|
14
14
|
}
|
|
15
15
|
static create(url, apiToken) {
|
|
16
|
-
const graphqlClient = new GraphQlClient
|
|
16
|
+
const graphqlClient = new GraphQlClient({ url: createTenantApiUrl(url), apiToken });
|
|
17
17
|
return new TenantClient(graphqlClient);
|
|
18
18
|
}
|
|
19
19
|
async createProject(slug, ignoreExisting = false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TenantClient.js","sources":["../../../../../../packages/cli/src/lib/tenant/TenantClient.ts"],"sourcesContent":["import { GraphQlClient } from '@contember/graphql-client'\n\nexport const createTenantApiUrl = (url: string) => {\n\tif (url.endsWith('/')) {\n\t\turl = url.substring(0, url.length - 1)\n\t}\n\tif (url.endsWith('/tenant')) {\n\t\treturn url\n\t}\n\treturn url + '/tenant'\n}\n\n\nexport class TenantClient {\n\tconstructor(private readonly apiClient: GraphQlClient) {}\n\n\tpublic static create(url: string, apiToken: string): TenantClient {\n\t\tconst graphqlClient = new GraphQlClient(createTenantApiUrl(url), apiToken)\n\t\treturn new TenantClient(graphqlClient)\n\t}\n\n\tpublic async createProject(slug: string, ignoreExisting = false): Promise<void> {\n\t\tconst query = `mutation($slug: String!) {\n createProject(projectSlug: $slug) {\n ok\n error {\n code\n }\n }\n}`\n\t\tconst result = await this.apiClient.execute<{\n\t\t\tcreateProject: { ok: boolean; error: { code: string } }\n\t\t}>(query, { variables: { slug } })\n\t\tif (!result.createProject.ok) {\n\t\t\tif (ignoreExisting && result.createProject.error.code === 'ALREADY_EXISTS') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthrow result.createProject.error.code\n\t\t}\n\t}\n}\n"],"names":[
|
|
1
|
+
{"version":3,"file":"TenantClient.js","sources":["../../../../../../packages/cli/src/lib/tenant/TenantClient.ts"],"sourcesContent":["import { GraphQlClient } from '@contember/graphql-client'\n\nexport const createTenantApiUrl = (url: string) => {\n\tif (url.endsWith('/')) {\n\t\turl = url.substring(0, url.length - 1)\n\t}\n\tif (url.endsWith('/tenant')) {\n\t\treturn url\n\t}\n\treturn url + '/tenant'\n}\n\n\nexport class TenantClient {\n\tconstructor(private readonly apiClient: GraphQlClient) {}\n\n\tpublic static create(url: string, apiToken: string): TenantClient {\n\t\tconst graphqlClient = new GraphQlClient({ url: createTenantApiUrl(url), apiToken })\n\t\treturn new TenantClient(graphqlClient)\n\t}\n\n\tpublic async createProject(slug: string, ignoreExisting = false): Promise<void> {\n\t\tconst query = `mutation($slug: String!) {\n createProject(projectSlug: $slug) {\n ok\n error {\n code\n }\n }\n}`\n\t\tconst result = await this.apiClient.execute<{\n\t\t\tcreateProject: { ok: boolean; error: { code: string } }\n\t\t}>(query, { variables: { slug } })\n\t\tif (!result.createProject.ok) {\n\t\t\tif (ignoreExisting && result.createProject.error.code === 'ALREADY_EXISTS') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthrow result.createProject.error.code\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";AAEa,MAAA,qBAAqB,CAAC,QAAgB;AAC9C,MAAA,IAAI,SAAS,GAAG,GAAG;AACtB,UAAM,IAAI,UAAU,GAAG,IAAI,SAAS,CAAC;AAAA,EACtC;AACI,MAAA,IAAI,SAAS,SAAS,GAAG;AACrB,WAAA;AAAA,EACR;AACA,SAAO,MAAM;AACd;AAGO,MAAM,aAAa;AAAA,EACzB,YAA6B,WAA0B;AAA1B,SAAA,YAAA;AAAA,EAA2B;AAAA,EAExD,OAAc,OAAO,KAAa,UAAgC;AAC3D,UAAA,gBAAgB,IAAI,cAAc,EAAE,KAAK,mBAAmB,GAAG,GAAG,SAAA,CAAU;AAC3E,WAAA,IAAI,aAAa,aAAa;AAAA,EACtC;AAAA,EAEA,MAAa,cAAc,MAAc,iBAAiB,OAAsB;AAC/E,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQR,UAAA,SAAS,MAAM,KAAK,UAAU,QAEjC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAA,CAAG;AAC7B,QAAA,CAAC,OAAO,cAAc,IAAI;AAC7B,UAAI,kBAAkB,OAAO,cAAc,MAAM,SAAS,kBAAkB;AAC3E;AAAA,MACD;AACM,YAAA,OAAO,cAAc,MAAM;AAAA,IAClC;AAAA,EACD;AACD;"}
|
|
@@ -53,7 +53,7 @@ class DataTransferClient {
|
|
|
53
53
|
body: gzip ? inputStream.pipe(node_zlib.createGzip()) : inputStream
|
|
54
54
|
});
|
|
55
55
|
});
|
|
56
|
-
__publicField(this, "dataExport", async ({ project: { name: project, token, endpoint: baseUrl }, gzip, includeSystem }) => {
|
|
56
|
+
__publicField(this, "dataExport", async ({ project: { name: project, token, endpoint: baseUrl }, gzip, includeSystem, excludeTables }) => {
|
|
57
57
|
return await this.executeRequest({
|
|
58
58
|
url: `${baseUrl}/export`,
|
|
59
59
|
token,
|
|
@@ -62,7 +62,7 @@ class DataTransferClient {
|
|
|
62
62
|
"Content-type": "application/json"
|
|
63
63
|
},
|
|
64
64
|
body: JSON.stringify({
|
|
65
|
-
projects: [{ slug: project, system: includeSystem }]
|
|
65
|
+
projects: [{ slug: project, system: includeSystem, excludeTables }]
|
|
66
66
|
})
|
|
67
67
|
});
|
|
68
68
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTransferClient.cjs","sources":["../../../../../../packages/cli/src/lib/transfer/DataTransferClient.ts"],"sourcesContent":["import http from 'node:http'\nimport https from 'node:https'\nimport { LineTransform, readStream } from '../stream'\nimport { Readable, Stream } from 'node:stream'\nimport { createGzip } from 'node:zlib'\nimport { RemoteProject } from '../project/RemoteProject'\n\nexport class DataTransferClient {\n\n\tdataImport = async ({ printProgress, stream, project, gzip }: {\n\t\tstream: Readable\n\t\tproject: RemoteProject\n\t\tprintProgress: (message: string) => void\n\t\tgzip: boolean\n\t}) => {\n\t\tlet table = ''\n\t\tlet rowCount = 0\n\t\tlet rowTotal = 0\n\t\tlet transferred = 0\n\t\tlet start = Date.now()\n\t\tconst inputStream = stream.pipe(new LineTransform(line => {\n\t\t\ttransferred += line.length + 1\n\t\t\tif (line === '') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst data = JSON.parse(line)\n\t\t\tswitch (data[0]) {\n\t\t\t\tcase 'importSystemSchemaBegin':\n\t\t\t\t\treturn JSON.stringify([data[0], { ...data[1], project: project.name }])\n\t\t\t\tcase 'importContentSchemaBegin':\n\t\t\t\t\treturn JSON.stringify([data[0], { ...data[1], project: project.name }])\n\t\t\t\tcase 'insertBegin':\n\t\t\t\t\ttable = data[1].table\n\t\t\t\t\trowCount = 0\n\t\t\t\t\tbreak\n\t\t\t\tcase 'insertRow':\n\t\t\t\t\trowCount++\n\t\t\t\t\trowTotal++\n\t\t\t\t\tbreak\n\t\t\t\tcase 'insertEnd':\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t\tif ((rowCount % 1000) === 0 || data[0] !== 'insertRow') {\n\t\t\t\tconst mbs = Math.floor(transferred / 1024 / 1024).toString()\n\t\t\t\tconst durationS = Math.floor((Date.now() - start) / 1000)\n\t\t\t\tprintProgress(`transferred ${mbs} MiB; inserted ${rowCount} ${table} rows, ${rowTotal} total; ${durationS} seconds`)\n\t\t\t}\n\t\t\treturn line\n\t\t}))\n\n\t\treturn await this.executeRequest({\n\t\t\turl: `${project.endpoint}/import`,\n\t\t\ttoken: project.token,\n\t\t\theaders: {\n\t\t\t\t'Content-type': 'application/x-ndjson',\n\t\t\t\t...(gzip ? { 'Content-Encoding': 'gzip' } : {}),\n\t\t\t},\n\t\t\tbody: gzip ? inputStream.pipe(createGzip()) : inputStream,\n\t\t})\n\t}\n\n\n\tdataExport = async ({ project: { name: project, token, endpoint: baseUrl }, gzip, includeSystem }: {\n\t\tproject: RemoteProject\n\t\tincludeSystem: boolean\n\t\tgzip: boolean\n\t}) => {\n\t\treturn await this.executeRequest({\n\t\t\turl: `${baseUrl}/export`,\n\t\t\ttoken,\n\t\t\theaders: {\n\t\t\t\t'Accept-Encoding': gzip ? 'gzip' : 'identity',\n\t\t\t\t'Content-type': 'application/json',\n\t\t\t},\n\t\t\tbody: JSON.stringify({\n\t\t\t\tprojects: [{ slug: project, system: includeSystem }],\n\t\t\t}),\n\t\t})\n\t}\n\n\n\tprivate executeRequest = async ({ url, token, headers, body }: {\n\t\turl: string\n\t\ttoken: string\n\t\theaders: Record<string, string>\n\t\tbody: any\n\t}) => {\n\t\treturn await new Promise<http.IncomingMessage>((resolve, reject) => {\n\t\t\tconst req = (url.startsWith('https://') ? https : http).request(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: {\n\t\t\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t\t\t...headers,\n\t\t\t\t},\n\t\t\t}, async res => {\n\t\t\t\tif (res.statusCode !== 200) {\n\t\t\t\t\tconst responseBody = (await readStream(res)).toString()\n\t\t\t\t\treject(new Error(`Invalid response: ${res.statusMessage}\\n${responseBody}`))\n\t\t\t\t} else {\n\t\t\t\t\tresolve(res)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tif (body instanceof Stream) {\n\t\t\t\tbody.pipe(req)\n\t\t\t} else {\n\t\t\t\treq.write(body)\n\t\t\t\treq.end()\n\t\t\t}\n\t\t})\n\t}\n}\n"],"names":["stream","LineTransform","createGzip","readStream","Stream"],"mappings":";;;;;;;;;;AAOO,MAAM,mBAAmB;AAAA,EAAzB,cAAA;AAEN,kBAAA,MAAA,cAAa,OAAO,EAAE,eAAA,QAAeA,UAAQ,SAAS,WAKhD;AACL,UAAI,QAAQ;AACZ,UAAI,WAAW;AACf,UAAI,WAAW;AACf,UAAI,cAAc;AACd,UAAA,QAAQ,KAAK;AACjB,YAAM,cAAcA,SAAO,KAAK,IAAIC,qBAAc,CAAQ,SAAA;AACzD,uBAAe,KAAK,SAAS;AAC7B,YAAI,SAAS,IAAI;AACT,iBAAA;AAAA,QACR;AACM,cAAA,OAAO,KAAK,MAAM,IAAI;AACpB,gBAAA,KAAK,CAAC,GAAG;AAAA,UAChB,KAAK;AACJ,mBAAO,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,SAAS,QAAQ,KAAA,CAAM,CAAC;AAAA,UACvE,KAAK;AACJ,mBAAO,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,SAAS,QAAQ,KAAA,CAAM,CAAC;AAAA,UACvE,KAAK;AACI,oBAAA,KAAK,CAAC,EAAE;AACL,uBAAA;AACX;AAAA,UACD,KAAK;AACJ;AACA;AACA;AAAA,QAGF;AACA,YAAK,WAAW,QAAU,KAAK,KAAK,CAAC,MAAM,aAAa;AACvD,gBAAM,MAAM,KAAK,MAAM,cAAc,OAAO,IAAI,EAAE;AAClD,gBAAM,YAAY,KAAK,OAAO,KAAK,IAAI,IAAI,SAAS,GAAI;AAC1C,wBAAA,eAAe,GAAG,kBAAkB,QAAQ,IAAI,KAAK,UAAU,QAAQ,WAAW,SAAS,UAAU;AAAA,QACpH;AACO,eAAA;AAAA,MACP,CAAA,CAAC;AAEK,aAAA,MAAM,KAAK,eAAe;AAAA,QAChC,KAAK,GAAG,QAAQ,QAAQ;AAAA,QACxB,OAAO,QAAQ;AAAA,QACf,SAAS;AAAA,UACR,gBAAgB;AAAA,UAChB,GAAI,OAAO,EAAE,oBAAoB,WAAW,CAAC;AAAA,QAC9C;AAAA,QACA,MAAM,OAAO,YAAY,KAAKC,UAAA,WAAA,CAAY,IAAI;AAAA,MAAA,CAC9C;AAAA,IAAA,CACF;AAGA,kBAAA,MAAA,cAAa,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,OAAO,UAAU,QAAQ,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"DataTransferClient.cjs","sources":["../../../../../../packages/cli/src/lib/transfer/DataTransferClient.ts"],"sourcesContent":["import http from 'node:http'\nimport https from 'node:https'\nimport { LineTransform, readStream } from '../stream'\nimport { Readable, Stream } from 'node:stream'\nimport { createGzip } from 'node:zlib'\nimport { RemoteProject } from '../project/RemoteProject'\n\nexport class DataTransferClient {\n\n\tdataImport = async ({ printProgress, stream, project, gzip }: {\n\t\tstream: Readable\n\t\tproject: RemoteProject\n\t\tprintProgress: (message: string) => void\n\t\tgzip: boolean\n\t}) => {\n\t\tlet table = ''\n\t\tlet rowCount = 0\n\t\tlet rowTotal = 0\n\t\tlet transferred = 0\n\t\tlet start = Date.now()\n\t\tconst inputStream = stream.pipe(new LineTransform(line => {\n\t\t\ttransferred += line.length + 1\n\t\t\tif (line === '') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst data = JSON.parse(line)\n\t\t\tswitch (data[0]) {\n\t\t\t\tcase 'importSystemSchemaBegin':\n\t\t\t\t\treturn JSON.stringify([data[0], { ...data[1], project: project.name }])\n\t\t\t\tcase 'importContentSchemaBegin':\n\t\t\t\t\treturn JSON.stringify([data[0], { ...data[1], project: project.name }])\n\t\t\t\tcase 'insertBegin':\n\t\t\t\t\ttable = data[1].table\n\t\t\t\t\trowCount = 0\n\t\t\t\t\tbreak\n\t\t\t\tcase 'insertRow':\n\t\t\t\t\trowCount++\n\t\t\t\t\trowTotal++\n\t\t\t\t\tbreak\n\t\t\t\tcase 'insertEnd':\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t\tif ((rowCount % 1000) === 0 || data[0] !== 'insertRow') {\n\t\t\t\tconst mbs = Math.floor(transferred / 1024 / 1024).toString()\n\t\t\t\tconst durationS = Math.floor((Date.now() - start) / 1000)\n\t\t\t\tprintProgress(`transferred ${mbs} MiB; inserted ${rowCount} ${table} rows, ${rowTotal} total; ${durationS} seconds`)\n\t\t\t}\n\t\t\treturn line\n\t\t}))\n\n\t\treturn await this.executeRequest({\n\t\t\turl: `${project.endpoint}/import`,\n\t\t\ttoken: project.token,\n\t\t\theaders: {\n\t\t\t\t'Content-type': 'application/x-ndjson',\n\t\t\t\t...(gzip ? { 'Content-Encoding': 'gzip' } : {}),\n\t\t\t},\n\t\t\tbody: gzip ? inputStream.pipe(createGzip()) : inputStream,\n\t\t})\n\t}\n\n\n\tdataExport = async ({ project: { name: project, token, endpoint: baseUrl }, gzip, includeSystem, excludeTables }: {\n\t\tproject: RemoteProject\n\t\texcludeTables?: string[]\n\t\tincludeSystem: boolean\n\t\tgzip: boolean\n\t}) => {\n\t\treturn await this.executeRequest({\n\t\t\turl: `${baseUrl}/export`,\n\t\t\ttoken,\n\t\t\theaders: {\n\t\t\t\t'Accept-Encoding': gzip ? 'gzip' : 'identity',\n\t\t\t\t'Content-type': 'application/json',\n\t\t\t},\n\t\t\tbody: JSON.stringify({\n\t\t\t\tprojects: [{ slug: project, system: includeSystem, excludeTables }],\n\t\t\t}),\n\t\t})\n\t}\n\n\n\tprivate executeRequest = async ({ url, token, headers, body }: {\n\t\turl: string\n\t\ttoken: string\n\t\theaders: Record<string, string>\n\t\tbody: any\n\t}) => {\n\t\treturn await new Promise<http.IncomingMessage>((resolve, reject) => {\n\t\t\tconst req = (url.startsWith('https://') ? https : http).request(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: {\n\t\t\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t\t\t...headers,\n\t\t\t\t},\n\t\t\t}, async res => {\n\t\t\t\tif (res.statusCode !== 200) {\n\t\t\t\t\tconst responseBody = (await readStream(res)).toString()\n\t\t\t\t\treject(new Error(`Invalid response: ${res.statusMessage}\\n${responseBody}`))\n\t\t\t\t} else {\n\t\t\t\t\tresolve(res)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tif (body instanceof Stream) {\n\t\t\t\tbody.pipe(req)\n\t\t\t} else {\n\t\t\t\treq.write(body)\n\t\t\t\treq.end()\n\t\t\t}\n\t\t})\n\t}\n}\n"],"names":["stream","LineTransform","createGzip","readStream","Stream"],"mappings":"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"}
|
|
@@ -51,7 +51,7 @@ class DataTransferClient {
|
|
|
51
51
|
body: gzip ? inputStream.pipe(createGzip()) : inputStream
|
|
52
52
|
});
|
|
53
53
|
});
|
|
54
|
-
__publicField(this, "dataExport", async ({ project: { name: project, token, endpoint: baseUrl }, gzip, includeSystem }) => {
|
|
54
|
+
__publicField(this, "dataExport", async ({ project: { name: project, token, endpoint: baseUrl }, gzip, includeSystem, excludeTables }) => {
|
|
55
55
|
return await this.executeRequest({
|
|
56
56
|
url: `${baseUrl}/export`,
|
|
57
57
|
token,
|
|
@@ -60,7 +60,7 @@ class DataTransferClient {
|
|
|
60
60
|
"Content-type": "application/json"
|
|
61
61
|
},
|
|
62
62
|
body: JSON.stringify({
|
|
63
|
-
projects: [{ slug: project, system: includeSystem }]
|
|
63
|
+
projects: [{ slug: project, system: includeSystem, excludeTables }]
|
|
64
64
|
})
|
|
65
65
|
});
|
|
66
66
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTransferClient.js","sources":["../../../../../../packages/cli/src/lib/transfer/DataTransferClient.ts"],"sourcesContent":["import http from 'node:http'\nimport https from 'node:https'\nimport { LineTransform, readStream } from '../stream'\nimport { Readable, Stream } from 'node:stream'\nimport { createGzip } from 'node:zlib'\nimport { RemoteProject } from '../project/RemoteProject'\n\nexport class DataTransferClient {\n\n\tdataImport = async ({ printProgress, stream, project, gzip }: {\n\t\tstream: Readable\n\t\tproject: RemoteProject\n\t\tprintProgress: (message: string) => void\n\t\tgzip: boolean\n\t}) => {\n\t\tlet table = ''\n\t\tlet rowCount = 0\n\t\tlet rowTotal = 0\n\t\tlet transferred = 0\n\t\tlet start = Date.now()\n\t\tconst inputStream = stream.pipe(new LineTransform(line => {\n\t\t\ttransferred += line.length + 1\n\t\t\tif (line === '') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst data = JSON.parse(line)\n\t\t\tswitch (data[0]) {\n\t\t\t\tcase 'importSystemSchemaBegin':\n\t\t\t\t\treturn JSON.stringify([data[0], { ...data[1], project: project.name }])\n\t\t\t\tcase 'importContentSchemaBegin':\n\t\t\t\t\treturn JSON.stringify([data[0], { ...data[1], project: project.name }])\n\t\t\t\tcase 'insertBegin':\n\t\t\t\t\ttable = data[1].table\n\t\t\t\t\trowCount = 0\n\t\t\t\t\tbreak\n\t\t\t\tcase 'insertRow':\n\t\t\t\t\trowCount++\n\t\t\t\t\trowTotal++\n\t\t\t\t\tbreak\n\t\t\t\tcase 'insertEnd':\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t\tif ((rowCount % 1000) === 0 || data[0] !== 'insertRow') {\n\t\t\t\tconst mbs = Math.floor(transferred / 1024 / 1024).toString()\n\t\t\t\tconst durationS = Math.floor((Date.now() - start) / 1000)\n\t\t\t\tprintProgress(`transferred ${mbs} MiB; inserted ${rowCount} ${table} rows, ${rowTotal} total; ${durationS} seconds`)\n\t\t\t}\n\t\t\treturn line\n\t\t}))\n\n\t\treturn await this.executeRequest({\n\t\t\turl: `${project.endpoint}/import`,\n\t\t\ttoken: project.token,\n\t\t\theaders: {\n\t\t\t\t'Content-type': 'application/x-ndjson',\n\t\t\t\t...(gzip ? { 'Content-Encoding': 'gzip' } : {}),\n\t\t\t},\n\t\t\tbody: gzip ? inputStream.pipe(createGzip()) : inputStream,\n\t\t})\n\t}\n\n\n\tdataExport = async ({ project: { name: project, token, endpoint: baseUrl }, gzip, includeSystem }: {\n\t\tproject: RemoteProject\n\t\tincludeSystem: boolean\n\t\tgzip: boolean\n\t}) => {\n\t\treturn await this.executeRequest({\n\t\t\turl: `${baseUrl}/export`,\n\t\t\ttoken,\n\t\t\theaders: {\n\t\t\t\t'Accept-Encoding': gzip ? 'gzip' : 'identity',\n\t\t\t\t'Content-type': 'application/json',\n\t\t\t},\n\t\t\tbody: JSON.stringify({\n\t\t\t\tprojects: [{ slug: project, system: includeSystem }],\n\t\t\t}),\n\t\t})\n\t}\n\n\n\tprivate executeRequest = async ({ url, token, headers, body }: {\n\t\turl: string\n\t\ttoken: string\n\t\theaders: Record<string, string>\n\t\tbody: any\n\t}) => {\n\t\treturn await new Promise<http.IncomingMessage>((resolve, reject) => {\n\t\t\tconst req = (url.startsWith('https://') ? https : http).request(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: {\n\t\t\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t\t\t...headers,\n\t\t\t\t},\n\t\t\t}, async res => {\n\t\t\t\tif (res.statusCode !== 200) {\n\t\t\t\t\tconst responseBody = (await readStream(res)).toString()\n\t\t\t\t\treject(new Error(`Invalid response: ${res.statusMessage}\\n${responseBody}`))\n\t\t\t\t} else {\n\t\t\t\t\tresolve(res)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tif (body instanceof Stream) {\n\t\t\t\tbody.pipe(req)\n\t\t\t} else {\n\t\t\t\treq.write(body)\n\t\t\t\treq.end()\n\t\t\t}\n\t\t})\n\t}\n}\n"],"names":["http"],"mappings":";;;;;;;;AAOO,MAAM,mBAAmB;AAAA,EAAzB,cAAA;AAEN,kBAAA,MAAA,cAAa,OAAO,EAAE,eAAe,QAAQ,SAAS,WAKhD;AACL,UAAI,QAAQ;AACZ,UAAI,WAAW;AACf,UAAI,WAAW;AACf,UAAI,cAAc;AACd,UAAA,QAAQ,KAAK;AACjB,YAAM,cAAc,OAAO,KAAK,IAAI,cAAc,CAAQ,SAAA;AACzD,uBAAe,KAAK,SAAS;AAC7B,YAAI,SAAS,IAAI;AACT,iBAAA;AAAA,QACR;AACM,cAAA,OAAO,KAAK,MAAM,IAAI;AACpB,gBAAA,KAAK,CAAC,GAAG;AAAA,UAChB,KAAK;AACJ,mBAAO,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,SAAS,QAAQ,KAAA,CAAM,CAAC;AAAA,UACvE,KAAK;AACJ,mBAAO,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,SAAS,QAAQ,KAAA,CAAM,CAAC;AAAA,UACvE,KAAK;AACI,oBAAA,KAAK,CAAC,EAAE;AACL,uBAAA;AACX;AAAA,UACD,KAAK;AACJ;AACA;AACA;AAAA,QAGF;AACA,YAAK,WAAW,QAAU,KAAK,KAAK,CAAC,MAAM,aAAa;AACvD,gBAAM,MAAM,KAAK,MAAM,cAAc,OAAO,IAAI,EAAE;AAClD,gBAAM,YAAY,KAAK,OAAO,KAAK,IAAI,IAAI,SAAS,GAAI;AAC1C,wBAAA,eAAe,GAAG,kBAAkB,QAAQ,IAAI,KAAK,UAAU,QAAQ,WAAW,SAAS,UAAU;AAAA,QACpH;AACO,eAAA;AAAA,MACP,CAAA,CAAC;AAEK,aAAA,MAAM,KAAK,eAAe;AAAA,QAChC,KAAK,GAAG,QAAQ,QAAQ;AAAA,QACxB,OAAO,QAAQ;AAAA,QACf,SAAS;AAAA,UACR,gBAAgB;AAAA,UAChB,GAAI,OAAO,EAAE,oBAAoB,WAAW,CAAC;AAAA,QAC9C;AAAA,QACA,MAAM,OAAO,YAAY,KAAK,WAAA,CAAY,IAAI;AAAA,MAAA,CAC9C;AAAA,IAAA,CACF;AAGA,kBAAA,MAAA,cAAa,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,OAAO,UAAU,QAAQ,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"DataTransferClient.js","sources":["../../../../../../packages/cli/src/lib/transfer/DataTransferClient.ts"],"sourcesContent":["import http from 'node:http'\nimport https from 'node:https'\nimport { LineTransform, readStream } from '../stream'\nimport { Readable, Stream } from 'node:stream'\nimport { createGzip } from 'node:zlib'\nimport { RemoteProject } from '../project/RemoteProject'\n\nexport class DataTransferClient {\n\n\tdataImport = async ({ printProgress, stream, project, gzip }: {\n\t\tstream: Readable\n\t\tproject: RemoteProject\n\t\tprintProgress: (message: string) => void\n\t\tgzip: boolean\n\t}) => {\n\t\tlet table = ''\n\t\tlet rowCount = 0\n\t\tlet rowTotal = 0\n\t\tlet transferred = 0\n\t\tlet start = Date.now()\n\t\tconst inputStream = stream.pipe(new LineTransform(line => {\n\t\t\ttransferred += line.length + 1\n\t\t\tif (line === '') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst data = JSON.parse(line)\n\t\t\tswitch (data[0]) {\n\t\t\t\tcase 'importSystemSchemaBegin':\n\t\t\t\t\treturn JSON.stringify([data[0], { ...data[1], project: project.name }])\n\t\t\t\tcase 'importContentSchemaBegin':\n\t\t\t\t\treturn JSON.stringify([data[0], { ...data[1], project: project.name }])\n\t\t\t\tcase 'insertBegin':\n\t\t\t\t\ttable = data[1].table\n\t\t\t\t\trowCount = 0\n\t\t\t\t\tbreak\n\t\t\t\tcase 'insertRow':\n\t\t\t\t\trowCount++\n\t\t\t\t\trowTotal++\n\t\t\t\t\tbreak\n\t\t\t\tcase 'insertEnd':\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t\tif ((rowCount % 1000) === 0 || data[0] !== 'insertRow') {\n\t\t\t\tconst mbs = Math.floor(transferred / 1024 / 1024).toString()\n\t\t\t\tconst durationS = Math.floor((Date.now() - start) / 1000)\n\t\t\t\tprintProgress(`transferred ${mbs} MiB; inserted ${rowCount} ${table} rows, ${rowTotal} total; ${durationS} seconds`)\n\t\t\t}\n\t\t\treturn line\n\t\t}))\n\n\t\treturn await this.executeRequest({\n\t\t\turl: `${project.endpoint}/import`,\n\t\t\ttoken: project.token,\n\t\t\theaders: {\n\t\t\t\t'Content-type': 'application/x-ndjson',\n\t\t\t\t...(gzip ? { 'Content-Encoding': 'gzip' } : {}),\n\t\t\t},\n\t\t\tbody: gzip ? inputStream.pipe(createGzip()) : inputStream,\n\t\t})\n\t}\n\n\n\tdataExport = async ({ project: { name: project, token, endpoint: baseUrl }, gzip, includeSystem, excludeTables }: {\n\t\tproject: RemoteProject\n\t\texcludeTables?: string[]\n\t\tincludeSystem: boolean\n\t\tgzip: boolean\n\t}) => {\n\t\treturn await this.executeRequest({\n\t\t\turl: `${baseUrl}/export`,\n\t\t\ttoken,\n\t\t\theaders: {\n\t\t\t\t'Accept-Encoding': gzip ? 'gzip' : 'identity',\n\t\t\t\t'Content-type': 'application/json',\n\t\t\t},\n\t\t\tbody: JSON.stringify({\n\t\t\t\tprojects: [{ slug: project, system: includeSystem, excludeTables }],\n\t\t\t}),\n\t\t})\n\t}\n\n\n\tprivate executeRequest = async ({ url, token, headers, body }: {\n\t\turl: string\n\t\ttoken: string\n\t\theaders: Record<string, string>\n\t\tbody: any\n\t}) => {\n\t\treturn await new Promise<http.IncomingMessage>((resolve, reject) => {\n\t\t\tconst req = (url.startsWith('https://') ? https : http).request(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: {\n\t\t\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t\t\t...headers,\n\t\t\t\t},\n\t\t\t}, async res => {\n\t\t\t\tif (res.statusCode !== 200) {\n\t\t\t\t\tconst responseBody = (await readStream(res)).toString()\n\t\t\t\t\treject(new Error(`Invalid response: ${res.statusMessage}\\n${responseBody}`))\n\t\t\t\t} else {\n\t\t\t\t\tresolve(res)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tif (body instanceof Stream) {\n\t\t\t\tbody.pipe(req)\n\t\t\t} else {\n\t\t\t\treq.write(body)\n\t\t\t\treq.end()\n\t\t\t}\n\t\t})\n\t}\n}\n"],"names":["http"],"mappings":"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"}
|
|
@@ -7,6 +7,10 @@ type Options = {
|
|
|
7
7
|
normalize?: boolean;
|
|
8
8
|
format?: 'graphql' | 'introspection' | 'schema';
|
|
9
9
|
source?: 'migrations' | 'definition';
|
|
10
|
+
['omit-acl']?: boolean;
|
|
11
|
+
['omit-validation']?: boolean;
|
|
12
|
+
['omit-actions']?: boolean;
|
|
13
|
+
['omit-settings']?: boolean;
|
|
10
14
|
};
|
|
11
15
|
export declare class ProjectPrintSchemaCommand extends Command<Args, Options> {
|
|
12
16
|
private readonly schemaLoader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectPrintSchemaCommand.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/ProjectPrintSchemaCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAY5E,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAGnE,KAAK,IAAI,GAAG,EACX,CAAA;AAED,KAAK,OAAO,GAAG;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,SAAS,GAAG,eAAe,GAAG,QAAQ,CAAA;IAC/C,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"ProjectPrintSchemaCommand.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/ProjectPrintSchemaCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAY5E,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAGnE,KAAK,IAAI,GAAG,EACX,CAAA;AAED,KAAK,OAAO,GAAG;IACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,SAAS,GAAG,eAAe,GAAG,QAAQ,CAAA;IAC/C,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY,CAAA;IACpC,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAA;IACtB,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,CAAA;IAC7B,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,CAAA;IAC1B,CAAC,eAAe,CAAC,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,qBAAa,yBAA0B,SAAQ,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;IAEnE,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;gBADpB,YAAY,EAAE,YAAY,EAC1B,oBAAoB,EAAE,oBAAoB;IAK5D,SAAS,CAAC,SAAS,CAAC,aAAa,EAAE,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAI;cAY7D,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CA6DrE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportCommand.d.ts","sourceRoot":"","sources":["../../../../src/commands/transfer/ExportCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAM5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAE1E,KAAK,IAAI,GAAG;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AACD,KAAK,OAAO,GAAG;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,kBAAkB;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"ExportCommand.d.ts","sourceRoot":"","sources":["../../../../src/commands/transfer/ExportCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAM5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAE1E,KAAK,IAAI,GAAG;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AACD,KAAK,OAAO,GAAG;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,kBAAkB;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B,CAAA;AAED,qBAAa,aAAc,SAAQ,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;IAEvD,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBADlB,qBAAqB,EAAE,qBAAqB,EAC5C,kBAAkB,EAAE,kBAAkB;IAKxD,SAAS,CAAC,SAAS,CAAC,aAAa,EAAE,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAI;cAW7D,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;CAoD5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransferCommand.d.ts","sourceRoot":"","sources":["../../../../src/commands/transfer/TransferCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAM5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAE1E,KAAK,IAAI,GAAG;IACX,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACd,CAAA;AACD,KAAK,OAAO,GAAG;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,GAAG,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"TransferCommand.d.ts","sourceRoot":"","sources":["../../../../src/commands/transfer/TransferCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAM5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAE1E,KAAK,IAAI,GAAG;IACX,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACd,CAAA;AACD,KAAK,OAAO,GAAG;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,GAAG,EAAE,OAAO,CAAA;IACZ,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B,CAAA;AAED,qBAAa,eAAgB,SAAQ,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;IAEzD,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBADlB,qBAAqB,EAAE,qBAAqB,EAC5C,kBAAkB,EAAE,kBAAkB;IAKxD,SAAS,CAAC,SAAS,CAAC,aAAa,EAAE,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAI;cAU7D,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;CAsD5E"}
|
|
@@ -8,8 +8,9 @@ export declare class DataTransferClient {
|
|
|
8
8
|
printProgress: (message: string) => void;
|
|
9
9
|
gzip: boolean;
|
|
10
10
|
}) => Promise<http.IncomingMessage>;
|
|
11
|
-
dataExport: ({ project: { name: project, token, endpoint: baseUrl }, gzip, includeSystem }: {
|
|
11
|
+
dataExport: ({ project: { name: project, token, endpoint: baseUrl }, gzip, includeSystem, excludeTables }: {
|
|
12
12
|
project: RemoteProject;
|
|
13
|
+
excludeTables?: string[];
|
|
13
14
|
includeSystem: boolean;
|
|
14
15
|
gzip: boolean;
|
|
15
16
|
}) => Promise<http.IncomingMessage>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTransferClient.d.ts","sourceRoot":"","sources":["../../../../src/lib/transfer/DataTransferClient.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,OAAO,EAAE,QAAQ,EAAU,MAAM,aAAa,CAAA;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAExD,qBAAa,kBAAkB;IAE9B,UAAU,6CAAoD;QAC7D,MAAM,EAAE,QAAQ,CAAA;QAChB,OAAO,EAAE,aAAa,CAAA;QACtB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;QACxC,IAAI,EAAE,OAAO,CAAA;KACb,mCA6CA;IAGD,UAAU,
|
|
1
|
+
{"version":3,"file":"DataTransferClient.d.ts","sourceRoot":"","sources":["../../../../src/lib/transfer/DataTransferClient.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,OAAO,EAAE,QAAQ,EAAU,MAAM,aAAa,CAAA;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAExD,qBAAa,kBAAkB;IAE9B,UAAU,6CAAoD;QAC7D,MAAM,EAAE,QAAQ,CAAA;QAChB,OAAO,EAAE,aAAa,CAAA;QACtB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;QACxC,IAAI,EAAE,OAAO,CAAA;KACb,mCA6CA;IAGD,UAAU,iGAAwG;QACjH,OAAO,EAAE,aAAa,CAAA;QACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;QACxB,aAAa,EAAE,OAAO,CAAA;QACtB,IAAI,EAAE,OAAO,CAAA;KACb,mCAYA;IAGD,OAAO,CAAC,cAAc,CA6BrB;CACD"}
|