@alpacakit/core 0.1.0-beta.26 → 0.1.0-beta.30
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/ids.d.ts +3 -0
- package/dist/ids.d.ts.map +1 -1
- package/dist/ids.js +4 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/validation.d.ts +6 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +19 -0
- package/package.json +1 -1
package/dist/ids.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { Brand } from "./types.js";
|
|
2
2
|
export declare const ID_PART_SEPARATOR = ":";
|
|
3
3
|
export declare function joinIdParts(...parts: readonly string[]): string;
|
|
4
|
+
export type StringTupleKey = Brand<string, "StringTupleKey">;
|
|
5
|
+
/** Encodes tuple identity without relying on a delimiter that values may contain. */
|
|
6
|
+
export declare function encodeStringTupleKey(...parts: readonly [string, ...string[]]): StringTupleKey;
|
|
4
7
|
export declare function makeBrandedId<TBrand extends string>(value: string): Brand<string, TBrand>;
|
|
5
8
|
export declare function makeJoinedBrandedId<TBrand extends string>(...parts: readonly string[]): Brand<string, TBrand>;
|
|
6
9
|
type BrandedStringId = string & {
|
package/dist/ids.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,wBAAgB,WAAW,CAAC,GAAG,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAE/D;AAED,wBAAgB,aAAa,CAAC,MAAM,SAAS,MAAM,EACjD,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAMvB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,SAAS,MAAM,EACvD,GAAG,KAAK,EAAE,SAAS,MAAM,EAAE,GAC1B,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAEvB;AAED,KAAK,eAAe,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAC7D,KAAK,eAAe,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,wBAAgB,qBAAqB,CAAC,GAAG,SAAS,eAAe,KAAK,CACpE,KAAK,EAAE,MAAM,KACV,GAAG,CAEP;AAED,wBAAgB,+BAA+B,CAAC,GAAG,SAAS,eAAe,EACzE,IAAI,EAAE,MAAM,GACX,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAQxB"}
|
|
1
|
+
{"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,wBAAgB,WAAW,CAAC,GAAG,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAE/D;AAED,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAE7D,qFAAqF;AACrF,wBAAgB,oBAAoB,CAClC,GAAG,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,GACvC,cAAc,CAEhB;AAED,wBAAgB,aAAa,CAAC,MAAM,SAAS,MAAM,EACjD,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAMvB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,SAAS,MAAM,EACvD,GAAG,KAAK,EAAE,SAAS,MAAM,EAAE,GAC1B,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAEvB;AAED,KAAK,eAAe,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAC7D,KAAK,eAAe,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D,wBAAgB,qBAAqB,CAAC,GAAG,SAAS,eAAe,KAAK,CACpE,KAAK,EAAE,MAAM,KACV,GAAG,CAEP;AAED,wBAAgB,+BAA+B,CAAC,GAAG,SAAS,eAAe,EACzE,IAAI,EAAE,MAAM,GACX,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAQxB"}
|
package/dist/ids.js
CHANGED
|
@@ -2,6 +2,10 @@ export const ID_PART_SEPARATOR = ":";
|
|
|
2
2
|
export function joinIdParts(...parts) {
|
|
3
3
|
return parts.join(ID_PART_SEPARATOR);
|
|
4
4
|
}
|
|
5
|
+
/** Encodes tuple identity without relying on a delimiter that values may contain. */
|
|
6
|
+
export function encodeStringTupleKey(...parts) {
|
|
7
|
+
return makeBrandedId(JSON.stringify(parts));
|
|
8
|
+
}
|
|
5
9
|
export function makeBrandedId(value) {
|
|
6
10
|
if (value.trim().length === 0) {
|
|
7
11
|
throw new Error("A branded id must be a non-empty string.");
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/types.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export type Brand<TValue, TBrand extends string> = TValue & {
|
|
|
3
3
|
};
|
|
4
4
|
export type Nullable<TValue> = TValue | null;
|
|
5
5
|
export type ValueOf<TValueMap> = TValueMap[keyof TValueMap];
|
|
6
|
+
export type NonEmptyReadonlyArray<TValue> = readonly [TValue, ...TValue[]];
|
|
6
7
|
export type ReadonlyRecord<TValue> = {
|
|
7
8
|
readonly [key: string]: TValue;
|
|
8
9
|
};
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,CAAC,MAAM,EAAE,MAAM,SAAS,MAAM,IAAI,MAAM,GAAG;IAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,QAAQ,CAAC,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC;AAE7C,MAAM,MAAM,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,SAAS,CAAC,CAAC;AAE5D,MAAM,MAAM,cAAc,CAAC,MAAM,IAAI;IACnC,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAC7D,MAAM,MAAM,SAAS,GACjB,aAAa,GACb,SAAS,SAAS,EAAE,GACpB;IACE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AACN,MAAM,MAAM,SAAS,GAAG,SAAS,SAAS,EAAE,CAAC;AAC7C,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC;AAElC,MAAM,WAAW,cAAc,CAAC,EAAE,EAAE,IAAI,SAAS,MAAM,EAAE,SAAS;IAChE,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;CAC9B"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,CAAC,MAAM,EAAE,MAAM,SAAS,MAAM,IAAI,MAAM,GAAG;IAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,QAAQ,CAAC,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC;AAE7C,MAAM,MAAM,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,SAAS,CAAC,CAAC;AAE5D,MAAM,MAAM,qBAAqB,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AAE3E,MAAM,MAAM,cAAc,CAAC,MAAM,IAAI;IACnC,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAC7D,MAAM,MAAM,SAAS,GACjB,aAAa,GACb,SAAS,SAAS,EAAE,GACpB;IACE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AACN,MAAM,MAAM,SAAS,GAAG,SAAS,SAAS,EAAE,CAAC;AAC7C,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC;AAElC,MAAM,WAAW,cAAc,CAAC,EAAE,EAAE,IAAI,SAAS,MAAM,EAAE,SAAS;IAChE,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;CAC9B"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { NonEmptyReadonlyArray } from "./types.js";
|
|
2
|
+
/** Lists every member from the closed vocabulary that owns the values. */
|
|
3
|
+
export declare function listClosedVocabularyValues<Vocabulary extends object>(vocabulary: Vocabulary): NonEmptyReadonlyArray<Vocabulary[keyof Vocabulary]>;
|
|
4
|
+
/** Returns the input after proving that it is a positive safe integer. */
|
|
5
|
+
export declare function requirePositiveSafeInteger(value: number, label: string): number;
|
|
6
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AASxD,0EAA0E;AAC1E,wBAAgB,0BAA0B,CAAC,UAAU,SAAS,MAAM,EAClE,UAAU,EAAE,UAAU,GACrB,qBAAqB,CAAC,UAAU,CAAC,MAAM,UAAU,CAAC,CAAC,CAMrD;AAED,0EAA0E;AAC1E,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,MAAM,CAKR"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const CORE_VALIDATION_ERROR_MESSAGE = {
|
|
2
|
+
emptyClosedVocabulary: "A closed vocabulary must declare at least one member.",
|
|
3
|
+
positiveSafeInteger: (label) => `${label} must be a positive safe integer.`,
|
|
4
|
+
};
|
|
5
|
+
/** Lists every member from the closed vocabulary that owns the values. */
|
|
6
|
+
export function listClosedVocabularyValues(vocabulary) {
|
|
7
|
+
const values = Object.values(vocabulary);
|
|
8
|
+
if (values.length === 0) {
|
|
9
|
+
throw new Error(CORE_VALIDATION_ERROR_MESSAGE.emptyClosedVocabulary);
|
|
10
|
+
}
|
|
11
|
+
return [values[0], ...values.slice(1)];
|
|
12
|
+
}
|
|
13
|
+
/** Returns the input after proving that it is a positive safe integer. */
|
|
14
|
+
export function requirePositiveSafeInteger(value, label) {
|
|
15
|
+
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
16
|
+
throw new Error(CORE_VALIDATION_ERROR_MESSAGE.positiveSafeInteger(label));
|
|
17
|
+
}
|
|
18
|
+
return value;
|
|
19
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alpacakit/core",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.30",
|
|
4
4
|
"description": "Architecture-neutral kernel primitives: branded ids, ports, registries, pipelines, payload codecs, and immutable mutation helpers.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|