json-as 1.3.3 → 1.3.5

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 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA4G,eAAe,EAA8G,MAAM,EAAE,OAAO,EAAS,MAAM,EAA6C,MAAM,uCAAuC,CAAC;AAC3X,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAK7D,OAAO,EAA2B,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAE7E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAmJvC,qBAAa,aAAc,SAAQ,OAAO;IACxC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAuB;IAExC,OAAO,EAAG,OAAO,CAAC;IAClB,OAAO,EAAG,MAAM,CAAC;IACjB,MAAM,EAAG,MAAM,CAAC;IAChB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAA+B;IAC7D,MAAM,EAAG,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,CAAmB;IACrC,OAAO,EAAE,eAAe,EAAE,CAAM;IAChC,cAAc,EAAE,MAAM,EAAE,CAAM;IAE9B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAqB;IAEvD,OAAO,CAAC,4BAA4B;IA6CpC,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAYtD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,cAAoB,GAAG,MAAM;IAsC3E,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAghDnD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAItC,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IA4ClD,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAIjD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA+J9B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,OAAe,GAAG,MAAM,EAAE;IA0BxD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO;CAc3D;AA4BD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IAChD,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBvD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAwDjC;AAoKD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO9C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA4G,eAAe,EAAoG,MAAM,EAAE,OAAO,EAAS,MAAM,EAA6C,MAAM,uCAAuC,CAAC;AACjX,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAM7D,OAAO,EAA2B,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAE7E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAmJvC,qBAAa,aAAc,SAAQ,OAAO;IACxC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAuB;IAExC,OAAO,EAAG,OAAO,CAAC;IAClB,OAAO,EAAG,MAAM,CAAC;IACjB,MAAM,EAAG,MAAM,CAAC;IAChB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAA+B;IAC7D,MAAM,EAAG,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,CAAmB;IACrC,OAAO,EAAE,eAAe,EAAE,CAAM;IAChC,cAAc,EAAE,MAAM,EAAE,CAAM;IAE9B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAqB;IAEvD,OAAO,CAAC,4BAA4B;IA6CpC,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAYtD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,cAAoB,GAAG,MAAM;IAsC3E,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAghDnD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAItC,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IA4ClD,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAIjD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA+J9B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,OAAe,GAAG,MAAM,EAAE;IA0BxD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO;CAc3D;AA4BD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IAChD,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBvD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAwDjC;AA+MD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO9C"}
@@ -4,6 +4,7 @@ import { readFileSync, writeFileSync } from "fs";
4
4
  import * as path from "path";
5
5
  import { fileURLToPath } from "url";
6
6
  import { CustomTransform } from "./linkers/custom.js";
7
+ import { NodeKind } from "./types.js";
7
8
  import { Property, PropertyFlags, Schema, SourceSet } from "./types.js";
8
9
  import { isStdlib, removeExtension, SimpleParser, toString } from "./util.js";
9
10
  import { Visitor } from "./visitor.js";
