@aura3d/asset-index 4.1.3 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -6
- package/dist/index.d.ts +1 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/ranking.d.ts.map +1 -1
- package/dist/ranking.js +6 -0
- package/dist/ranking.js.map +1 -1
- package/package.json +2 -4
- package/dist/IndexStore.d.ts +0 -67
- package/dist/IndexStore.d.ts.map +0 -1
- package/dist/IndexStore.js +0 -112
- package/dist/IndexStore.js.map +0 -1
- package/dist/adapters/aura-index-result.d.ts +0 -76
- package/dist/adapters/aura-index-result.d.ts.map +0 -1
- package/dist/adapters/aura-index-result.js +0 -166
- package/dist/adapters/aura-index-result.js.map +0 -1
- package/dist/adapters/aura-index.d.ts +0 -8
- package/dist/adapters/aura-index.d.ts.map +0 -1
- package/dist/adapters/aura-index.js +0 -25
- package/dist/adapters/aura-index.js.map +0 -1
- package/dist/refresh.d.ts +0 -54
- package/dist/refresh.d.ts.map +0 -1
- package/dist/refresh.js +0 -48
- package/dist/refresh.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
# @aura3d/asset-index
|
|
2
2
|
|
|
3
|
-
`@aura3d/asset-index` owns
|
|
4
|
-
|
|
3
|
+
`@aura3d/asset-index` owns search, ranking, profiles and source adapters over
|
|
4
|
+
open, licence-clear model, texture and HDRI sources, plus verified auto-pull
|
|
5
|
+
candidate resolution for Aura3D. There is no hosted catalog: the CLI's
|
|
6
|
+
`aura3d assets resolve` uses these adapters as one rung of its build-time
|
|
7
|
+
ladder (project asset, open source, Meshy, primitives recipe).
|
|
5
8
|
|
|
6
9
|
## Public API
|
|
7
10
|
|
|
@@ -10,7 +13,7 @@ profiles, adapters, and verified auto-pull candidate resolution for Aura3D.
|
|
|
10
13
|
normalized result.
|
|
11
14
|
- `defaultAdapters`: zero-auth verified adapters used by the auto-pull
|
|
12
15
|
federation pass.
|
|
13
|
-
- `AuraCanonicalAsset`: normalized
|
|
16
|
+
- `AuraCanonicalAsset`: normalized asset record shape shared by the resolver
|
|
14
17
|
and CLI.
|
|
15
18
|
- `scoreAsset`, `matchesConstraints`: deterministic ranking and constraint
|
|
16
19
|
helpers.
|
|
@@ -18,18 +21,18 @@ profiles, adapters, and verified auto-pull candidate resolution for Aura3D.
|
|
|
18
21
|
for game-oriented asset searches.
|
|
19
22
|
- `animationAssetProfiles`, `evaluateAnimationAssetProfile`: profile scoring
|
|
20
23
|
for animation-oriented asset searches.
|
|
21
|
-
- `IndexStore`, `refreshIndex`: local index storage and refresh helpers.
|
|
22
24
|
|
|
23
25
|
## Source Adapters
|
|
24
26
|
|
|
25
27
|
The package includes adapters for Khronos, OS3A, Poly Haven, Poly Pizza,
|
|
26
|
-
Sketchfab, marketplace deep links,
|
|
28
|
+
ambientCG, Sketchfab, marketplace deep links, the curated Aura library and a
|
|
29
|
+
jsDelivr CC0 mirror. The hosted index adapter was removed in 4.2.0.
|
|
27
30
|
Key-gated or marketplace sources are explicit opt-in adapters; they are not
|
|
28
31
|
treated as automatically pullable by default.
|
|
29
32
|
|
|
30
33
|
## Package Boundary
|
|
31
34
|
|
|
32
|
-
This package is the
|
|
35
|
+
This package is the search and resolver layer. The CLI pulls selected
|
|
33
36
|
candidates through the typed asset pipeline, and public Aura3D routes should
|
|
34
37
|
still render generated `assets.name` references instead of raw URLs or guessed
|
|
35
38
|
model IDs.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @aura3d/asset-index
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Federated search over open, licence-clear model, texture and HDRI sources. Source adapters
|
|
5
5
|
* normalize each library's native catalog into one {@link AuraCanonicalAsset}
|
|
6
6
|
* shape; the {@link FederatedResolver} fans a natural-language query across them,
|
|
7
7
|
* constraint-filters, ranks, and returns auto-pullable candidates.
|
|
@@ -37,12 +37,6 @@ export type { SketchfabAdapterOptions } from "./adapters/sketchfab.js";
|
|
|
37
37
|
export { createMarketplaceDeepLinkAdapter } from "./adapters/marketplace.js";
|
|
38
38
|
export { createJsDelivrMirrorAdapter } from "./adapters/jsdelivr-mirror.js";
|
|
39
39
|
export type { JsDelivrMirrorOptions } from "./adapters/jsdelivr-mirror.js";
|
|
40
|
-
export { createAuraIndexAdapter } from "./adapters/aura-index.js";
|
|
41
|
-
export type { AuraIndexAdapterOptions } from "./adapters/aura-index.js";
|
|
42
|
-
export { IndexStore, INDEX_STORE_SCHEMA } from "./IndexStore.js";
|
|
43
|
-
export type { IndexStoreFile } from "./IndexStore.js";
|
|
44
|
-
export { refreshIndex } from "./refresh.js";
|
|
45
|
-
export type { RefreshResult, RefreshOptions, WritableAssetIndex } from "./refresh.js";
|
|
46
40
|
export { LocalHashEmbedding, cosineSimilarity, assetEmbeddingText, embeddingRanker, DEFAULT_EMBEDDING_DIMS, } from "./embedding.js";
|
|
47
41
|
export type { EmbeddingProvider } from "./embedding.js";
|
|
48
42
|
import type { SourceAdapter } from "./SourceAdapter.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/asset-index/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,eAAe,EACf,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvE,YAAY,EACV,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,SAAS,EACT,YAAY,EACZ,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AACzH,YAAY,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAChJ,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,+BAA+B,GAChC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,EAC3B,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AAErC,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC7H,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/asset-index/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,eAAe,EACf,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvE,YAAY,EACV,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,SAAS,EACT,YAAY,EACZ,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AACzH,YAAY,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAChJ,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,+BAA+B,GAChC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,EAC3B,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AAErC,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC7H,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAG3E,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQxD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,IAAI,aAAa,EAAE,CASjD"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @aura3d/asset-index
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Federated search over open, licence-clear model, texture and HDRI sources. Source adapters
|
|
5
5
|
* normalize each library's native catalog into one {@link AuraCanonicalAsset}
|
|
6
6
|
* shape; the {@link FederatedResolver} fans a natural-language query across them,
|
|
7
7
|
* constraint-filters, ranks, and returns auto-pullable candidates.
|
|
@@ -27,9 +27,6 @@ export { createPolyPizzaAdapter } from "./adapters/poly-pizza.js";
|
|
|
27
27
|
export { createSketchfabAdapter } from "./adapters/sketchfab.js";
|
|
28
28
|
export { createMarketplaceDeepLinkAdapter } from "./adapters/marketplace.js";
|
|
29
29
|
export { createJsDelivrMirrorAdapter } from "./adapters/jsdelivr-mirror.js";
|
|
30
|
-
export { createAuraIndexAdapter } from "./adapters/aura-index.js";
|
|
31
|
-
export { IndexStore, INDEX_STORE_SCHEMA } from "./IndexStore.js";
|
|
32
|
-
export { refreshIndex } from "./refresh.js";
|
|
33
30
|
export { LocalHashEmbedding, cosineSimilarity, assetEmbeddingText, embeddingRanker, DEFAULT_EMBEDDING_DIMS, } from "./embedding.js";
|
|
34
31
|
import { createKhronosAdapter } from "./adapters/khronos.js";
|
|
35
32
|
import { createOS3AAdapter } from "./adapters/os3a.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/asset-index/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAWH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAUvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAEzH,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,EAC3B,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AAYrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/asset-index/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAWH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAUvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAEzH,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,EAC3B,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AAYrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAI5E,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,iCAAiC,EAAE,MAAM,6BAA6B,CAAC;AAEhF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,iCAAiC,EAAE;QACnC,oBAAoB,EAAE;QACtB,iBAAiB,EAAE;QACnB,sBAAsB,EAAE;QACxB,sBAAsB,EAAE;QACxB,2BAA2B,EAAE;KAC9B,CAAC;AACJ,CAAC"}
|
package/dist/ranking.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ranking.d.ts","sourceRoot":"","sources":["../../../../packages/asset-index/src/ranking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA2B7D;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,wBAAgB,UAAU,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"ranking.d.ts","sourceRoot":"","sources":["../../../../packages/asset-index/src/ranking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA2B7D;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,wBAAgB,UAAU,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAuC1E;AAED,8DAA8D;AAC9D,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,kBAAkB,GAAG,SAAS,GAC1C,OAAO,CAkCT"}
|
package/dist/ranking.js
CHANGED
|
@@ -51,6 +51,12 @@ export function scoreAsset(asset, text) {
|
|
|
51
51
|
// Reward breadth of coverage so an asset hitting many query terms ranks above
|
|
52
52
|
// one that hits a single term repeatedly.
|
|
53
53
|
const covered = terms.filter((t) => title.includes(t) || tagSet.has(t) || description.includes(t)).length;
|
|
54
|
+
// Popularity and screened-hero signals only order assets that match the
|
|
55
|
+
// query: with no matched term (and no semantic match from the hosted index) an
|
|
56
|
+
// asset scores 0 and is dropped, so a popular unrelated model never shows up
|
|
57
|
+
// for "sword" or "campfire".
|
|
58
|
+
if (covered === 0 && !(typeof asset.semanticScore === "number" && asset.semanticScore > 0))
|
|
59
|
+
return 0;
|
|
54
60
|
const catalogSignals = scoreSignal(asset.semanticScore, 20) +
|
|
55
61
|
scoreSignal(asset.workerScore, 12) +
|
|
56
62
|
scoreSignal(asset.qualityScore, 8);
|
package/dist/ranking.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ranking.js","sourceRoot":"","sources":["../../../../packages/asset-index/src/ranking.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ranking.js","sourceRoot":"","sources":["../../../../packages/asset-index/src/ranking.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aura3d/asset-index",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"publishConfig": {
|
|
18
18
|
"access": "public"
|
|
19
19
|
},
|
|
20
|
-
"description": "
|
|
20
|
+
"description": "Search, ranking, profiles and adapters over open, licence-clear 3D model, texture and HDRI sources, with verified auto-pull candidate resolution for Aura3D.",
|
|
21
21
|
"keywords": [
|
|
22
22
|
"aura3d",
|
|
23
23
|
"3d",
|
|
@@ -28,11 +28,9 @@
|
|
|
28
28
|
"glb",
|
|
29
29
|
"asset-search",
|
|
30
30
|
"asset-index",
|
|
31
|
-
"asset-catalog",
|
|
32
31
|
"typed-assets",
|
|
33
32
|
"asset-provenance",
|
|
34
33
|
"3d-assets",
|
|
35
|
-
"objaverse",
|
|
36
34
|
"polyhaven",
|
|
37
35
|
"khronos"
|
|
38
36
|
],
|
package/dist/IndexStore.d.ts
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import type { AuraCanonicalAsset } from "./CanonicalAsset.js";
|
|
2
|
-
/**
|
|
3
|
-
* On-disk schema tag. Bump when the persisted shape changes incompatibly so a
|
|
4
|
-
* stale file can be detected (and, in future, migrated) rather than misread.
|
|
5
|
-
*/
|
|
6
|
-
export declare const INDEX_STORE_SCHEMA: "aura3d-asset-index/1";
|
|
7
|
-
/**
|
|
8
|
-
* Persisted JSON shape of an {@link IndexStore}.
|
|
9
|
-
*
|
|
10
|
-
* - `watermarks` maps a source id to the opaque cursor returned by that
|
|
11
|
-
* adapter's `fetchSince`, so the next refresh resumes incrementally.
|
|
12
|
-
* - `assets` is the flat, de-duplicated canonical catalog keyed (logically) by
|
|
13
|
-
* `id`; we store it as an array for stable, diff-friendly JSON.
|
|
14
|
-
* - `updatedAt` is caller-supplied (never read from the wall clock here) to keep
|
|
15
|
-
* the store deterministic and testable.
|
|
16
|
-
*/
|
|
17
|
-
export interface IndexStoreFile {
|
|
18
|
-
readonly schema: typeof INDEX_STORE_SCHEMA;
|
|
19
|
-
readonly updatedAt: string | null;
|
|
20
|
-
readonly watermarks: Record<string, string>;
|
|
21
|
-
readonly assets: AuraCanonicalAsset[];
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* A file-backed JSON store of {@link AuraCanonicalAsset} records keyed by
|
|
25
|
-
* canonical id, plus a per-source watermark map.
|
|
26
|
-
*
|
|
27
|
-
* This is the durable catalog the "live" cron writes into (via
|
|
28
|
-
* {@link refreshIndex}) and the resolver reads out of. It is intentionally
|
|
29
|
-
* deterministic: it never reads wall-clock time or randomness internally. The
|
|
30
|
-
* caller threads an `updatedAt` string into {@link save} when one is wanted.
|
|
31
|
-
*/
|
|
32
|
-
export declare class IndexStore {
|
|
33
|
-
private readonly path;
|
|
34
|
-
/** id -> canonical asset (last write wins on upsert). */
|
|
35
|
-
private readonly assets;
|
|
36
|
-
private readonly watermarks;
|
|
37
|
-
private updatedAt;
|
|
38
|
-
private constructor();
|
|
39
|
-
/**
|
|
40
|
-
* Load a store from `path`. A missing file is tolerated and yields an empty
|
|
41
|
-
* store (the cron's first run). A present-but-corrupt file throws so the
|
|
42
|
-
* problem is surfaced rather than silently discarded.
|
|
43
|
-
*/
|
|
44
|
-
static load(path: string): Promise<IndexStore>;
|
|
45
|
-
/**
|
|
46
|
-
* Insert or replace many records from one source, de-duping by canonical id
|
|
47
|
-
* with last-write-wins semantics. The `source` argument is accepted for call
|
|
48
|
-
* symmetry with the watermark API and to document provenance at the call
|
|
49
|
-
* site; the canonical id already namespaces the source.
|
|
50
|
-
*/
|
|
51
|
-
upsertMany(_source: string, assets: Iterable<AuraCanonicalAsset>): void;
|
|
52
|
-
/** The last watermark recorded for `source`, or `null` if never refreshed. */
|
|
53
|
-
getWatermark(source: string): string | null;
|
|
54
|
-
/** Record the next watermark for `source`. */
|
|
55
|
-
setWatermark(source: string, watermark: string): void;
|
|
56
|
-
/** All canonical assets currently held, in stable insertion order. */
|
|
57
|
-
all(): AuraCanonicalAsset[];
|
|
58
|
-
/**
|
|
59
|
-
* Atomically persist the store: serialize, write to a sibling temp file, then
|
|
60
|
-
* `rename` over the real path so a reader never sees a half-written file.
|
|
61
|
-
*
|
|
62
|
-
* `updatedAt` is caller-supplied to keep the store deterministic; when
|
|
63
|
-
* omitted the previously loaded/saved value is preserved.
|
|
64
|
-
*/
|
|
65
|
-
save(updatedAt?: string): Promise<void>;
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=IndexStore.d.ts.map
|
package/dist/IndexStore.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IndexStore.d.ts","sourceRoot":"","sources":["../../../../packages/asset-index/src/IndexStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAG,sBAA+B,CAAC;AAElE;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,kBAAkB,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC;CACvC;AAED;;;;;;;;GAQG;AACH,qBAAa,UAAU;IAMD,OAAO,CAAC,QAAQ,CAAC,IAAI;IALzC,yDAAyD;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;IAChE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,OAAO,CAAC,SAAS,CAAuB;IAExC,OAAO;IAEP;;;;OAIG;WACU,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA0BpD;;;;;OAKG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAQvE,8EAA8E;IAC9E,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI3C,8CAA8C;IAC9C,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIrD,sEAAsE;IACtE,GAAG,IAAI,kBAAkB,EAAE;IAI3B;;;;;;OAMG;IACG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAc9C"}
|
package/dist/IndexStore.js
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { readFile, writeFile, rename, mkdir } from "node:fs/promises";
|
|
2
|
-
import { dirname } from "node:path";
|
|
3
|
-
/**
|
|
4
|
-
* On-disk schema tag. Bump when the persisted shape changes incompatibly so a
|
|
5
|
-
* stale file can be detected (and, in future, migrated) rather than misread.
|
|
6
|
-
*/
|
|
7
|
-
export const INDEX_STORE_SCHEMA = "aura3d-asset-index/1";
|
|
8
|
-
/**
|
|
9
|
-
* A file-backed JSON store of {@link AuraCanonicalAsset} records keyed by
|
|
10
|
-
* canonical id, plus a per-source watermark map.
|
|
11
|
-
*
|
|
12
|
-
* This is the durable catalog the "live" cron writes into (via
|
|
13
|
-
* {@link refreshIndex}) and the resolver reads out of. It is intentionally
|
|
14
|
-
* deterministic: it never reads wall-clock time or randomness internally. The
|
|
15
|
-
* caller threads an `updatedAt` string into {@link save} when one is wanted.
|
|
16
|
-
*/
|
|
17
|
-
export class IndexStore {
|
|
18
|
-
path;
|
|
19
|
-
/** id -> canonical asset (last write wins on upsert). */
|
|
20
|
-
assets = new Map();
|
|
21
|
-
watermarks = new Map();
|
|
22
|
-
updatedAt = null;
|
|
23
|
-
constructor(path) {
|
|
24
|
-
this.path = path;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Load a store from `path`. A missing file is tolerated and yields an empty
|
|
28
|
-
* store (the cron's first run). A present-but-corrupt file throws so the
|
|
29
|
-
* problem is surfaced rather than silently discarded.
|
|
30
|
-
*/
|
|
31
|
-
static async load(path) {
|
|
32
|
-
const store = new IndexStore(path);
|
|
33
|
-
let text;
|
|
34
|
-
try {
|
|
35
|
-
text = await readFile(path, "utf8");
|
|
36
|
-
}
|
|
37
|
-
catch (err) {
|
|
38
|
-
if (isNotFound(err))
|
|
39
|
-
return store;
|
|
40
|
-
throw err;
|
|
41
|
-
}
|
|
42
|
-
const parsed = JSON.parse(text);
|
|
43
|
-
if (Array.isArray(parsed.assets)) {
|
|
44
|
-
for (const asset of parsed.assets) {
|
|
45
|
-
if (asset && typeof asset.id === "string") {
|
|
46
|
-
store.assets.set(asset.id, asset);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
if (parsed.watermarks && typeof parsed.watermarks === "object") {
|
|
51
|
-
for (const [source, w] of Object.entries(parsed.watermarks)) {
|
|
52
|
-
if (typeof w === "string")
|
|
53
|
-
store.watermarks.set(source, w);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
store.updatedAt = typeof parsed.updatedAt === "string" ? parsed.updatedAt : null;
|
|
57
|
-
return store;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Insert or replace many records from one source, de-duping by canonical id
|
|
61
|
-
* with last-write-wins semantics. The `source` argument is accepted for call
|
|
62
|
-
* symmetry with the watermark API and to document provenance at the call
|
|
63
|
-
* site; the canonical id already namespaces the source.
|
|
64
|
-
*/
|
|
65
|
-
upsertMany(_source, assets) {
|
|
66
|
-
for (const asset of assets) {
|
|
67
|
-
if (asset && typeof asset.id === "string") {
|
|
68
|
-
this.assets.set(asset.id, asset);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/** The last watermark recorded for `source`, or `null` if never refreshed. */
|
|
73
|
-
getWatermark(source) {
|
|
74
|
-
return this.watermarks.get(source) ?? null;
|
|
75
|
-
}
|
|
76
|
-
/** Record the next watermark for `source`. */
|
|
77
|
-
setWatermark(source, watermark) {
|
|
78
|
-
this.watermarks.set(source, watermark);
|
|
79
|
-
}
|
|
80
|
-
/** All canonical assets currently held, in stable insertion order. */
|
|
81
|
-
all() {
|
|
82
|
-
return [...this.assets.values()];
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Atomically persist the store: serialize, write to a sibling temp file, then
|
|
86
|
-
* `rename` over the real path so a reader never sees a half-written file.
|
|
87
|
-
*
|
|
88
|
-
* `updatedAt` is caller-supplied to keep the store deterministic; when
|
|
89
|
-
* omitted the previously loaded/saved value is preserved.
|
|
90
|
-
*/
|
|
91
|
-
async save(updatedAt) {
|
|
92
|
-
if (updatedAt !== undefined)
|
|
93
|
-
this.updatedAt = updatedAt;
|
|
94
|
-
const file = {
|
|
95
|
-
schema: INDEX_STORE_SCHEMA,
|
|
96
|
-
updatedAt: this.updatedAt,
|
|
97
|
-
watermarks: Object.fromEntries(this.watermarks),
|
|
98
|
-
assets: this.all(),
|
|
99
|
-
};
|
|
100
|
-
const json = `${JSON.stringify(file, null, 2)}\n`;
|
|
101
|
-
await mkdir(dirname(this.path), { recursive: true });
|
|
102
|
-
const tmp = `${this.path}.tmp`;
|
|
103
|
-
await writeFile(tmp, json, "utf8");
|
|
104
|
-
await rename(tmp, this.path);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
function isNotFound(err) {
|
|
108
|
-
return (typeof err === "object" &&
|
|
109
|
-
err !== null &&
|
|
110
|
-
err.code === "ENOENT");
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=IndexStore.js.map
|
package/dist/IndexStore.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IndexStore.js","sourceRoot":"","sources":["../../../../packages/asset-index/src/IndexStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import type { AuraCanonicalAsset } from "../CanonicalAsset.js";
|
|
2
|
-
export interface AuraIndexSearchResult extends Readonly<Record<string, unknown>> {
|
|
3
|
-
readonly id?: string | null;
|
|
4
|
-
readonly title?: string | null;
|
|
5
|
-
readonly source?: string | null;
|
|
6
|
-
readonly url?: string | null;
|
|
7
|
-
readonly downloadUrl?: string | null;
|
|
8
|
-
readonly download_url?: string | null;
|
|
9
|
-
readonly downloadURL?: string | null;
|
|
10
|
-
readonly sourcePage?: string | null;
|
|
11
|
-
readonly source_page?: string | null;
|
|
12
|
-
readonly page?: string | null;
|
|
13
|
-
readonly viewerUrl?: string | null;
|
|
14
|
-
readonly license?: string | null;
|
|
15
|
-
readonly licenseName?: string | null;
|
|
16
|
-
readonly license_name?: string | null;
|
|
17
|
-
readonly licenseTitle?: string | null;
|
|
18
|
-
readonly licenseUrl?: string | null;
|
|
19
|
-
readonly license_url?: string | null;
|
|
20
|
-
readonly thumbnail?: string | null;
|
|
21
|
-
readonly attribution?: string | null;
|
|
22
|
-
readonly author?: string | null;
|
|
23
|
-
readonly creator?: string | null;
|
|
24
|
-
readonly sourceFamily?: string | null;
|
|
25
|
-
readonly source_family?: string | null;
|
|
26
|
-
readonly retrievedAt?: string | null;
|
|
27
|
-
readonly retrieved_at?: string | null;
|
|
28
|
-
readonly semanticScore?: number | null;
|
|
29
|
-
readonly semantic_score?: number | null;
|
|
30
|
-
readonly score?: number | null;
|
|
31
|
-
readonly workerScore?: number | null;
|
|
32
|
-
readonly worker_score?: number | null;
|
|
33
|
-
readonly qualityScore?: number | null;
|
|
34
|
-
readonly quality_score?: number | null;
|
|
35
|
-
readonly bounds?: unknown;
|
|
36
|
-
readonly dimensions?: unknown;
|
|
37
|
-
readonly triangles?: number | null;
|
|
38
|
-
readonly triangleCount?: number | null;
|
|
39
|
-
readonly triangle_count?: number | null;
|
|
40
|
-
readonly meshCount?: number | null;
|
|
41
|
-
readonly mesh_count?: number | null;
|
|
42
|
-
readonly materialCount?: number | null;
|
|
43
|
-
readonly material_count?: number | null;
|
|
44
|
-
readonly textureCount?: number | null;
|
|
45
|
-
readonly texture_count?: number | null;
|
|
46
|
-
readonly animationClips?: readonly string[] | null;
|
|
47
|
-
readonly animation_clips?: readonly string[] | null;
|
|
48
|
-
readonly animationClipCount?: number | null;
|
|
49
|
-
readonly animation_clip_count?: number | null;
|
|
50
|
-
readonly skins?: number | null;
|
|
51
|
-
readonly skinCount?: number | null;
|
|
52
|
-
readonly skin_count?: number | null;
|
|
53
|
-
readonly morphTargets?: number | null;
|
|
54
|
-
readonly morphTargetCount?: number | null;
|
|
55
|
-
readonly morph_target_count?: number | null;
|
|
56
|
-
readonly intendedRole?: string | null;
|
|
57
|
-
readonly intended_role?: string | null;
|
|
58
|
-
readonly role?: string | null;
|
|
59
|
-
readonly roleSuitability?: string | null;
|
|
60
|
-
readonly role_suitability?: string | null;
|
|
61
|
-
readonly suitability?: string | null;
|
|
62
|
-
readonly warnings?: readonly string[] | null;
|
|
63
|
-
readonly qualityWarnings?: readonly string[] | null;
|
|
64
|
-
readonly quality_warnings?: readonly string[] | null;
|
|
65
|
-
readonly duplicateHash?: string | null;
|
|
66
|
-
readonly duplicate_hash?: string | null;
|
|
67
|
-
readonly duplicateOkReason?: string | null;
|
|
68
|
-
readonly duplicate_ok_reason?: string | null;
|
|
69
|
-
readonly tags?: readonly string[] | null;
|
|
70
|
-
}
|
|
71
|
-
export interface AuraIndexSearchResponse {
|
|
72
|
-
readonly results?: readonly AuraIndexSearchResult[];
|
|
73
|
-
}
|
|
74
|
-
export declare function hasAuraIndexDownloadUrl(result: AuraIndexSearchResult): boolean;
|
|
75
|
-
export declare function toAuraCanonicalAsset(result: AuraIndexSearchResult): AuraCanonicalAsset | undefined;
|
|
76
|
-
//# sourceMappingURL=aura-index-result.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aura-index-result.d.ts","sourceRoot":"","sources":["../../../../../packages/asset-index/src/adapters/aura-index-result.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import { normalizeLicense } from "../CanonicalAsset.js";
|
|
2
|
-
export function hasAuraIndexDownloadUrl(result) {
|
|
3
|
-
return Boolean(stringValue(result.id) && modelDownloadUrl(result));
|
|
4
|
-
}
|
|
5
|
-
export function toAuraCanonicalAsset(result) {
|
|
6
|
-
const id = stringValue(result.id);
|
|
7
|
-
const downloadUrl = modelDownloadUrl(result);
|
|
8
|
-
if (!id || !downloadUrl)
|
|
9
|
-
return undefined;
|
|
10
|
-
const title = stringValue(result.title) ?? id;
|
|
11
|
-
const sourcePage = stringValue(result.sourcePage ?? result.source_page ?? result.page ?? result.viewerUrl);
|
|
12
|
-
const licenseUrl = stringValue(result.licenseUrl ?? result.license_url);
|
|
13
|
-
const licensePage = licenseUrl ?? sourcePage;
|
|
14
|
-
const licenseName = stringValue(result.licenseName ?? result.license_name ?? result.licenseTitle ?? result.license);
|
|
15
|
-
const author = stringValue(result.author ?? result.creator ?? result.attribution);
|
|
16
|
-
const animationClips = stringArrayValue(result.animationClips ?? result.animation_clips);
|
|
17
|
-
const tags = assetTags(result, title);
|
|
18
|
-
const triangleCount = numberValue(result.triangleCount ?? result.triangle_count ?? result.triangles);
|
|
19
|
-
const meshCount = numberValue(result.meshCount ?? result.mesh_count);
|
|
20
|
-
const materialCount = numberValue(result.materialCount ?? result.material_count);
|
|
21
|
-
const textureCount = numberValue(result.textureCount ?? result.texture_count);
|
|
22
|
-
const animationClipCount = numberValue(result.animationClipCount ?? result.animation_clip_count) ?? animationClips?.length;
|
|
23
|
-
const skinCount = numberValue(result.skinCount ?? result.skin_count ?? result.skins);
|
|
24
|
-
const morphTargetCount = numberValue(result.morphTargetCount ?? result.morph_target_count ?? result.morphTargets);
|
|
25
|
-
const bounds = boundsValue(result.bounds);
|
|
26
|
-
const dimensions = vector3Value(result.dimensions);
|
|
27
|
-
const semanticScore = numberValue(result.semanticScore ?? result.semantic_score ?? result.score);
|
|
28
|
-
const workerScore = numberValue(result.workerScore ?? result.worker_score);
|
|
29
|
-
const qualityScore = numberValue(result.qualityScore ?? result.quality_score);
|
|
30
|
-
const sourceFamily = stringValue(result.sourceFamily ?? result.source_family ?? result.source);
|
|
31
|
-
const retrievedAt = stringValue(result.retrievedAt ?? result.retrieved_at);
|
|
32
|
-
const intendedRole = roleValue(result.intendedRole ?? result.intended_role ?? result.role);
|
|
33
|
-
const roleSuitability = stringValue(result.roleSuitability ?? result.role_suitability ?? result.suitability);
|
|
34
|
-
const qualityWarnings = stringArrayValue(result.qualityWarnings ?? result.quality_warnings ?? result.warnings);
|
|
35
|
-
const duplicateHash = stringValue(result.duplicateHash ?? result.duplicate_hash);
|
|
36
|
-
const duplicateOkReason = stringValue(result.duplicateOkReason ?? result.duplicate_ok_reason);
|
|
37
|
-
const thumbnailUrl = stringValue(result.thumbnail);
|
|
38
|
-
return {
|
|
39
|
-
id,
|
|
40
|
-
source: stringValue(result.source) ?? "aura-index",
|
|
41
|
-
title,
|
|
42
|
-
url: downloadUrl,
|
|
43
|
-
downloadUrl,
|
|
44
|
-
access: "direct-download",
|
|
45
|
-
format: "glb",
|
|
46
|
-
license: catalogLicense(stringValue(result.license) ?? "", licensePage),
|
|
47
|
-
...(licenseName ? { licenseName } : {}),
|
|
48
|
-
...(licenseUrl ? { licenseUrl } : {}),
|
|
49
|
-
...(thumbnailUrl ? { thumbnailUrl } : {}),
|
|
50
|
-
...(triangleCount !== undefined ? { triangles: triangleCount, triangleCount } : {}),
|
|
51
|
-
...(meshCount !== undefined ? { meshCount } : {}),
|
|
52
|
-
...(materialCount !== undefined ? { materialCount } : {}),
|
|
53
|
-
...(textureCount !== undefined ? { textureCount } : {}),
|
|
54
|
-
...(animationClipCount !== undefined ? { animationClipCount } : {}),
|
|
55
|
-
...(animationClips ? { animationClips } : {}),
|
|
56
|
-
...(skinCount !== undefined ? { skinCount } : {}),
|
|
57
|
-
...(morphTargetCount !== undefined ? { morphTargetCount } : {}),
|
|
58
|
-
...(bounds ? { bounds } : {}),
|
|
59
|
-
...(dimensions ? { dimensions } : {}),
|
|
60
|
-
...(semanticScore !== undefined ? { semanticScore } : {}),
|
|
61
|
-
...(workerScore !== undefined ? { workerScore } : {}),
|
|
62
|
-
...(qualityScore !== undefined ? { qualityScore } : {}),
|
|
63
|
-
tags,
|
|
64
|
-
...(sourcePage ? { sourcePage } : {}),
|
|
65
|
-
...(sourceFamily ? { sourceFamily } : {}),
|
|
66
|
-
...(retrievedAt ? { retrievedAt } : {}),
|
|
67
|
-
...(author ? { author, attribution: author } : {}),
|
|
68
|
-
...(intendedRole ? { intendedRole } : {}),
|
|
69
|
-
...(roleSuitability ? { roleSuitability } : {}),
|
|
70
|
-
...(qualityWarnings ? { qualityWarnings } : {}),
|
|
71
|
-
...(duplicateHash ? { duplicateHash } : {}),
|
|
72
|
-
...(duplicateOkReason ? { duplicateOkReason } : {}),
|
|
73
|
-
rawCatalogMetadata: { ...result },
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
function catalogLicense(spdx, sourcePage) {
|
|
77
|
-
if (spdx.startsWith("CC0")) {
|
|
78
|
-
return { spdx: "CC0-1.0", raw: spdx, verified: true, attributionRequired: false, redistributable: true, sourcePage };
|
|
79
|
-
}
|
|
80
|
-
if (spdx.startsWith("CC-BY")) {
|
|
81
|
-
return { spdx: "CC-BY-4.0", raw: spdx, verified: true, attributionRequired: true, redistributable: true, sourcePage };
|
|
82
|
-
}
|
|
83
|
-
return normalizeLicense(spdx, sourcePage);
|
|
84
|
-
}
|
|
85
|
-
function modelDownloadUrl(result) {
|
|
86
|
-
return stringValue(result.downloadUrl ?? result.download_url ?? result.downloadURL ?? result.url);
|
|
87
|
-
}
|
|
88
|
-
function tokenize(text) {
|
|
89
|
-
return text
|
|
90
|
-
.toLowerCase()
|
|
91
|
-
.split(/[^a-z0-9]+/)
|
|
92
|
-
.filter((token) => token.length > 1);
|
|
93
|
-
}
|
|
94
|
-
function assetTags(result, title) {
|
|
95
|
-
return Array.from(new Set([
|
|
96
|
-
...tokenize(title),
|
|
97
|
-
...(result.tags ?? []).flatMap(tokenize),
|
|
98
|
-
...tokenize(stringValue(result.role ?? result.intendedRole ?? result.intended_role) ?? ""),
|
|
99
|
-
]));
|
|
100
|
-
}
|
|
101
|
-
function stringValue(value) {
|
|
102
|
-
return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
|
|
103
|
-
}
|
|
104
|
-
function numberValue(value) {
|
|
105
|
-
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
106
|
-
}
|
|
107
|
-
function stringArrayValue(value) {
|
|
108
|
-
if (!Array.isArray(value))
|
|
109
|
-
return undefined;
|
|
110
|
-
const out = value.map(stringValue).filter((entry) => Boolean(entry));
|
|
111
|
-
return out.length > 0 ? out : undefined;
|
|
112
|
-
}
|
|
113
|
-
function roleValue(value) {
|
|
114
|
-
switch (stringValue(value)?.toLowerCase()) {
|
|
115
|
-
case "character":
|
|
116
|
-
return "character";
|
|
117
|
-
case "vehicle":
|
|
118
|
-
return "vehicle";
|
|
119
|
-
case "world":
|
|
120
|
-
return "world";
|
|
121
|
-
case "environment":
|
|
122
|
-
return "environment";
|
|
123
|
-
case "track":
|
|
124
|
-
return "track";
|
|
125
|
-
case "product":
|
|
126
|
-
return "product";
|
|
127
|
-
case "weapon":
|
|
128
|
-
return "weapon";
|
|
129
|
-
case "prop":
|
|
130
|
-
return "prop";
|
|
131
|
-
case "set-dressing":
|
|
132
|
-
return "set-dressing";
|
|
133
|
-
case "debug":
|
|
134
|
-
return "debug";
|
|
135
|
-
case "abstract":
|
|
136
|
-
return "abstract";
|
|
137
|
-
case "unknown":
|
|
138
|
-
return "unknown";
|
|
139
|
-
default:
|
|
140
|
-
return undefined;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
function vector3Value(value) {
|
|
144
|
-
if (Array.isArray(value) && value.length >= 3) {
|
|
145
|
-
const [x, y, z] = value.slice(0, 3).map(numberValue);
|
|
146
|
-
if (typeof x === "number" && typeof y === "number" && typeof z === "number") {
|
|
147
|
-
return [x, y, z];
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
if (value && typeof value === "object") {
|
|
151
|
-
const x = numberValue("x" in value ? value.x : "width" in value ? value.width : undefined);
|
|
152
|
-
const y = numberValue("y" in value ? value.y : "height" in value ? value.height : undefined);
|
|
153
|
-
const z = numberValue("z" in value ? value.z : "depth" in value ? value.depth : undefined);
|
|
154
|
-
if (typeof x === "number" && typeof y === "number" && typeof z === "number") {
|
|
155
|
-
return [x, y, z];
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
return undefined;
|
|
159
|
-
}
|
|
160
|
-
function boundsValue(value) {
|
|
161
|
-
if (!value || typeof value !== "object")
|
|
162
|
-
return undefined;
|
|
163
|
-
const size = vector3Value("size" in value ? value.size : "dimensions" in value ? value.dimensions : value);
|
|
164
|
-
return size ? { size } : undefined;
|
|
165
|
-
}
|
|
166
|
-
//# sourceMappingURL=aura-index-result.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aura-index-result.js","sourceRoot":"","sources":["../../../../../packages/asset-index/src/adapters/aura-index-result.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { SourceAdapter } from "../SourceAdapter.js";
|
|
2
|
-
export interface AuraIndexAdapterOptions {
|
|
3
|
-
readonly searchUrl?: string;
|
|
4
|
-
readonly limit?: number;
|
|
5
|
-
readonly commercialOnly?: boolean;
|
|
6
|
-
}
|
|
7
|
-
export declare function createAuraIndexAdapter(options?: AuraIndexAdapterOptions): SourceAdapter;
|
|
8
|
-
//# sourceMappingURL=aura-index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aura-index.d.ts","sourceRoot":"","sources":["../../../../../packages/asset-index/src/adapters/aura-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,aAAa,EACd,MAAM,qBAAqB,CAAC;AAU7B,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,uBAA4B,GACpC,aAAa,CAsBf"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { hasAuraIndexDownloadUrl, toAuraCanonicalAsset, } from "./aura-index-result.js";
|
|
2
|
-
const DEFAULT_SEARCH_URL = "https://aura3d-asset-index-cron.newsroom.workers.dev/search";
|
|
3
|
-
export function createAuraIndexAdapter(options = {}) {
|
|
4
|
-
const base = options.searchUrl ?? DEFAULT_SEARCH_URL;
|
|
5
|
-
const limit = options.limit ?? 20;
|
|
6
|
-
const commercialOnly = options.commercialOnly ?? true;
|
|
7
|
-
return {
|
|
8
|
-
id: "aura-index",
|
|
9
|
-
label: "Aura3D hosted catalog (~850k)",
|
|
10
|
-
async search(query, ctx) {
|
|
11
|
-
const text = query.text.trim();
|
|
12
|
-
if (!text)
|
|
13
|
-
return [];
|
|
14
|
-
const url = `${base}?q=${encodeURIComponent(text)}&limit=${limit}` +
|
|
15
|
-
`&commercial=${commercialOnly}`;
|
|
16
|
-
const res = (await ctx.fetchJson(url));
|
|
17
|
-
const results = Array.isArray(res.results) ? res.results : [];
|
|
18
|
-
return results
|
|
19
|
-
.filter(hasAuraIndexDownloadUrl)
|
|
20
|
-
.map(toAuraCanonicalAsset)
|
|
21
|
-
.filter((asset) => asset !== undefined);
|
|
22
|
-
},
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=aura-index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aura-index.js","sourceRoot":"","sources":["../../../../../packages/asset-index/src/adapters/aura-index.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,uBAAuB,EACvB,oBAAoB,GAErB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,kBAAkB,GACtB,6DAA6D,CAAC;AAQhE,MAAM,UAAU,sBAAsB,CACpC,UAAmC,EAAE;IAErC,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;IAEtD,OAAO;QACL,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,+BAA+B;QACtC,KAAK,CAAC,MAAM,CAAC,KAAmB,EAAE,GAAmB;YACnD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,CAAC;YACrB,MAAM,GAAG,GACP,GAAG,IAAI,MAAM,kBAAkB,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE;gBACtD,eAAe,cAAc,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAA4B,CAAC;YAClE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,OAAO,OAAO;iBACX,MAAM,CAAC,uBAAuB,CAAC;iBAC/B,GAAG,CAAC,oBAAoB,CAAC;iBACzB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;QAC5C,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/refresh.d.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type { AdapterContext, SourceAdapter } from "./SourceAdapter.js";
|
|
2
|
-
import type { AuraCanonicalAsset } from "./CanonicalAsset.js";
|
|
3
|
-
/**
|
|
4
|
-
* The minimal write surface {@link refreshIndex} needs from a store. The
|
|
5
|
-
* file-backed `IndexStore` satisfies this structurally, and so does a
|
|
6
|
-
* storage-backed implementation (e.g. an R2-backed store in a Cloudflare
|
|
7
|
-
* Worker) — so the cron logic is decoupled from `node:fs` and runs unchanged in
|
|
8
|
-
* a serverless runtime.
|
|
9
|
-
*/
|
|
10
|
-
export interface WritableAssetIndex {
|
|
11
|
-
getWatermark(source: string): string | null;
|
|
12
|
-
setWatermark(source: string, watermark: string): void;
|
|
13
|
-
upsertMany(source: string, assets: Iterable<AuraCanonicalAsset>): void;
|
|
14
|
-
save(updatedAt?: string): Promise<void>;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Outcome of a single {@link refreshIndex} pass.
|
|
18
|
-
*
|
|
19
|
-
* - `upserted` is the total number of canonical records written across sources.
|
|
20
|
-
* - `perSource` breaks that down by adapter id (0 for an adapter that failed).
|
|
21
|
-
* - `warnings` collects per-adapter failures so one flaky source cannot collapse
|
|
22
|
-
* the whole refresh; the store is still saved with whatever succeeded.
|
|
23
|
-
*/
|
|
24
|
-
export interface RefreshResult {
|
|
25
|
-
readonly upserted: number;
|
|
26
|
-
readonly perSource: Record<string, number>;
|
|
27
|
-
readonly warnings: string[];
|
|
28
|
-
}
|
|
29
|
-
export interface RefreshOptions {
|
|
30
|
-
/**
|
|
31
|
-
* Caller-supplied timestamp threaded into {@link IndexStore.save} so the
|
|
32
|
-
* refresh stays deterministic (no internal wall-clock read). Typically an
|
|
33
|
-
* ISO-8601 string captured by the cron at the top of the run.
|
|
34
|
-
*/
|
|
35
|
-
readonly updatedAt?: string;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Refresh the durable asset index from every adapter, then persist it.
|
|
39
|
-
*
|
|
40
|
-
* This is the engine of the "live" catalog: a scheduled cron / CI job calls
|
|
41
|
-
* {@link refreshIndex} on a cadence to pull new/changed assets into the
|
|
42
|
-
* {@link IndexStore}, and the resolver reads candidates back out of that same
|
|
43
|
-
* store at query time (decoupling user-facing latency from source fetches).
|
|
44
|
-
*
|
|
45
|
-
* For each adapter:
|
|
46
|
-
* - if it exposes `fetchSince`, call it with the source's stored watermark to
|
|
47
|
-
* pull only what changed, then advance the watermark;
|
|
48
|
-
* - otherwise fall back to a broad `search({ text: "" })` to (re)load its
|
|
49
|
-
* catalog.
|
|
50
|
-
* Failures are caught per-adapter and recorded as warnings; surviving results
|
|
51
|
-
* are upserted (last-write-wins by id) and the store is saved once at the end.
|
|
52
|
-
*/
|
|
53
|
-
export declare function refreshIndex(adapters: readonly SourceAdapter[], store: WritableAssetIndex, ctx: AdapterContext, opts?: RefreshOptions): Promise<RefreshResult>;
|
|
54
|
-
//# sourceMappingURL=refresh.d.ts.map
|
package/dist/refresh.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../../packages/asset-index/src/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5C,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;IACvE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAClC,KAAK,EAAE,kBAAkB,EACzB,GAAG,EAAE,cAAc,EACnB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,aAAa,CAAC,CA8BxB"}
|
package/dist/refresh.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Refresh the durable asset index from every adapter, then persist it.
|
|
3
|
-
*
|
|
4
|
-
* This is the engine of the "live" catalog: a scheduled cron / CI job calls
|
|
5
|
-
* {@link refreshIndex} on a cadence to pull new/changed assets into the
|
|
6
|
-
* {@link IndexStore}, and the resolver reads candidates back out of that same
|
|
7
|
-
* store at query time (decoupling user-facing latency from source fetches).
|
|
8
|
-
*
|
|
9
|
-
* For each adapter:
|
|
10
|
-
* - if it exposes `fetchSince`, call it with the source's stored watermark to
|
|
11
|
-
* pull only what changed, then advance the watermark;
|
|
12
|
-
* - otherwise fall back to a broad `search({ text: "" })` to (re)load its
|
|
13
|
-
* catalog.
|
|
14
|
-
* Failures are caught per-adapter and recorded as warnings; surviving results
|
|
15
|
-
* are upserted (last-write-wins by id) and the store is saved once at the end.
|
|
16
|
-
*/
|
|
17
|
-
export async function refreshIndex(adapters, store, ctx, opts = {}) {
|
|
18
|
-
const perSource = {};
|
|
19
|
-
const warnings = [];
|
|
20
|
-
let upserted = 0;
|
|
21
|
-
for (const adapter of adapters) {
|
|
22
|
-
perSource[adapter.id] = 0;
|
|
23
|
-
try {
|
|
24
|
-
if (adapter.fetchSince) {
|
|
25
|
-
const { watermark, assets } = await adapter.fetchSince(store.getWatermark(adapter.id), ctx);
|
|
26
|
-
store.upsertMany(adapter.id, assets);
|
|
27
|
-
store.setWatermark(adapter.id, watermark);
|
|
28
|
-
perSource[adapter.id] = assets.length;
|
|
29
|
-
upserted += assets.length;
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
const assets = await adapter.search({ text: "" }, ctx);
|
|
33
|
-
store.upsertMany(adapter.id, assets);
|
|
34
|
-
perSource[adapter.id] = assets.length;
|
|
35
|
-
upserted += assets.length;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
catch (err) {
|
|
39
|
-
warnings.push(`${adapter.id}: ${errorMessage(err)}`);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
await store.save(opts.updatedAt);
|
|
43
|
-
return { upserted, perSource, warnings };
|
|
44
|
-
}
|
|
45
|
-
function errorMessage(err) {
|
|
46
|
-
return err instanceof Error ? err.message : String(err);
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=refresh.js.map
|
package/dist/refresh.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../../../packages/asset-index/src/refresh.ts"],"names":[],"mappings":"AAwCA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAkC,EAClC,KAAyB,EACzB,GAAmB,EACnB,OAAuB,EAAE;IAEzB,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,UAAU,CACpD,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,EAC9B,GAAG,CACJ,CAAC;gBACF,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBACrC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;gBAC1C,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;gBACtC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBACvD,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBACrC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;gBACtC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC;YAC5B,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,KAAK,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC"}
|