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.
Files changed (30) hide show
  1. package/dist/entry-point.mjs +1 -0
  2. package/dist/entry-point.mjs.map +1 -1
  3. package/dist/index.mjs +1 -0
  4. package/dist/index.mjs.map +1 -1
  5. package/dist/predefined/brand/index.mjs +1 -0
  6. package/dist/predefined/brand/index.mjs.map +1 -1
  7. package/dist/predefined/brand/string/index.d.mts +1 -0
  8. package/dist/predefined/brand/string/index.d.mts.map +1 -1
  9. package/dist/predefined/brand/string/index.mjs +1 -0
  10. package/dist/predefined/brand/string/index.mjs.map +1 -1
  11. package/dist/predefined/brand/string/non-empty-string.d.mts +10 -1
  12. package/dist/predefined/brand/string/non-empty-string.d.mts.map +1 -1
  13. package/dist/predefined/brand/string/non-empty-string.mjs +7 -9
  14. package/dist/predefined/brand/string/non-empty-string.mjs.map +1 -1
  15. package/dist/predefined/brand/string/uri.d.mts +10 -0
  16. package/dist/predefined/brand/string/uri.d.mts.map +1 -0
  17. package/dist/predefined/brand/string/uri.mjs +21 -0
  18. package/dist/predefined/brand/string/uri.mjs.map +1 -0
  19. package/dist/predefined/index.mjs +1 -0
  20. package/dist/predefined/index.mjs.map +1 -1
  21. package/dist/primitives/string.d.mts +10 -0
  22. package/dist/primitives/string.d.mts.map +1 -1
  23. package/dist/primitives/string.mjs.map +1 -1
  24. package/package.json +1 -1
  25. package/src/predefined/brand/string/index.mts +1 -0
  26. package/src/predefined/brand/string/non-empty-string.mts +26 -11
  27. package/src/predefined/brand/string/non-empty-string.test.mts +40 -0
  28. package/src/predefined/brand/string/uri.mts +35 -0
  29. package/src/predefined/brand/string/uri.test.mts +79 -0
  30. package/src/primitives/string.mts +13 -0
@@ -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';
@@ -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';
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -2,5 +2,6 @@ export * from './email.mjs';
2
2
  export * from './iso-8601.mjs';
3
3
  export * from './json-string.mjs';
4
4
  export * from './non-empty-string.mjs';
5
+ export * from './uri.mjs';
5
6
  export * from './uuid.mjs';
6
7
  //# sourceMappingURL=index.d.mts.map
@@ -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
- export declare const nonEmptyString: (defaultValue?: string) => Type<NonEmptyString>;
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;AAGpD,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,eAAO,MAAM,cAAc,GACzB,eAAc,MAAY,KACzB,IAAI,CAAC,cAAc,CAOlB,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 { isNonEmptyString } from 'ts-data-forge';
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
- const nonEmptyString = (defaultValue = ' ') => brand({
8
- baseType: string(defaultValue),
9
- is: isNonEmptyString,
10
- defaultValue,
11
- brandKeys: ['NonEmptyString'],
12
- typeName: 'NonEmptyString',
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":";;;;;;AAQO,MAAM,cAAc,GAAG,CAC5B,YAAA,GAAuB,GAAG,KAE1B,KAAK,CAAC;AACJ,IAAA,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC;AAC9B,IAAA,EAAE,EAAE,gBAAgB;IACpB,YAAY;IACZ,SAAS,EAAE,CAAC,gBAAgB,CAAC;AAC7B,IAAA,QAAQ,EAAE,gBAAgB;AAC3B,CAAA;;;;"}
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":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"string.mjs","sources":["../../src/primitives/string.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"string.mjs","sources":["../../src/primitives/string.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-fortress",
3
- "version": "8.2.0",
3
+ "version": "8.4.0",
4
4
  "private": false,
5
5
  "keywords": [
6
6
  "typescript"
@@ -2,4 +2,5 @@ export * from './email.mjs';
2
2
  export * from './iso-8601.mjs';
3
3
  export * from './json-string.mjs';
4
4
  export * from './non-empty-string.mjs';
5
+ export * from './uri.mjs';
5
6
  export * from './uuid.mjs';
@@ -1,21 +1,36 @@
1
1
  import { isNonEmptyString } from 'ts-data-forge';
2
2
  import { type NonEmptyString } from 'ts-type-forge';
3
- import { brand } from '../../../brand/index.mjs';
4
- import { string } from '../../../primitives/index.mjs';
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
- export const nonEmptyString = (
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
- ): Type<NonEmptyString> =>
12
- brand({
13
- baseType: string(defaultValue),
14
- is: isNonEmptyString,
15
- defaultValue,
16
- brandKeys: ['NonEmptyString'],
17
- typeName: 'NonEmptyString',
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,