generated from Nodarx/template
Compare commits
10 Commits
48a3e33a81
...
renovate/p
| Author | SHA1 | Date | |
|---|---|---|---|
| 8093c031d9 | |||
| 49712b5f87 | |||
| 86c93e8d3e | |||
| 94ca156fdb | |||
| 5b513424a6 | |||
| 55614b55f0 | |||
| 766438c291 | |||
| fd7004fe6a | |||
| c6ffa02bdc | |||
| 98de03bd39 |
@@ -23,7 +23,7 @@
|
|||||||
"doctrine/lexer": "^3.0"
|
"doctrine/lexer": "^3.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "^11.0"
|
"phpunit/phpunit": "^13.0"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
|||||||
@@ -28,9 +28,9 @@ final class StoreCommand implements CommandInterface
|
|||||||
*/
|
*/
|
||||||
public function __construct(
|
public function __construct(
|
||||||
FetchTarget|string|SequenceSet|null $target = null,
|
FetchTarget|string|SequenceSet|null $target = null,
|
||||||
private readonly array $flags = [],
|
private array $flags = [],
|
||||||
private readonly string $action = '',
|
private string $action = '',
|
||||||
private readonly bool $silent = true,
|
private bool $silent = true,
|
||||||
) {
|
) {
|
||||||
$resolvedTarget = match (true) {
|
$resolvedTarget = match (true) {
|
||||||
$target instanceof FetchTarget => $target,
|
$target instanceof FetchTarget => $target,
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ use KTXM\ProviderImap\Stores\ServiceStore;
|
|||||||
class Provider implements ProviderBaseInterface, ProviderServiceMutateInterface, ProviderServiceDiscoverInterface, ProviderServiceTestInterface
|
class Provider implements ProviderBaseInterface, ProviderServiceMutateInterface, ProviderServiceDiscoverInterface, ProviderServiceTestInterface
|
||||||
{
|
{
|
||||||
|
|
||||||
public const JSON_TYPE = ProviderBaseInterface::JSON_TYPE;
|
|
||||||
protected const PROVIDER_IDENTIFIER = 'imap';
|
protected const PROVIDER_IDENTIFIER = 'imap';
|
||||||
protected const PROVIDER_LABEL = 'IMAP Mail Provider';
|
protected const PROVIDER_LABEL = 'IMAP Mail Provider';
|
||||||
protected const PROVIDER_DESCRIPTION = 'Provides mail services via the IMAP protocol';
|
protected const PROVIDER_DESCRIPTION = 'Provides mail services via the IMAP protocol';
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ namespace KTXM\ProviderImap\Providers;
|
|||||||
|
|
||||||
use Generator;
|
use Generator;
|
||||||
use KTXF\Mail\Collection\CollectionBaseInterface;
|
use KTXF\Mail\Collection\CollectionBaseInterface;
|
||||||
use KTXF\Mail\Collection\CollectionMutableInterface;
|
|
||||||
use KTXF\Mail\Collection\CollectionPropertiesBaseInterface;
|
use KTXF\Mail\Collection\CollectionPropertiesBaseInterface;
|
||||||
use KTXF\Mail\Object\Address;
|
use KTXF\Mail\Object\Address;
|
||||||
use KTXF\Mail\Object\AddressInterface;
|
use KTXF\Mail\Object\AddressInterface;
|
||||||
@@ -40,7 +39,7 @@ use KTXM\ProviderImap\Service\Remote\RemoteService;
|
|||||||
use KTXM\ProviderImap\Providers\CollectionResource;
|
use KTXM\ProviderImap\Providers\CollectionResource;
|
||||||
use KTXF\Mail\Collection\CollectionRoles;
|
use KTXF\Mail\Collection\CollectionRoles;
|
||||||
use KTXF\Mail\Object\MessagePropertiesMutableInterface;
|
use KTXF\Mail\Object\MessagePropertiesMutableInterface;
|
||||||
use KTXF\Mail\Service\ServiceEntityMutableInterface;
|
use KTXF\Resource\Identifier\EntityIdentifierInterface;
|
||||||
use KTXM\ProviderImap\Providers\EntityResource;
|
use KTXM\ProviderImap\Providers\EntityResource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -499,7 +498,7 @@ class Service implements ServiceBaseInterface, ServiceMutableInterface, ServiceC
|
|||||||
}
|
}
|
||||||
|
|
||||||
$result = match ($deleteMode) {
|
$result = match ($deleteMode) {
|
||||||
'soft' => $this->collectionMove($target, new CollectionIdentifier($target->provider(), $target->service(), $deleteTarget)),
|
'soft' => $this->collectionMove(new CollectionIdentifier($target->provider(), $target->service(), $deleteTarget), $target),
|
||||||
'hard' => $this->mailService->collectionDestroy((string) $target->collection()),
|
'hard' => $this->mailService->collectionDestroy((string) $target->collection()),
|
||||||
};
|
};
|
||||||
return $result;
|
return $result;
|
||||||
@@ -521,8 +520,9 @@ class Service implements ServiceBaseInterface, ServiceMutableInterface, ServiceC
|
|||||||
$sourceDelimiter = $sourceMailbox->delimiter() ?? '/';
|
$sourceDelimiter = $sourceMailbox->delimiter() ?? '/';
|
||||||
$targetDelimiter = $targetMailbox->delimiter() ?? '/';
|
$targetDelimiter = $targetMailbox->delimiter() ?? '/';
|
||||||
|
|
||||||
$targetPath = rtrim($targetMailbox->name(), $targetDelimiter) . $targetDelimiter . end(explode($sourceDelimiter, $sourceMailbox->name()));
|
$extantPath = $sourceMailbox->name();
|
||||||
$mutatedMailbox = $this->mailService->collectionRename($sourceMailbox->name(), $targetPath);
|
$freshPath = rtrim($targetMailbox->name(), $targetDelimiter) . $targetDelimiter . end(explode($sourceDelimiter, $extantPath));
|
||||||
|
$mutatedMailbox = $this->mailService->collectionRename($extantPath, $freshPath);
|
||||||
|
|
||||||
$collection = $this->collectionFresh();
|
$collection = $this->collectionFresh();
|
||||||
$collection->fromImap($mutatedMailbox, ['delimiter' => $targetDelimiter]);
|
$collection->fromImap($mutatedMailbox, ['delimiter' => $targetDelimiter]);
|
||||||
@@ -531,9 +531,9 @@ class Service implements ServiceBaseInterface, ServiceMutableInterface, ServiceC
|
|||||||
|
|
||||||
// ── Entity operations ─────────────────────────────────────────────────────
|
// ── Entity operations ─────────────────────────────────────────────────────
|
||||||
|
|
||||||
public function entityList(string|int $collection, ?IFilter $filter = null, ?ISort $sort = null, ?IRange $range = null, ?array $properties = null): array
|
public function entityListBulk(string|int $collection, ?IFilter $filter = null, ?ISort $sort = null, ?IRange $range = null, ?array $properties = null): array
|
||||||
{
|
{
|
||||||
return iterator_to_array($this->entityList((string) $collection, $filter, $sort, $range), true);
|
return iterator_to_array($this->entityListStream((string) $collection, $filter, $sort, $range), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function entityListStream(string|int $collection, ?IFilter $filter = null, ?ISort $sort = null, ?IRange $range = null, ?array $properties = null): Generator
|
public function entityListStream(string|int $collection, ?IFilter $filter = null, ?ISort $sort = null, ?IRange $range = null, ?array $properties = null): Generator
|
||||||
@@ -543,7 +543,7 @@ class Service implements ServiceBaseInterface, ServiceMutableInterface, ServiceC
|
|||||||
foreach ($this->mailService->entityList((string) $collection, $filter, $sort, $range) as $identifier => $message) {
|
foreach ($this->mailService->entityList((string) $collection, $filter, $sort, $range) as $identifier => $message) {
|
||||||
$resource = $this->entityFresh();
|
$resource = $this->entityFresh();
|
||||||
$resource->fromImap($message, $collection);
|
$resource->fromImap($message, $collection);
|
||||||
yield $identifier => $resource;
|
yield $resource->urn() => $resource;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -565,12 +565,25 @@ class Service implements ServiceBaseInterface, ServiceMutableInterface, ServiceC
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public function entityFetch(string|int $collection, string|int ...$identifiers): array
|
public function entityFetchBulk(EntityIdentifierInterface ...$identifiers): array
|
||||||
|
{
|
||||||
|
return iterator_to_array($this->entityFetchStream(...$identifiers), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function entityFetchStream(EntityIdentifierInterface ...$identifiers): Generator
|
||||||
{
|
{
|
||||||
$this->initialize();
|
$this->initialize();
|
||||||
|
|
||||||
$uids = array_map('intval', $identifiers);
|
$identifiers = $this->groupEntitiesByCollection(...$identifiers);
|
||||||
return $this->mailService->entityFetch((string) $collection, ...$uids);
|
|
||||||
|
foreach ($identifiers as $collection => $entities) {
|
||||||
|
$uids = array_keys($entities);
|
||||||
|
foreach ($this->mailService->entityFetch((string) $collection, ...$uids) as $uid => $message) {
|
||||||
|
$resource = $this->entityFresh();
|
||||||
|
$resource->fromImap($message, $collection);
|
||||||
|
yield $resource->urn() => $resource;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function entityDelta(string|int $collection, string $signature, string $detail = 'ids'): Delta
|
public function entityDelta(string|int $collection, string $signature, string $detail = 'ids'): Delta
|
||||||
@@ -606,6 +619,29 @@ class Service implements ServiceBaseInterface, ServiceMutableInterface, ServiceC
|
|||||||
throw new \RuntimeException('Entity modification is not supported in this service');
|
throw new \RuntimeException('Entity modification is not supported in this service');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function entityPatch(MessagePropertiesMutableInterface $properties, EntityIdentifier ...$targets): array
|
||||||
|
{
|
||||||
|
// validate identifiers and group by collection
|
||||||
|
$targets = $this->groupEntitiesByCollection(...$targets);
|
||||||
|
|
||||||
|
// move entities on remote store and construct result map
|
||||||
|
$this->initialize();
|
||||||
|
|
||||||
|
$list = [];
|
||||||
|
|
||||||
|
foreach ($targets as $targetCollection => $targetIdentifiers) {
|
||||||
|
$uids = array_keys($targetIdentifiers);
|
||||||
|
|
||||||
|
$mutations = $this->mailService->entityPatch($targetCollection, $properties, ...$uids);
|
||||||
|
|
||||||
|
foreach ($uids as $uid) {
|
||||||
|
$list[(string)$targetIdentifiers[$uid]] = ['disposition' => 'patched'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $list;
|
||||||
|
}
|
||||||
|
|
||||||
public function entityDelete(EntityIdentifier ...$targets): array
|
public function entityDelete(EntityIdentifier ...$targets): array
|
||||||
{
|
{
|
||||||
// validate identifiers and group by collection
|
// validate identifiers and group by collection
|
||||||
@@ -644,6 +680,11 @@ class Service implements ServiceBaseInterface, ServiceMutableInterface, ServiceC
|
|||||||
$deleteTargetIdentifier = new CollectionIdentifier($this->provider(), (string) $this->identifier(), $deleteTargetNative);
|
$deleteTargetIdentifier = new CollectionIdentifier($this->provider(), (string) $this->identifier(), $deleteTargetNative);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if all targets are already in the delete target collection, we should hard delete instead of moving to avoid duplicates in the trash
|
||||||
|
if (array_keys($targets) === [$deleteTargetNative]) {
|
||||||
|
$deleteMode = 'hard';
|
||||||
|
}
|
||||||
|
|
||||||
// entities need to be moved or deleted by collection
|
// entities need to be moved or deleted by collection
|
||||||
$list = [];
|
$list = [];
|
||||||
foreach ($targets as $sourceCollection => $sourceEntities) {
|
foreach ($targets as $sourceCollection => $sourceEntities) {
|
||||||
@@ -659,11 +700,11 @@ class Service implements ServiceBaseInterface, ServiceMutableInterface, ServiceC
|
|||||||
};
|
};
|
||||||
|
|
||||||
foreach ($uids as $uid) {
|
foreach ($uids as $uid) {
|
||||||
$mutatedUid = $mutations[$uid] ?? null;
|
$mutatedUid = !isset($mutations[$uid]) || $mutations[$uid] === true ? null : $mutations[$uid];
|
||||||
$list[(string)$sourceEntities[$uid]] = [
|
$list[(string)$sourceEntities[$uid]] = [
|
||||||
'disposition' => $deleteMode === 'soft' ? 'moved' : 'deleted',
|
'disposition' => $deleteMode === 'soft' ? 'moved' : 'deleted',
|
||||||
'destination' => $deleteMode === 'soft' ? $deleteTargetIdentifier : null,
|
'destination' => $deleteMode === 'soft' ? $deleteTargetIdentifier : null,
|
||||||
'mutation' => $mutatedUid !== null ? new EntityIdentifier($this->provider(), $this->identifier(), $deleteTargetIdentifier->collection(), $mutatedUid) : null,
|
'mutation' => $deleteMode === 'soft' && $mutatedUid !== null ? new EntityIdentifier($this->provider(), $this->identifier(), $deleteTargetIdentifier->collection(), $mutatedUid) : null,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -671,34 +712,6 @@ class Service implements ServiceBaseInterface, ServiceMutableInterface, ServiceC
|
|||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function entityPatch(MessagePropertiesMutableInterface $properties, EntityIdentifier ...$targets): array
|
|
||||||
{
|
|
||||||
throw new \RuntimeException('Entity patching is not supported in this service');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function entityPatch(MessagePropertiesMutableInterface $properties, EntityIdentifier ...$targets): array
|
|
||||||
{
|
|
||||||
// validate identifiers and group by collection
|
|
||||||
$targets = $this->groupEntitiesByCollection(...$targets);
|
|
||||||
|
|
||||||
// move entities on remote store and construct result map
|
|
||||||
$this->initialize();
|
|
||||||
|
|
||||||
$list = [];
|
|
||||||
|
|
||||||
foreach ($targets as $targetCollection => $targetIdentifiers) {
|
|
||||||
$uids = array_keys($targetIdentifiers);
|
|
||||||
|
|
||||||
$mutations = $this->mailService->entityPatch($targetCollection, $properties, ...$uids);
|
|
||||||
|
|
||||||
foreach ($uids as $uid) {
|
|
||||||
$list[(string)$targetIdentifiers[$uid]] = ['disposition' => 'patched'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $list;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function entityCopy(CollectionIdentifier $target, EntityIdentifier ...$sources): array
|
public function entityCopy(CollectionIdentifier $target, EntityIdentifier ...$sources): array
|
||||||
{
|
{
|
||||||
// validate target belongs to this service
|
// validate target belongs to this service
|
||||||
@@ -765,11 +778,6 @@ class Service implements ServiceBaseInterface, ServiceMutableInterface, ServiceC
|
|||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function entityCopy(CollectionIdentifier $target, EntityIdentifier ...$sources): array
|
|
||||||
{
|
|
||||||
throw new \RuntimeException('Entity copying is not supported in this service');
|
|
||||||
}
|
|
||||||
|
|
||||||
private function groupEntitiesByCollection(EntityIdentifier ...$identifiers): array
|
private function groupEntitiesByCollection(EntityIdentifier ...$identifiers): array
|
||||||
{
|
{
|
||||||
$list = [];
|
$list = [];
|
||||||
|
|||||||
45
package-lock.json
generated
45
package-lock.json
generated
@@ -497,9 +497,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rolldown/pluginutils": {
|
"node_modules/@rolldown/pluginutils": {
|
||||||
"version": "1.0.0-rc.13",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.13.tgz",
|
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz",
|
||||||
"integrity": "sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==",
|
"integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
@@ -521,13 +521,13 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@vitejs/plugin-vue": {
|
"node_modules/@vitejs/plugin-vue": {
|
||||||
"version": "6.0.6",
|
"version": "6.0.7",
|
||||||
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.7.tgz",
|
||||||
"integrity": "sha512-u9HHgfrq3AjXlysn0eINFnWQOJQLO9WN6VprZ8FXl7A2bYisv3Hui9Ij+7QZ41F/WYWarHjwBbXtD7dKg3uxbg==",
|
"integrity": "sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@rolldown/pluginutils": "1.0.0-rc.13"
|
"@rolldown/pluginutils": "^1.0.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^20.19.0 || >=22.12.0"
|
"node": "^20.19.0 || >=22.12.0"
|
||||||
@@ -701,19 +701,19 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/language-core": {
|
"node_modules/@vue/language-core": {
|
||||||
"version": "3.2.5",
|
"version": "3.2.9",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.9.tgz",
|
||||||
"integrity": "sha512-d3OIxN/+KRedeM5wQ6H6NIpwS3P5gC9nmyaHgBk+rO6dIsjY+tOh4UlPpiZbAh3YtLdCGEX4M16RmsBqPmJV+g==",
|
"integrity": "sha512-ie0ojt/0fU/GfIogh+zgHbaYRPlt9S+cLOxcWwF7nTSFh897BVgnFKL2byT4kpp1mlqYWZ2psGwSniyE2xsxYw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@volar/language-core": "2.4.28",
|
"@volar/language-core": "2.4.28",
|
||||||
"@vue/compiler-dom": "^3.5.0",
|
"@vue/compiler-dom": "^3.5.0",
|
||||||
"@vue/shared": "^3.5.0",
|
"@vue/shared": "^3.5.0",
|
||||||
"alien-signals": "^3.0.0",
|
"alien-signals": "^3.2.0",
|
||||||
"muggle-string": "^0.4.1",
|
"muggle-string": "^0.4.1",
|
||||||
"path-browserify": "^1.0.1",
|
"path-browserify": "^1.0.1",
|
||||||
"picomatch": "^4.0.2"
|
"picomatch": "^4.0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vue/reactivity": {
|
"node_modules/@vue/reactivity": {
|
||||||
@@ -798,9 +798,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/alien-signals": {
|
"node_modules/alien-signals": {
|
||||||
"version": "3.1.2",
|
"version": "3.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.2.1.tgz",
|
||||||
"integrity": "sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==",
|
"integrity": "sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
@@ -1531,13 +1531,6 @@
|
|||||||
"@rolldown/binding-win32-x64-msvc": "1.0.1"
|
"@rolldown/binding-win32-x64-msvc": "1.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/rolldown/node_modules/@rolldown/pluginutils": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/scule": {
|
"node_modules/scule": {
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz",
|
||||||
@@ -1800,14 +1793,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vue-tsc": {
|
"node_modules/vue-tsc": {
|
||||||
"version": "3.2.5",
|
"version": "3.2.9",
|
||||||
"resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.2.9.tgz",
|
||||||
"integrity": "sha512-/htfTCMluQ+P2FISGAooul8kO4JMheOTCbCy4M6dYnYYjqLe3BExZudAua6MSIKSFYQtFOYAll7XobYwcpokGA==",
|
"integrity": "sha512-qm8/nbo+9eZc1SCndm9wT+gq23pM+wRIdHY0wjm83B3lIginHTwcdrLUyTrKjDWXbMVNjKegNrnymhpdqnCL3A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@volar/typescript": "2.4.28",
|
"@volar/typescript": "2.4.28",
|
||||||
"@vue/language-core": "3.2.5"
|
"@vue/language-core": "3.2.9"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"vue-tsc": "bin/vue-tsc.js"
|
"vue-tsc": "bin/vue-tsc.js"
|
||||||
|
|||||||
Reference in New Issue
Block a user