@@ -83,7 +84,7 @@ function parseCustomJsonKind(method, decoratorName) {
83
84
  if (decorator.args.length > 1)
84
85
  throwError(`@${decoratorName} accepts at most one argument`, decorator.range);
85
86
  const arg = decorator.args[0];
86
- if (arg.kind != 16 || arg.literalKind != 2) {
87
+ if (arg.kind != NodeKind.Literal || arg.literalKind != 2) {
87
88
  throwError(`@${decoratorName} argument must be a string literal like @${decoratorName}("string")`, arg.range);
88
89
  }
89
90
  const kind = arg.value;
@@ -171,7 +172,7 @@ export class JSONTransform extends Visitor {
171
172
  if (isDecoratedBase)
172
173
  return;
173
174
  this.collectInheritedFieldMembers(baseDecl, baseSource, members, visited);
174
- const inheritedMembers = baseDecl.members.filter((v) => v.kind === 54 && !v.is(32) && !v.is(512) && !v.is(1024) && !v.decorators?.some((decorator) => decorator.name.text === "omit"));
175
+ const inheritedMembers = baseDecl.members.filter((v) => v.kind === NodeKind.FieldDeclaration && !v.is(32) && !v.is(512) && !v.is(1024) && !v.decorators?.some((decorator) => decorator.name.text === "omit"));
175
176
  for (let i = inheritedMembers.length - 1; i >= 0; i--) {
176
177
  const inherited = inheritedMembers[i];
177
178
  if (!members.some((member) => member.name.text == inherited.name.text)) {
@@ -233,9 +234,9 @@ export class JSONTransform extends Visitor {
233
234
  return;
234
235
  if (!this.schemas.has(source.internalPath))
235
236
  this.schemas.set(source.internalPath, []);
236
- const members = [...node.members.filter((v) => v.kind === 54 && !v.is(32) && !v.is(512) && !v.is(1024) && !v.decorators?.some((decorator) => decorator.name.text === "omit"))];
237
- const serializers = [...node.members.filter((v) => v.kind === 58 && v.decorators && v.decorators.some((e) => e.name.text.toLowerCase() === "serializer") && !v.name.text.startsWith("__try"))];
238
- const deserializers = [...node.members.filter((v) => v.kind === 58 && v.decorators && v.decorators.some((e) => e.name.text.toLowerCase() === "deserializer") && !v.name.text.startsWith("__try"))];
237
+ const members = [...node.members.filter((v) => v.kind === NodeKind.FieldDeclaration && !v.is(32) && !v.is(512) && !v.is(1024) && !v.decorators?.some((decorator) => decorator.name.text === "omit"))];
238
+ const serializers = [...node.members.filter((v) => v.kind === NodeKind.MethodDeclaration && v.decorators && v.decorators.some((e) => e.name.text.toLowerCase() === "serializer") && !v.name.text.startsWith("__try"))];
239
+ const deserializers = [...node.members.filter((v) => v.kind === NodeKind.MethodDeclaration && v.decorators && v.decorators.some((e) => e.name.text.toLowerCase() === "deserializer") && !v.name.text.startsWith("__try"))];
239
240
  const schema = new Schema();
240
241
  schema.node = node;
241
242
  schema.name = source.getQualifiedName(node);
@@ -498,7 +499,7 @@ export class JSONTransform extends Visitor {
498
499
  mem.type = type;
499
500
  mem.value = value;
500
501
  mem.node = member;
501
- mem.byteSize = sizeof(mem.type);
502
+ mem.byteSize = estimatedSerializedByteSize(mem.type, source, this.parser);
502
503
  mem.custom = schema.deps.some((dep) => dep?.name == stripNull(type) && dep.custom);
503
504
  this.schema.byteSize += mem.byteSize;
504
505
  if (member.decorators) {
@@ -507,7 +508,7 @@ export class JSONTransform extends Visitor {
507
508
  switch (decoratorName) {
508
509
  case "alias": {
509
510
  const arg = decorator.args[0];
510
- if (!arg || (arg.kind != 16 && arg.literalKind != 2 && arg.literalKind != 1 && arg.literalKind != 0))
511
+ if (!arg || (arg.kind != NodeKind.Literal && arg.literalKind != 2 && arg.literalKind != 1 && arg.literalKind != 0))
511
512
  throwError("@alias must have an argument of type string or number", member.range);
512
513
  mem.alias = arg.value.toString();
513
514
  break;
@@ -634,7 +635,7 @@ export class JSONTransform extends Visitor {
634
635
  SERIALIZE += indent + `}\n`;
635
636
  }
636
637
  else if (member.flags.has(PropertyFlags.OmitIf)) {
637
- if (member.flags.get(PropertyFlags.OmitIf).kind == 14) {
638
+ if (member.flags.get(PropertyFlags.OmitIf).kind == NodeKind.Function) {
638
639
  const arg = member.flags.get(PropertyFlags.OmitIf);
639
640
  arg.declaration.signature.parameters[0].type = Node.createNamedType(Node.createSimpleTypeName("this", node.range), null, false, node.range);
640
641
  arg.declaration.signature.returnType.name = Node.createSimpleTypeName("boolean", arg.declaration.signature.returnType.name.range);
@@ -642,7 +643,7 @@ export class JSONTransform extends Visitor {
642
643
  }
643
644
  else {
644
645
  const expression = member.flags.get(PropertyFlags.OmitIf);
645
- const rendered = expression.kind == 16 && expression.literalKind == 2 ? JSON.stringify(expression.value).slice(1, -1) : toString(expression);
646
+ const rendered = expression.kind == NodeKind.Literal && expression.literalKind == 2 ? JSON.stringify(expression.value).slice(1, -1) : toString(expression);
646
647
  SERIALIZE += indent + `if (!(${rendered})) {\n`;
647
648
  }
648
649
  indentInc();
@@ -2104,15 +2105,56 @@ function sizeof(type) {
2104
2105
  return 20;
2105
2106
  else if (type == "i32")
2106
2107
  return 22;
2108
+ else if (type == "usize")
2109
+ return 40;
2110
+ else if (type == "isize")
2111
+ return 42;
2107
2112
  else if (type == "u64")
2108
2113
  return 40;
2109
2114
  else if (type == "i64")
2110
- return 40;
2115
+ return 42;
2116
+ else if (type == "f32")
2117
+ return 34;
2118
+ else if (type == "f64")
2119
+ return 66;
2111
2120
  else if (type == "bool" || type == "boolean")
2112
2121
  return 10;
2113
2122
  else
2114
2123
  return 0;
2115
2124
  }
2125
+ function estimatedSerializedByteSize(type, source, parser) {
2126
+ const trimmed = type.trim();
2127
+ const baseType = stripNull(trimmed);
2128
+ const nullable = trimmed != baseType;
2129
+ let estimated = sizeof(baseType);
2130
+ if (estimated == 0) {
2131
+ if (isEnum(baseType, source, parser)) {
2132
+ estimated = 22;
2133
+ }
2134
+ else if (baseType == "Date") {
2135
+ estimated = 52;
2136
+ }
2137
+ else if (isString(baseType)) {
2138
+ estimated = 4;
2139
+ }
2140
+ else if (isArray(baseType) || baseType.startsWith("Map<")) {
2141
+ estimated = 4;
2142
+ }
2143
+ else if (baseType == "JSON.Obj" || baseType == "Obj" || baseType == "JSON.Raw" || baseType == "Raw" || baseType == "JSON.Value" || baseType == "Value") {
2144
+ estimated = 4;
2145
+ }
2146
+ else if (baseType == "ArrayBuffer" || needsReferenceLoad(baseType)) {
2147
+ estimated = 4;
2148
+ }
2149
+ else {
2150
+ estimated = 4;
2151
+ }
2152
+ }
2153
+ if (nullable) {
2154
+ estimated = Math.max(estimated, 8);
2155
+ }
2156
+ return estimated;
2157
+ }
2116
2158
  function isPrimitive(type) {
2117
2159
  const primitiveTypes = ["u8", "u16", "u32", "u64", "i8", "i16", "i32", "i64", "f32", "f64", "bool", "boolean"];
2118
2160
  return primitiveTypes.some((v) => type.startsWith(v));