@entifix/static 0.0.0-stage → 0.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 r10c Technologies
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,30 @@
1
- # Temporary Holding Version
1
+ # @entifix/static
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ A read-only `EntityRepository` over records bundled with the build — the content of a static-export site, served through the ordinary use cases and swappable for `@entifix/rest` the day a backend appears.
4
+
5
+ `get` and `load` have the Mongo adapter's semantics: every filter operator, groups, array membership, a dotted path into one locale of a `localized` member, multi-key sorting and 1-based paging. `save` and `delete` fail with an `EntifixLogicError`, because a static source is read-only.
6
+
7
+ Records that arrive as JSON are checked against the entity's metadata before anything is served (`validRecordsOrThrow` from `@entifix/core`): identity, `required`, member types, dates, link ids, item counts, `notBefore`, cardinality and localized completeness. Every problem is thrown together, so a broken record fails the build instead of a visitor's page.
8
+
9
+ ```ts
10
+ const posts = staticRepositoryFromRecords(Post, postsJson, {
11
+ source: 'posts.json',
12
+ linkTargets: { tags: new Set(tagsJson.map(tag => tag.id)) },
13
+ });
14
+ ```
15
+
16
+ ## Install
17
+
18
+ ```sh
19
+ pnpm add @entifix/static effect
20
+ ```
21
+
22
+ ## Entry points
23
+
24
+ | Import | What it holds |
25
+ | ----------------- | ----------------------------------------------------- |
26
+ | `@entifix/static` | `makeStaticRepository`, `staticRepositoryFromRecords` |
27
+
28
+ ---
29
+
30
+ Tier 2 (adapters) of entifix — a package depends only on its own tier or below. See [the tiers](https://github.com/r10c-technologies/entifix#the-tiers-and-what-you-are-allowed-to-install). MIT licensed.
@@ -0,0 +1,19 @@
1
+ import type { EntityRepository } from '@entifix/business';
2
+ import { type Entity, type EntityConstructor, type ValidateRecordsOptions } from '@entifix/core';
3
+ import { type StaticRepositoryOptions } from './static-repository.js';
4
+ export type StaticRecordsOptions = ValidateRecordsOptions & StaticRepositoryOptions;
5
+ /**
6
+ * A static repository over untyped records — the JSON a build bundles —
7
+ * checked against the entity's metadata before anything is served.
8
+ *
9
+ * The mapping assigns every non-relation value raw, so a record that is wrong
10
+ * would otherwise reach a reader as `undefined` mid-page, or a date as a
11
+ * string. `validRecordsOrThrow` from core runs first instead: identity,
12
+ * `required`, each member's type, dates parsed, link ids against the targets
13
+ * given, item counts, `notBefore`, cardinality, localized completeness, the
14
+ * caller's rules — every problem collected, and thrown together as a
15
+ * `RecordValidationError`, so a broken record fails the build rather than a
16
+ * visitor's page.
17
+ */
18
+ export declare function staticRepositoryFromRecords<TEntity extends Entity>(entityConstructor: EntityConstructor<TEntity>, records: readonly unknown[], options?: StaticRecordsOptions): EntityRepository;
19
+ //# sourceMappingURL=from-records.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-records.d.ts","sourceRoot":"","sources":["../src/from-records.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAE5B,MAAM,eAAe,CAAC;AAGvB,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,oBAAoB,GAAG,sBAAsB,GACvD,uBAAuB,CAAC;AAE1B;;;;;;;;;;;;GAYG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,SAAS,MAAM,EAChE,iBAAiB,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAC7C,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,OAAO,GAAE,oBAAyB,GACjC,gBAAgB,CAMlB"}
@@ -0,0 +1,22 @@
1
+ import { deserializeEntityCollection, validRecordsOrThrow } from '@entifix/core';
2
+ import { Effect } from 'effect';
3
+ import { makeStaticRepository } from './static-repository.js';
4
+ /**
5
+ * A static repository over untyped records — the JSON a build bundles —
6
+ * checked against the entity's metadata before anything is served.
7
+ *
8
+ * The mapping assigns every non-relation value raw, so a record that is wrong
9
+ * would otherwise reach a reader as `undefined` mid-page, or a date as a
10
+ * string. `validRecordsOrThrow` from core runs first instead: identity,
11
+ * `required`, each member's type, dates parsed, link ids against the targets
12
+ * given, item counts, `notBefore`, cardinality, localized completeness, the
13
+ * caller's rules — every problem collected, and thrown together as a
14
+ * `RecordValidationError`, so a broken record fails the build rather than a
15
+ * visitor's page.
16
+ */ export function staticRepositoryFromRecords(entityConstructor, records, options = {}) {
17
+ const valid = validRecordsOrThrow(entityConstructor, records, options);
18
+ const instances = Effect.runSync(deserializeEntityCollection(entityConstructor, valid));
19
+ return makeStaticRepository(entityConstructor, instances, options);
20
+ }
21
+
22
+ //# sourceMappingURL=from-records.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/from-records.ts"],"sourcesContent":["import type { EntityRepository } from '@entifix/business';\nimport {\n deserializeEntityCollection,\n type Entity,\n type EntityConstructor,\n type ValidateRecordsOptions,\n validRecordsOrThrow,\n} from '@entifix/core';\nimport { Effect } from 'effect';\n\nimport {\n makeStaticRepository,\n type StaticRepositoryOptions,\n} from './static-repository.js';\n\nexport type StaticRecordsOptions = ValidateRecordsOptions &\n StaticRepositoryOptions;\n\n/**\n * A static repository over untyped records — the JSON a build bundles —\n * checked against the entity's metadata before anything is served.\n *\n * The mapping assigns every non-relation value raw, so a record that is wrong\n * would otherwise reach a reader as `undefined` mid-page, or a date as a\n * string. `validRecordsOrThrow` from core runs first instead: identity,\n * `required`, each member's type, dates parsed, link ids against the targets\n * given, item counts, `notBefore`, cardinality, localized completeness, the\n * caller's rules — every problem collected, and thrown together as a\n * `RecordValidationError`, so a broken record fails the build rather than a\n * visitor's page.\n */\nexport function staticRepositoryFromRecords<TEntity extends Entity>(\n entityConstructor: EntityConstructor<TEntity>,\n records: readonly unknown[],\n options: StaticRecordsOptions = {},\n): EntityRepository {\n const valid = validRecordsOrThrow(entityConstructor, records, options);\n const instances = Effect.runSync(\n deserializeEntityCollection(entityConstructor, valid),\n ) as TEntity[];\n return makeStaticRepository(entityConstructor, instances, options);\n}\n"],"names":["deserializeEntityCollection","validRecordsOrThrow","Effect","makeStaticRepository","staticRepositoryFromRecords","entityConstructor","records","options","valid","instances","runSync"],"mappings":"AACA,SACEA,2BAA2B,EAI3BC,mBAAmB,QACd,gBAAgB;AACvB,SAASC,MAAM,QAAQ,SAAS;AAEhC,SACEC,oBAAoB,QAEf,yBAAyB;AAKhC;;;;;;;;;;;;CAYC,GACD,OAAO,SAASC,4BACdC,iBAA6C,EAC7CC,OAA2B,EAC3BC,UAAgC,CAAC,CAAC;IAElC,MAAMC,QAAQP,oBAAoBI,mBAAmBC,SAASC;IAC9D,MAAME,YAAYP,OAAOQ,OAAO,CAC9BV,4BAA4BK,mBAAmBG;IAEjD,OAAOL,qBAAqBE,mBAAmBI,WAAWF;AAC5D"}
@@ -0,0 +1,3 @@
1
+ export * from './from-records.js';
2
+ export * from './static-repository.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export * from './from-records.js';
2
+ export * from './static-repository.js';
3
+
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './from-records.js';\nexport * from './static-repository.js';\n"],"names":[],"mappings":"AAAA,cAAc,oBAAoB;AAClC,cAAc,yBAAyB"}
@@ -0,0 +1,24 @@
1
+ import type { EntityRepository } from '@entifix/business';
2
+ import { type Entity, type EntityConstructor } from '@entifix/core';
3
+ export interface StaticRepositoryOptions {
4
+ /** The name an error message uses. Defaults to the entity's class name. */
5
+ readonly label?: string;
6
+ }
7
+ /**
8
+ * A read-only {@link EntityRepository} over records held in memory — content
9
+ * bundled with a static build, served through the ordinary use cases, and
10
+ * swappable for a REST adapter the day a backend appears.
11
+ *
12
+ * `get` and `load` carry the Mongo adapter's semantics, from core's in-memory
13
+ * query evaluation: every filter operator, groups, array membership, a dotted
14
+ * path into a localized member, multi-key sorting, and 1-based paging that
15
+ * defaults to ten. Both hand out copies.
16
+ *
17
+ * `save` and `delete` fail with an `EntifixLogicError`: a static source is
18
+ * read-only, and pretending otherwise is worse than refusing.
19
+ *
20
+ * It holds instances. Records that arrive as JSON go through
21
+ * {@link staticRepositoryFromRecords}, which validates them first.
22
+ */
23
+ export declare function makeStaticRepository<TEntity extends Entity>(entityConstructor: EntityConstructor<TEntity>, records: readonly TEntity[], { label }?: StaticRepositoryOptions): EntityRepository;
24
+ //# sourceMappingURL=static-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-repository.d.ts","sourceRoot":"","sources":["../src/static-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAOL,KAAK,MAAM,EACX,KAAK,iBAAiB,EAMvB,MAAM,eAAe,CAAC;AAkCvB,MAAM,WAAW,uBAAuB;IACtC,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,SAAS,MAAM,EACzD,iBAAiB,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAC7C,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,EAAE,KAA8B,EAAE,GAAE,uBAA4B,GAC/D,gBAAgB,CA0DlB"}
@@ -0,0 +1,73 @@
1
+ import { applyFiltering, applySorting, deserializeSingleEntity, EntifixConnError, EntifixLogicError, extractMetaAccessors, serializeEntity } from '@entifix/core';
2
+ import { Effect } from 'effect';
3
+ /** The Mongo adapter's defaults, which this one copies exactly. */ const DEFAULT_PAGE = 1;
4
+ const DEFAULT_PAGE_SIZE = 10;
5
+ /**
6
+ * A copy of a record, so a caller can never reach into the store.
7
+ *
8
+ * Through the entity's own mapping — serialize, then deserialize — as a real
9
+ * adapter maps every record on the way out. An entity with no accessors has no
10
+ * mapping to go through, so it is copied member by member instead.
11
+ */ function copyOf(record) {
12
+ const entityConstructor = record.constructor;
13
+ if (extractMetaAccessors(entityConstructor).length === 0) {
14
+ return Effect.succeed(Object.assign(Object.create(Object.getPrototypeOf(record)), record));
15
+ }
16
+ // `undefined` only comes back for `null`/`undefined` input, and
17
+ // `serializeEntity` always hands over an object.
18
+ return deserializeSingleEntity(entityConstructor, serializeEntity(entityConstructor, record));
19
+ }
20
+ /**
21
+ * A read-only {@link EntityRepository} over records held in memory — content
22
+ * bundled with a static build, served through the ordinary use cases, and
23
+ * swappable for a REST adapter the day a backend appears.
24
+ *
25
+ * `get` and `load` carry the Mongo adapter's semantics, from core's in-memory
26
+ * query evaluation: every filter operator, groups, array membership, a dotted
27
+ * path into a localized member, multi-key sorting, and 1-based paging that
28
+ * defaults to ten. Both hand out copies.
29
+ *
30
+ * `save` and `delete` fail with an `EntifixLogicError`: a static source is
31
+ * read-only, and pretending otherwise is worse than refusing.
32
+ *
33
+ * It holds instances. Records that arrive as JSON go through
34
+ * {@link staticRepositoryFromRecords}, which validates them first.
35
+ */ export function makeStaticRepository(entityConstructor, records, { label = entityConstructor.name } = {}) {
36
+ const stored = [
37
+ ...records
38
+ ];
39
+ const readOnly = (verb)=>Effect.fail(new EntifixLogicError(`Cannot ${verb} a ${label}: it is served from static content, which is read-only`, undefined, {
40
+ entity: label,
41
+ operation: verb
42
+ }));
43
+ const get = (id)=>{
44
+ const found = stored.find((record)=>record.id === id);
45
+ return found === undefined ? Effect.fail(new EntifixConnError('Entity not found', undefined, {
46
+ entity: label,
47
+ id
48
+ })) : copyOf(found);
49
+ };
50
+ const load = (request)=>Effect.suspend(()=>{
51
+ var _request_page, _request_pageSize;
52
+ const matched = applySorting(applyFiltering(stored, request.filtering), request.sorting);
53
+ const page = (_request_page = request.page) != null ? _request_page : DEFAULT_PAGE;
54
+ const pageSize = (_request_pageSize = request.pageSize) != null ? _request_pageSize : DEFAULT_PAGE_SIZE;
55
+ const start = (page - 1) * pageSize;
56
+ return Effect.forEach(matched.slice(start, start + pageSize), copyOf).pipe(Effect.map((items)=>({
57
+ items,
58
+ total: matched.length,
59
+ request
60
+ })));
61
+ });
62
+ // Each method closes over its own state, so nothing is required from the
63
+ // Effect environment; that is assignable to the port's channel, and the
64
+ // cast keeps its generic signatures, as entifix's other adapters do.
65
+ return {
66
+ get,
67
+ load,
68
+ save: ()=>readOnly('save'),
69
+ delete: ()=>readOnly('delete')
70
+ };
71
+ }
72
+
73
+ //# sourceMappingURL=static-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/static-repository.ts"],"sourcesContent":["import type { EntityRepository } from '@entifix/business';\nimport {\n applyFiltering,\n applySorting,\n deserializeSingleEntity,\n EntifixConnError,\n type EntifixError,\n EntifixLogicError,\n type Entity,\n type EntityConstructor,\n type EntityId,\n type EntityLoadRequest,\n type EntityPage,\n extractMetaAccessors,\n serializeEntity,\n} from '@entifix/core';\nimport { Effect } from 'effect';\n\n/** The Mongo adapter's defaults, which this one copies exactly. */\nconst DEFAULT_PAGE = 1;\nconst DEFAULT_PAGE_SIZE = 10;\n\n/**\n * A copy of a record, so a caller can never reach into the store.\n *\n * Through the entity's own mapping — serialize, then deserialize — as a real\n * adapter maps every record on the way out. An entity with no accessors has no\n * mapping to go through, so it is copied member by member instead.\n */\nfunction copyOf<TEntity extends Entity>(\n record: TEntity,\n): Effect.Effect<TEntity, EntifixError> {\n const entityConstructor = record.constructor as EntityConstructor<TEntity>;\n if (extractMetaAccessors(entityConstructor).length === 0) {\n return Effect.succeed(\n Object.assign(\n Object.create(Object.getPrototypeOf(record) as object) as TEntity,\n record,\n ),\n );\n }\n // `undefined` only comes back for `null`/`undefined` input, and\n // `serializeEntity` always hands over an object.\n return deserializeSingleEntity(\n entityConstructor,\n serializeEntity(entityConstructor, record),\n ) as Effect.Effect<TEntity, EntifixError>;\n}\n\nexport interface StaticRepositoryOptions {\n /** The name an error message uses. Defaults to the entity's class name. */\n readonly label?: string;\n}\n\n/**\n * A read-only {@link EntityRepository} over records held in memory — content\n * bundled with a static build, served through the ordinary use cases, and\n * swappable for a REST adapter the day a backend appears.\n *\n * `get` and `load` carry the Mongo adapter's semantics, from core's in-memory\n * query evaluation: every filter operator, groups, array membership, a dotted\n * path into a localized member, multi-key sorting, and 1-based paging that\n * defaults to ten. Both hand out copies.\n *\n * `save` and `delete` fail with an `EntifixLogicError`: a static source is\n * read-only, and pretending otherwise is worse than refusing.\n *\n * It holds instances. Records that arrive as JSON go through\n * {@link staticRepositoryFromRecords}, which validates them first.\n */\nexport function makeStaticRepository<TEntity extends Entity>(\n entityConstructor: EntityConstructor<TEntity>,\n records: readonly TEntity[],\n { label = entityConstructor.name }: StaticRepositoryOptions = {},\n): EntityRepository {\n const stored = [...records];\n\n const readOnly = (verb: string) =>\n Effect.fail(\n new EntifixLogicError(\n `Cannot ${verb} a ${label}: it is served from static content, which is read-only`,\n undefined,\n { entity: label, operation: verb },\n ),\n );\n\n const get = (id: EntityId) => {\n const found = stored.find(record => record.id === id);\n return found === undefined\n ? Effect.fail(\n new EntifixConnError('Entity not found', undefined, {\n entity: label,\n id,\n }),\n )\n : copyOf(found);\n };\n\n const load = (request: EntityLoadRequest<TEntity>) =>\n Effect.suspend(() => {\n const matched = applySorting(\n applyFiltering(stored, request.filtering),\n request.sorting,\n );\n const page = request.page ?? DEFAULT_PAGE;\n const pageSize = request.pageSize ?? DEFAULT_PAGE_SIZE;\n const start = (page - 1) * pageSize;\n\n return Effect.forEach(\n matched.slice(start, start + pageSize),\n copyOf,\n ).pipe(\n Effect.map(\n items =>\n ({\n items,\n total: matched.length,\n request,\n }) satisfies EntityPage<TEntity>,\n ),\n );\n });\n\n // Each method closes over its own state, so nothing is required from the\n // Effect environment; that is assignable to the port's channel, and the\n // cast keeps its generic signatures, as entifix's other adapters do.\n return {\n get,\n load,\n save: () => readOnly('save'),\n delete: () => readOnly('delete'),\n } as unknown as EntityRepository;\n}\n"],"names":["applyFiltering","applySorting","deserializeSingleEntity","EntifixConnError","EntifixLogicError","extractMetaAccessors","serializeEntity","Effect","DEFAULT_PAGE","DEFAULT_PAGE_SIZE","copyOf","record","entityConstructor","length","succeed","Object","assign","create","getPrototypeOf","makeStaticRepository","records","label","name","stored","readOnly","verb","fail","undefined","entity","operation","get","id","found","find","load","request","suspend","matched","filtering","sorting","page","pageSize","start","forEach","slice","pipe","map","items","total","save","delete"],"mappings":"AACA,SACEA,cAAc,EACdC,YAAY,EACZC,uBAAuB,EACvBC,gBAAgB,EAEhBC,iBAAiB,EAMjBC,oBAAoB,EACpBC,eAAe,QACV,gBAAgB;AACvB,SAASC,MAAM,QAAQ,SAAS;AAEhC,iEAAiE,GACjE,MAAMC,eAAe;AACrB,MAAMC,oBAAoB;AAE1B;;;;;;CAMC,GACD,SAASC,OACPC,MAAe;IAEf,MAAMC,oBAAoBD,OAAO,WAAW;IAC5C,IAAIN,qBAAqBO,mBAAmBC,MAAM,KAAK,GAAG;QACxD,OAAON,OAAOO,OAAO,CACnBC,OAAOC,MAAM,CACXD,OAAOE,MAAM,CAACF,OAAOG,cAAc,CAACP,UACpCA;IAGN;IACA,gEAAgE;IAChE,iDAAiD;IACjD,OAAOT,wBACLU,mBACAN,gBAAgBM,mBAAmBD;AAEvC;AAOA;;;;;;;;;;;;;;;CAeC,GACD,OAAO,SAASQ,qBACdP,iBAA6C,EAC7CQ,OAA2B,EAC3B,EAAEC,QAAQT,kBAAkBU,IAAI,EAA2B,GAAG,CAAC,CAAC;IAEhE,MAAMC,SAAS;WAAIH;KAAQ;IAE3B,MAAMI,WAAW,CAACC,OAChBlB,OAAOmB,IAAI,CACT,IAAItB,kBACF,CAAC,OAAO,EAAEqB,KAAK,GAAG,EAAEJ,MAAM,sDAAsD,CAAC,EACjFM,WACA;YAAEC,QAAQP;YAAOQ,WAAWJ;QAAK;IAIvC,MAAMK,MAAM,CAACC;QACX,MAAMC,QAAQT,OAAOU,IAAI,CAACtB,CAAAA,SAAUA,OAAOoB,EAAE,KAAKA;QAClD,OAAOC,UAAUL,YACbpB,OAAOmB,IAAI,CACT,IAAIvB,iBAAiB,oBAAoBwB,WAAW;YAClDC,QAAQP;YACRU;QACF,MAEFrB,OAAOsB;IACb;IAEA,MAAME,OAAO,CAACC,UACZ5B,OAAO6B,OAAO,CAAC;gBAKAD,eACIA;YALjB,MAAME,UAAUpC,aACdD,eAAeuB,QAAQY,QAAQG,SAAS,GACxCH,QAAQI,OAAO;YAEjB,MAAMC,QAAOL,gBAAAA,QAAQK,IAAI,YAAZL,gBAAgB3B;YAC7B,MAAMiC,YAAWN,oBAAAA,QAAQM,QAAQ,YAAhBN,oBAAoB1B;YACrC,MAAMiC,QAAQ,AAACF,CAAAA,OAAO,CAAA,IAAKC;YAE3B,OAAOlC,OAAOoC,OAAO,CACnBN,QAAQO,KAAK,CAACF,OAAOA,QAAQD,WAC7B/B,QACAmC,IAAI,CACJtC,OAAOuC,GAAG,CACRC,CAAAA,QACG,CAAA;oBACCA;oBACAC,OAAOX,QAAQxB,MAAM;oBACrBsB;gBACF,CAAA;QAGR;IAEF,yEAAyE;IACzE,wEAAwE;IACxE,qEAAqE;IACrE,OAAO;QACLL;QACAI;QACAe,MAAM,IAAMzB,SAAS;QACrB0B,QAAQ,IAAM1B,SAAS;IACzB;AACF"}
package/package.json CHANGED
@@ -1,6 +1,64 @@
1
1
  {
2
2
  "name": "@entifix/static",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.3.0",
4
+ "description": "A read-only entity repository over records bundled with the build: Mongo's query semantics, records validated against entity metadata before they are served.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/r10c-technologies/entifix.git",
9
+ "directory": "packages/ts/static"
10
+ },
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "type": "module",
15
+ "main": "./dist/index.js",
16
+ "module": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ "./package.json": "./package.json",
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "import": "./dist/index.js",
23
+ "default": "./dist/index.js"
24
+ }
25
+ },
26
+ "files": [
27
+ "dist",
28
+ "!**/*.tsbuildinfo",
29
+ "LICENSE"
30
+ ],
31
+ "nx": {
32
+ "tags": [
33
+ "tier:2"
34
+ ],
35
+ "sourceRoot": "packages/ts/static/src",
36
+ "targets": {
37
+ "build": {
38
+ "executor": "@nx/js:swc",
39
+ "outputs": [
40
+ "{options.outputPath}"
41
+ ],
42
+ "options": {
43
+ "outputPath": "packages/ts/static/dist",
44
+ "main": "packages/ts/static/src/index.ts",
45
+ "tsConfig": "packages/ts/static/tsconfig.lib.json",
46
+ "skipTypeCheck": true,
47
+ "stripLeadingPaths": true
48
+ }
49
+ }
50
+ }
51
+ },
52
+ "dependencies": {
53
+ "@swc/helpers": "0.5.23",
54
+ "@entifix/business": "0.3.0",
55
+ "@entifix/core": "0.3.0"
56
+ },
57
+ "devDependencies": {
58
+ "effect": "4.0.5",
59
+ "@entifix/testing-unit": "0.3.0"
60
+ },
61
+ "peerDependencies": {
62
+ "effect": "^4.0.5"
63
+ }
6
64
  }