justus 0.5.0 → 0.5.2

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.
@@ -1,7 +1,9 @@
1
1
  // dts-generator.ts
2
2
  import ts from "typescript";
3
3
  import { assertSchema } from "./errors.mjs";
4
+ import { EAN13Validator } from "./extra/ean13.mjs";
4
5
  import { URLValidator } from "./extra/url.mjs";
6
+ import { UUIDValidator } from "./extra/uuid.mjs";
5
7
  import { getValidator } from "./utilities.mjs";
6
8
  import { AnyValidator } from "./validators/any.mjs";
7
9
  import { AnyArrayValidator, ArrayValidator } from "./validators/array.mjs";
@@ -15,45 +17,231 @@ import { OptionalValidator } from "./validators/optional.mjs";
15
17
  import { AnyStringValidator, StringValidator } from "./validators/string.mjs";
16
18
  import { TupleValidator } from "./validators/tuple.mjs";
17
19
  import { AllOfValidator, OneOfValidator } from "./validators/union.mjs";
20
+ function typeEqual(a, b) {
21
+ function eq(a2, b2) {
22
+ if (typeof a2 == "object" && a2 != null && (typeof b2 == "object" && b2 != null)) {
23
+ for (const key in a2) {
24
+ if (!eq(a2[key], b2[key]))
25
+ return false;
26
+ }
27
+ for (const key in b2) {
28
+ if (!eq(a2[key], b2[key]))
29
+ return false;
30
+ }
31
+ return true;
32
+ } else {
33
+ return a2 === b2;
34
+ }
35
+ }
36
+ return eq(a, b);
37
+ }
18
38
  var generators = /* @__PURE__ */ new Map();
19
39
  function registerTypeGenerator(validator, generator) {
20
40
  generators.set(validator, generator);
21
41
  }
