ts-fortress 8.2.0 → 8.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/entry-point.mjs +1 -0
- package/dist/entry-point.mjs.map +1 -1
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -1
- package/dist/predefined/brand/index.mjs +1 -0
- package/dist/predefined/brand/index.mjs.map +1 -1
- package/dist/predefined/brand/string/index.d.mts +1 -0
- package/dist/predefined/brand/string/index.d.mts.map +1 -1
- package/dist/predefined/brand/string/index.mjs +1 -0
- package/dist/predefined/brand/string/index.mjs.map +1 -1
- package/dist/predefined/brand/string/non-empty-string.d.mts +10 -1
- package/dist/predefined/brand/string/non-empty-string.d.mts.map +1 -1
- package/dist/predefined/brand/string/non-empty-string.mjs +7 -9
- package/dist/predefined/brand/string/non-empty-string.mjs.map +1 -1
- package/dist/predefined/brand/string/uri.d.mts +10 -0
- package/dist/predefined/brand/string/uri.d.mts.map +1 -0
- package/dist/predefined/brand/string/uri.mjs +21 -0
- package/dist/predefined/brand/string/uri.mjs.map +1 -0
- package/dist/predefined/index.mjs +1 -0
- package/dist/predefined/index.mjs.map +1 -1
- package/dist/primitives/string.d.mts +10 -0
- package/dist/primitives/string.d.mts.map +1 -1
- package/dist/primitives/string.mjs.map +1 -1
- package/package.json +1 -1
- package/src/predefined/brand/string/index.mts +1 -0
- package/src/predefined/brand/string/non-empty-string.mts +26 -11
- package/src/predefined/brand/string/non-empty-string.test.mts +40 -0
- package/src/predefined/brand/string/uri.mts +35 -0
- package/src/predefined/brand/string/uri.test.mts +79 -0
- package/src/primitives/string.mts +13 -0
package/dist/entry-point.mjs
CHANGED
|
@@ -47,6 +47,7 @@ export { email } from './predefined/brand/string/email.mjs';
|
|
|
47
47
|
export { iso8601 } from './predefined/brand/string/iso-8601.mjs';
|
|
48
48
|
export { jsonString } from './predefined/brand/string/json-string.mjs';
|
|
49
49
|
export { nonEmptyString } from './predefined/brand/string/non-empty-string.mjs';
|
|
50
|
+
export { uri } from './predefined/brand/string/uri.mjs';
|
|
50
51
|
export { uuid, uuidV4, uuidV6, uuidV7 } from './predefined/brand/string/uuid.mjs';
|
|
51
52
|
export { int8 } from './predefined/int8.mjs';
|
|
52
53
|
export { JsonObject, JsonPrimitive, JsonValue } from './predefined/json.mjs';
|
package/dist/entry-point.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry-point.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entry-point.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.mjs
CHANGED
|
@@ -46,6 +46,7 @@ export { email } from './predefined/brand/string/email.mjs';
|
|
|
46
46
|
export { iso8601 } from './predefined/brand/string/iso-8601.mjs';
|
|
47
47
|
export { jsonString } from './predefined/brand/string/json-string.mjs';
|
|
48
48
|
export { nonEmptyString } from './predefined/brand/string/non-empty-string.mjs';
|
|
49
|
+
export { uri } from './predefined/brand/string/uri.mjs';
|
|
49
50
|
export { uuid, uuidV4, uuidV6, uuidV7 } from './predefined/brand/string/uuid.mjs';
|
|
50
51
|
export { int8 } from './predefined/int8.mjs';
|
|
51
52
|
export { JsonObject, JsonPrimitive, JsonValue } from './predefined/json.mjs';
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -24,5 +24,6 @@ export { email } from './string/email.mjs';
|
|
|
24
24
|
export { iso8601 } from './string/iso-8601.mjs';
|
|
25
25
|
export { jsonString } from './string/json-string.mjs';
|
|
26
26
|
export { nonEmptyString } from './string/non-empty-string.mjs';
|
|
27
|
+
export { uri } from './string/uri.mjs';
|
|
27
28
|
export { uuid, uuidV4, uuidV6, uuidV7 } from './string/uuid.mjs';
|
|
28
29
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../../src/predefined/brand/string/index.mts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../../src/predefined/brand/string/index.mts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
|
|
@@ -2,5 +2,6 @@ export { email } from './email.mjs';
|
|
|
2
2
|
export { iso8601 } from './iso-8601.mjs';
|
|
3
3
|
export { jsonString } from './json-string.mjs';
|
|
4
4
|
export { nonEmptyString } from './non-empty-string.mjs';
|
|
5
|
+
export { uri } from './uri.mjs';
|
|
5
6
|
export { uuid, uuidV4, uuidV6, uuidV7 } from './uuid.mjs';
|
|
6
7
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { type NonEmptyString } from 'ts-type-forge';
|
|
2
|
+
import { type StringConstraintsResultType, type StringTypeConstraints } from '../../../primitives/index.mjs';
|
|
2
3
|
import { type Type } from '../../../type.mjs';
|
|
3
4
|
export type { NonEmptyString } from 'ts-type-forge';
|
|
4
|
-
|
|
5
|
+
/**
|
|
6
|
+
* The constraints accepted by {@link nonEmptyString}: every {@link string}
|
|
7
|
+
* constraint except `nonempty`, which is always implied.
|
|
8
|
+
*/
|
|
9
|
+
export type NonEmptyStringConstraints = Omit<StringTypeConstraints, 'nonempty'>;
|
|
10
|
+
export declare function nonEmptyString(defaultValue?: string): Type<NonEmptyString>;
|
|
11
|
+
export declare function nonEmptyString<const C extends NonEmptyStringConstraints>(defaultValue: string, constraints: C): Type<StringConstraintsResultType<C & Readonly<{
|
|
12
|
+
nonempty: true;
|
|
13
|
+
}>>>;
|
|
5
14
|
//# sourceMappingURL=non-empty-string.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"non-empty-string.d.mts","sourceRoot":"","sources":["../../../../src/predefined/brand/string/non-empty-string.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"non-empty-string.d.mts","sourceRoot":"","sources":["../../../../src/predefined/brand/string/non-empty-string.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAEL,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC;AAEhF,wBAAgB,cAAc,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AAE5E,wBAAgB,cAAc,CAAC,KAAK,CAAC,CAAC,SAAS,yBAAyB,EACtE,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,CAAC,GACb,IAAI,CAAC,2BAA2B,CAAC,CAAC,GAAG,QAAQ,CAAC;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { brand } from '../../../brand/brand.mjs';
|
|
1
|
+
import 'ts-data-forge';
|
|
3
2
|
import '@sindresorhus/is';
|
|
4
3
|
import '../../../other-types/unknown.mjs';
|
|
5
4
|
import { string } from '../../../primitives/string.mjs';
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
});
|
|
6
|
+
function nonEmptyString(defaultValue = ' ', constraints) {
|
|
7
|
+
// `nonempty` is always implied; the remaining constraints (if any) are
|
|
8
|
+
// forwarded to `string`, which validates them at runtime and refines the
|
|
9
|
+
// result type the same way it does for a plain string type.
|
|
10
|
+
return string(defaultValue, { nonempty: true, ...constraints });
|
|
11
|
+
}
|
|
14
12
|
|
|
15
13
|
export { nonEmptyString };
|
|
16
14
|
//# sourceMappingURL=non-empty-string.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"non-empty-string.mjs","sources":["../../../../src/predefined/brand/string/non-empty-string.mts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"non-empty-string.mjs","sources":["../../../../src/predefined/brand/string/non-empty-string.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;SAwBgB,cAAc,CAC5B,YAAA,GAAuB,GAAG,EAC1B,WAAuC,EAAA;;;;AAKvC,IAAA,OAAO,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,WAAW,EAAE,CAAC;AACjE;;;;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Brand } from 'ts-type-forge';
|
|
2
|
+
import { type Type } from '../../../type.mjs';
|
|
3
|
+
export type Uri = Brand<string, 'Uri' | 'NonEmptyString'>;
|
|
4
|
+
/**
|
|
5
|
+
* @link https://url.spec.whatwg.org/
|
|
6
|
+
*/
|
|
7
|
+
export declare const uri: (options?: Partial<Readonly<{
|
|
8
|
+
defaultValue: string;
|
|
9
|
+
}>>) => Type<Uri>;
|
|
10
|
+
//# sourceMappingURL=uri.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uri.d.mts","sourceRoot":"","sources":["../../../../src/predefined/brand/string/uri.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAG9C,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG,gBAAgB,CAAC,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,GAAG,GACd,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC,CACH,KACA,IAAI,CAAC,GAAG,CAOP,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { brand } from '../../../brand/brand.mjs';
|
|
2
|
+
import 'ts-data-forge';
|
|
3
|
+
import '@sindresorhus/is';
|
|
4
|
+
import '../../../other-types/unknown.mjs';
|
|
5
|
+
import { string } from '../../../primitives/string.mjs';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @link https://url.spec.whatwg.org/
|
|
9
|
+
*/
|
|
10
|
+
const uri = (options) => brand({
|
|
11
|
+
baseType: string(options?.defaultValue ?? defaultUri),
|
|
12
|
+
is: isUri,
|
|
13
|
+
defaultValue: options?.defaultValue ?? defaultUri,
|
|
14
|
+
brandKeys: ['Uri', 'NonEmptyString'],
|
|
15
|
+
typeName: 'Uri',
|
|
16
|
+
});
|
|
17
|
+
const defaultUri = 'https://example.com';
|
|
18
|
+
const isUri = (s) => URL.canParse(s);
|
|
19
|
+
|
|
20
|
+
export { uri };
|
|
21
|
+
//# sourceMappingURL=uri.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uri.mjs","sources":["../../../../src/predefined/brand/string/uri.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAQA;;AAEG;AACI,MAAM,GAAG,GAAG,CACjB,OAIC,KAED,KAAK,CAAC;IACJ,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,IAAI,UAAU,CAAC;AACrD,IAAA,EAAE,EAAE,KAAK;AACT,IAAA,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,UAAU;AACjD,IAAA,SAAS,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC;AACpC,IAAA,QAAQ,EAAE,KAAK;AAChB,CAAA;AAEH,MAAM,UAAU,GAAG,qBAAqB;AAExC,MAAM,KAAK,GAAG,CAAC,CAAS,KAAe,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;;;;"}
|
|
@@ -24,6 +24,7 @@ export { email } from './brand/string/email.mjs';
|
|
|
24
24
|
export { iso8601 } from './brand/string/iso-8601.mjs';
|
|
25
25
|
export { jsonString } from './brand/string/json-string.mjs';
|
|
26
26
|
export { nonEmptyString } from './brand/string/non-empty-string.mjs';
|
|
27
|
+
export { uri } from './brand/string/uri.mjs';
|
|
27
28
|
export { uuid, uuidV4, uuidV6, uuidV7 } from './brand/string/uuid.mjs';
|
|
28
29
|
export { int8 } from './int8.mjs';
|
|
29
30
|
export { JsonObject, JsonPrimitive, JsonValue } from './json.mjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -13,6 +13,16 @@ type Constraints = Partial<Readonly<{
|
|
|
13
13
|
lowercase: true;
|
|
14
14
|
regex: RegExp;
|
|
15
15
|
}>>;
|
|
16
|
+
/**
|
|
17
|
+
* The set of constraints accepted by {@link string}.
|
|
18
|
+
*/
|
|
19
|
+
export type StringTypeConstraints = Constraints;
|
|
20
|
+
/**
|
|
21
|
+
* The result type produced by {@link string} for a given set of constraints
|
|
22
|
+
* `C` (e.g. `nonempty` yields {@link NonEmptyString}, `startsWith` narrows to a
|
|
23
|
+
* template literal type, etc.).
|
|
24
|
+
*/
|
|
25
|
+
export type StringConstraintsResultType<C extends StringTypeConstraints> = ConstraintsResultType<C>;
|
|
16
26
|
type DefaultValueType<S extends string, C extends Constraints> = DefaultValueWhenNonemptyIsOn<S, C> & DefaultValueWhenMinLengthIsOn<S, C> & DefaultValueWhenMaxLengthIsOn<S, C> & DefaultValueWhenStartsWithIsOn<C> & DefaultValueWhenEndsWithIsOn<C> & DefaultValueWhenIncludesIsOn<C> & DefaultValueWhenUppercaseIsOn<S, C> & DefaultValueWhenLowercaseIsOn<S, C>;
|
|
17
27
|
type ConstraintsResultType<C extends Constraints> = ConstraintsResultTypeWhenNonemptyIsOn<C> & DefaultValueWhenStartsWithIsOn<C> & DefaultValueWhenEndsWithIsOn<C> & DefaultValueWhenIncludesIsOn<C>;
|
|
18
28
|
type DefaultValueWhenStartsWithIsOn<C extends Constraints> = C extends Readonly<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string.d.mts","sourceRoot":"","sources":["../../src/primitives/string.mts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"string.d.mts","sourceRoot":"","sources":["../../src/primitives/string.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAGxC,wBAAgB,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAE5D,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,CAAC,CAAC,SAAS,WAAW,EAClE,YAAY,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,EACxC,WAAW,EAAE,CAAC,GACb,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;AAmClC,KAAK,WAAW,GAAG,OAAO,CACxB,QAAQ,CAAC;IACP,QAAQ,EAAE,IAAI,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CACH,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,WAAW,CAAC;AAEhD;;;;GAIG;AACH,MAAM,MAAM,2BAA2B,CAAC,CAAC,SAAS,qBAAqB,IACrE,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAE3B,KAAK,gBAAgB,CACnB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,WAAW,IACnB,4BAA4B,CAAC,CAAC,EAAE,CAAC,CAAC,GACpC,6BAA6B,CAAC,CAAC,EAAE,CAAC,CAAC,GACnC,6BAA6B,CAAC,CAAC,EAAE,CAAC,CAAC,GACnC,8BAA8B,CAAC,CAAC,CAAC,GACjC,4BAA4B,CAAC,CAAC,CAAC,GAC/B,4BAA4B,CAAC,CAAC,CAAC,GAC/B,6BAA6B,CAAC,CAAC,EAAE,CAAC,CAAC,GACnC,6BAA6B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEtC,KAAK,qBAAqB,CAAC,CAAC,SAAS,WAAW,IAC9C,qCAAqC,CAAC,CAAC,CAAC,GACtC,8BAA8B,CAAC,CAAC,CAAC,GACjC,4BAA4B,CAAC,CAAC,CAAC,GAC/B,4BAA4B,CAAC,CAAC,CAAC,CAAC;AAEpC,KAAK,8BAA8B,CAAC,CAAC,SAAS,WAAW,IACvD,CAAC,SAAS,QAAQ,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,SAAS,MAAM,CAAC;CACpC,CAAC,GACE,GAAG,CAAC,GAAG,MAAM,EAAE,GACf,MAAM,CAAC;AAEb,KAAK,4BAA4B,CAAC,CAAC,SAAS,WAAW,IACrD,CAAC,SAAS,QAAQ,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,SAAS,MAAM,CAAC;CAClC,CAAC,GACE,GAAG,MAAM,GAAG,CAAC,EAAE,GACf,MAAM,CAAC;AAEb,KAAK,4BAA4B,CAAC,CAAC,SAAS,WAAW,IACrD,CAAC,SAAS,QAAQ,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,SAAS,MAAM,CAAC;CAClC,CAAC,GACE,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,GACxB,MAAM,CAAC;AAEb,KAAK,6BAA6B,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,WAAW,IACxE,CAAC,SAAS,QAAQ,CAAC;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAEtE,KAAK,6BAA6B,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,WAAW,IACxE,CAAC,SAAS,QAAQ,CAAC;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAEtE,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE1E,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE1E,KAAK,4BAA4B,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,WAAW,IACvE,CAAC,SAAS,QAAQ,CAAC;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAEzE,KAAK,iBAAiB,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;AAEpE,KAAK,qCAAqC,CAAC,CAAC,SAAS,WAAW,IAC9D,CAAC,SAAS,QAAQ,CAAC;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,CAAC,GAAG,cAAc,GAAG,MAAM,CAAC;AAEnE,KAAK,6BAA6B,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,WAAW,IACxE,CAAC,SAAS,QAAQ,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,CAAC,GACrD,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,GACzB,MAAM,CAAC;AAEb,KAAK,6BAA6B,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,WAAW,IACxE,CAAC,SAAS,QAAQ,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,CAAC,GACrD,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,GACzB,MAAM,CAAC;AAEb,KAAK,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IACzD,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC;AAElD,KAAK,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IACzD,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC;AAEjD,KAAK,gBAAgB,CACnB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,EAChB,GAAG,SAAS,SAAS,OAAO,EAAE,GAAG,SAAS,EAAE,IAC1C,MAAM,SAAS,CAAC,GAChB,IAAI,GACJ,UAAU,CAAC,CAAC,CAAC,SAAS,IAAI,GACxB,IAAI,GACJ,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GACrB,IAAI,GACJ,CAAC,SAAS,EAAE,GACV,KAAK,GACL,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,MAAM,IAAI,EAAE,GACjC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,GACrD,KAAK,CAAC;AAElB,KAAK,eAAe,CAClB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,EAChB,GAAG,SAAS,SAAS,OAAO,EAAE,GAAG,SAAS,EAAE,IAC1C,MAAM,SAAS,CAAC,GAChB,IAAI,GACJ,UAAU,CAAC,CAAC,CAAC,SAAS,IAAI,GACxB,KAAK,GACL,CAAC,SAAS,EAAE,GACV,IAAI,GACJ,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GACrB,KAAK,GACL,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,MAAM,IAAI,EAAE,GACjC,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,GACpD,KAAK,CAAC;AAElB,KAAK,UAAU,CAAC,CAAC,SAAS,MAAM,IAAI,GAAG,CAAC,EAAE,SAAS,IAAI,MAAM,EAAE,GAAG,IAAI,GAAG,KAAK,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string.mjs","sources":["../../src/primitives/string.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;SAcgB,MAAM,CACpB,YAAA,GAAuB,EAAE,EACzB,WAAe,EAAA;IAEf,MAAM,QAAQ,GAAG,mBAAmB,CAAC;AACnC,QAAA,QAAQ,EAAE,QAAQ;QAClB,YAAY;AACZ,QAAA,EAAE,EAAE,QAAQ;AACb,KAAA,CAAC;IAEF,IACE,WAAW,KAAK,SAAS;AACzB,QAAA,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAChD;AACA,QAAA,OAAO,QAAQ;;AAGjB,IAAA,MAAM,oBAAoB,GAAG,0BAA0B,CAAC,WAAW,CAAC;AAEpE,IAAA,MAAM,4BAA4B,GAAG,oBAAoB,CAAC,YAAY,CAAC;AAEvE,IAAA,IAAI,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,EAAE;AAC9C,QAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,KAAK,CAAC;;AAGrD,IAAA,OAAO,MAAM,CAAC;QACZ,QAAQ;QACR,YAAY;AACZ,QAAA,EAAE,EAAE,CAAC,KAAK,KAAsB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACxE,QAAA,QAAQ,EAAE,QAAQ;AACnB,KAAA,CAAC;AACJ;
|
|
1
|
+
{"version":3,"file":"string.mjs","sources":["../../src/primitives/string.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,21 +1,36 @@
|
|
|
1
1
|
import { isNonEmptyString } from 'ts-data-forge';
|
|
2
2
|
import { type NonEmptyString } from 'ts-type-forge';
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import {
|
|
4
|
+
string,
|
|
5
|
+
type StringConstraintsResultType,
|
|
6
|
+
type StringTypeConstraints,
|
|
7
|
+
} from '../../../primitives/index.mjs';
|
|
5
8
|
import { type Type } from '../../../type.mjs';
|
|
6
9
|
|
|
7
10
|
export type { NonEmptyString } from 'ts-type-forge';
|
|
8
11
|
|
|
9
|
-
|
|
12
|
+
/**
|
|
13
|
+
* The constraints accepted by {@link nonEmptyString}: every {@link string}
|
|
14
|
+
* constraint except `nonempty`, which is always implied.
|
|
15
|
+
*/
|
|
16
|
+
export type NonEmptyStringConstraints = Omit<StringTypeConstraints, 'nonempty'>;
|
|
17
|
+
|
|
18
|
+
export function nonEmptyString(defaultValue?: string): Type<NonEmptyString>;
|
|
19
|
+
|
|
20
|
+
export function nonEmptyString<const C extends NonEmptyStringConstraints>(
|
|
21
|
+
defaultValue: string,
|
|
22
|
+
constraints: C,
|
|
23
|
+
): Type<StringConstraintsResultType<C & Readonly<{ nonempty: true }>>>;
|
|
24
|
+
|
|
25
|
+
export function nonEmptyString(
|
|
10
26
|
defaultValue: string = ' ',
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
});
|
|
27
|
+
constraints?: NonEmptyStringConstraints,
|
|
28
|
+
): Type<NonEmptyString> {
|
|
29
|
+
// `nonempty` is always implied; the remaining constraints (if any) are
|
|
30
|
+
// forwarded to `string`, which validates them at runtime and refines the
|
|
31
|
+
// result type the same way it does for a plain string type.
|
|
32
|
+
return string(defaultValue, { nonempty: true, ...constraints });
|
|
33
|
+
}
|
|
19
34
|
|
|
20
35
|
if (import.meta.vitest !== undefined) {
|
|
21
36
|
test('defaultValue', () => {
|
|
@@ -52,3 +52,43 @@ describe(nonEmptyString, () => {
|
|
|
52
52
|
expect(t.defaultValue).toBe('default');
|
|
53
53
|
});
|
|
54
54
|
});
|
|
55
|
+
|
|
56
|
+
describe('nonEmptyString with extra constraints', () => {
|
|
57
|
+
test('forwards constraints to string and still enforces non-emptiness', () => {
|
|
58
|
+
const t = nonEmptyString('abcd', { minLength: 3 });
|
|
59
|
+
|
|
60
|
+
// Non-refining constraints (e.g. `minLength`) keep a plain `NonEmptyString`.
|
|
61
|
+
expectType<TypeOf<typeof t>, NonEmptyString>('=');
|
|
62
|
+
|
|
63
|
+
assert.isTrue(t.is('abcd'));
|
|
64
|
+
|
|
65
|
+
assert.isTrue(t.is('abc'));
|
|
66
|
+
|
|
67
|
+
assert.isFalse(t.is('ab')); // shorter than minLength
|
|
68
|
+
|
|
69
|
+
assert.isFalse(t.is('')); // empty string is still rejected
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
test('throws when the default value violates a nonEmpty constraint', () => {
|
|
73
|
+
expect(() => nonEmptyString('')).toThrow(
|
|
74
|
+
/^defaultValue "" for string does not satisfy the constraint nonempty = true$/u,
|
|
75
|
+
);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
test('throws when the default value violates a forwarded constraint', () => {
|
|
79
|
+
expect(() => nonEmptyString('ab', { minLength: 3 })).toThrow(
|
|
80
|
+
/^defaultValue "ab" for string does not satisfy the constraint minLength = 3$/u,
|
|
81
|
+
);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
test('refines the result type for startsWith', () => {
|
|
85
|
+
const t = nonEmptyString('a-thing', { startsWith: 'a' });
|
|
86
|
+
|
|
87
|
+
// `startsWith` refines the result type, just like `string` does.
|
|
88
|
+
expectType<TypeOf<typeof t>, NonEmptyString & `a${string}`>('=');
|
|
89
|
+
|
|
90
|
+
assert.isTrue(t.is('a-thing'));
|
|
91
|
+
|
|
92
|
+
assert.isFalse(t.is('b-thing'));
|
|
93
|
+
});
|
|
94
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type Brand } from 'ts-type-forge';
|
|
2
|
+
import { brand } from '../../../brand/index.mjs';
|
|
3
|
+
import { string } from '../../../primitives/index.mjs';
|
|
4
|
+
import { type Type } from '../../../type.mjs';
|
|
5
|
+
|
|
6
|
+
// A valid URI always has a non-empty scheme, so it also satisfies `NonEmptyString`.
|
|
7
|
+
export type Uri = Brand<string, 'Uri' | 'NonEmptyString'>;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @link https://url.spec.whatwg.org/
|
|
11
|
+
*/
|
|
12
|
+
export const uri = (
|
|
13
|
+
options?: Partial<
|
|
14
|
+
Readonly<{
|
|
15
|
+
defaultValue: string;
|
|
16
|
+
}>
|
|
17
|
+
>,
|
|
18
|
+
): Type<Uri> =>
|
|
19
|
+
brand({
|
|
20
|
+
baseType: string(options?.defaultValue ?? defaultUri),
|
|
21
|
+
is: isUri,
|
|
22
|
+
defaultValue: options?.defaultValue ?? defaultUri,
|
|
23
|
+
brandKeys: ['Uri', 'NonEmptyString'],
|
|
24
|
+
typeName: 'Uri',
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const defaultUri = 'https://example.com';
|
|
28
|
+
|
|
29
|
+
const isUri = (s: string): s is Uri => URL.canParse(s);
|
|
30
|
+
|
|
31
|
+
if (import.meta.vitest !== undefined) {
|
|
32
|
+
test('defaultUri', () => {
|
|
33
|
+
assert.isTrue(isUri(defaultUri));
|
|
34
|
+
});
|
|
35
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { expectType, Result } from 'ts-data-forge';
|
|
2
|
+
import { type NonEmptyString } from 'ts-type-forge';
|
|
3
|
+
import { type TypeOf } from '../../../type.mjs';
|
|
4
|
+
import { validationErrorsToMessages } from '../../../utils/index.mjs';
|
|
5
|
+
import { uri } from './uri.mjs';
|
|
6
|
+
|
|
7
|
+
const validSamples = [
|
|
8
|
+
'https://example.com',
|
|
9
|
+
'https://example.com/path?query=1#fragment',
|
|
10
|
+
'http://user:pass@example.com:8080/path',
|
|
11
|
+
'ftp://ftp.is.co.za/rfc/rfc1808.txt',
|
|
12
|
+
'mailto:foo@bar.com',
|
|
13
|
+
'urn:isbn:0451450523',
|
|
14
|
+
'file:///etc/hosts',
|
|
15
|
+
'tel:+1-816-555-1212',
|
|
16
|
+
] as const satisfies readonly string[];
|
|
17
|
+
|
|
18
|
+
const invalidSamples = [
|
|
19
|
+
'',
|
|
20
|
+
'not a uri',
|
|
21
|
+
'://missing-scheme',
|
|
22
|
+
'relative/path',
|
|
23
|
+
'/absolute/path',
|
|
24
|
+
'1http://example.com',
|
|
25
|
+
] as const satisfies readonly string[];
|
|
26
|
+
|
|
27
|
+
describe(uri, () => {
|
|
28
|
+
const baseType = uri();
|
|
29
|
+
|
|
30
|
+
type UriType = TypeOf<typeof baseType>;
|
|
31
|
+
|
|
32
|
+
expectType<UriType, string>('<=');
|
|
33
|
+
|
|
34
|
+
expectType<UriType, NonEmptyString>('<=');
|
|
35
|
+
|
|
36
|
+
expectType<typeof baseType.defaultValue, UriType>('=');
|
|
37
|
+
|
|
38
|
+
test('provides https://example.com as default', () => {
|
|
39
|
+
expect(baseType.defaultValue).toBe('https://example.com');
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
test.each(validSamples)('accepts %s', (u) => {
|
|
43
|
+
assert.isTrue(baseType.is(u));
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test.each(invalidSamples)('rejects %s', (u) => {
|
|
47
|
+
assert.isFalse(baseType.is(u));
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test('validate surfaces details for invalid strings', () => {
|
|
51
|
+
const result = baseType.validate('not a uri');
|
|
52
|
+
|
|
53
|
+
assert.isTrue(Result.isErr(result));
|
|
54
|
+
|
|
55
|
+
if (!Result.isErr(result)) {
|
|
56
|
+
throw new Error('Expected validation failure');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
assert.deepStrictEqual(result.value, [
|
|
60
|
+
{
|
|
61
|
+
path: [],
|
|
62
|
+
actualValue: 'not a uri',
|
|
63
|
+
expectedType: 'Uri',
|
|
64
|
+
typeName: 'Uri',
|
|
65
|
+
details: undefined,
|
|
66
|
+
},
|
|
67
|
+
]);
|
|
68
|
+
|
|
69
|
+
assert.deepStrictEqual(validationErrorsToMessages(result.value), [
|
|
70
|
+
'Error: expected <Uri> type but <string> type value "not a uri" was passed.',
|
|
71
|
+
]);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
test('accepts a custom default value', () => {
|
|
75
|
+
const customType = uri({ defaultValue: 'mailto:foo@bar.com' });
|
|
76
|
+
|
|
77
|
+
expect(customType.defaultValue).toBe('mailto:foo@bar.com');
|
|
78
|
+
});
|
|
79
|
+
});
|
|
@@ -59,6 +59,19 @@ type Constraints = Partial<
|
|
|
59
59
|
}>
|
|
60
60
|
>;
|
|
61
61
|
|
|
62
|
+
/**
|
|
63
|
+
* The set of constraints accepted by {@link string}.
|
|
64
|
+
*/
|
|
65
|
+
export type StringTypeConstraints = Constraints;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The result type produced by {@link string} for a given set of constraints
|
|
69
|
+
* `C` (e.g. `nonempty` yields {@link NonEmptyString}, `startsWith` narrows to a
|
|
70
|
+
* template literal type, etc.).
|
|
71
|
+
*/
|
|
72
|
+
export type StringConstraintsResultType<C extends StringTypeConstraints> =
|
|
73
|
+
ConstraintsResultType<C>;
|
|
74
|
+
|
|
62
75
|
type DefaultValueType<
|
|
63
76
|
S extends string,
|
|
64
77
|
C extends Constraints,
|