@sharpee/queries 1.0.0 → 1.1.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 +63 -0
- package/augmentation.d.ts +2 -2
- package/augmentation.d.ts.map +1 -1
- package/augmentation.js +1 -1
- package/entity-query.d.ts +2 -2
- package/entity-query.d.ts.map +1 -1
- package/index.d.ts.map +1 -1
- package/package.json +3 -3
package/README.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# @sharpee/queries
|
|
2
|
+
|
|
3
|
+
LINQ-style fluent entity query API for the Sharpee Interactive Fiction platform.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @sharpee/queries
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
A lightweight, immutable, chainable query layer over `IFEntity` collections (ADR-150):
|
|
14
|
+
|
|
15
|
+
- **`EntityQuery`** - LINQ-style filtering, ordering, aggregation, and materialization. Every filter returns a new query; the source is never mutated.
|
|
16
|
+
- **World-model entry points** - Importing the package augments `WorldModel` with `all`, `rooms`, `actors`, `objects`, `scenes`, `regions`, plus `contents()`, `allContents()`, `having()`, `visible()`, and `inScope()`.
|
|
17
|
+
- **Concrete class only** - The query entry points live on the concrete `WorldModel` class, not the `IWorldModel` interface. Access queries through a `WorldModel` instance.
|
|
18
|
+
- **Iterable** - `EntityQuery` implements `Iterable<IFEntity>`, so it works with `for...of` and spread.
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import '@sharpee/queries'; // side-effect import: activates query entry points
|
|
24
|
+
import { EntityQuery } from '@sharpee/queries';
|
|
25
|
+
import { WorldModel, TraitType } from '@sharpee/world-model';
|
|
26
|
+
|
|
27
|
+
function findLitItems(world: WorldModel) {
|
|
28
|
+
// Entry points return EntityQuery; chain LINQ-style filters
|
|
29
|
+
const litObjects = world.objects
|
|
30
|
+
.having(TraitType.LIGHT_SOURCE)
|
|
31
|
+
.where(e => e.id !== 'player');
|
|
32
|
+
|
|
33
|
+
// Materialize when you need an array
|
|
34
|
+
return [...litObjects];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Filter contents of a room and look one up by name
|
|
38
|
+
function torchInKitchen(world: WorldModel) {
|
|
39
|
+
return world.contents('kitchen')
|
|
40
|
+
.matching('torch')
|
|
41
|
+
.named('brass torch');
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Common filters
|
|
46
|
+
|
|
47
|
+
| Method | Effect |
|
|
48
|
+
|--------|--------|
|
|
49
|
+
| `where(predicate)` | Keep entities matching a predicate |
|
|
50
|
+
| `withTrait(type)` / `withoutTrait(type)` | Filter by trait presence/absence |
|
|
51
|
+
| `ofType(type)` | Filter by entity type (`'room'`, `'object'`, …) |
|
|
52
|
+
| `named(name)` | Exact (case-sensitive) identity-name match |
|
|
53
|
+
| `matching(term)` | Case-insensitive name/alias substring match |
|
|
54
|
+
|
|
55
|
+
## Related Packages
|
|
56
|
+
|
|
57
|
+
- [@sharpee/world-model](https://www.npmjs.com/package/@sharpee/world-model) - Entity, trait, and behavior system
|
|
58
|
+
- [@sharpee/helpers](https://www.npmjs.com/package/@sharpee/helpers) - Fluent entity builders
|
|
59
|
+
- [@sharpee/sharpee](https://www.npmjs.com/package/@sharpee/sharpee) - Full platform bundle
|
|
60
|
+
|
|
61
|
+
## License
|
|
62
|
+
|
|
63
|
+
MIT
|
package/augmentation.d.ts
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Owner context: @sharpee/queries (ADR-150)
|
|
12
12
|
*/
|
|
13
|
-
import { TraitType } from
|
|
14
|
-
import type { ContentsOptions } from
|
|
13
|
+
import { TraitType } from '@sharpee/world-model';
|
|
14
|
+
import type { ContentsOptions } from '@sharpee/if-domain';
|
|
15
15
|
import { EntityQuery } from './entity-query';
|
|
16
16
|
/** Query entry points added by @sharpee/queries. */
|
|
17
17
|
interface QueryEntryPoints {
|
package/augmentation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"augmentation.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"augmentation.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/queries/src/augmentation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAiD,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAChG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AA0B7C,oDAAoD;AACpD,UAAU,gBAAgB;IACxB,uCAAuC;IACvC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAE1B,uBAAuB;IACvB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAE5B,wBAAwB;IACxB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,kEAAkE;IAClE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAE9B,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,4EAA4E;IAC5E,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAE9B,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,WAAW,CAAC;IAEnE,sCAAsC;IACtC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,WAAW,CAAC;IAEtE,4CAA4C;IAC5C,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;IAEnD,6CAA6C;IAC7C,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CAAC;IAEzC,2DAA2D;IAC3D,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CAAC;CAC1C;AAED,OAAO,QAAQ,sBAAsB,CAAC;IAMpC,UAAU,UAAW,SAAQ,gBAAgB;KAAG;CACjD;AAuFD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
|
package/augmentation.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.EntityQuery = void 0;
|
|
16
|
-
const world_model_1 = require("
|
|
16
|
+
const world_model_1 = require("@sharpee/world-model");
|
|
17
17
|
const entity_query_1 = require("./entity-query");
|
|
18
18
|
// ---------------------------------------------------------------------------
|
|
19
19
|
// ADR-149 forward declarations
|
package/entity-query.d.ts
CHANGED
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
* Public interface: all chainable query methods.
|
|
10
10
|
* Owner context: @sharpee/queries (ADR-150)
|
|
11
11
|
*/
|
|
12
|
-
import { IFEntity } from
|
|
13
|
-
import { TraitType } from
|
|
12
|
+
import { IFEntity } from '@sharpee/world-model';
|
|
13
|
+
import { TraitType } from '@sharpee/world-model';
|
|
14
14
|
/**
|
|
15
15
|
* Fluent query wrapper for entity collections.
|
|
16
16
|
* Implements Iterable so it works with for-of loops and spread.
|
package/entity-query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-query.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"entity-query.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/queries/src/entity-query.ts"],"names":[],"mappings":"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"}
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/queries/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,gBAAgB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sharpee/queries",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "LINQ-style fluent entity query API for Sharpee Interactive Fiction Platform",
|
|
5
5
|
"main": "./index.js",
|
|
6
6
|
"types": "./index.d.ts",
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@sharpee/world-model": "^1.
|
|
16
|
-
"@sharpee/if-domain": "^1.
|
|
15
|
+
"@sharpee/world-model": "^1.1.0",
|
|
16
|
+
"@sharpee/if-domain": "^1.1.0"
|
|
17
17
|
},
|
|
18
18
|
"keywords": [
|
|
19
19
|
"interactive-fiction",
|