22
- function generateTypes(validations) {
42
+ function generateTypes(validations, isInput = false) {
23
43
  const validators = /* @__PURE__ */ new Map();
24
44
  const references = /* @__PURE__ */ new Map();
25
- Object.entries(validations).forEach(([name, validation]) => {
45
+ for (const [name, validation] of Object.entries(validations)) {
26
46
  const validator = getValidator(validation);
47
+ validators.set(name, validator);
27
48
  if (!references.has(validator))
28
49
  references.set(validator, name);
29
- validators.set(name, validator);
30
- });
31
- const types = [];
32
- for (const [name, validator] of validators.entries()) {
33
- const referenceable = new Map(references);
34
- if (referenceable.get(validator) === name) {
35
- referenceable.delete(validator);
36
- }
37
- const type = generateTypeNode(validator, referenceable);
38
- const modifiers = [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)];
39
- const decl = ts.factory.createTypeAliasDeclaration(modifiers, name, [], type);
40
- types.push(decl);
50
+ }
51
+ const types = generateTypeNodes(validators, references, isInput);
52
+ const aliases = [];
53
+ for (const [name, type] of types.entries()) {
54
+ const alias = ts.factory.createTypeAliasDeclaration(exportModifiers, name, [], type);
55
+ aliases.push(alias);
41
56
  }
42
57
  return ts.createPrinter().printList(
43
58
  ts.ListFormat.SourceFileStatements,
44
- ts.factory.createNodeArray(types),
59
+ ts.factory.createNodeArray(aliases),
60
+ ts.createSourceFile("types.d.ts", "", ts.ScriptTarget.Latest)
61
+ );
62
+ }
63
+ function generateDeclarations(validations) {
64
+ const names = [];
65
+ const outputValidators = /* @__PURE__ */ new Map();
66
+ const outputReferences = /* @__PURE__ */ new Map();
67
+ const inputValidators = /* @__PURE__ */ new Map();
68
+ const inputReferences = /* @__PURE__ */ new Map();
69
+ for (const [name, validation] of Object.entries(validations)) {
70
+ const prefix = /validator$/i.test(name) ? name.slice(0, -9) : /validation$/i.test(name) ? name.slice(0, -10) : name;
71
+ const output = `${prefix.slice(0, 1).toUpperCase()}${prefix.slice(1)}`;
72
+ const input = `${prefix.slice(0, 1).toUpperCase()}${prefix.slice(1)}Input`;
73
+ const validator = getValidator(validation);
74
+ names.push({ name, output, input });
75
+ outputValidators.set(output, validator);
76
+ inputValidators.set(input, validator);
77
+ if (!outputReferences.has(validator))
78
+ outputReferences.set(validator, output);
79
+ if (!inputReferences.has(validator))
80
+ inputReferences.set(validator, input);
81
+ }
82
+ const outputTypes = generateTypeNodes(outputValidators, outputReferences, false);
83
+ const inputTypes = generateTypeNodes(inputValidators, inputReferences, true);
84
+ const statements = [];
85
+ for (const { name, input, output } of names) {
86
+ const outputType = outputTypes.get(output);
87
+ const inputType = inputTypes.get(input);
88
+ const validation = validations[name];
89
+ const validator = outputValidators.get(output);
90
+ assertSchema(!!outputType, `No output type "${output}" generated for validation "${name}"`);
91
+ assertSchema(!!inputType, `No input type "${input}" generated for validation "${name}"`);
92
+ assertSchema(!!validator, `No validator for "${name}"`);
93
+ const sameType = typeEqual(inputType, outputType);
94
+ const inputAlias = sameType ? ts.factory.createTypeReferenceNode(output) : inputType;
95
+ const outputDeclaration = ts.factory.createTypeAliasDeclaration(exportModifiers, output, [], outputType);
96
+ const inputDeclaration = ts.factory.createTypeAliasDeclaration(exportModifiers, input, [], inputAlias);
97
+ const variableDeclarationType = generateVariableDeclarationType(validation, validator, outputReferences);
98
+ const variableDeclaration = ts.factory.createVariableStatement(
99
+ exportModifiers,
100
+ // "export"
101
+ ts.factory.createVariableDeclarationList([
102
+ ts.factory.createVariableDeclaration(
103
+ name,
104
+ // ..................................... "myTypeValidator"
105
+ void 0,
106
+ // no exclamation token
107
+ variableDeclarationType
108
+ )
109
+ ], ts.NodeFlags.Const)
110
+ // ......................... "const"
111
+ );
112
+ ts.addSyntheticLeadingComment(
113
+ outputDeclaration,
114
+ ts.SyntaxKind.MultiLineCommentTrivia,
115
+ ` ${`----- ${name} `.padEnd(74, "-")} `,
116
+ true
117
+ // newline
118
+ );
119
+ ts.addSyntheticLeadingComment(
120
+ outputDeclaration,
121
+ ts.SyntaxKind.MultiLineCommentTrivia,
122
+ `* Validated type for {@link ${name}} `,
123
+ true
124
+ // newline
125
+ );
126
+ ts.addSyntheticLeadingComment(
127
+ inputDeclaration,
128
+ ts.SyntaxKind.MultiLineCommentTrivia,
129
+ `* Input type for {@link ${name}} `,
130
+ true
131
+ // newline
132
+ );
133
+ ts.addSyntheticLeadingComment(
134
+ variableDeclaration,
135
+ ts.SyntaxKind.MultiLineCommentTrivia,
136
+ `* The \`${name}\` validator `,
137
+ true
138
+ // newline
139
+ );
140
+ statements.push(
141
+ outputDeclaration,
142
+ inputDeclaration,
143
+ variableDeclaration
144
+ );
145
+ }
146
+ const dts = ts.createPrinter().printList(
147
+ ts.ListFormat.SourceFileStatements,
148
+ ts.factory.createNodeArray(statements),
45
149
  ts.createSourceFile("types.d.ts", "", ts.ScriptTarget.Latest)
46
150
  );
151
+ return `// Generated on ${(/* @__PURE__ */ new Date()).toUTCString()}
152
+
153
+ ${dts}`;
154
+ }
155
+ function isValidator(validation) {
156
+ assertSchema(validation !== void 0, 'Found "undefined" validation in tree');
157
+ if (validation === null)
158
+ return false;
159
+ if (typeof validation !== "function" && typeof validation !== "object") {
160
+ return false;
161
+ }
162
+ if (Array.isArray(validation))
163
+ return false;
164
+ if ("validate" in validation && typeof validation.validate === "function") {
165
+ return !isValidator(validation.validate);
166
+ } else {
167
+ return false;
168
+ }
169
+ }
170
+ function generateJustusTypeImport(typeName, typeArguments = []) {
171
+ return ts.factory.createImportTypeNode(
172
+ // .................... "import"
173
+ ts.factory.createLiteralTypeNode(
174
+ ts.factory.createStringLiteral("justus")
175
+ // .......... "justus"
176
+ ),
177
+ void 0,
178
+ // import assertions
179
+ ts.factory.createIdentifier(typeName),
180
+ // ................. "JustusType"
181
+ typeArguments
182
+ );
183
+ }
184
+ function generateVariableDeclarationType(validation, validator, references) {
185
+ if (isValidator(validation)) {
186
+ const validatedType = generateTypeNode(validator, references, false);
187
+ return generateJustusTypeImport("Validator", [validatedType]);
188
+ }
189
+ if (validator instanceof ConstantValidator) {
190
+ return generateTypeNode(validator, references, false);
191
+ }
192
+ if (validator instanceof ObjectValidator) {
193
+ const properties = [];
194
+ for (const [key, valueValidator] of validator.validators.entries()) {
195
+ const value = validator.schema[key];
196
+ const type = generateVariableDeclarationType(value, valueValidator, references);
197
+ properties.push(ts.factory.createPropertySignature(
198
+ readonlyModifiers,
199
+ key,
200
+ void 0,
201
+ // no question mark
202
+ type
203
+ ));
204
+ }
205
+ if (validator.additionalProperties) {
206
+ const additional = validator.additionalProperties;
207
+ const type = generateVariableDeclarationType(additional, additional, references);
208
+ properties.push(ts.factory.createPropertySignature(
209
+ readonlyModifiers,
210
+ ts.factory.createComputedPropertyName(
211
+ ts.factory.createPropertyAccessExpression(
212
+ ts.factory.createIdentifier("Symbol"),
213
+ "justusAdditionalValidator"
214
+ )
215
+ ),
216
+ void 0,
217
+ // no question mark
218
+ type
219
+ ));
220
+ }
221
+ return ts.factory.createTypeLiteralNode(properties);
222
+ }
223
+ assertSchema(false, `Unable to generate variable declaration for ${validator.constructor.name}`);
47
224
  }
48
- function generateTypeNode(validator, references) {
225
+ function generateTypeNodes(validators, references, isInput) {
226
+ const types = /* @__PURE__ */ new Map();
227
+ for (const [name, validator] of validators.entries()) {
228
+ const referenceable = new Map(references);
229
+ if (referenceable.get(validator) === name)
230
+ referenceable.delete(validator);
231
+ types.set(name, generateTypeNode(validator, referenceable, isInput));
232
+ }
233
+ return types;
234
+ }
235
+ function generateTypeNode(validator, references, isInput) {
49
236
  const reference = references.get(validator);
50
237
  if (reference)
51
238
  return ts.factory.createTypeReferenceNode(reference);
52
239
  const generator = generators.get(validator) || generators.get(validator.constructor);
53
240
  assertSchema(!!generator, `Type generator for "${validator.constructor.name}" not found`);
54
- const type = generator(validator, references);
55
- if (!validator.optional)
241
+ const type = generator(validator, references, isInput);
242
+ if (!(validator.optional || isInput && validator.defaultValue !== void 0)) {
56
243
  return type;
244
+ }
57
245
  if (type === neverType)
58
246
  return undefinedType;
59
247
  if (ts.isUnionTypeNode(type)) {
@@ -64,6 +252,7 @@ function generateTypeNode(validator, references) {
64
252
  var anyType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword);
65
253
  var anyArrayType = ts.factory.createArrayTypeNode(anyType);
66
254
  var booleanType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword);
255
+ var dateType = ts.factory.createTypeReferenceNode("Date");
67
256
  var numberType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword);
68
257
  var neverType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword);
69
258
  var stringType = ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword);
