@redaksjon/context 0.0.7 → 0.0.8-dev.20260217185259.0299d30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index10.cjs +2 -0
- package/dist/index10.cjs.map +1 -1
- package/dist/index10.js +2 -0
- package/dist/index10.js.map +1 -1
- package/dist/index13.cjs +2 -0
- package/dist/index13.cjs.map +1 -1
- package/dist/index13.js +2 -0
- package/dist/index13.js.map +1 -1
- package/dist/index14.cjs +2 -0
- package/dist/index14.cjs.map +1 -1
- package/dist/index14.js +2 -0
- package/dist/index14.js.map +1 -1
- package/dist/index15.cjs +2 -0
- package/dist/index15.cjs.map +1 -1
- package/dist/index15.js +2 -0
- package/dist/index15.js.map +1 -1
- package/dist/index16.cjs +2 -0
- package/dist/index16.cjs.map +1 -1
- package/dist/index16.js +2 -0
- package/dist/index16.js.map +1 -1
- package/dist/index6.cjs +71 -10
- package/dist/index6.cjs.map +1 -1
- package/dist/index6.js +72 -11
- package/dist/index6.js.map +1 -1
- package/dist/schemas/company.d.ts +1 -0
- package/dist/schemas/company.d.ts.map +1 -1
- package/dist/schemas/ignored.d.ts +1 -0
- package/dist/schemas/ignored.d.ts.map +1 -1
- package/dist/schemas/index.d.ts +5 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/person.d.ts +1 -0
- package/dist/schemas/person.d.ts.map +1 -1
- package/dist/schemas/project.d.ts +1 -0
- package/dist/schemas/project.d.ts.map +1 -1
- package/dist/schemas/term.d.ts +1 -0
- package/dist/schemas/term.d.ts.map +1 -1
- package/dist/storage/storage.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index10.cjs
CHANGED
|
@@ -9,6 +9,8 @@ const content = require('./index11.cjs');
|
|
|
9
9
|
|
|
10
10
|
const CompanySchema = overcontext.BaseEntitySchema.merge(zod.z.object({
|
|
11
11
|
type: zod.z.literal("company"),
|
|
12
|
+
slug: zod.z.string().optional(),
|
|
13
|
+
// Human-readable identifier
|
|
12
14
|
fullName: zod.z.string().optional(),
|
|
13
15
|
industry: zod.z.string().optional(),
|
|
14
16
|
sounds_like: zod.z.array(zod.z.string()).optional(),
|
package/dist/index10.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index10.cjs","sources":["../src/schemas/company.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\nimport { RelationshipsSchema } from './relationships';\nimport { EntityContentSchema } from './content';\n\n/**\n * Company entity - organizations referenced in notes.\n */\nexport const CompanySchema = BaseEntitySchema.merge(z.object({\n type: z.literal('company'),\n \n fullName: z.string().optional(),\n industry: z.string().optional(),\n sounds_like: z.array(z.string()).optional(),\n relationships: RelationshipsSchema, // Relationships to other entities\n content: EntityContentSchema, // Attached content (URLs, text, documents)\n}));\n"],"names":["BaseEntitySchema","z","RelationshipsSchema","EntityContentSchema"],"mappings":";;;;;;;;;AAQO,MAAM,aAAA,GAAgBA,4BAAA,CAAiB,KAAA,CAAMC,KAAA,CAAE,MAAA,CAAO;AAAA,EACzD,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index10.cjs","sources":["../src/schemas/company.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\nimport { RelationshipsSchema } from './relationships';\nimport { EntityContentSchema } from './content';\n\n/**\n * Company entity - organizations referenced in notes.\n */\nexport const CompanySchema = BaseEntitySchema.merge(z.object({\n type: z.literal('company'),\n slug: z.string().optional(), // Human-readable identifier\n \n fullName: z.string().optional(),\n industry: z.string().optional(),\n sounds_like: z.array(z.string()).optional(),\n relationships: RelationshipsSchema, // Relationships to other entities\n content: EntityContentSchema, // Attached content (URLs, text, documents)\n}));\n"],"names":["BaseEntitySchema","z","RelationshipsSchema","EntityContentSchema"],"mappings":";;;;;;;;;AAQO,MAAM,aAAA,GAAgBA,4BAAA,CAAiB,KAAA,CAAMC,KAAA,CAAE,MAAA,CAAO;AAAA,EACzD,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA,EACzB,IAAA,EAAMA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE1B,QAAA,EAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,QAAA,EAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,aAAaA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAC1C,aAAA,EAAeC,iCAAA;AAAA;AAAA,EACf,OAAA,EAASC;AAAA;AACb,CAAC,CAAC;;;;"}
|
package/dist/index10.js
CHANGED
|
@@ -5,6 +5,8 @@ import { EntityContentSchema } from './index11.js';
|
|
|
5
5
|
|
|
6
6
|
const CompanySchema = BaseEntitySchema.merge(z.object({
|
|
7
7
|
type: z.literal("company"),
|
|
8
|
+
slug: z.string().optional(),
|
|
9
|
+
// Human-readable identifier
|
|
8
10
|
fullName: z.string().optional(),
|
|
9
11
|
industry: z.string().optional(),
|
|
10
12
|
sounds_like: z.array(z.string()).optional(),
|
package/dist/index10.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index10.js","sources":["../src/schemas/company.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\nimport { RelationshipsSchema } from './relationships';\nimport { EntityContentSchema } from './content';\n\n/**\n * Company entity - organizations referenced in notes.\n */\nexport const CompanySchema = BaseEntitySchema.merge(z.object({\n type: z.literal('company'),\n \n fullName: z.string().optional(),\n industry: z.string().optional(),\n sounds_like: z.array(z.string()).optional(),\n relationships: RelationshipsSchema, // Relationships to other entities\n content: EntityContentSchema, // Attached content (URLs, text, documents)\n}));\n"],"names":[],"mappings":";;;;;AAQO,MAAM,aAAA,GAAgB,gBAAA,CAAiB,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO;AAAA,EACzD,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index10.js","sources":["../src/schemas/company.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\nimport { RelationshipsSchema } from './relationships';\nimport { EntityContentSchema } from './content';\n\n/**\n * Company entity - organizations referenced in notes.\n */\nexport const CompanySchema = BaseEntitySchema.merge(z.object({\n type: z.literal('company'),\n slug: z.string().optional(), // Human-readable identifier\n \n fullName: z.string().optional(),\n industry: z.string().optional(),\n sounds_like: z.array(z.string()).optional(),\n relationships: RelationshipsSchema, // Relationships to other entities\n content: EntityContentSchema, // Attached content (URLs, text, documents)\n}));\n"],"names":[],"mappings":";;;;;AAQO,MAAM,aAAA,GAAgB,gBAAA,CAAiB,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO;AAAA,EACzD,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA,EACzB,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE1B,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,aAAa,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAC1C,aAAA,EAAe,mBAAA;AAAA;AAAA,EACf,OAAA,EAAS;AAAA;AACb,CAAC,CAAC;;;;"}
|
package/dist/index13.cjs
CHANGED
|
@@ -7,6 +7,8 @@ const overcontext = require('@utilarium/overcontext');
|
|
|
7
7
|
|
|
8
8
|
const IgnoredTermSchema = overcontext.BaseEntitySchema.merge(zod.z.object({
|
|
9
9
|
type: zod.z.literal("ignored"),
|
|
10
|
+
slug: zod.z.string().optional(),
|
|
11
|
+
// Human-readable identifier
|
|
10
12
|
reason: zod.z.string().optional(),
|
|
11
13
|
ignoredAt: zod.z.string().optional()
|
|
12
14
|
// ISO date string
|
package/dist/index13.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index13.cjs","sources":["../src/schemas/ignored.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\n\n/**\n * Ignored term - phrases the user doesn't want to be prompted about.\n */\nexport const IgnoredTermSchema = BaseEntitySchema.merge(z.object({\n type: z.literal('ignored'),\n \n reason: z.string().optional(),\n ignoredAt: z.string().optional(), // ISO date string\n}));\n"],"names":["BaseEntitySchema","z"],"mappings":";;;;;;;AAMO,MAAM,iBAAA,GAAoBA,4BAAA,CAAiB,KAAA,CAAMC,KAAA,CAAE,MAAA,CAAO;AAAA,EAC7D,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index13.cjs","sources":["../src/schemas/ignored.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\n\n/**\n * Ignored term - phrases the user doesn't want to be prompted about.\n */\nexport const IgnoredTermSchema = BaseEntitySchema.merge(z.object({\n type: z.literal('ignored'),\n slug: z.string().optional(), // Human-readable identifier\n \n reason: z.string().optional(),\n ignoredAt: z.string().optional(), // ISO date string\n}));\n"],"names":["BaseEntitySchema","z"],"mappings":";;;;;;;AAMO,MAAM,iBAAA,GAAoBA,4BAAA,CAAiB,KAAA,CAAMC,KAAA,CAAE,MAAA,CAAO;AAAA,EAC7D,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA,EACzB,IAAA,EAAMA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE1B,MAAA,EAAQA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,SAAA,EAAWA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS;AACnC,CAAC,CAAC;;;;"}
|
package/dist/index13.js
CHANGED
|
@@ -3,6 +3,8 @@ import { BaseEntitySchema } from '@utilarium/overcontext';
|
|
|
3
3
|
|
|
4
4
|
const IgnoredTermSchema = BaseEntitySchema.merge(z.object({
|
|
5
5
|
type: z.literal("ignored"),
|
|
6
|
+
slug: z.string().optional(),
|
|
7
|
+
// Human-readable identifier
|
|
6
8
|
reason: z.string().optional(),
|
|
7
9
|
ignoredAt: z.string().optional()
|
|
8
10
|
// ISO date string
|
package/dist/index13.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index13.js","sources":["../src/schemas/ignored.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\n\n/**\n * Ignored term - phrases the user doesn't want to be prompted about.\n */\nexport const IgnoredTermSchema = BaseEntitySchema.merge(z.object({\n type: z.literal('ignored'),\n \n reason: z.string().optional(),\n ignoredAt: z.string().optional(), // ISO date string\n}));\n"],"names":[],"mappings":";;;AAMO,MAAM,iBAAA,GAAoB,gBAAA,CAAiB,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO;AAAA,EAC7D,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index13.js","sources":["../src/schemas/ignored.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\n\n/**\n * Ignored term - phrases the user doesn't want to be prompted about.\n */\nexport const IgnoredTermSchema = BaseEntitySchema.merge(z.object({\n type: z.literal('ignored'),\n slug: z.string().optional(), // Human-readable identifier\n \n reason: z.string().optional(),\n ignoredAt: z.string().optional(), // ISO date string\n}));\n"],"names":[],"mappings":";;;AAMO,MAAM,iBAAA,GAAoB,gBAAA,CAAiB,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO;AAAA,EAC7D,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA,EACzB,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE1B,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS;AACnC,CAAC,CAAC;;;;"}
|
package/dist/index14.cjs
CHANGED
|
@@ -9,6 +9,8 @@ const content = require('./index11.cjs');
|
|
|
9
9
|
|
|
10
10
|
const PersonSchema = overcontext.BaseEntitySchema.merge(zod.z.object({
|
|
11
11
|
type: zod.z.literal("person"),
|
|
12
|
+
slug: zod.z.string().optional(),
|
|
13
|
+
// Human-readable identifier
|
|
12
14
|
firstName: zod.z.string().optional(),
|
|
13
15
|
lastName: zod.z.string().optional(),
|
|
14
16
|
company: zod.z.string().optional(),
|
package/dist/index14.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index14.cjs","sources":["../src/schemas/person.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\nimport { RelationshipsSchema } from './relationships';\nimport { EntityContentSchema } from './content';\n\n/**\n * Person entity - named individuals the user frequently mentions.\n */\nexport const PersonSchema = BaseEntitySchema.merge(z.object({\n type: z.literal('person'),\n \n firstName: z.string().optional(),\n lastName: z.string().optional(),\n company: z.string().optional(), // DEPRECATED: Use relationships instead\n role: z.string().optional(), // e.g., \"Manager\", \"Developer\"\n sounds_like: z.array(z.string()).optional(), // Common mishearings\n context: z.string().optional(), // How user knows them\n relationships: RelationshipsSchema, // Relationships to other entities\n content: EntityContentSchema, // Attached content (URLs, text, documents)\n}));\n"],"names":["BaseEntitySchema","z","RelationshipsSchema","EntityContentSchema"],"mappings":";;;;;;;;;AAQO,MAAM,YAAA,GAAeA,4BAAA,CAAiB,KAAA,CAAMC,KAAA,CAAE,MAAA,CAAO;AAAA,EACxD,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index14.cjs","sources":["../src/schemas/person.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\nimport { RelationshipsSchema } from './relationships';\nimport { EntityContentSchema } from './content';\n\n/**\n * Person entity - named individuals the user frequently mentions.\n */\nexport const PersonSchema = BaseEntitySchema.merge(z.object({\n type: z.literal('person'),\n slug: z.string().optional(), // Human-readable identifier\n \n firstName: z.string().optional(),\n lastName: z.string().optional(),\n company: z.string().optional(), // DEPRECATED: Use relationships instead\n role: z.string().optional(), // e.g., \"Manager\", \"Developer\"\n sounds_like: z.array(z.string()).optional(), // Common mishearings\n context: z.string().optional(), // How user knows them\n relationships: RelationshipsSchema, // Relationships to other entities\n content: EntityContentSchema, // Attached content (URLs, text, documents)\n}));\n"],"names":["BaseEntitySchema","z","RelationshipsSchema","EntityContentSchema"],"mappings":";;;;;;;;;AAQO,MAAM,YAAA,GAAeA,4BAAA,CAAiB,KAAA,CAAMC,KAAA,CAAE,MAAA,CAAO;AAAA,EACxD,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA;AAAA,EACxB,IAAA,EAAMA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE1B,SAAA,EAAWA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,QAAA,EAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,OAAA,EAASA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAC7B,IAAA,EAAMA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAC1B,aAAaA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAC1C,OAAA,EAASA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAC7B,aAAA,EAAeC,iCAAA;AAAA;AAAA,EACf,OAAA,EAASC;AAAA;AACb,CAAC,CAAC;;;;"}
|
package/dist/index14.js
CHANGED
|
@@ -5,6 +5,8 @@ import { EntityContentSchema } from './index11.js';
|
|
|
5
5
|
|
|
6
6
|
const PersonSchema = BaseEntitySchema.merge(z.object({
|
|
7
7
|
type: z.literal("person"),
|
|
8
|
+
slug: z.string().optional(),
|
|
9
|
+
// Human-readable identifier
|
|
8
10
|
firstName: z.string().optional(),
|
|
9
11
|
lastName: z.string().optional(),
|
|
10
12
|
company: z.string().optional(),
|
package/dist/index14.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index14.js","sources":["../src/schemas/person.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\nimport { RelationshipsSchema } from './relationships';\nimport { EntityContentSchema } from './content';\n\n/**\n * Person entity - named individuals the user frequently mentions.\n */\nexport const PersonSchema = BaseEntitySchema.merge(z.object({\n type: z.literal('person'),\n \n firstName: z.string().optional(),\n lastName: z.string().optional(),\n company: z.string().optional(), // DEPRECATED: Use relationships instead\n role: z.string().optional(), // e.g., \"Manager\", \"Developer\"\n sounds_like: z.array(z.string()).optional(), // Common mishearings\n context: z.string().optional(), // How user knows them\n relationships: RelationshipsSchema, // Relationships to other entities\n content: EntityContentSchema, // Attached content (URLs, text, documents)\n}));\n"],"names":[],"mappings":";;;;;AAQO,MAAM,YAAA,GAAe,gBAAA,CAAiB,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO;AAAA,EACxD,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index14.js","sources":["../src/schemas/person.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\nimport { RelationshipsSchema } from './relationships';\nimport { EntityContentSchema } from './content';\n\n/**\n * Person entity - named individuals the user frequently mentions.\n */\nexport const PersonSchema = BaseEntitySchema.merge(z.object({\n type: z.literal('person'),\n slug: z.string().optional(), // Human-readable identifier\n \n firstName: z.string().optional(),\n lastName: z.string().optional(),\n company: z.string().optional(), // DEPRECATED: Use relationships instead\n role: z.string().optional(), // e.g., \"Manager\", \"Developer\"\n sounds_like: z.array(z.string()).optional(), // Common mishearings\n context: z.string().optional(), // How user knows them\n relationships: RelationshipsSchema, // Relationships to other entities\n content: EntityContentSchema, // Attached content (URLs, text, documents)\n}));\n"],"names":[],"mappings":";;;;;AAQO,MAAM,YAAA,GAAe,gBAAA,CAAiB,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO;AAAA,EACxD,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA;AAAA,EACxB,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE1B,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAC7B,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAC1B,aAAa,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAC1C,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAC7B,aAAA,EAAe,mBAAA;AAAA;AAAA,EACf,OAAA,EAAS;AAAA;AACb,CAAC,CAAC;;;;"}
|
package/dist/index15.cjs
CHANGED
|
@@ -24,6 +24,8 @@ const ProjectRoutingSchema = zod.z.object({
|
|
|
24
24
|
});
|
|
25
25
|
const ProjectSchema = overcontext.BaseEntitySchema.merge(zod.z.object({
|
|
26
26
|
type: zod.z.literal("project"),
|
|
27
|
+
slug: zod.z.string().optional(),
|
|
28
|
+
// Human-readable identifier
|
|
27
29
|
description: zod.z.string().optional(),
|
|
28
30
|
classification: ProjectClassificationSchema,
|
|
29
31
|
routing: ProjectRoutingSchema,
|
package/dist/index15.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index15.cjs","sources":["../src/schemas/project.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\nimport { RelationshipsSchema } from './relationships';\nimport { EntityContentSchema } from './content';\n\n/**\n * Project classification signals.\n */\nexport const ProjectClassificationSchema = z.object({\n context_type: z.enum(['work', 'personal', 'mixed']),\n associated_people: z.array(z.string()).optional(), // DEPRECATED: Use relationships instead\n associated_companies: z.array(z.string()).optional(), // DEPRECATED: Use relationships instead\n topics: z.array(z.string()).optional(),\n explicit_phrases: z.array(z.string()).optional(),\n});\n\n/**\n * Project routing configuration.\n */\nexport const ProjectRoutingSchema = z.object({\n destination: z.string().optional(),\n structure: z.enum(['none', 'year', 'month', 'day']),\n filename_options: z.array(z.enum(['date', 'time', 'subject'])),\n auto_tags: z.array(z.string()).optional(),\n});\n\n/**\n * Project entity - work contexts that affect routing and understanding.\n */\nexport const ProjectSchema = BaseEntitySchema.merge(z.object({\n type: z.literal('project'),\n \n description: z.string().optional(),\n classification: ProjectClassificationSchema,\n routing: ProjectRoutingSchema,\n sounds_like: z.array(z.string()).optional(),\n relationships: RelationshipsSchema, // Unified relationships\n content: EntityContentSchema, // Attached content (URLs, text, documents)\n active: z.boolean().optional(),\n}));\n"],"names":["z","BaseEntitySchema","RelationshipsSchema","EntityContentSchema"],"mappings":";;;;;;;;;AAQO,MAAM,2BAAA,GAA8BA,MAAE,MAAA,CAAO;AAAA,EAChD,cAAcA,KAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,UAAA,EAAY,OAAO,CAAC,CAAA;AAAA,EAClD,mBAAmBA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAChD,sBAAsBA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EACnD,QAAQA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACrC,kBAAkBA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA;AAC1C,CAAC;AAKM,MAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA,EACzC,WAAA,EAAaA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,SAAA,EAAWA,MAAE,IAAA,CAAK,CAAC,QAAQ,MAAA,EAAQ,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,EAClD,gBAAA,EAAkBA,KAAA,CAAE,KAAA,CAAMA,KAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAC,CAAC,CAAA;AAAA,EAC7D,WAAWA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA;AACnC,CAAC;AAKM,MAAM,aAAA,GAAgBC,4BAAA,CAAiB,KAAA,CAAMD,KAAA,CAAE,MAAA,CAAO;AAAA,EACzD,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index15.cjs","sources":["../src/schemas/project.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\nimport { RelationshipsSchema } from './relationships';\nimport { EntityContentSchema } from './content';\n\n/**\n * Project classification signals.\n */\nexport const ProjectClassificationSchema = z.object({\n context_type: z.enum(['work', 'personal', 'mixed']),\n associated_people: z.array(z.string()).optional(), // DEPRECATED: Use relationships instead\n associated_companies: z.array(z.string()).optional(), // DEPRECATED: Use relationships instead\n topics: z.array(z.string()).optional(),\n explicit_phrases: z.array(z.string()).optional(),\n});\n\n/**\n * Project routing configuration.\n */\nexport const ProjectRoutingSchema = z.object({\n destination: z.string().optional(),\n structure: z.enum(['none', 'year', 'month', 'day']),\n filename_options: z.array(z.enum(['date', 'time', 'subject'])),\n auto_tags: z.array(z.string()).optional(),\n});\n\n/**\n * Project entity - work contexts that affect routing and understanding.\n */\nexport const ProjectSchema = BaseEntitySchema.merge(z.object({\n type: z.literal('project'),\n slug: z.string().optional(), // Human-readable identifier\n \n description: z.string().optional(),\n classification: ProjectClassificationSchema,\n routing: ProjectRoutingSchema,\n sounds_like: z.array(z.string()).optional(),\n relationships: RelationshipsSchema, // Unified relationships\n content: EntityContentSchema, // Attached content (URLs, text, documents)\n active: z.boolean().optional(),\n}));\n"],"names":["z","BaseEntitySchema","RelationshipsSchema","EntityContentSchema"],"mappings":";;;;;;;;;AAQO,MAAM,2BAAA,GAA8BA,MAAE,MAAA,CAAO;AAAA,EAChD,cAAcA,KAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,UAAA,EAAY,OAAO,CAAC,CAAA;AAAA,EAClD,mBAAmBA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAChD,sBAAsBA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EACnD,QAAQA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACrC,kBAAkBA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA;AAC1C,CAAC;AAKM,MAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA,EACzC,WAAA,EAAaA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,SAAA,EAAWA,MAAE,IAAA,CAAK,CAAC,QAAQ,MAAA,EAAQ,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,EAClD,gBAAA,EAAkBA,KAAA,CAAE,KAAA,CAAMA,KAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAC,CAAC,CAAA;AAAA,EAC7D,WAAWA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA;AACnC,CAAC;AAKM,MAAM,aAAA,GAAgBC,4BAAA,CAAiB,KAAA,CAAMD,KAAA,CAAE,MAAA,CAAO;AAAA,EACzD,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA,EACzB,IAAA,EAAMA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE1B,WAAA,EAAaA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,cAAA,EAAgB,2BAAA;AAAA,EAChB,OAAA,EAAS,oBAAA;AAAA,EACT,aAAaA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAC1C,aAAA,EAAeE,iCAAA;AAAA;AAAA,EACf,OAAA,EAASC,2BAAA;AAAA;AAAA,EACT,MAAA,EAAQH,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACxB,CAAC,CAAC;;;;;;"}
|
package/dist/index15.js
CHANGED
|
@@ -20,6 +20,8 @@ const ProjectRoutingSchema = z.object({
|
|
|
20
20
|
});
|
|
21
21
|
const ProjectSchema = BaseEntitySchema.merge(z.object({
|
|
22
22
|
type: z.literal("project"),
|
|
23
|
+
slug: z.string().optional(),
|
|
24
|
+
// Human-readable identifier
|
|
23
25
|
description: z.string().optional(),
|
|
24
26
|
classification: ProjectClassificationSchema,
|
|
25
27
|
routing: ProjectRoutingSchema,
|
package/dist/index15.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index15.js","sources":["../src/schemas/project.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\nimport { RelationshipsSchema } from './relationships';\nimport { EntityContentSchema } from './content';\n\n/**\n * Project classification signals.\n */\nexport const ProjectClassificationSchema = z.object({\n context_type: z.enum(['work', 'personal', 'mixed']),\n associated_people: z.array(z.string()).optional(), // DEPRECATED: Use relationships instead\n associated_companies: z.array(z.string()).optional(), // DEPRECATED: Use relationships instead\n topics: z.array(z.string()).optional(),\n explicit_phrases: z.array(z.string()).optional(),\n});\n\n/**\n * Project routing configuration.\n */\nexport const ProjectRoutingSchema = z.object({\n destination: z.string().optional(),\n structure: z.enum(['none', 'year', 'month', 'day']),\n filename_options: z.array(z.enum(['date', 'time', 'subject'])),\n auto_tags: z.array(z.string()).optional(),\n});\n\n/**\n * Project entity - work contexts that affect routing and understanding.\n */\nexport const ProjectSchema = BaseEntitySchema.merge(z.object({\n type: z.literal('project'),\n \n description: z.string().optional(),\n classification: ProjectClassificationSchema,\n routing: ProjectRoutingSchema,\n sounds_like: z.array(z.string()).optional(),\n relationships: RelationshipsSchema, // Unified relationships\n content: EntityContentSchema, // Attached content (URLs, text, documents)\n active: z.boolean().optional(),\n}));\n"],"names":[],"mappings":";;;;;AAQO,MAAM,2BAAA,GAA8B,EAAE,MAAA,CAAO;AAAA,EAChD,cAAc,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,UAAA,EAAY,OAAO,CAAC,CAAA;AAAA,EAClD,mBAAmB,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAChD,sBAAsB,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EACnD,QAAQ,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACrC,kBAAkB,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA;AAC1C,CAAC;AAKM,MAAM,oBAAA,GAAuB,EAAE,MAAA,CAAO;AAAA,EACzC,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,SAAA,EAAW,EAAE,IAAA,CAAK,CAAC,QAAQ,MAAA,EAAQ,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,EAClD,gBAAA,EAAkB,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAC,CAAC,CAAA;AAAA,EAC7D,WAAW,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA;AACnC,CAAC;AAKM,MAAM,aAAA,GAAgB,gBAAA,CAAiB,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO;AAAA,EACzD,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index15.js","sources":["../src/schemas/project.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\nimport { RelationshipsSchema } from './relationships';\nimport { EntityContentSchema } from './content';\n\n/**\n * Project classification signals.\n */\nexport const ProjectClassificationSchema = z.object({\n context_type: z.enum(['work', 'personal', 'mixed']),\n associated_people: z.array(z.string()).optional(), // DEPRECATED: Use relationships instead\n associated_companies: z.array(z.string()).optional(), // DEPRECATED: Use relationships instead\n topics: z.array(z.string()).optional(),\n explicit_phrases: z.array(z.string()).optional(),\n});\n\n/**\n * Project routing configuration.\n */\nexport const ProjectRoutingSchema = z.object({\n destination: z.string().optional(),\n structure: z.enum(['none', 'year', 'month', 'day']),\n filename_options: z.array(z.enum(['date', 'time', 'subject'])),\n auto_tags: z.array(z.string()).optional(),\n});\n\n/**\n * Project entity - work contexts that affect routing and understanding.\n */\nexport const ProjectSchema = BaseEntitySchema.merge(z.object({\n type: z.literal('project'),\n slug: z.string().optional(), // Human-readable identifier\n \n description: z.string().optional(),\n classification: ProjectClassificationSchema,\n routing: ProjectRoutingSchema,\n sounds_like: z.array(z.string()).optional(),\n relationships: RelationshipsSchema, // Unified relationships\n content: EntityContentSchema, // Attached content (URLs, text, documents)\n active: z.boolean().optional(),\n}));\n"],"names":[],"mappings":";;;;;AAQO,MAAM,2BAAA,GAA8B,EAAE,MAAA,CAAO;AAAA,EAChD,cAAc,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,UAAA,EAAY,OAAO,CAAC,CAAA;AAAA,EAClD,mBAAmB,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAChD,sBAAsB,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EACnD,QAAQ,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACrC,kBAAkB,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA;AAC1C,CAAC;AAKM,MAAM,oBAAA,GAAuB,EAAE,MAAA,CAAO;AAAA,EACzC,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,SAAA,EAAW,EAAE,IAAA,CAAK,CAAC,QAAQ,MAAA,EAAQ,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,EAClD,gBAAA,EAAkB,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAC,CAAC,CAAA;AAAA,EAC7D,WAAW,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA;AACnC,CAAC;AAKM,MAAM,aAAA,GAAgB,gBAAA,CAAiB,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO;AAAA,EACzD,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,SAAS,CAAA;AAAA,EACzB,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE1B,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,cAAA,EAAgB,2BAAA;AAAA,EAChB,OAAA,EAAS,oBAAA;AAAA,EACT,aAAa,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAC1C,aAAA,EAAe,mBAAA;AAAA;AAAA,EACf,OAAA,EAAS,mBAAA;AAAA;AAAA,EACT,MAAA,EAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AACxB,CAAC,CAAC;;;;"}
|
package/dist/index16.cjs
CHANGED
|
@@ -9,6 +9,8 @@ const content = require('./index11.cjs');
|
|
|
9
9
|
|
|
10
10
|
const TermSchema = overcontext.BaseEntitySchema.merge(zod.z.object({
|
|
11
11
|
type: zod.z.literal("term"),
|
|
12
|
+
slug: zod.z.string().optional(),
|
|
13
|
+
// Human-readable identifier
|
|
12
14
|
expansion: zod.z.string().optional(),
|
|
13
15
|
// Full form if acronym
|
|
14
16
|
domain: zod.z.string().optional(),
|
package/dist/index16.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index16.cjs","sources":["../src/schemas/term.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\nimport { RelationshipsSchema } from './relationships';\nimport { EntityContentSchema } from './content';\n\n/**\n * Term entity - domain-specific terminology and acronyms.\n */\nexport const TermSchema = BaseEntitySchema.merge(z.object({\n type: z.literal('term'),\n \n expansion: z.string().optional(), // Full form if acronym\n domain: z.string().optional(), // E.g., \"engineering\", \"finance\"\n sounds_like: z.array(z.string()).optional(),\n projects: z.array(z.string()).optional(), // DEPRECATED: Use relationships instead\n description: z.string().optional(),\n topics: z.array(z.string()).optional(),\n relationships: RelationshipsSchema, // Relationships to other entities\n content: EntityContentSchema, // Attached content (URLs, text, documents)\n}));\n"],"names":["BaseEntitySchema","z","RelationshipsSchema","EntityContentSchema"],"mappings":";;;;;;;;;AAQO,MAAM,UAAA,GAAaA,4BAAA,CAAiB,KAAA,CAAMC,KAAA,CAAE,MAAA,CAAO;AAAA,EACtD,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,MAAM,CAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index16.cjs","sources":["../src/schemas/term.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\nimport { RelationshipsSchema } from './relationships';\nimport { EntityContentSchema } from './content';\n\n/**\n * Term entity - domain-specific terminology and acronyms.\n */\nexport const TermSchema = BaseEntitySchema.merge(z.object({\n type: z.literal('term'),\n slug: z.string().optional(), // Human-readable identifier\n \n expansion: z.string().optional(), // Full form if acronym\n domain: z.string().optional(), // E.g., \"engineering\", \"finance\"\n sounds_like: z.array(z.string()).optional(),\n projects: z.array(z.string()).optional(), // DEPRECATED: Use relationships instead\n description: z.string().optional(),\n topics: z.array(z.string()).optional(),\n relationships: RelationshipsSchema, // Relationships to other entities\n content: EntityContentSchema, // Attached content (URLs, text, documents)\n}));\n"],"names":["BaseEntitySchema","z","RelationshipsSchema","EntityContentSchema"],"mappings":";;;;;;;;;AAQO,MAAM,UAAA,GAAaA,4BAAA,CAAiB,KAAA,CAAMC,KAAA,CAAE,MAAA,CAAO;AAAA,EACtD,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,MAAM,CAAA;AAAA,EACtB,IAAA,EAAMA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE1B,SAAA,EAAWA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAC/B,MAAA,EAAQA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAC5B,aAAaA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAC1C,UAAUA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EACvC,WAAA,EAAaA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,QAAQA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACrC,aAAA,EAAeC,iCAAA;AAAA;AAAA,EACf,OAAA,EAASC;AAAA;AACb,CAAC,CAAC;;;;"}
|
package/dist/index16.js
CHANGED
|
@@ -5,6 +5,8 @@ import { EntityContentSchema } from './index11.js';
|
|
|
5
5
|
|
|
6
6
|
const TermSchema = BaseEntitySchema.merge(z.object({
|
|
7
7
|
type: z.literal("term"),
|
|
8
|
+
slug: z.string().optional(),
|
|
9
|
+
// Human-readable identifier
|
|
8
10
|
expansion: z.string().optional(),
|
|
9
11
|
// Full form if acronym
|
|
10
12
|
domain: z.string().optional(),
|
package/dist/index16.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index16.js","sources":["../src/schemas/term.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\nimport { RelationshipsSchema } from './relationships';\nimport { EntityContentSchema } from './content';\n\n/**\n * Term entity - domain-specific terminology and acronyms.\n */\nexport const TermSchema = BaseEntitySchema.merge(z.object({\n type: z.literal('term'),\n \n expansion: z.string().optional(), // Full form if acronym\n domain: z.string().optional(), // E.g., \"engineering\", \"finance\"\n sounds_like: z.array(z.string()).optional(),\n projects: z.array(z.string()).optional(), // DEPRECATED: Use relationships instead\n description: z.string().optional(),\n topics: z.array(z.string()).optional(),\n relationships: RelationshipsSchema, // Relationships to other entities\n content: EntityContentSchema, // Attached content (URLs, text, documents)\n}));\n"],"names":[],"mappings":";;;;;AAQO,MAAM,UAAA,GAAa,gBAAA,CAAiB,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO;AAAA,EACtD,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index16.js","sources":["../src/schemas/term.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseEntitySchema } from '@utilarium/overcontext';\nimport { RelationshipsSchema } from './relationships';\nimport { EntityContentSchema } from './content';\n\n/**\n * Term entity - domain-specific terminology and acronyms.\n */\nexport const TermSchema = BaseEntitySchema.merge(z.object({\n type: z.literal('term'),\n slug: z.string().optional(), // Human-readable identifier\n \n expansion: z.string().optional(), // Full form if acronym\n domain: z.string().optional(), // E.g., \"engineering\", \"finance\"\n sounds_like: z.array(z.string()).optional(),\n projects: z.array(z.string()).optional(), // DEPRECATED: Use relationships instead\n description: z.string().optional(),\n topics: z.array(z.string()).optional(),\n relationships: RelationshipsSchema, // Relationships to other entities\n content: EntityContentSchema, // Attached content (URLs, text, documents)\n}));\n"],"names":[],"mappings":";;;;;AAQO,MAAM,UAAA,GAAa,gBAAA,CAAiB,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO;AAAA,EACtD,IAAA,EAAM,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA;AAAA,EACtB,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAE1B,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAC/B,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAC5B,aAAa,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EAC1C,UAAU,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EACvC,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,QAAQ,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACrC,aAAA,EAAe,mBAAA;AAAA;AAAA,EACf,OAAA,EAAS;AAAA;AACb,CAAC,CAAC;;;;"}
|
package/dist/index6.cjs
CHANGED
|
@@ -42,6 +42,9 @@ const TYPE_TO_DIRECTORY = {
|
|
|
42
42
|
"term": "terms",
|
|
43
43
|
"ignored": "ignored"
|
|
44
44
|
};
|
|
45
|
+
function slugify(text) {
|
|
46
|
+
return text.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, "");
|
|
47
|
+
}
|
|
45
48
|
const create = () => {
|
|
46
49
|
const entities = /* @__PURE__ */ new Map([
|
|
47
50
|
["person", /* @__PURE__ */ new Map()],
|
|
@@ -77,24 +80,48 @@ const create = () => {
|
|
|
77
80
|
const dirName = TYPE_TO_DIRECTORY[entity.type];
|
|
78
81
|
const dirPath = path__namespace.join(targetDir, "context", dirName);
|
|
79
82
|
await fs__namespace.mkdir(dirPath, { recursive: true });
|
|
80
|
-
const
|
|
83
|
+
const entityWithSlug = entity;
|
|
84
|
+
const uuidPrefix = entity.id.substring(0, 10);
|
|
85
|
+
const slug = entityWithSlug.slug || slugify(entity.name);
|
|
86
|
+
const filename = `${uuidPrefix}-${slug}.yaml`;
|
|
87
|
+
const filePath = path__namespace.join(dirPath, filename);
|
|
81
88
|
const { type: _entityType, ...entityWithoutType } = entity;
|
|
82
|
-
const content = yaml__namespace.dump(entityWithoutType, { lineWidth: -1 });
|
|
89
|
+
const content = yaml__namespace.dump(entityWithoutType, { lineWidth: -1, noRefs: true });
|
|
83
90
|
await fs__namespace.writeFile(filePath, content, "utf-8");
|
|
84
91
|
entities.get(entity.type)?.set(entity.id, entity);
|
|
85
92
|
};
|
|
86
93
|
const deleteEntity = async (type, id, targetDir) => {
|
|
87
94
|
const dirName = TYPE_TO_DIRECTORY[type];
|
|
95
|
+
const resolvedId = resolveEntityId(type, id);
|
|
96
|
+
if (!resolvedId) return false;
|
|
97
|
+
const uuidPrefix = resolvedId.substring(0, 10);
|
|
98
|
+
const possibleDirs = [
|
|
99
|
+
path__namespace.join(targetDir, dirName),
|
|
100
|
+
path__namespace.join(targetDir, "context", dirName)
|
|
101
|
+
];
|
|
102
|
+
for (const dir of possibleDirs) {
|
|
103
|
+
try {
|
|
104
|
+
const files = await fs__namespace.readdir(dir);
|
|
105
|
+
for (const file of files) {
|
|
106
|
+
if (file.startsWith(uuidPrefix) && (file.endsWith(".yaml") || file.endsWith(".yml"))) {
|
|
107
|
+
await fs__namespace.unlink(path__namespace.join(dir, file));
|
|
108
|
+
entities.get(type)?.delete(resolvedId);
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
} catch {
|
|
113
|
+
}
|
|
114
|
+
}
|
|
88
115
|
const possiblePaths = [
|
|
89
|
-
path__namespace.join(targetDir, dirName, `${
|
|
90
|
-
path__namespace.join(targetDir, dirName, `${
|
|
91
|
-
path__namespace.join(targetDir, "context", dirName, `${
|
|
92
|
-
path__namespace.join(targetDir, "context", dirName, `${
|
|
116
|
+
path__namespace.join(targetDir, dirName, `${resolvedId}.yaml`),
|
|
117
|
+
path__namespace.join(targetDir, dirName, `${resolvedId}.yml`),
|
|
118
|
+
path__namespace.join(targetDir, "context", dirName, `${resolvedId}.yaml`),
|
|
119
|
+
path__namespace.join(targetDir, "context", dirName, `${resolvedId}.yml`)
|
|
93
120
|
];
|
|
94
121
|
for (const filePath of possiblePaths) {
|
|
95
122
|
try {
|
|
96
123
|
await fs__namespace.unlink(filePath);
|
|
97
|
-
entities.get(type)?.delete(
|
|
124
|
+
entities.get(type)?.delete(resolvedId);
|
|
98
125
|
return true;
|
|
99
126
|
} catch {
|
|
100
127
|
}
|
|
@@ -103,10 +130,28 @@ const create = () => {
|
|
|
103
130
|
};
|
|
104
131
|
const getEntityFilePath = (type, id, contextDirs) => {
|
|
105
132
|
const dirName = TYPE_TO_DIRECTORY[type];
|
|
133
|
+
const resolvedId = resolveEntityId(type, id);
|
|
134
|
+
if (!resolvedId) return void 0;
|
|
106
135
|
for (const contextDir of [...contextDirs].reverse()) {
|
|
136
|
+
const typeDir = path__namespace.join(contextDir, dirName);
|
|
137
|
+
if (!fs.existsSync(typeDir)) continue;
|
|
138
|
+
try {
|
|
139
|
+
const files = fs.readdirSync(typeDir);
|
|
140
|
+
const uuidPrefix = resolvedId.substring(0, 10);
|
|
141
|
+
for (const file of files) {
|
|
142
|
+
if (file.startsWith(uuidPrefix) && (file.endsWith(".yaml") || file.endsWith(".yml"))) {
|
|
143
|
+
const filePath = path__namespace.join(typeDir, file);
|
|
144
|
+
const stat = fs.statSync(filePath);
|
|
145
|
+
if (stat.isFile()) {
|
|
146
|
+
return filePath;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
} catch {
|
|
151
|
+
}
|
|
107
152
|
const possiblePaths = [
|
|
108
|
-
path__namespace.join(contextDir, dirName, `${
|
|
109
|
-
path__namespace.join(contextDir, dirName, `${
|
|
153
|
+
path__namespace.join(contextDir, dirName, `${resolvedId}.yaml`),
|
|
154
|
+
path__namespace.join(contextDir, dirName, `${resolvedId}.yml`)
|
|
110
155
|
];
|
|
111
156
|
for (const filePath of possiblePaths) {
|
|
112
157
|
if (fs.existsSync(filePath)) {
|
|
@@ -119,8 +164,24 @@ const create = () => {
|
|
|
119
164
|
}
|
|
120
165
|
return void 0;
|
|
121
166
|
};
|
|
167
|
+
const resolveEntityId = (type, identifier) => {
|
|
168
|
+
if (entities.get(type)?.has(identifier)) {
|
|
169
|
+
return identifier;
|
|
170
|
+
}
|
|
171
|
+
const entityMap = entities.get(type);
|
|
172
|
+
if (entityMap) {
|
|
173
|
+
for (const entity of entityMap.values()) {
|
|
174
|
+
const entityWithSlug = entity;
|
|
175
|
+
if (entityWithSlug.slug === identifier) {
|
|
176
|
+
return entity.id;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return void 0;
|
|
181
|
+
};
|
|
122
182
|
const get = (type, id) => {
|
|
123
|
-
|
|
183
|
+
const resolvedId = resolveEntityId(type, id);
|
|
184
|
+
return resolvedId ? entities.get(type)?.get(resolvedId) : void 0;
|
|
124
185
|
};
|
|
125
186
|
const getAll = (type) => {
|
|
126
187
|
return Array.from(entities.get(type)?.values() ?? []);
|
package/dist/index6.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index6.cjs","sources":["../src/storage/storage.ts"],"sourcesContent":["/**\n * Context Storage\n * \n * Handles loading and saving entity YAML files from context directories.\n * Supports hierarchical loading where later directories override earlier ones.\n * \n * Design Note: This module is designed to be self-contained and may be\n * extracted for use in other tools (kronologi, observasjon) in the future.\n */\n\nimport * as yaml from 'js-yaml';\nimport * as fs from 'fs/promises';\n// eslint-disable-next-line no-restricted-imports\nimport { existsSync, statSync } from 'fs';\nimport * as path from 'node:path';\nimport { RedaksjonEntity as Entity, RedaksjonEntityType as EntityType } from '../types';\n\nexport interface StorageInstance {\n load(contextDirs: string[]): Promise<void>;\n save(entity: Entity, targetDir: string): Promise<void>;\n delete(type: EntityType, id: string, targetDir: string): Promise<boolean>;\n get<T extends Entity>(type: EntityType, id: string): T | undefined;\n getAll<T extends Entity>(type: EntityType): T[];\n search(query: string): Entity[];\n findBySoundsLike(phonetic: string): Entity | undefined;\n clear(): void;\n getEntityFilePath(type: EntityType, id: string, contextDirs: string[]): string | undefined;\n}\n\ntype DirectoryName = 'people' | 'projects' | 'companies' | 'terms' | 'ignored';\n\nconst DIRECTORY_TO_TYPE: Record<DirectoryName, EntityType> = {\n 'people': 'person',\n 'projects': 'project',\n 'companies': 'company',\n 'terms': 'term',\n 'ignored': 'ignored',\n};\n\nconst TYPE_TO_DIRECTORY: Record<EntityType, DirectoryName> = {\n 'person': 'people',\n 'project': 'projects',\n 'company': 'companies',\n 'term': 'terms',\n 'ignored': 'ignored',\n};\n\nexport const create = (): StorageInstance => {\n const entities: Map<EntityType, Map<string, Entity>> = new Map([\n ['person', new Map()],\n ['project', new Map()],\n ['company', new Map()],\n ['term', new Map()],\n ['ignored', new Map()],\n ]);\n\n const load = async (contextDirs: string[]): Promise<void> => {\n // Load from all context directories (later directories override)\n for (const contextDir of contextDirs) {\n for (const dirName of Object.keys(DIRECTORY_TO_TYPE) as DirectoryName[]) {\n const typeDir = path.join(contextDir, dirName);\n const entityType = DIRECTORY_TO_TYPE[dirName];\n \n try {\n const files = await fs.readdir(typeDir);\n for (const file of files) {\n if (!file.endsWith('.yaml') && !file.endsWith('.yml')) continue;\n \n const content = await fs.readFile(path.join(typeDir, file), 'utf-8');\n const parsed = yaml.load(content) as Partial<Entity>;\n \n if (parsed && parsed.id) {\n entities.get(entityType)?.set(parsed.id, {\n ...parsed,\n type: entityType,\n } as Entity);\n }\n }\n } catch {\n // Directory doesn't exist, skip\n }\n }\n }\n };\n\n const save = async (entity: Entity, targetDir: string): Promise<void> => {\n const dirName = TYPE_TO_DIRECTORY[entity.type];\n // Save to context subdirectory (context/people/, context/projects/, etc.)\n const dirPath = path.join(targetDir, 'context', dirName);\n await fs.mkdir(dirPath, { recursive: true });\n \n const filePath = path.join(dirPath, `${entity.id}.yaml`);\n \n // Remove type from saved YAML (it's inferred from directory)\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { type: _entityType, ...entityWithoutType } = entity;\n const content = yaml.dump(entityWithoutType, { lineWidth: -1 });\n await fs.writeFile(filePath, content, 'utf-8');\n \n entities.get(entity.type)?.set(entity.id, entity);\n };\n\n const deleteEntity = async (type: EntityType, id: string, targetDir: string): Promise<boolean> => {\n const dirName = TYPE_TO_DIRECTORY[type];\n \n // Try both possible locations (with and without 'context' subdirectory)\n const possiblePaths = [\n path.join(targetDir, dirName, `${id}.yaml`),\n path.join(targetDir, dirName, `${id}.yml`),\n path.join(targetDir, 'context', dirName, `${id}.yaml`),\n path.join(targetDir, 'context', dirName, `${id}.yml`),\n ];\n \n for (const filePath of possiblePaths) {\n try {\n await fs.unlink(filePath);\n entities.get(type)?.delete(id);\n return true;\n } catch {\n // File doesn't exist at this path, try next\n }\n }\n \n return false;\n };\n\n const getEntityFilePath = (type: EntityType, id: string, contextDirs: string[]): string | undefined => {\n const dirName = TYPE_TO_DIRECTORY[type];\n \n // Search in reverse order (closest first) to find where the entity is defined\n for (const contextDir of [...contextDirs].reverse()) {\n const possiblePaths = [\n path.join(contextDir, dirName, `${id}.yaml`),\n path.join(contextDir, dirName, `${id}.yml`),\n ];\n \n for (const filePath of possiblePaths) {\n // Use sync access check - this is only for CLI, not hot path\n if (existsSync(filePath)) {\n const stat = statSync(filePath);\n if (stat.isFile()) {\n return filePath;\n }\n }\n }\n }\n \n return undefined;\n };\n\n const get = <T extends Entity>(type: EntityType, id: string): T | undefined => {\n return entities.get(type)?.get(id) as T | undefined;\n };\n\n const getAll = <T extends Entity>(type: EntityType): T[] => {\n return Array.from(entities.get(type)?.values() ?? []) as T[];\n };\n\n const search = (query: string): Entity[] => {\n const normalizedQuery = query.toLowerCase();\n const results: Entity[] = [];\n const seen = new Set<string>(); // Track by ID to avoid duplicates\n \n for (const entityMap of entities.values()) {\n for (const entity of entityMap.values()) {\n let matched = false;\n \n // Check name\n if (entity.name.toLowerCase().includes(normalizedQuery)) {\n matched = true;\n }\n \n // Also check sounds_like field\n if (!matched) {\n const entityWithSoundsLike = entity as Entity & { sounds_like?: string[] };\n const variants = entityWithSoundsLike.sounds_like;\n if (variants?.some(v => v.toLowerCase().includes(normalizedQuery))) {\n matched = true;\n }\n }\n \n // Also check exact match in sounds_like (for full phrase matching)\n if (!matched) {\n const entityWithSoundsLike = entity as Entity & { sounds_like?: string[] };\n const variants = entityWithSoundsLike.sounds_like;\n if (variants?.some(v => v.toLowerCase() === normalizedQuery)) {\n matched = true;\n }\n }\n \n if (matched && !seen.has(entity.id)) {\n results.push(entity);\n seen.add(entity.id);\n }\n }\n }\n \n return results;\n };\n\n const findBySoundsLike = (phonetic: string): Entity | undefined => {\n const normalized = phonetic.toLowerCase().trim();\n \n for (const entityMap of entities.values()) {\n for (const entity of entityMap.values()) {\n // Check sounds_like field on entities that have it\n const entityWithSoundsLike = entity as Entity & { sounds_like?: string[] };\n const variants = entityWithSoundsLike.sounds_like;\n if (variants?.some(v => v.toLowerCase() === normalized)) {\n return entity;\n }\n }\n }\n \n return undefined;\n };\n\n const clear = (): void => {\n for (const entityMap of entities.values()) {\n entityMap.clear();\n }\n };\n\n return { load, save, delete: deleteEntity, get, getAll, search, findBySoundsLike, clear, getEntityFilePath };\n};\n\n"],"names":["path","fs","yaml","existsSync","statSync"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index6.cjs","sources":["../src/storage/storage.ts"],"sourcesContent":["/**\n * Context Storage\n * \n * Handles loading and saving entity YAML files from context directories.\n * Supports hierarchical loading where later directories override earlier ones.\n * \n * Design Note: This module is designed to be self-contained and may be\n * extracted for use in other tools (kronologi, observasjon) in the future.\n */\n\nimport * as yaml from 'js-yaml';\nimport * as fs from 'fs/promises';\n// eslint-disable-next-line no-restricted-imports\nimport { existsSync, statSync, readdirSync } from 'fs';\nimport * as path from 'node:path';\nimport { RedaksjonEntity as Entity, RedaksjonEntityType as EntityType } from '../types';\n\nexport interface StorageInstance {\n load(contextDirs: string[]): Promise<void>;\n save(entity: Entity, targetDir: string): Promise<void>;\n delete(type: EntityType, id: string, targetDir: string): Promise<boolean>;\n get<T extends Entity>(type: EntityType, id: string): T | undefined;\n getAll<T extends Entity>(type: EntityType): T[];\n search(query: string): Entity[];\n findBySoundsLike(phonetic: string): Entity | undefined;\n clear(): void;\n getEntityFilePath(type: EntityType, id: string, contextDirs: string[]): string | undefined;\n}\n\ntype DirectoryName = 'people' | 'projects' | 'companies' | 'terms' | 'ignored';\n\nconst DIRECTORY_TO_TYPE: Record<DirectoryName, EntityType> = {\n 'people': 'person',\n 'projects': 'project',\n 'companies': 'company',\n 'terms': 'term',\n 'ignored': 'ignored',\n};\n\nconst TYPE_TO_DIRECTORY: Record<EntityType, DirectoryName> = {\n 'person': 'people',\n 'project': 'projects',\n 'company': 'companies',\n 'term': 'terms',\n 'ignored': 'ignored',\n};\n\n/**\n * Simple slugify function for generating slugs from names\n */\nfunction slugify(text: string): string {\n return text\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/[\\s_-]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\nexport const create = (): StorageInstance => {\n const entities: Map<EntityType, Map<string, Entity>> = new Map([\n ['person', new Map()],\n ['project', new Map()],\n ['company', new Map()],\n ['term', new Map()],\n ['ignored', new Map()],\n ]);\n\n const load = async (contextDirs: string[]): Promise<void> => {\n // Load from all context directories (later directories override)\n for (const contextDir of contextDirs) {\n for (const dirName of Object.keys(DIRECTORY_TO_TYPE) as DirectoryName[]) {\n const typeDir = path.join(contextDir, dirName);\n const entityType = DIRECTORY_TO_TYPE[dirName];\n \n try {\n const files = await fs.readdir(typeDir);\n for (const file of files) {\n if (!file.endsWith('.yaml') && !file.endsWith('.yml')) continue;\n \n const content = await fs.readFile(path.join(typeDir, file), 'utf-8');\n const parsed = yaml.load(content) as Partial<Entity>;\n \n if (parsed && parsed.id) {\n entities.get(entityType)?.set(parsed.id, {\n ...parsed,\n type: entityType,\n } as Entity);\n }\n }\n } catch {\n // Directory doesn't exist, skip\n }\n }\n }\n };\n\n const save = async (entity: Entity, targetDir: string): Promise<void> => {\n const dirName = TYPE_TO_DIRECTORY[entity.type];\n // Save to context subdirectory (context/people/, context/projects/, etc.)\n const dirPath = path.join(targetDir, 'context', dirName);\n await fs.mkdir(dirPath, { recursive: true });\n \n // Generate filename: {uuid-prefix}-{slug}.yaml\n const entityWithSlug = entity as Entity & { slug?: string };\n const uuidPrefix = entity.id.substring(0, 10);\n const slug = entityWithSlug.slug || slugify(entity.name);\n const filename = `${uuidPrefix}-${slug}.yaml`;\n const filePath = path.join(dirPath, filename);\n \n // Remove type from saved YAML (it's inferred from directory)\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { type: _entityType, ...entityWithoutType } = entity;\n const content = yaml.dump(entityWithoutType, { lineWidth: -1, noRefs: true });\n await fs.writeFile(filePath, content, 'utf-8');\n \n entities.get(entity.type)?.set(entity.id, entity);\n };\n\n const deleteEntity = async (type: EntityType, id: string, targetDir: string): Promise<boolean> => {\n const dirName = TYPE_TO_DIRECTORY[type];\n \n // Resolve ID to UUID if it's a slug\n const resolvedId = resolveEntityId(type, id);\n if (!resolvedId) return false;\n \n // Try to find file with UUID prefix\n const uuidPrefix = resolvedId.substring(0, 10);\n const possibleDirs = [\n path.join(targetDir, dirName),\n path.join(targetDir, 'context', dirName),\n ];\n \n for (const dir of possibleDirs) {\n try {\n const files = await fs.readdir(dir);\n for (const file of files) {\n if (file.startsWith(uuidPrefix) && (file.endsWith('.yaml') || file.endsWith('.yml'))) {\n await fs.unlink(path.join(dir, file));\n entities.get(type)?.delete(resolvedId);\n return true;\n }\n }\n } catch {\n // Directory doesn't exist or can't be read, try next\n }\n }\n \n // Fallback: try legacy slug-based filenames\n const possiblePaths = [\n path.join(targetDir, dirName, `${resolvedId}.yaml`),\n path.join(targetDir, dirName, `${resolvedId}.yml`),\n path.join(targetDir, 'context', dirName, `${resolvedId}.yaml`),\n path.join(targetDir, 'context', dirName, `${resolvedId}.yml`),\n ];\n \n for (const filePath of possiblePaths) {\n try {\n await fs.unlink(filePath);\n entities.get(type)?.delete(resolvedId);\n return true;\n } catch {\n // File doesn't exist at this path, try next\n }\n }\n \n return false;\n };\n\n const getEntityFilePath = (type: EntityType, id: string, contextDirs: string[]): string | undefined => {\n const dirName = TYPE_TO_DIRECTORY[type];\n \n // Resolve ID to UUID if it's a slug\n const resolvedId = resolveEntityId(type, id);\n if (!resolvedId) return undefined;\n \n // Search in reverse order (closest first) to find where the entity is defined\n for (const contextDir of [...contextDirs].reverse()) {\n const typeDir = path.join(contextDir, dirName);\n \n // Check if directory exists\n if (!existsSync(typeDir)) continue;\n \n try {\n // List all files in directory and find matching UUID prefix\n const files = readdirSync(typeDir);\n const uuidPrefix = resolvedId.substring(0, 10);\n \n for (const file of files) {\n if (file.startsWith(uuidPrefix) && (file.endsWith('.yaml') || file.endsWith('.yml'))) {\n const filePath = path.join(typeDir, file);\n const stat = statSync(filePath);\n if (stat.isFile()) {\n return filePath;\n }\n }\n }\n } catch {\n // Directory read failed, continue\n }\n \n // Fallback: try legacy slug-based filenames\n const possiblePaths = [\n path.join(contextDir, dirName, `${resolvedId}.yaml`),\n path.join(contextDir, dirName, `${resolvedId}.yml`),\n ];\n \n for (const filePath of possiblePaths) {\n if (existsSync(filePath)) {\n const stat = statSync(filePath);\n if (stat.isFile()) {\n return filePath;\n }\n }\n }\n }\n \n return undefined;\n };\n\n /**\n * Resolve entity ID from UUID or slug\n * Tries UUID first, then slug lookup\n */\n const resolveEntityId = (type: EntityType, identifier: string): string | undefined => {\n // Try direct UUID lookup first\n if (entities.get(type)?.has(identifier)) {\n return identifier;\n }\n \n // Try slug lookup\n const entityMap = entities.get(type);\n if (entityMap) {\n for (const entity of entityMap.values()) {\n const entityWithSlug = entity as Entity & { slug?: string };\n if (entityWithSlug.slug === identifier) {\n return entity.id;\n }\n }\n }\n \n return undefined;\n };\n\n const get = <T extends Entity>(type: EntityType, id: string): T | undefined => {\n // Support both UUID and slug lookup\n const resolvedId = resolveEntityId(type, id);\n return resolvedId ? entities.get(type)?.get(resolvedId) as T | undefined : undefined;\n };\n\n const getAll = <T extends Entity>(type: EntityType): T[] => {\n return Array.from(entities.get(type)?.values() ?? []) as T[];\n };\n\n const search = (query: string): Entity[] => {\n const normalizedQuery = query.toLowerCase();\n const results: Entity[] = [];\n const seen = new Set<string>(); // Track by ID to avoid duplicates\n \n for (const entityMap of entities.values()) {\n for (const entity of entityMap.values()) {\n let matched = false;\n \n // Check name\n if (entity.name.toLowerCase().includes(normalizedQuery)) {\n matched = true;\n }\n \n // Also check sounds_like field\n if (!matched) {\n const entityWithSoundsLike = entity as Entity & { sounds_like?: string[] };\n const variants = entityWithSoundsLike.sounds_like;\n if (variants?.some(v => v.toLowerCase().includes(normalizedQuery))) {\n matched = true;\n }\n }\n \n // Also check exact match in sounds_like (for full phrase matching)\n if (!matched) {\n const entityWithSoundsLike = entity as Entity & { sounds_like?: string[] };\n const variants = entityWithSoundsLike.sounds_like;\n if (variants?.some(v => v.toLowerCase() === normalizedQuery)) {\n matched = true;\n }\n }\n \n if (matched && !seen.has(entity.id)) {\n results.push(entity);\n seen.add(entity.id);\n }\n }\n }\n \n return results;\n };\n\n const findBySoundsLike = (phonetic: string): Entity | undefined => {\n const normalized = phonetic.toLowerCase().trim();\n \n for (const entityMap of entities.values()) {\n for (const entity of entityMap.values()) {\n // Check sounds_like field on entities that have it\n const entityWithSoundsLike = entity as Entity & { sounds_like?: string[] };\n const variants = entityWithSoundsLike.sounds_like;\n if (variants?.some(v => v.toLowerCase() === normalized)) {\n return entity;\n }\n }\n }\n \n return undefined;\n };\n\n const clear = (): void => {\n for (const entityMap of entities.values()) {\n entityMap.clear();\n }\n };\n\n return { load, save, delete: deleteEntity, get, getAll, search, findBySoundsLike, clear, getEntityFilePath };\n};\n\n"],"names":["path","fs","yaml","existsSync","readdirSync","statSync"],"mappings":"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"}
|
package/dist/index6.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as yaml from 'js-yaml';
|
|
2
2
|
import * as fs from 'fs/promises';
|
|
3
|
-
import { existsSync, statSync } from 'fs';
|
|
3
|
+
import { existsSync, readdirSync, statSync } from 'fs';
|
|
4
4
|
import * as path from 'node:path';
|
|
5
5
|
|
|
6
6
|
const DIRECTORY_TO_TYPE = {
|
|
@@ -17,6 +17,9 @@ const TYPE_TO_DIRECTORY = {
|
|
|
17
17
|
"term": "terms",
|
|
18
18
|
"ignored": "ignored"
|
|
19
19
|
};
|
|
20
|
+
function slugify(text) {
|
|
21
|
+
return text.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, "");
|
|
22
|
+
}
|
|
20
23
|
const create = () => {
|
|
21
24
|
const entities = /* @__PURE__ */ new Map([
|
|
22
25
|
["person", /* @__PURE__ */ new Map()],
|
|
@@ -52,24 +55,48 @@ const create = () => {
|
|
|
52
55
|
const dirName = TYPE_TO_DIRECTORY[entity.type];
|
|
53
56
|
const dirPath = path.join(targetDir, "context", dirName);
|
|
54
57
|
await fs.mkdir(dirPath, { recursive: true });
|
|
55
|
-
const
|
|
58
|
+
const entityWithSlug = entity;
|
|
59
|
+
const uuidPrefix = entity.id.substring(0, 10);
|
|
60
|
+
const slug = entityWithSlug.slug || slugify(entity.name);
|
|
61
|
+
const filename = `${uuidPrefix}-${slug}.yaml`;
|
|
62
|
+
const filePath = path.join(dirPath, filename);
|
|
56
63
|
const { type: _entityType, ...entityWithoutType } = entity;
|
|
57
|
-
const content = yaml.dump(entityWithoutType, { lineWidth: -1 });
|
|
64
|
+
const content = yaml.dump(entityWithoutType, { lineWidth: -1, noRefs: true });
|
|
58
65
|
await fs.writeFile(filePath, content, "utf-8");
|
|
59
66
|
entities.get(entity.type)?.set(entity.id, entity);
|
|
60
67
|
};
|
|
61
68
|
const deleteEntity = async (type, id, targetDir) => {
|
|
62
69
|
const dirName = TYPE_TO_DIRECTORY[type];
|
|
70
|
+
const resolvedId = resolveEntityId(type, id);
|
|
71
|
+
if (!resolvedId) return false;
|
|
72
|
+
const uuidPrefix = resolvedId.substring(0, 10);
|
|
73
|
+
const possibleDirs = [
|
|
74
|
+
path.join(targetDir, dirName),
|
|
75
|
+
path.join(targetDir, "context", dirName)
|
|
76
|
+
];
|
|
77
|
+
for (const dir of possibleDirs) {
|
|
78
|
+
try {
|
|
79
|
+
const files = await fs.readdir(dir);
|
|
80
|
+
for (const file of files) {
|
|
81
|
+
if (file.startsWith(uuidPrefix) && (file.endsWith(".yaml") || file.endsWith(".yml"))) {
|
|
82
|
+
await fs.unlink(path.join(dir, file));
|
|
83
|
+
entities.get(type)?.delete(resolvedId);
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
} catch {
|
|
88
|
+
}
|
|
89
|
+
}
|
|
63
90
|
const possiblePaths = [
|
|
64
|
-
path.join(targetDir, dirName, `${
|
|
65
|
-
path.join(targetDir, dirName, `${
|
|
66
|
-
path.join(targetDir, "context", dirName, `${
|
|
67
|
-
path.join(targetDir, "context", dirName, `${
|
|
91
|
+
path.join(targetDir, dirName, `${resolvedId}.yaml`),
|
|
92
|
+
path.join(targetDir, dirName, `${resolvedId}.yml`),
|
|
93
|
+
path.join(targetDir, "context", dirName, `${resolvedId}.yaml`),
|
|
94
|
+
path.join(targetDir, "context", dirName, `${resolvedId}.yml`)
|
|
68
95
|
];
|
|
69
96
|
for (const filePath of possiblePaths) {
|
|
70
97
|
try {
|
|
71
98
|
await fs.unlink(filePath);
|
|
72
|
-
entities.get(type)?.delete(
|
|
99
|
+
entities.get(type)?.delete(resolvedId);
|
|
73
100
|
return true;
|
|
74
101
|
} catch {
|
|
75
102
|
}
|
|
@@ -78,10 +105,28 @@ const create = () => {
|
|
|
78
105
|
};
|
|
79
106
|
const getEntityFilePath = (type, id, contextDirs) => {
|
|
80
107
|
const dirName = TYPE_TO_DIRECTORY[type];
|
|
108
|
+
const resolvedId = resolveEntityId(type, id);
|
|
109
|
+
if (!resolvedId) return void 0;
|
|
81
110
|
for (const contextDir of [...contextDirs].reverse()) {
|
|
111
|
+
const typeDir = path.join(contextDir, dirName);
|
|
112
|
+
if (!existsSync(typeDir)) continue;
|
|
113
|
+
try {
|
|
114
|
+
const files = readdirSync(typeDir);
|
|
115
|
+
const uuidPrefix = resolvedId.substring(0, 10);
|
|
116
|
+
for (const file of files) {
|
|
117
|
+
if (file.startsWith(uuidPrefix) && (file.endsWith(".yaml") || file.endsWith(".yml"))) {
|
|
118
|
+
const filePath = path.join(typeDir, file);
|
|
119
|
+
const stat = statSync(filePath);
|
|
120
|
+
if (stat.isFile()) {
|
|
121
|
+
return filePath;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
} catch {
|
|
126
|
+
}
|
|
82
127
|
const possiblePaths = [
|
|
83
|
-
path.join(contextDir, dirName, `${
|
|
84
|
-
path.join(contextDir, dirName, `${
|
|
128
|
+
path.join(contextDir, dirName, `${resolvedId}.yaml`),
|
|
129
|
+
path.join(contextDir, dirName, `${resolvedId}.yml`)
|
|
85
130
|
];
|
|
86
131
|
for (const filePath of possiblePaths) {
|
|
87
132
|
if (existsSync(filePath)) {
|
|
@@ -94,8 +139,24 @@ const create = () => {
|
|
|
94
139
|
}
|
|
95
140
|
return void 0;
|
|
96
141
|
};
|
|
142
|
+
const resolveEntityId = (type, identifier) => {
|
|
143
|
+
if (entities.get(type)?.has(identifier)) {
|
|
144
|
+
return identifier;
|
|
145
|
+
}
|
|
146
|
+
const entityMap = entities.get(type);
|
|
147
|
+
if (entityMap) {
|
|
148
|
+
for (const entity of entityMap.values()) {
|
|
149
|
+
const entityWithSlug = entity;
|
|
150
|
+
if (entityWithSlug.slug === identifier) {
|
|
151
|
+
return entity.id;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return void 0;
|
|
156
|
+
};
|
|
97
157
|
const get = (type, id) => {
|
|
98
|
-
|
|
158
|
+
const resolvedId = resolveEntityId(type, id);
|
|
159
|
+
return resolvedId ? entities.get(type)?.get(resolvedId) : void 0;
|
|
99
160
|
};
|
|
100
161
|
const getAll = (type) => {
|
|
101
162
|
return Array.from(entities.get(type)?.values() ?? []);
|
package/dist/index6.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index6.js","sources":["../src/storage/storage.ts"],"sourcesContent":["/**\n * Context Storage\n * \n * Handles loading and saving entity YAML files from context directories.\n * Supports hierarchical loading where later directories override earlier ones.\n * \n * Design Note: This module is designed to be self-contained and may be\n * extracted for use in other tools (kronologi, observasjon) in the future.\n */\n\nimport * as yaml from 'js-yaml';\nimport * as fs from 'fs/promises';\n// eslint-disable-next-line no-restricted-imports\nimport { existsSync, statSync } from 'fs';\nimport * as path from 'node:path';\nimport { RedaksjonEntity as Entity, RedaksjonEntityType as EntityType } from '../types';\n\nexport interface StorageInstance {\n load(contextDirs: string[]): Promise<void>;\n save(entity: Entity, targetDir: string): Promise<void>;\n delete(type: EntityType, id: string, targetDir: string): Promise<boolean>;\n get<T extends Entity>(type: EntityType, id: string): T | undefined;\n getAll<T extends Entity>(type: EntityType): T[];\n search(query: string): Entity[];\n findBySoundsLike(phonetic: string): Entity | undefined;\n clear(): void;\n getEntityFilePath(type: EntityType, id: string, contextDirs: string[]): string | undefined;\n}\n\ntype DirectoryName = 'people' | 'projects' | 'companies' | 'terms' | 'ignored';\n\nconst DIRECTORY_TO_TYPE: Record<DirectoryName, EntityType> = {\n 'people': 'person',\n 'projects': 'project',\n 'companies': 'company',\n 'terms': 'term',\n 'ignored': 'ignored',\n};\n\nconst TYPE_TO_DIRECTORY: Record<EntityType, DirectoryName> = {\n 'person': 'people',\n 'project': 'projects',\n 'company': 'companies',\n 'term': 'terms',\n 'ignored': 'ignored',\n};\n\nexport const create = (): StorageInstance => {\n const entities: Map<EntityType, Map<string, Entity>> = new Map([\n ['person', new Map()],\n ['project', new Map()],\n ['company', new Map()],\n ['term', new Map()],\n ['ignored', new Map()],\n ]);\n\n const load = async (contextDirs: string[]): Promise<void> => {\n // Load from all context directories (later directories override)\n for (const contextDir of contextDirs) {\n for (const dirName of Object.keys(DIRECTORY_TO_TYPE) as DirectoryName[]) {\n const typeDir = path.join(contextDir, dirName);\n const entityType = DIRECTORY_TO_TYPE[dirName];\n \n try {\n const files = await fs.readdir(typeDir);\n for (const file of files) {\n if (!file.endsWith('.yaml') && !file.endsWith('.yml')) continue;\n \n const content = await fs.readFile(path.join(typeDir, file), 'utf-8');\n const parsed = yaml.load(content) as Partial<Entity>;\n \n if (parsed && parsed.id) {\n entities.get(entityType)?.set(parsed.id, {\n ...parsed,\n type: entityType,\n } as Entity);\n }\n }\n } catch {\n // Directory doesn't exist, skip\n }\n }\n }\n };\n\n const save = async (entity: Entity, targetDir: string): Promise<void> => {\n const dirName = TYPE_TO_DIRECTORY[entity.type];\n // Save to context subdirectory (context/people/, context/projects/, etc.)\n const dirPath = path.join(targetDir, 'context', dirName);\n await fs.mkdir(dirPath, { recursive: true });\n \n const filePath = path.join(dirPath, `${entity.id}.yaml`);\n \n // Remove type from saved YAML (it's inferred from directory)\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { type: _entityType, ...entityWithoutType } = entity;\n const content = yaml.dump(entityWithoutType, { lineWidth: -1 });\n await fs.writeFile(filePath, content, 'utf-8');\n \n entities.get(entity.type)?.set(entity.id, entity);\n };\n\n const deleteEntity = async (type: EntityType, id: string, targetDir: string): Promise<boolean> => {\n const dirName = TYPE_TO_DIRECTORY[type];\n \n // Try both possible locations (with and without 'context' subdirectory)\n const possiblePaths = [\n path.join(targetDir, dirName, `${id}.yaml`),\n path.join(targetDir, dirName, `${id}.yml`),\n path.join(targetDir, 'context', dirName, `${id}.yaml`),\n path.join(targetDir, 'context', dirName, `${id}.yml`),\n ];\n \n for (const filePath of possiblePaths) {\n try {\n await fs.unlink(filePath);\n entities.get(type)?.delete(id);\n return true;\n } catch {\n // File doesn't exist at this path, try next\n }\n }\n \n return false;\n };\n\n const getEntityFilePath = (type: EntityType, id: string, contextDirs: string[]): string | undefined => {\n const dirName = TYPE_TO_DIRECTORY[type];\n \n // Search in reverse order (closest first) to find where the entity is defined\n for (const contextDir of [...contextDirs].reverse()) {\n const possiblePaths = [\n path.join(contextDir, dirName, `${id}.yaml`),\n path.join(contextDir, dirName, `${id}.yml`),\n ];\n \n for (const filePath of possiblePaths) {\n // Use sync access check - this is only for CLI, not hot path\n if (existsSync(filePath)) {\n const stat = statSync(filePath);\n if (stat.isFile()) {\n return filePath;\n }\n }\n }\n }\n \n return undefined;\n };\n\n const get = <T extends Entity>(type: EntityType, id: string): T | undefined => {\n return entities.get(type)?.get(id) as T | undefined;\n };\n\n const getAll = <T extends Entity>(type: EntityType): T[] => {\n return Array.from(entities.get(type)?.values() ?? []) as T[];\n };\n\n const search = (query: string): Entity[] => {\n const normalizedQuery = query.toLowerCase();\n const results: Entity[] = [];\n const seen = new Set<string>(); // Track by ID to avoid duplicates\n \n for (const entityMap of entities.values()) {\n for (const entity of entityMap.values()) {\n let matched = false;\n \n // Check name\n if (entity.name.toLowerCase().includes(normalizedQuery)) {\n matched = true;\n }\n \n // Also check sounds_like field\n if (!matched) {\n const entityWithSoundsLike = entity as Entity & { sounds_like?: string[] };\n const variants = entityWithSoundsLike.sounds_like;\n if (variants?.some(v => v.toLowerCase().includes(normalizedQuery))) {\n matched = true;\n }\n }\n \n // Also check exact match in sounds_like (for full phrase matching)\n if (!matched) {\n const entityWithSoundsLike = entity as Entity & { sounds_like?: string[] };\n const variants = entityWithSoundsLike.sounds_like;\n if (variants?.some(v => v.toLowerCase() === normalizedQuery)) {\n matched = true;\n }\n }\n \n if (matched && !seen.has(entity.id)) {\n results.push(entity);\n seen.add(entity.id);\n }\n }\n }\n \n return results;\n };\n\n const findBySoundsLike = (phonetic: string): Entity | undefined => {\n const normalized = phonetic.toLowerCase().trim();\n \n for (const entityMap of entities.values()) {\n for (const entity of entityMap.values()) {\n // Check sounds_like field on entities that have it\n const entityWithSoundsLike = entity as Entity & { sounds_like?: string[] };\n const variants = entityWithSoundsLike.sounds_like;\n if (variants?.some(v => v.toLowerCase() === normalized)) {\n return entity;\n }\n }\n }\n \n return undefined;\n };\n\n const clear = (): void => {\n for (const entityMap of entities.values()) {\n entityMap.clear();\n }\n };\n\n return { load, save, delete: deleteEntity, get, getAll, search, findBySoundsLike, clear, getEntityFilePath };\n};\n\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index6.js","sources":["../src/storage/storage.ts"],"sourcesContent":["/**\n * Context Storage\n * \n * Handles loading and saving entity YAML files from context directories.\n * Supports hierarchical loading where later directories override earlier ones.\n * \n * Design Note: This module is designed to be self-contained and may be\n * extracted for use in other tools (kronologi, observasjon) in the future.\n */\n\nimport * as yaml from 'js-yaml';\nimport * as fs from 'fs/promises';\n// eslint-disable-next-line no-restricted-imports\nimport { existsSync, statSync, readdirSync } from 'fs';\nimport * as path from 'node:path';\nimport { RedaksjonEntity as Entity, RedaksjonEntityType as EntityType } from '../types';\n\nexport interface StorageInstance {\n load(contextDirs: string[]): Promise<void>;\n save(entity: Entity, targetDir: string): Promise<void>;\n delete(type: EntityType, id: string, targetDir: string): Promise<boolean>;\n get<T extends Entity>(type: EntityType, id: string): T | undefined;\n getAll<T extends Entity>(type: EntityType): T[];\n search(query: string): Entity[];\n findBySoundsLike(phonetic: string): Entity | undefined;\n clear(): void;\n getEntityFilePath(type: EntityType, id: string, contextDirs: string[]): string | undefined;\n}\n\ntype DirectoryName = 'people' | 'projects' | 'companies' | 'terms' | 'ignored';\n\nconst DIRECTORY_TO_TYPE: Record<DirectoryName, EntityType> = {\n 'people': 'person',\n 'projects': 'project',\n 'companies': 'company',\n 'terms': 'term',\n 'ignored': 'ignored',\n};\n\nconst TYPE_TO_DIRECTORY: Record<EntityType, DirectoryName> = {\n 'person': 'people',\n 'project': 'projects',\n 'company': 'companies',\n 'term': 'terms',\n 'ignored': 'ignored',\n};\n\n/**\n * Simple slugify function for generating slugs from names\n */\nfunction slugify(text: string): string {\n return text\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/[\\s_-]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\nexport const create = (): StorageInstance => {\n const entities: Map<EntityType, Map<string, Entity>> = new Map([\n ['person', new Map()],\n ['project', new Map()],\n ['company', new Map()],\n ['term', new Map()],\n ['ignored', new Map()],\n ]);\n\n const load = async (contextDirs: string[]): Promise<void> => {\n // Load from all context directories (later directories override)\n for (const contextDir of contextDirs) {\n for (const dirName of Object.keys(DIRECTORY_TO_TYPE) as DirectoryName[]) {\n const typeDir = path.join(contextDir, dirName);\n const entityType = DIRECTORY_TO_TYPE[dirName];\n \n try {\n const files = await fs.readdir(typeDir);\n for (const file of files) {\n if (!file.endsWith('.yaml') && !file.endsWith('.yml')) continue;\n \n const content = await fs.readFile(path.join(typeDir, file), 'utf-8');\n const parsed = yaml.load(content) as Partial<Entity>;\n \n if (parsed && parsed.id) {\n entities.get(entityType)?.set(parsed.id, {\n ...parsed,\n type: entityType,\n } as Entity);\n }\n }\n } catch {\n // Directory doesn't exist, skip\n }\n }\n }\n };\n\n const save = async (entity: Entity, targetDir: string): Promise<void> => {\n const dirName = TYPE_TO_DIRECTORY[entity.type];\n // Save to context subdirectory (context/people/, context/projects/, etc.)\n const dirPath = path.join(targetDir, 'context', dirName);\n await fs.mkdir(dirPath, { recursive: true });\n \n // Generate filename: {uuid-prefix}-{slug}.yaml\n const entityWithSlug = entity as Entity & { slug?: string };\n const uuidPrefix = entity.id.substring(0, 10);\n const slug = entityWithSlug.slug || slugify(entity.name);\n const filename = `${uuidPrefix}-${slug}.yaml`;\n const filePath = path.join(dirPath, filename);\n \n // Remove type from saved YAML (it's inferred from directory)\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { type: _entityType, ...entityWithoutType } = entity;\n const content = yaml.dump(entityWithoutType, { lineWidth: -1, noRefs: true });\n await fs.writeFile(filePath, content, 'utf-8');\n \n entities.get(entity.type)?.set(entity.id, entity);\n };\n\n const deleteEntity = async (type: EntityType, id: string, targetDir: string): Promise<boolean> => {\n const dirName = TYPE_TO_DIRECTORY[type];\n \n // Resolve ID to UUID if it's a slug\n const resolvedId = resolveEntityId(type, id);\n if (!resolvedId) return false;\n \n // Try to find file with UUID prefix\n const uuidPrefix = resolvedId.substring(0, 10);\n const possibleDirs = [\n path.join(targetDir, dirName),\n path.join(targetDir, 'context', dirName),\n ];\n \n for (const dir of possibleDirs) {\n try {\n const files = await fs.readdir(dir);\n for (const file of files) {\n if (file.startsWith(uuidPrefix) && (file.endsWith('.yaml') || file.endsWith('.yml'))) {\n await fs.unlink(path.join(dir, file));\n entities.get(type)?.delete(resolvedId);\n return true;\n }\n }\n } catch {\n // Directory doesn't exist or can't be read, try next\n }\n }\n \n // Fallback: try legacy slug-based filenames\n const possiblePaths = [\n path.join(targetDir, dirName, `${resolvedId}.yaml`),\n path.join(targetDir, dirName, `${resolvedId}.yml`),\n path.join(targetDir, 'context', dirName, `${resolvedId}.yaml`),\n path.join(targetDir, 'context', dirName, `${resolvedId}.yml`),\n ];\n \n for (const filePath of possiblePaths) {\n try {\n await fs.unlink(filePath);\n entities.get(type)?.delete(resolvedId);\n return true;\n } catch {\n // File doesn't exist at this path, try next\n }\n }\n \n return false;\n };\n\n const getEntityFilePath = (type: EntityType, id: string, contextDirs: string[]): string | undefined => {\n const dirName = TYPE_TO_DIRECTORY[type];\n \n // Resolve ID to UUID if it's a slug\n const resolvedId = resolveEntityId(type, id);\n if (!resolvedId) return undefined;\n \n // Search in reverse order (closest first) to find where the entity is defined\n for (const contextDir of [...contextDirs].reverse()) {\n const typeDir = path.join(contextDir, dirName);\n \n // Check if directory exists\n if (!existsSync(typeDir)) continue;\n \n try {\n // List all files in directory and find matching UUID prefix\n const files = readdirSync(typeDir);\n const uuidPrefix = resolvedId.substring(0, 10);\n \n for (const file of files) {\n if (file.startsWith(uuidPrefix) && (file.endsWith('.yaml') || file.endsWith('.yml'))) {\n const filePath = path.join(typeDir, file);\n const stat = statSync(filePath);\n if (stat.isFile()) {\n return filePath;\n }\n }\n }\n } catch {\n // Directory read failed, continue\n }\n \n // Fallback: try legacy slug-based filenames\n const possiblePaths = [\n path.join(contextDir, dirName, `${resolvedId}.yaml`),\n path.join(contextDir, dirName, `${resolvedId}.yml`),\n ];\n \n for (const filePath of possiblePaths) {\n if (existsSync(filePath)) {\n const stat = statSync(filePath);\n if (stat.isFile()) {\n return filePath;\n }\n }\n }\n }\n \n return undefined;\n };\n\n /**\n * Resolve entity ID from UUID or slug\n * Tries UUID first, then slug lookup\n */\n const resolveEntityId = (type: EntityType, identifier: string): string | undefined => {\n // Try direct UUID lookup first\n if (entities.get(type)?.has(identifier)) {\n return identifier;\n }\n \n // Try slug lookup\n const entityMap = entities.get(type);\n if (entityMap) {\n for (const entity of entityMap.values()) {\n const entityWithSlug = entity as Entity & { slug?: string };\n if (entityWithSlug.slug === identifier) {\n return entity.id;\n }\n }\n }\n \n return undefined;\n };\n\n const get = <T extends Entity>(type: EntityType, id: string): T | undefined => {\n // Support both UUID and slug lookup\n const resolvedId = resolveEntityId(type, id);\n return resolvedId ? entities.get(type)?.get(resolvedId) as T | undefined : undefined;\n };\n\n const getAll = <T extends Entity>(type: EntityType): T[] => {\n return Array.from(entities.get(type)?.values() ?? []) as T[];\n };\n\n const search = (query: string): Entity[] => {\n const normalizedQuery = query.toLowerCase();\n const results: Entity[] = [];\n const seen = new Set<string>(); // Track by ID to avoid duplicates\n \n for (const entityMap of entities.values()) {\n for (const entity of entityMap.values()) {\n let matched = false;\n \n // Check name\n if (entity.name.toLowerCase().includes(normalizedQuery)) {\n matched = true;\n }\n \n // Also check sounds_like field\n if (!matched) {\n const entityWithSoundsLike = entity as Entity & { sounds_like?: string[] };\n const variants = entityWithSoundsLike.sounds_like;\n if (variants?.some(v => v.toLowerCase().includes(normalizedQuery))) {\n matched = true;\n }\n }\n \n // Also check exact match in sounds_like (for full phrase matching)\n if (!matched) {\n const entityWithSoundsLike = entity as Entity & { sounds_like?: string[] };\n const variants = entityWithSoundsLike.sounds_like;\n if (variants?.some(v => v.toLowerCase() === normalizedQuery)) {\n matched = true;\n }\n }\n \n if (matched && !seen.has(entity.id)) {\n results.push(entity);\n seen.add(entity.id);\n }\n }\n }\n \n return results;\n };\n\n const findBySoundsLike = (phonetic: string): Entity | undefined => {\n const normalized = phonetic.toLowerCase().trim();\n \n for (const entityMap of entities.values()) {\n for (const entity of entityMap.values()) {\n // Check sounds_like field on entities that have it\n const entityWithSoundsLike = entity as Entity & { sounds_like?: string[] };\n const variants = entityWithSoundsLike.sounds_like;\n if (variants?.some(v => v.toLowerCase() === normalized)) {\n return entity;\n }\n }\n }\n \n return undefined;\n };\n\n const clear = (): void => {\n for (const entityMap of entities.values()) {\n entityMap.clear();\n }\n };\n\n return { load, save, delete: deleteEntity, get, getAll, search, findBySoundsLike, clear, getEntityFilePath };\n};\n\n"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ export declare const CompanySchema: z.ZodObject<{
|
|
|
12
12
|
namespace: z.ZodOptional<z.ZodString>;
|
|
13
13
|
source: z.ZodOptional<z.ZodString>;
|
|
14
14
|
type: z.ZodLiteral<"company">;
|
|
15
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
15
16
|
fullName: z.ZodOptional<z.ZodString>;
|
|
16
17
|
industry: z.ZodOptional<z.ZodString>;
|
|
17
18
|
sounds_like: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"company.d.ts","sourceRoot":"","sources":["../../src/schemas/company.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;GAEG;AACH,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"company.d.ts","sourceRoot":"","sources":["../../src/schemas/company.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBASvB,CAAC"}
|
|
@@ -12,6 +12,7 @@ export declare const IgnoredTermSchema: z.ZodObject<{
|
|
|
12
12
|
namespace: z.ZodOptional<z.ZodString>;
|
|
13
13
|
source: z.ZodOptional<z.ZodString>;
|
|
14
14
|
type: z.ZodLiteral<"ignored">;
|
|
15
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
15
16
|
reason: z.ZodOptional<z.ZodString>;
|
|
16
17
|
ignoredAt: z.ZodOptional<z.ZodString>;
|
|
17
18
|
}, z.core.$strip>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ignored.d.ts","sourceRoot":"","sources":["../../src/schemas/ignored.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"ignored.d.ts","sourceRoot":"","sources":["../../src/schemas/ignored.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;iBAM3B,CAAC"}
|
package/dist/schemas/index.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ export declare const redaksjonSchemas: {
|
|
|
30
30
|
namespace: import('zod').ZodOptional<import('zod').ZodString>;
|
|
31
31
|
source: import('zod').ZodOptional<import('zod').ZodString>;
|
|
32
32
|
type: import('zod').ZodLiteral<"person">;
|
|
33
|
+
slug: import('zod').ZodOptional<import('zod').ZodString>;
|
|
33
34
|
firstName: import('zod').ZodOptional<import('zod').ZodString>;
|
|
34
35
|
lastName: import('zod').ZodOptional<import('zod').ZodString>;
|
|
35
36
|
company: import('zod').ZodOptional<import('zod').ZodString>;
|
|
@@ -63,6 +64,7 @@ export declare const redaksjonSchemas: {
|
|
|
63
64
|
namespace: import('zod').ZodOptional<import('zod').ZodString>;
|
|
64
65
|
source: import('zod').ZodOptional<import('zod').ZodString>;
|
|
65
66
|
type: import('zod').ZodLiteral<"project">;
|
|
67
|
+
slug: import('zod').ZodOptional<import('zod').ZodString>;
|
|
66
68
|
description: import('zod').ZodOptional<import('zod').ZodString>;
|
|
67
69
|
classification: import('zod').ZodObject<{
|
|
68
70
|
context_type: import('zod').ZodEnum<{
|
|
@@ -119,6 +121,7 @@ export declare const redaksjonSchemas: {
|
|
|
119
121
|
namespace: import('zod').ZodOptional<import('zod').ZodString>;
|
|
120
122
|
source: import('zod').ZodOptional<import('zod').ZodString>;
|
|
121
123
|
type: import('zod').ZodLiteral<"company">;
|
|
124
|
+
slug: import('zod').ZodOptional<import('zod').ZodString>;
|
|
122
125
|
fullName: import('zod').ZodOptional<import('zod').ZodString>;
|
|
123
126
|
industry: import('zod').ZodOptional<import('zod').ZodString>;
|
|
124
127
|
sounds_like: import('zod').ZodOptional<import('zod').ZodArray<import('zod').ZodString>>;
|
|
@@ -149,6 +152,7 @@ export declare const redaksjonSchemas: {
|
|
|
149
152
|
namespace: import('zod').ZodOptional<import('zod').ZodString>;
|
|
150
153
|
source: import('zod').ZodOptional<import('zod').ZodString>;
|
|
151
154
|
type: import('zod').ZodLiteral<"term">;
|
|
155
|
+
slug: import('zod').ZodOptional<import('zod').ZodString>;
|
|
152
156
|
expansion: import('zod').ZodOptional<import('zod').ZodString>;
|
|
153
157
|
domain: import('zod').ZodOptional<import('zod').ZodString>;
|
|
154
158
|
sounds_like: import('zod').ZodOptional<import('zod').ZodArray<import('zod').ZodString>>;
|
|
@@ -182,6 +186,7 @@ export declare const redaksjonSchemas: {
|
|
|
182
186
|
namespace: import('zod').ZodOptional<import('zod').ZodString>;
|
|
183
187
|
source: import('zod').ZodOptional<import('zod').ZodString>;
|
|
184
188
|
type: import('zod').ZodLiteral<"ignored">;
|
|
189
|
+
slug: import('zod').ZodOptional<import('zod').ZodString>;
|
|
185
190
|
reason: import('zod').ZodOptional<import('zod').ZodString>;
|
|
186
191
|
ignoredAt: import('zod').ZodOptional<import('zod').ZodString>;
|
|
187
192
|
}, import('zod/v4/core').$strip>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAQ1B;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAQ1B;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;CAMhC,CAAC"}
|
package/dist/schemas/person.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export declare const PersonSchema: z.ZodObject<{
|
|
|
12
12
|
namespace: z.ZodOptional<z.ZodString>;
|
|
13
13
|
source: z.ZodOptional<z.ZodString>;
|
|
14
14
|
type: z.ZodLiteral<"person">;
|
|
15
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
15
16
|
firstName: z.ZodOptional<z.ZodString>;
|
|
16
17
|
lastName: z.ZodOptional<z.ZodString>;
|
|
17
18
|
company: z.ZodOptional<z.ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"person.d.ts","sourceRoot":"","sources":["../../src/schemas/person.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;GAEG;AACH,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"person.d.ts","sourceRoot":"","sources":["../../src/schemas/person.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAYtB,CAAC"}
|
|
@@ -44,6 +44,7 @@ export declare const ProjectSchema: z.ZodObject<{
|
|
|
44
44
|
namespace: z.ZodOptional<z.ZodString>;
|
|
45
45
|
source: z.ZodOptional<z.ZodString>;
|
|
46
46
|
type: z.ZodLiteral<"project">;
|
|
47
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
47
48
|
description: z.ZodOptional<z.ZodString>;
|
|
48
49
|
classification: z.ZodObject<{
|
|
49
50
|
context_type: z.ZodEnum<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/schemas/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;iBAMtC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;iBAK/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/schemas/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;iBAMtC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;iBAK/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWvB,CAAC"}
|
package/dist/schemas/term.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export declare const TermSchema: z.ZodObject<{
|
|
|
12
12
|
namespace: z.ZodOptional<z.ZodString>;
|
|
13
13
|
source: z.ZodOptional<z.ZodString>;
|
|
14
14
|
type: z.ZodLiteral<"term">;
|
|
15
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
15
16
|
expansion: z.ZodOptional<z.ZodString>;
|
|
16
17
|
domain: z.ZodOptional<z.ZodString>;
|
|
17
18
|
sounds_like: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"term.d.ts","sourceRoot":"","sources":["../../src/schemas/term.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;GAEG;AACH,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"term.d.ts","sourceRoot":"","sources":["../../src/schemas/term.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAYpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/storage/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,EAAE,eAAe,IAAI,MAAM,EAAE,mBAAmB,IAAI,UAAU,EAAE,MAAM,UAAU,CAAC;AAExF,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1E,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IACnE,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,CAAC,EAAE,CAAC;IAChD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACvD,KAAK,IAAI,IAAI,CAAC;IACd,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC;CAC5F;
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/storage/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,EAAE,eAAe,IAAI,MAAM,EAAE,mBAAmB,IAAI,UAAU,EAAE,MAAM,UAAU,CAAC;AAExF,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1E,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IACnE,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,CAAC,EAAE,CAAC;IAChD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACvD,KAAK,IAAI,IAAI,CAAC;IACd,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC;CAC5F;AAgCD,eAAO,MAAM,MAAM,QAAO,eAqQzB,CAAC"}
|