@@ -81,42 +270,54 @@ var recordType = ts.factory.createMappedTypeNode(
81
270
  void 0
82
271
  );
83
272
  var optionalKeyword = ts.factory.createToken(ts.SyntaxKind.QuestionToken);
273
+ var exportModifiers = [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)];
274
+ var readonlyModifiers = [ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)];
84
275
  registerTypeGenerator(AnyValidator, () => anyType);
85
276
  registerTypeGenerator(AnyArrayValidator, () => anyArrayType);
86
277
  registerTypeGenerator(AnyNumberValidator, () => numberType);
87
278
  registerTypeGenerator(AnyObjectValidator, () => recordType);
88
279
  registerTypeGenerator(AnyStringValidator, () => stringType);
89
- registerTypeGenerator(BooleanValidator, () => booleanType);
90
280
  registerTypeGenerator(NeverValidator, () => neverType);
91
- registerTypeGenerator(DateValidator, () => ts.factory.createTypeReferenceNode("Date"));
92
- registerTypeGenerator(URLValidator, () => ts.factory.createTypeReferenceNode("URL"));
93
- registerTypeGenerator(ArrayValidator, (validator, references) => {
94
- const itemType = generateTypeNode(validator.items, references);
281
+ registerTypeGenerator(ArrayValidator, (validator, references, isInput) => {
282
+ const itemType = generateTypeNode(validator.items, references, isInput);
95
283
  return ts.factory.createArrayTypeNode(itemType);
96
284
  });
285
+ registerTypeGenerator(BooleanValidator, (validator, _references, isInput) => {
286
+ return isInput && validator.fromString ? ts.factory.createUnionTypeNode([
287
+ booleanType,
288
+ ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral("true")),
289
+ ts.factory.createLiteralTypeNode(ts.factory.createStringLiteral("false"))
290
+ ]) : booleanType;
291
+ });
97
292
  registerTypeGenerator(ConstantValidator, (validator) => {
98
293
  const literal = typeof validator.constant === "number" ? ts.factory.createNumericLiteral(validator.constant) : typeof validator.constant === "string" ? ts.factory.createStringLiteral(validator.constant) : validator.constant === false ? ts.factory.createFalse() : validator.constant === true ? ts.factory.createTrue() : validator.constant === null ? ts.factory.createNull() : void 0;
99
294
  assertSchema(!!literal, `Invalid constant "${validator.constant}"`);
100
295
  return ts.factory.createLiteralTypeNode(literal);
101
296
  });
102
- registerTypeGenerator(NumberValidator, (validator) => {
297
+ registerTypeGenerator(DateValidator, (validator, _references, isInput) => {
298
+ return isInput ? validator.format === "iso" ? stringType : validator.format === "timestamp" ? numberType : ts.factory.createUnionTypeNode([dateType, numberType, stringType]) : dateType;
299
+ });
300
+ registerTypeGenerator(NumberValidator, (validator, _references, isInput) => {
301
+ if (isInput) {
302
+ return validator.fromString ? ts.factory.createUnionTypeNode([numberType, stringType]) : numberType;
303
+ }
103
304
  if (!validator.brand)
104
305
  return numberType;
105
306
  const signature = ts.factory.createPropertySignature(void 0, `__brand_${validator.brand}`, void 0, neverType);
106
307
  const literal = ts.factory.createTypeLiteralNode([signature]);
107
308
  return ts.factory.createIntersectionTypeNode([numberType, literal]);
108
309
  });
109
- registerTypeGenerator(OptionalValidator, (validator, references) => {
110
- return generateTypeNode(validator.validator, references);
310
+ registerTypeGenerator(OptionalValidator, (validator, references, isInput) => {
311
+ return generateTypeNode(validator.validator, references, isInput);
111
312
  });
112
- registerTypeGenerator(StringValidator, (validator) => {
113
- if (!validator.brand)
313
+ registerTypeGenerator(StringValidator, (validator, _references, isInput) => {
314
+ if (!validator.brand || isInput)
114
315
  return stringType;
115
316
  const signature = ts.factory.createPropertySignature(void 0, `__brand_${validator.brand}`, void 0, neverType);
116
317
  const literal = ts.factory.createTypeLiteralNode([signature]);
117
318
  return ts.factory.createIntersectionTypeNode([stringType, literal]);
118
319
  });
119
- registerTypeGenerator(TupleValidator, (validator, references) => {
320
+ registerTypeGenerator(TupleValidator, (validator, references, isInput) => {
120
321
  const members = validator.members;
121
322
  const { count, first, next } = members.reduce(({ count: count2, first: first2, next: next2 }, { single }, i) => {
122
323
  if (!single) {
@@ -129,35 +330,35 @@ registerTypeGenerator(TupleValidator, (validator, references) => {
129
330
  }, { count: 0, first: members.length, next: -1 });
130
331
  if (count < 2) {
131
332
  const types2 = members.map(({ single, validator: validator2 }) => {
132
- const memberType = generateTypeNode(validator2, references);
333
+ const memberType = generateTypeNode(validator2, references, isInput);
133
334
  if (single)
134
- return generateTypeNode(validator2, references);
335
+ return generateTypeNode(validator2, references, isInput);
135
336
  const arrayType = ts.factory.createArrayTypeNode(memberType);
136
337
  return ts.factory.createRestTypeNode(arrayType);
137
338
  });
138
339
  return ts.factory.createTupleTypeNode(types2);
139
340
  }
140
- const before = members.slice(0, first).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
141
- const types = members.slice(first, next).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
142
- const after = members.slice(next).map(({ validator: validator2 }) => generateTypeNode(validator2, references));
341
+ const before = members.slice(0, first).map(({ validator: validator2 }) => generateTypeNode(validator2, references, isInput));
342
+ const types = members.slice(first, next).map(({ validator: validator2 }) => generateTypeNode(validator2, references, isInput));
343
+ const after = members.slice(next).map(({ validator: validator2 }) => generateTypeNode(validator2, references, isInput));
143
344
  const union = ts.factory.createUnionTypeNode(types);
144
345
  const array = ts.factory.createArrayTypeNode(union);
145
346
  const rest = ts.factory.createRestTypeNode(array);
146
347
  return ts.factory.createTupleTypeNode([...before, rest, ...after]);
147
348
  });
148
- registerTypeGenerator(AllOfValidator, (validator, references) => {
149
- const members = validator.validators.map((validator2) => generateTypeNode(validator2, references));
349
+ registerTypeGenerator(AllOfValidator, (validator, references, isInput) => {
350
+ const members = validator.validators.map((validator2) => generateTypeNode(validator2, references, isInput));
150
351
  return ts.factory.createIntersectionTypeNode(members);
151
352
  });
152
- registerTypeGenerator(OneOfValidator, (validator, references) => {
153
- const members = validator.validators.map((validator2) => generateTypeNode(validator2, references));
353
+ registerTypeGenerator(OneOfValidator, (validator, references, isInput) => {
354
+ const members = validator.validators.map((validator2) => generateTypeNode(validator2, references, isInput));
154
355
  return ts.factory.createUnionTypeNode(members);
155
356
  });
156
- registerTypeGenerator(ObjectValidator, (validator, references) => {
357
+ registerTypeGenerator(ObjectValidator, (validator, references, isInput) => {
157
358
  const properties = [];
158
359
  for (const [key, valueValidator] of validator.validators.entries()) {
159
- const type = generateTypeNode(valueValidator, references);
160
- const optional = valueValidator.optional;
360
+ const type = generateTypeNode(valueValidator, references, isInput);
361
+ const optional = isInput && valueValidator.defaultValue !== void 0 || valueValidator.optional;
161
362
  const signature = ts.factory.createPropertySignature(
162
363
  void 0,
163
364
  key,
@@ -167,7 +368,7 @@ registerTypeGenerator(ObjectValidator, (validator, references) => {
167
368
  properties.push(signature);
168
369
  }
169
370
  if (validator.additionalProperties) {
170
- const propertyType = generateTypeNode(validator.additionalProperties, references);
371
+ const propertyType = generateTypeNode(validator.additionalProperties, references, isInput);
171
372
  const extra = ts.factory.createMappedTypeNode(
172
373
  void 0,
173
374
  // readonly
@@ -188,7 +389,30 @@ registerTypeGenerator(ObjectValidator, (validator, references) => {
188
389
  return ts.factory.createTypeLiteralNode(properties);
189
390
  }
190
391
  });
392
+ registerTypeGenerator(EAN13Validator, (_validator, _references, isInput) => {
393
+ if (isInput)
394
+ return ts.factory.createUnionTypeNode([numberType, stringType]);
395
+ const signature = ts.factory.createPropertySignature(void 0, "__ean_13", void 0, neverType);
396
+ const literal = ts.factory.createTypeLiteralNode([signature]);
397
+ return ts.factory.createIntersectionTypeNode([stringType, literal]);
398
+ });
399
+ registerTypeGenerator(UUIDValidator, (_validator, _references, isInput) => {
400
+ if (isInput)
401
+ return stringType;
402
+ const signature = ts.factory.createPropertySignature(void 0, "__uuid", void 0, neverType);
403
+ const literal = ts.factory.createTypeLiteralNode([signature]);
404
+ return ts.factory.createIntersectionTypeNode([stringType, literal]);
405
+ });
406
+ registerTypeGenerator(URLValidator, (_validator, _references, isInput) => {
407
+ const urlType = ts.factory.createTypeReferenceNode("URL");
408
+ if (isInput) {
409
+ return ts.factory.createUnionTypeNode([urlType, stringType]);
410
+ } else {
411
+ return urlType;
412
+ }
413
+ });
191
414
  export {
415
+ generateDeclarations,
192
416
  generateTypes,
193
417
  registerTypeGenerator
194
418
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/dts-generator.ts"],
4
- "mappings": "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",
5
- "names": ["count", "first", "next", "types", "validator"]
4
+ "mappings": "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",
5
+ "names": ["a", "b", "count", "first", "next", "types", "validator"]
6
6
  }
@@ -30,6 +30,11 @@ __export(arn_exports, {
30
30
  module.exports = __toCommonJS(arn_exports);
31
31
  var import_errors = require("../errors.cjs");
32
32
  var import_types = require("../types.cjs");
33
+ function assertComponent(actual, expected, kind) {
34
+ if (expected === void 0)
35
+ return;
36
+ (0, import_errors.assertValidation)(actual === expected, `ARN ${kind} "${actual}" mismatch (expected "${expected}")`);
37
+ }
33
38
  function parse(value, service, type) {
34
39
  (0, import_errors.assertValidation)(typeof value == "string", 'Value is not a "string"');
35
40
  const segments = value.split(":");
@@ -40,22 +45,20 @@ function parse(value, service, type) {
40
45
  (0, import_errors.assertValidation)(!!svc, "Missing service in ARN");
41
46
  (0, import_errors.assertValidation)(!!act, "Missing account ID in ARN");
42
47
  (0, import_errors.assertValidation)(!!res[0], "Missing resource ID in ARN");
43
- if (service !== void 0) {
44
- (0, import_errors.assertValidation)(svc === service, `ARN Service "${svc}" mismatch (expected "${service}")`);
45
- }
46
- const [resArray, resString] = res[0].includes("/") ? [res[0].split("/"), res[0]] : [res, res.join(":")];
47
- (0, import_errors.assertValidation)(!!resArray[0], "Invalid resource ID in ARN");
48
- if (type !== void 0) {
49
- (0, import_errors.assertValidation)(resArray[0] === type, `ARN Resource Type "${resArray[0]}" mismatch (expected "${type}")`);
50
- }
48
+ const [[resType, ...resArray], resString] = res[0].includes("/") ? [res[0].split("/"), res[0]] : [res, res.join(":")];
49
+ (0, import_errors.assertValidation)(!!resType, "Invalid resource ID in ARN");
50
+ assertComponent(svc, service, "Service");
51
+ assertComponent(resType, type, "Resource Type");
51
52
  const arn2 = `arn:${prt}:${svc}:${rgn}:${act}:${resString}`;
52
53
  return {
53
54
  Arn: arn2,
54
55
  Partition: prt,
55
56
  Service: svc,
57
+ // as Service,
56
58
  Region: rgn || "",
57
59
  Account: act,
58
- Resource: resArray
60
+ Resource: [resType, ...resArray]
61
+ // as [ ResourceType, ...string[] ],
59
62
  };
60
63
  }
61
64
  var ParsedArnValidator = class extends import_types.AbstractValidator {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/extra/arn.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAiC;AACjC,mBAAwD;AAoBxD,SAAS,MACL,OACA,SACA,MACkB;AACpB,sCAAiB,OAAO,SAAS,UAAU,yBAAyB;AAEpE,QAAM,WAAW,MAAM,MAAM,GAAG;AAEhC,sCAAiB,SAAS,UAAU,GAAG,2BAA2B;AAElE,QAAM,CAAE,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,GAAI,IAAI;AAE5C,sCAAiB,QAAQ,OAAO,4BAA4B;AAC5D,sCAAiB,CAAC,CAAE,KAAK,0BAA0B;AACnD,sCAAiB,CAAC,CAAE,KAAK,wBAAwB;AACjD,sCAAiB,CAAC,CAAE,KAAK,2BAA2B;AACpD,sCAAiB,CAAC,CAAE,IAAI,CAAC,GAAG,4BAA4B;AAExD,MAAI,YAAY,QAAW;AACzB,wCAAiB,QAAQ,SAAS,gBAAgB,GAAG,yBAAyB,OAAO,IAAI;AAAA,EAC3F;AAEA,QAAM,CAAE,UAAU,SAAU,IAAI,IAAI,CAAC,EAAE,SAAS,GAAG,IACjD,CAAE,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAE,IAC5B,CAAE,KAAK,IAAI,KAAK,GAAG,CAAE;AAEvB,sCAAiB,CAAC,CAAE,SAAS,CAAC,GAAG,4BAA4B;AAE7D,MAAI,SAAS,QAAW;AACtB,wCAAiB,SAAS,CAAC,MAAM,MAAM,sBAAsB,SAAS,CAAC,CAAC,yBAAyB,IAAI,IAAI;AAAA,EAC3G;AAEA,QAAMA,OAAM,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,SAAS;AAExD,SAAO;AAAA,IACL,KAAKA;AAAA,IACL,WAAW;AAAA,IACX,SAAS;AAAA,IACT,QAAQ,OAAO;AAAA,IACf,SAAS;AAAA,IACT,UAAU;AAAA,EACZ;AACF;AAKO,IAAM,qBAAN,cACG,+BAA8C;AAAA,EAWtD,YAAoB,UAA4B,OAAgB;AAC9D,UAAM;AADY;AAA4B;AAAA,EAEhD;AAAA,EAEA,SAAS,OAAoC;AAC3C,WAAO,MAAM,OAAO,KAAK,UAAU,KAAK,KAAK;AAAA,EAC/C;AACF;AAGO,IAAM,eAAN,cACG,+BAA8C;AAAA,EAWtD,YAAoB,UAA4B,OAAgB;AAC9D,UAAM;AADY;AAA4B;AAAA,EAEhD;AAAA,EAEA,SAAS,OAAoC;AAC3C,WAAO,MAAM,OAAO,KAAK,UAAU,KAAK,KAAK,EAAE;AAAA,EACjD;AACF;AAYO,SAAS,gBACZ,SACA,cAC2B;AAC7B,SAAO,IAAI,mBAAmB,SAAS,YAAY;AACrD;AAUO,SAAS,WACZ,SACA,cACqB;AACvB,SAAO,IAAI,aAAa,SAAS,YAAY;AAC/C;AAKO,IAAM,eAAW,mCAAqB,IAAI,mBAAmB,GAAG,eAAe;AAG/E,IAAM,UAAM,mCAAqB,IAAI,aAAa,GAAG,UAAU;",
4
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAiC;AACjC,mBAAwD;AA4BxD,SAAS,gBACL,QACA,UACA,MACmB;AACrB,MAAI,aAAa;AAAW;AAC5B,sCAAiB,WAAW,UAAU,OAAO,IAAI,KAAK,MAAM,yBAAyB,QAAQ,IAAI;AACnG;AAGA,SAAS,MACL,OACA,SACA,MACgC;AAClC,sCAAiB,OAAO,SAAS,UAAU,yBAAyB;AAEpE,QAAM,WAAW,MAAM,MAAM,GAAG;AAEhC,sCAAiB,SAAS,UAAU,GAAG,2BAA2B;AAElE,QAAM,CAAE,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,GAAI,IAAI;AAE5C,sCAAiB,QAAQ,OAAO,4BAA4B;AAC5D,sCAAiB,CAAC,CAAE,KAAK,0BAA0B;AACnD,sCAAiB,CAAC,CAAE,KAAK,wBAAwB;AACjD,sCAAiB,CAAC,CAAE,KAAK,2BAA2B;AACpD,sCAAiB,CAAC,CAAE,IAAI,CAAC,GAAG,4BAA4B;AAExD,QAAM,CAAE,CAAE,SAAS,GAAG,QAAS,GAAG,SAAU,IAAI,IAAI,CAAC,EAAE,SAAS,GAAG,IACjE,CAAE,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAE,IAC5B,CAAE,KAAK,IAAI,KAAK,GAAG,CAAE;AAEvB,sCAAiB,CAAC,CAAE,SAAS,4BAA4B;AAEzD,kBAAgB,KAAK,SAAS,SAAS;AACvC,kBAAgB,SAAS,MAAM,eAAe;AAE9C,QAAMA,OAAM,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,SAAS;AAExD,SAAO;AAAA,IACL,KAAKA;AAAA,IACL,WAAW;AAAA,IACX,SAAS;AAAA;AAAA,IACT,QAAQ,OAAO;AAAA,IACf,SAAS;AAAA,IACT,UAAU,CAAE,SAAS,GAAG,QAAS;AAAA;AAAA,EACnC;AACF;AAKO,IAAM,qBAAN,cAGG,+BAA4D;AAAA,EAWpE,YAAoB,UAA4B,OAAsB;AACpE,UAAM;AADY;AAA4B;AAAA,EAEhD;AAAA,EAEA,SAAS,OAAkD;AACzD,WAAO,MAAM,OAAO,KAAK,UAAU,KAAK,KAAK;AAAA,EAC/C;AACF;AAGO,IAAM,eAAN,cAGG,+BAA4D;AAAA,EAWpE,YAAoB,UAA4B,OAAsB;AACpE,UAAM;AADY;AAA4B;AAAA,EAEhD;AAAA,EAEA,SAAS,OAAkD;AACzD,WAAO,MAAM,OAAO,KAAK,UAAU,KAAK,KAAK,EAAE;AAAA,EACjD;AACF;AAYO,SAAS,gBAGZ,SACA,cACyC;AAC3C,SAAO,IAAI,mBAAmB,SAAS,YAAY;AACrD;AAUO,SAAS,WAGZ,SACA,cACmC;AACrC,SAAO,IAAI,aAAa,SAAS,YAAY;AAC/C;AAKO,IAAM,eAAW,mCAAqB,IAAI,mBAAmB,GAAG,eAAe;AAG/E,IAAM,UAAM,mCAAqB,IAAI,aAAa,GAAG,UAAU;",
5
5
  "names": ["arn"]
6
6
  }
@@ -1,22 +1,24 @@
1
1
  import { AbstractValidator } from '../types';
2
2
  /** The type for a validated _string_ ARN (Amazon Resource Name) */
3
- export type ArnString<Service extends string = string> = string & {
3
+ export type ArnString<Service extends string = string, ResourceType extends string = string> = string & {
4
4
  __arn: never;
5
5
  } & (string extends Service ? string : {
6
- [k in `__arn_${Service}`]: never;
6
+ [k in `__arn_service_${Service}`]: never;
7
+ }) & (string extends ResourceType ? string : {
8
+ [k in `__arn_resource_${ResourceType}`]: never;
7
9
  });
8
10
  /** The type for a _parsed_ ARN (Amazon Resource Name) */
9
- export interface ParsedArn<Service extends string = string> {
11
+ export interface ParsedArn<Service extends string = string, ResourceType extends string = string> {
10
12
  /** The full */
11
- Arn: ArnString<Service>;
13
+ Arn: ArnString<Service, ResourceType>;
12
14
  Partition: string;
13
15
  Service: Service;
14
16
  Region: string;
15
17
  Account: string;
16
- Resource: [string, ...string[]];
18
+ Resource: [ResourceType, ...string[]];
17
19
  }
18
20
  /** Validator parsing an ARN (Amazon Resource Name) and returning its components */
19
- export declare class ParsedArnValidator<Service extends string = string> extends AbstractValidator<ParsedArn<Service>, string> {
21
+ export declare class ParsedArnValidator<Service extends string = string, ResourceType extends string = string> extends AbstractValidator<ParsedArn<Service, ResourceType>, string> {
20
22
  private _service?;
21
23
  private _type?;
22
24
  /**
@@ -28,11 +30,11 @@ export declare class ParsedArnValidator<Service extends string = string> extends
28
30
  * representing (e.g. `role` in the `iam` service, or
29
31
  * `targetgroup` in the `elasticloadbalancing` service)
30
32
  */
31
- constructor(service?: Service, resourceType?: string);
32
- validate(value: unknown): ParsedArn<Service>;
33
+ constructor(service?: Service, resourceType?: ResourceType);
34
+ validate(value: unknown): ParsedArn<Service, ResourceType>;
33
35
  }
34
36
  /** Validator validating an ARN (Amazon Resource Name) _string_ */
35
- export declare class ArnValidator<Service extends string = string> extends AbstractValidator<ArnString<Service>, string> {
37
+ export declare class ArnValidator<Service extends string = string, ResourceType extends string = string> extends AbstractValidator<ArnString<Service, ResourceType>, string> {
36
38
  private _service?;
37
39
  private _type?;
38
40
  /**
@@ -44,8 +46,8 @@ export declare class ArnValidator<Service extends string = string> extends Abstr
44
46
  * representing (e.g. `role` in the `iam` service, or
45
47
  * `targetgroup` in the `elasticloadbalancing` service)
46
48
  */
47
- constructor(service?: Service, resourceType?: string);
48
- validate(value: unknown): ArnString<Service>;
49
+ constructor(service?: Service, resourceType?: ResourceType);
50
+ validate(value: unknown): ArnString<Service, ResourceType>;
49
51
  }
50
52
  /**
51
53
  * Create a new {@link ParsedArnValidator} parsing an ARN referring to the
@@ -55,7 +57,7 @@ export declare class ArnValidator<Service extends string = string> extends Abstr
55
57
  * component of the ARN's resource (e.g. `role` in the `iam` service, or
56
58
  * `targetgroup` in the `elasticloadbalancing` service)
57
59
  */
58
- export declare function parseArnFactory<Service extends string = string>(service: Service, resourceType?: string): ParsedArnValidator<Service>;
60
+ export declare function parseArnFactory<Service extends string = string, ResourceType extends string = string>(service: Service, resourceType?: ResourceType): ParsedArnValidator<Service, ResourceType>;
59
61
  /**
60
62
  * Create a new {@link ArnValidator} validating an ARN referring to the
61
63
  * specified `service` (e.g. `iam` or `elasticloadbalancing`).
@@ -64,8 +66,8 @@ export declare function parseArnFactory<Service extends string = string>(service
64
66
  * component of the ARN's resource (e.g. `role` in the `iam` service, or
65
67
  * `targetgroup` in the `elasticloadbalancing` service)
66
68
  */
67
- export declare function arnFactory<Service extends string = string>(service: Service, resourceType?: string): ArnValidator<Service>;
69
+ export declare function arnFactory<Service extends string = string, ResourceType extends string = string>(service: Service, resourceType?: ResourceType): ArnValidator<Service, ResourceType>;
68
70
  /** Validate a string and parse it into into an {@link ParsedArn} */
69
- export declare const parseArn: typeof parseArnFactory & ParsedArnValidator<string>;
71
+ export declare const parseArn: typeof parseArnFactory & ParsedArnValidator<string, string>;
70
72
  /** Validate a ARN (Amazon Resource Name) string */
71
- export declare const arn: typeof arnFactory & ArnValidator<string>;
73
+ export declare const arn: typeof arnFactory & ArnValidator<string, string>;
@@ -1,6 +1,11 @@
1
1
  // extra/arn.ts
2
2
  import { assertValidation } from "../errors.mjs";
3
3
  import { AbstractValidator, makeValidatorFactory } from "../types.mjs";
4
+ function assertComponent(actual, expected, kind) {
5
+ if (expected === void 0)
6
+ return;
7
+ assertValidation(actual === expected, `ARN ${kind} "${actual}" mismatch (expected "${expected}")`);
8
+ }
4
9
  function parse(value, service, type) {
5
10
  assertValidation(typeof value == "string", 'Value is not a "string"');
6
11
  const segments = value.split(":");
@@ -11,22 +16,20 @@ function parse(value, service, type) {
11
16
  assertValidation(!!svc, "Missing service in ARN");
12
17
  assertValidation(!!act, "Missing account ID in ARN");
13
18
  assertValidation(!!res[0], "Missing resource ID in ARN");
14
- if (service !== void 0) {
15
- assertValidation(svc === service, `ARN Service "${svc}" mismatch (expected "${service}")`);
16
- }
17
- const [resArray, resString] = res[0].includes("/") ? [res[0].split("/"), res[0]] : [res, res.join(":")];
18
- assertValidation(!!resArray[0], "Invalid resource ID in ARN");
19
- if (type !== void 0) {
20
- assertValidation(resArray[0] === type, `ARN Resource Type "${resArray[0]}" mismatch (expected "${type}")`);
21
- }
19
+ const [[resType, ...resArray], resString] = res[0].includes("/") ? [res[0].split("/"), res[0]] : [res, res.join(":")];
20
+ assertValidation(!!resType, "Invalid resource ID in ARN");
21
+ assertComponent(svc, service, "Service");
22
+ assertComponent(resType, type, "Resource Type");
22
23
  const arn2 = `arn:${prt}:${svc}:${rgn}:${act}:${resString}`;
23
24
  return {
24
25
  Arn: arn2,
25
26
  Partition: prt,
26
27
  Service: svc,
28
+ // as Service,
27
29
  Region: rgn || "",
28
30
  Account: act,
29
- Resource: resArray
31
+ Resource: [resType, ...resArray]
32
+ // as [ ResourceType, ...string[] ],
30
33
  };
31
34
  }
32
35
  var ParsedArnValidator = class extends AbstractValidator {