From 724bde0a695ec0c957fff3d52351e50e10236da0 Mon Sep 17 00:00:00 2001 From: Phil Kedy Date: Sun, 4 Feb 2024 07:18:16 -0500 Subject: [PATCH] Move from apex_core v0.1.3 to v0.1.5 --- .gitignore | 1 + LICENSE.txt => LICENSE | 0 scripts/build_npm.ts | 46 +++++++++++++++++++ src/cs/union_visitor.ts | 4 +- src/deps/core/ast.ts | 2 +- src/deps/core/model.ts | 2 +- src/go/grpc_visitor.ts | 10 ++-- src/go/union_visitor.ts | 17 +++---- src/json-schema/json-schema.ts | 2 +- src/markdown/markdown-visitor.ts | 6 ++- src/openapiv3/openapiv3.ts | 2 +- src/proto/proto_visitor.ts | 17 +++++-- src/python/interfaces_visitor.ts | 4 +- src/rust/visitors/union_visitor.ts | 3 +- src/typescript/plugin.ts | 8 ++-- src/utils/exposed_types.ts | 2 +- src/utils/utilities.ts | 9 ++-- templates/generator/src/default-visitor.ts | 2 +- templates/generator/src/utils/conversions.ts | 2 +- templates/generator/src/utils/types.ts | 2 +- .../generator/src/visitors/alias-visitor.ts | 2 +- templates/generator/src/visitors/base.ts | 2 +- .../generator/src/visitors/enum-visitor.ts | 2 +- .../src/visitors/interface-visitor.ts | 2 +- .../generator/src/visitors/type-visitor.ts | 2 +- .../generator/src/visitors/union-visitor.ts | 2 +- templates/generator/test/default.test.ts | 2 +- templates/generator/test/parse.ts | 4 +- test/parse.ts | 6 +-- test/utils/utilities.test.ts | 5 +- .../json-schema/expected/schema-test.json | 2 +- testdata/markdown/expected/docs.md | 9 +++- .../typescript/expected/src/interfaces.ts | 4 +- 33 files changed, 125 insertions(+), 60 deletions(-) rename LICENSE.txt => LICENSE (100%) create mode 100644 scripts/build_npm.ts diff --git a/.gitignore b/.gitignore index 642f70e..f87714f 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ bundle.js !/testdata/*/actual/go.* !/testdata/*/actual/package.* !/testdata/*/actual/requirements.txt +npm diff --git a/LICENSE.txt b/LICENSE similarity index 100% rename from LICENSE.txt rename to LICENSE diff --git a/scripts/build_npm.ts b/scripts/build_npm.ts new file mode 100644 index 0000000..91c9a3a --- /dev/null +++ b/scripts/build_npm.ts @@ -0,0 +1,46 @@ +// ex. scripts/build_npm.ts +import { build, emptyDir } from "https://deno.land/x/dnt@0.40.0/mod.ts"; + +await emptyDir("./npm"); + +await build({ + entryPoints: [ + "./src/cs/mod.ts", + "./src/go/mod.ts", + "./src/json-schema/mod.ts", + "./src/markdown/mod.ts", + "./src/openapiv3/mod.ts", + "./src/proto/mod.ts", + "./src/python/mod.ts", + "./src/rest/mod.ts", + "./src/rust/mod.ts", + "./src/typescript/mod.ts", + "./src/utils/mod.ts", + ], + outDir: "./npm", + test: false, + shims: { + // see JS docs for overview and more options + deno: true, + }, + package: { + // package.json properties + name: "@apexlang/core", + version: Deno.args[0], + description: "Apex language JavaScript support", + keywords: ["apex", "idl", "codegen"], + license: "Apache-2.0", + repository: { + type: "git", + url: "https://www.github.com/apexlang/apex-js", + }, + bugs: { + url: "https://www.github.com/apexlang/apex-js/issues", + }, + }, + postBuild() { + // steps to run after building and before running the tests + Deno.copyFileSync("LICENSE", "npm/LICENSE"); + Deno.copyFileSync("README.md", "npm/README.md"); + }, +}); diff --git a/src/cs/union_visitor.ts b/src/cs/union_visitor.ts index 433709d..b13000e 100644 --- a/src/cs/union_visitor.ts +++ b/src/cs/union_visitor.ts @@ -23,8 +23,8 @@ export class UnionVisitor extends BaseVisitor { const { union } = context; this.write(` ${formatComment("// ", union.description)}`); this.write(`public record ${union.name} {\n`); - union.types.forEach((t) => { - const typeName = expandType(t); + union.members.forEach((member) => { + const typeName = expandType(member.type); this.write(` public ${pascalCase(typeName)} ${typeName};`); this.triggerCallbacks(context, "UnionStructTags"); this.write(`\n`); diff --git a/src/deps/core/ast.ts b/src/deps/core/ast.ts index 0fb865f..0914f83 100644 --- a/src/deps/core/ast.ts +++ b/src/deps/core/ast.ts @@ -1 +1 @@ -export * from "https://deno.land/x/apex_core@v0.1.3/ast/mod.ts"; +export * from "https://deno.land/x/apex_core@v0.1.5/ast/mod.ts"; diff --git a/src/deps/core/model.ts b/src/deps/core/model.ts index c9cf081..5cf7730 100644 --- a/src/deps/core/model.ts +++ b/src/deps/core/model.ts @@ -1 +1 @@ -export * from "https://deno.land/x/apex_core@v0.1.3/model/mod.ts"; +export * from "https://deno.land/x/apex_core@v0.1.5/model/mod.ts"; diff --git a/src/go/grpc_visitor.ts b/src/go/grpc_visitor.ts index f2354fe..1030729 100644 --- a/src/go/grpc_visitor.ts +++ b/src/go/grpc_visitor.ts @@ -621,7 +621,8 @@ func New${iface.name}GRPCWrapper(service ${iface.name}) *${iface.name}GRPCWrappe } switch {\n`, ); - union.types.forEach((ut) => { + union.members.forEach((member) => { + const ut = member.type; this.write(`case from.${pascalCase(expandType(ut))} != nil: return &pb.${union.name}{\n`); switch (ut.kind) { @@ -844,7 +845,8 @@ func New${iface.name}GRPCWrapper(service ${iface.name}) *${iface.name}GRPCWrappe } switch v := from.Value.(type) {\n`, ); - union.types.forEach((ut) => { + union.members.forEach((member) => { + const ut = member.type; if (ut.kind == Kind.Type) { const t = ut as Named; this.write(`case *pb.${union.name}_${pascalCase(expandType(ut))}Value: @@ -919,7 +921,9 @@ func New${iface.name}GRPCWrapper(service ${iface.name}) *${iface.name}GRPCWrappe case Kind.Union: { const u = a as Union; m[u.name] = u; - u.types.forEach((t) => this.checkType(context, t, m, types)); + u.members.forEach((member) => + this.checkType(context, member.type, m, types) + ); break; } case Kind.Alias: { diff --git a/src/go/union_visitor.ts b/src/go/union_visitor.ts index 89fdfe5..b007b39 100644 --- a/src/go/union_visitor.ts +++ b/src/go/union_visitor.ts @@ -30,17 +30,14 @@ export class UnionVisitor extends GoVisitor { const imports = getImports(context); this.write(formatComment("// ", union.description)); this.write(`type ${union.name} struct {\n`); - union.types.forEach((t) => { - let tname = typeName(t); - const annotated = t as Annotated; - if (annotated.annotation) { - annotated.annotation("unionKey", (a) => { - tname = a.convert().value; - }); - } + union.members.forEach((member) => { + let tname = typeName(member.type); + member.annotation("unionKey", (a) => { + tname = a.convert().value; + }); - imports.type(t); - const expandedName = expandType(t); + imports.type(member.type); + const expandedName = expandType(member.type); this.write( `${ fieldName( diff --git a/src/json-schema/json-schema.ts b/src/json-schema/json-schema.ts index 65ca1c0..0427e06 100644 --- a/src/json-schema/json-schema.ts +++ b/src/json-schema/json-schema.ts @@ -167,7 +167,7 @@ class UnionVisitor extends BaseVisitor { const { union } = context; const arr: SchemaObject[] = []; convertArrayToObject( - union.types, + union.members.map((m) => m.type), (t: AnyType) => { switch (t.kind) { case Kind.Union: diff --git a/src/markdown/markdown-visitor.ts b/src/markdown/markdown-visitor.ts index 7c0b8d1..cf6accf 100644 --- a/src/markdown/markdown-visitor.ts +++ b/src/markdown/markdown-visitor.ts @@ -107,6 +107,10 @@ export class MarkdownVisitor extends BaseVisitor { visitUnion(context: Context): void { const u = context.union; this.writeDefinitionName(u.name); - this.writeLn(`\`${u.name} = ${u.types.map(expandType).join(" | ")}\``); + this.writeLn( + `\`${u.name} = ${ + u.members.map((m) => m.type).map(expandType).join(" | ") + }\``, + ); } } diff --git a/src/openapiv3/openapiv3.ts b/src/openapiv3/openapiv3.ts index 401fc30..28509e7 100644 --- a/src/openapiv3/openapiv3.ts +++ b/src/openapiv3/openapiv3.ts @@ -529,7 +529,7 @@ export class OpenAPIV3Visitor extends BaseVisitor { type: Types.OBJECT, description: union.description, properties: convertArrayToObject( - union.types, + union.members.map((m) => m.type), (t: AnyType) => { switch (t.kind) { case Kind.Union: diff --git a/src/proto/proto_visitor.ts b/src/proto/proto_visitor.ts index d11fdfe..3f2f1d4 100644 --- a/src/proto/proto_visitor.ts +++ b/src/proto/proto_visitor.ts @@ -162,12 +162,19 @@ package ${ns.name};\n\n`); this.write(formatComment("// ", u.description)); this.write(`message ${pascalCase(u.name)} {\n`); this.write(` oneof value {\n`); - let i = 0; - for (const t of u.types) { - const n = t as Named; - i++; + + for (const member of u.members) { + const n = member.type as Named; + + const fieldnumAnnotation = member.annotation("n"); + if (!fieldnumAnnotation) { + throw new Error(`${u.name}.${n.name} requires a @n`); + } + this.write( - ` ${typeSignature(t)} ${snakeCase(n.name)}_value = ${i};\n`, + ` ${typeSignature(member.type)} ${ + snakeCase(n.name) + }_value = ${n};\n`, ); } this.write(` }\n`); diff --git a/src/python/interfaces_visitor.ts b/src/python/interfaces_visitor.ts index 4a36aaf..4d7bba3 100644 --- a/src/python/interfaces_visitor.ts +++ b/src/python/interfaces_visitor.ts @@ -160,8 +160,8 @@ function tsort(context: Context): void { } case Kind.Union: { const un = t as Union; - un.types.map((ty) => { - visitNamed(ty, (name: string) => { + un.members.map((member) => { + visitNamed(member.type, (name: string) => { if (d.indexOf(name) == -1) { d.push(name); } diff --git a/src/rust/visitors/union_visitor.ts b/src/rust/visitors/union_visitor.ts index 193a33b..dcc6c7d 100644 --- a/src/rust/visitors/union_visitor.ts +++ b/src/rust/visitors/union_visitor.ts @@ -49,7 +49,8 @@ export class UnionVisitor extends SourceGenerator { } getSource(): string { - const variants = this.root.types.map((t) => { + const variants = this.root.members.map((member) => { + const t = member.type; const isRecursive = isRecursiveType(t); const isHeapAllocated = t.kind === Kind.Map || t.kind === Kind.List; const baseType = types.apexToRustType(t, this.config); diff --git a/src/typescript/plugin.ts b/src/typescript/plugin.ts index 20a3897..0443ea6 100644 --- a/src/typescript/plugin.ts +++ b/src/typescript/plugin.ts @@ -1,23 +1,23 @@ import { Configuration } from "https://deno.land/x/apex_cli@v0.0.18/src/config.ts"; -import * as apex from "https://deno.land/x/apex_core@v0.1.3/mod.ts"; +import * as ast from "https://deno.land/x/apex_core@v0.1.5/ast.ts"; const importUrl = new URL(".", import.meta.url); -function urlify(relpath: string): string { +function _urlify(relpath: string): string { const url = new URL(relpath, importUrl).toString(); console.error(url); return url; } export default function ( - doc: apex.ast.Document, + _doc: ast.Document, config: Configuration, ): Configuration { config.generates ||= {}; config.config ||= {}; config.config.aliases ||= {}; - (config.config.aliases as any).UUID = { + (config.config.aliases as Record).UUID = { type: true, import: "v4 as uuidv4", from: "uuid", diff --git a/src/utils/exposed_types.ts b/src/utils/exposed_types.ts index e0ffbcc..995ad9f 100644 --- a/src/utils/exposed_types.ts +++ b/src/utils/exposed_types.ts @@ -55,7 +55,7 @@ export class ExposedTypesVisitor extends BaseVisitor { } case Kind.Union: { const u = any as Union; - u.types.forEach((t) => this.checkType(t)); + u.members.forEach((member) => this.checkType(member.type)); break; } case Kind.Alias: { diff --git a/src/utils/utilities.ts b/src/utils/utilities.ts index 2875e8a..e3868b7 100644 --- a/src/utils/utilities.ts +++ b/src/utils/utilities.ts @@ -602,9 +602,9 @@ export function convertOperationToType( } export function convertUnionToType(tr: TypeResolver, union: Union): Type { - const fields = union.types.map((param) => { - const n = typeName(param); - const t = modelToAST(param); + const fields = union.members.map((member) => { + const n = typeName(member.type); + const t = modelToAST(member.type); return new FieldDefinition( undefined, new Name(undefined, n), @@ -849,7 +849,8 @@ export function isRecursiveType(typ: AnyType, seen: NamedType[] = []): boolean { case Kind.Union: { const t = typ as Union; - return t.types.filter((t) => isRecursiveType(t, seen)).length > 0; + return t.members.filter((member) => isRecursiveType(member.type, seen)) + .length > 0; } case Kind.Type: { diff --git a/templates/generator/src/default-visitor.ts b/templates/generator/src/default-visitor.ts index b0685f9..6358dff 100644 --- a/templates/generator/src/default-visitor.ts +++ b/templates/generator/src/default-visitor.ts @@ -1,7 +1,7 @@ import { BaseVisitor, Context, -} from "https://deno.land/x/apex_core@v0.1.3/model/mod.ts"; +} from "https://deno.land/x/apex_core@v0.1.5/model/mod.ts"; import { TypeVisitor } from "./visitors/type-visitor.ts"; import { InterfaceVisitor } from "./visitors/interface-visitor.ts"; import { EnumVisitor } from "./visitors/enum-visitor.ts"; diff --git a/templates/generator/src/utils/conversions.ts b/templates/generator/src/utils/conversions.ts index 817fde5..4b30d06 100644 --- a/templates/generator/src/utils/conversions.ts +++ b/templates/generator/src/utils/conversions.ts @@ -2,7 +2,7 @@ import { ObjectMap, Operation, Parameter, -} from "https://deno.land/x/apex_core@v0.1.3/model/mod.ts"; +} from "https://deno.land/x/apex_core@v0.1.5/model/mod.ts"; import * as utils from "https://deno.land/x/apex_codegen@v0.1.7/utils/mod.ts"; import { convertType } from "./types.ts"; diff --git a/templates/generator/src/utils/types.ts b/templates/generator/src/utils/types.ts index b12b708..a04d532 100644 --- a/templates/generator/src/utils/types.ts +++ b/templates/generator/src/utils/types.ts @@ -8,7 +8,7 @@ import { Optional, Primitive, PrimitiveName, -} from "https://deno.land/x/apex_core@v0.1.3/model/mod.ts"; +} from "https://deno.land/x/apex_core@v0.1.5/model/mod.ts"; /** * Convert an Apex type to a type suitable for the destination format. diff --git a/templates/generator/src/visitors/alias-visitor.ts b/templates/generator/src/visitors/alias-visitor.ts index bc368bb..cc81800 100644 --- a/templates/generator/src/visitors/alias-visitor.ts +++ b/templates/generator/src/visitors/alias-visitor.ts @@ -1,7 +1,7 @@ import { Alias, Context, -} from "https://deno.land/x/apex_core@v0.1.3/model/mod.ts"; +} from "https://deno.land/x/apex_core@v0.1.5/model/mod.ts"; import { convertDescription } from "../utils/conversions.ts"; import { convertType } from "../utils/types.ts"; diff --git a/templates/generator/src/visitors/base.ts b/templates/generator/src/visitors/base.ts index e1ea614..100400c 100644 --- a/templates/generator/src/visitors/base.ts +++ b/templates/generator/src/visitors/base.ts @@ -8,7 +8,7 @@ import { Type, Union, Writer, -} from "https://deno.land/x/apex_core@v0.1.3/model/mod.ts"; +} from "https://deno.land/x/apex_core@v0.1.5/model/mod.ts"; export type VisitorTypes = Alias | Type | Union | Enum | Interface; diff --git a/templates/generator/src/visitors/enum-visitor.ts b/templates/generator/src/visitors/enum-visitor.ts index 2677dbf..0a8bcd2 100644 --- a/templates/generator/src/visitors/enum-visitor.ts +++ b/templates/generator/src/visitors/enum-visitor.ts @@ -1,7 +1,7 @@ import { Context, Enum, -} from "https://deno.land/x/apex_core@v0.1.3/model/mod.ts"; +} from "https://deno.land/x/apex_core@v0.1.5/model/mod.ts"; import { convertDescription } from "../utils/conversions.ts"; import { SourceGenerator } from "./base.ts"; diff --git a/templates/generator/src/visitors/interface-visitor.ts b/templates/generator/src/visitors/interface-visitor.ts index ce2f2cb..746bc0d 100644 --- a/templates/generator/src/visitors/interface-visitor.ts +++ b/templates/generator/src/visitors/interface-visitor.ts @@ -1,7 +1,7 @@ import { Context, Interface, -} from "https://deno.land/x/apex_core@v0.1.3/model/mod.ts"; +} from "https://deno.land/x/apex_core@v0.1.5/model/mod.ts"; import { convertDescription, convertOperation } from "../utils/conversions.ts"; import { SourceGenerator } from "./base.ts"; diff --git a/templates/generator/src/visitors/type-visitor.ts b/templates/generator/src/visitors/type-visitor.ts index 28a13e2..d12069b 100644 --- a/templates/generator/src/visitors/type-visitor.ts +++ b/templates/generator/src/visitors/type-visitor.ts @@ -1,7 +1,7 @@ import { Context, Type, -} from "https://deno.land/x/apex_core@v0.1.3/model/mod.ts"; +} from "https://deno.land/x/apex_core@v0.1.5/model/mod.ts"; import { convertDescription } from "../utils/conversions.ts"; import { convertType } from "../utils/types.ts"; import { SourceGenerator } from "./base.ts"; diff --git a/templates/generator/src/visitors/union-visitor.ts b/templates/generator/src/visitors/union-visitor.ts index 369e39d..eb94fea 100644 --- a/templates/generator/src/visitors/union-visitor.ts +++ b/templates/generator/src/visitors/union-visitor.ts @@ -1,7 +1,7 @@ import { Context, Union, -} from "https://deno.land/x/apex_core@v0.1.3/model/mod.ts"; +} from "https://deno.land/x/apex_core@v0.1.5/model/mod.ts"; import { convertDescription } from "../utils/conversions.ts"; import { convertType } from "../utils/types.ts"; diff --git a/templates/generator/test/default.test.ts b/templates/generator/test/default.test.ts index 71501af..31f5ce4 100644 --- a/templates/generator/test/default.test.ts +++ b/templates/generator/test/default.test.ts @@ -1,6 +1,6 @@ import { parse } from "./parse.ts"; import { DefaultVisitor } from "../src/default-visitor.ts"; -import { Writer } from "https://deno.land/x/apex_core@v0.1.3/model/mod.ts"; +import { Writer } from "https://deno.land/x/apex_core@v0.1.5/model/mod.ts"; import { assert } from "https://deno.land/std@0.167.0/testing/asserts.ts"; Deno.test("should generate apex from apex", () => { diff --git a/templates/generator/test/parse.ts b/templates/generator/test/parse.ts index 3357879..1841bac 100644 --- a/templates/generator/test/parse.ts +++ b/templates/generator/test/parse.ts @@ -1,5 +1,5 @@ -import { parse as parseApex } from "https://deno.land/x/apex_core@v0.1.3/mod.ts"; -import { Context } from "https://deno.land/x/apex_core@v0.1.3/model/mod.ts"; +import { parse as parseApex } from "https://deno.land/x/apex_core@v0.1.5/mod.ts"; +import { Context } from "https://deno.land/x/apex_core@v0.1.5/model/mod.ts"; export function parse(src: string): Context { const doc = parseApex(src); diff --git a/test/parse.ts b/test/parse.ts index d70845a..eee6f42 100644 --- a/test/parse.ts +++ b/test/parse.ts @@ -1,4 +1,4 @@ -import { parse as parseApex } from "https://deno.land/x/apex_core@v0.1.3/mod.ts"; +import { parse as parseApex } from "https://deno.land/x/apex_core@v0.1.5/mod.ts"; import { Context, Namespace, Type } from "../src/deps/core/model.ts"; export function parse(src: string): Namespace { @@ -9,6 +9,6 @@ export function parse(src: string): Namespace { export function getTypes(namespace: Namespace, types: string[]): Type[] { return Object.entries(namespace.types) - .filter(([name, type]) => (types.indexOf(name) === -1 ? false : true)) - .map(([n, t]) => t); + .filter(([name, _type]) => (types.indexOf(name) === -1 ? false : true)) + .map(([_n, t]) => t); } diff --git a/test/utils/utilities.test.ts b/test/utils/utilities.test.ts index 900347a..c5ccb7e 100644 --- a/test/utils/utilities.test.ts +++ b/test/utils/utilities.test.ts @@ -1,7 +1,6 @@ -import { assert } from "https://deno.land/std@0.167.0/testing/asserts.ts"; +import { assert } from "https://deno.land/std@0.213.0/assert/assert.ts"; import { isRecursiveType } from "../../src/utils/utilities.ts"; import { getTypes, parse } from "../parse.ts"; -export * from "https://deno.land/std@0.167.0/testing/asserts.ts"; Deno.test("should not identify recursive types", () => { const apex = ` @@ -16,7 +15,7 @@ Deno.test("should not identify recursive types", () => { } `; const model = parse(apex); - const [parent, child] = getTypes(model, ["Parent"]); + const [parent, _child] = getTypes(model, ["Parent"]); assert(isRecursiveType(parent)); }); diff --git a/testdata/json-schema/expected/schema-test.json b/testdata/json-schema/expected/schema-test.json index a4c2db4..acab865 100644 --- a/testdata/json-schema/expected/schema-test.json +++ b/testdata/json-schema/expected/schema-test.json @@ -217,4 +217,4 @@ ] } } -} \ No newline at end of file +} diff --git a/testdata/markdown/expected/docs.md b/testdata/markdown/expected/docs.md index 03fc563..ca3b6d3 100644 --- a/testdata/markdown/expected/docs.md +++ b/testdata/markdown/expected/docs.md @@ -5,9 +5,11 @@ Namespace: **`apex.testing`** ## Aliases ### **MyString** + `alias MyString = string` ### **UUID** + `alias UUID = string` ## Interfaces @@ -49,6 +51,7 @@ MyService service - **`funcBytes(value: bytes, optional: bytes) -> bytes`** ### **Repository** + - **`getData() -> MyType`** ## Types @@ -97,12 +100,14 @@ MyType is a class - **`aliasOption: UUID`** : enum option ### **MyOtherType** -- **`foo: string`** -- **`bar: string`** + +- **`foo: string`** +- **`bar: string`** ## Unions ### **MyUnion** + `MyUnion = MyType | MyEnum | MyString` ## Enums diff --git a/testdata/typescript/expected/src/interfaces.ts b/testdata/typescript/expected/src/interfaces.ts index f5c3b58..d808d1b 100644 --- a/testdata/typescript/expected/src/interfaces.ts +++ b/testdata/typescript/expected/src/interfaces.ts @@ -155,7 +155,7 @@ export class MyType { enumValue = new MyEnum(), enumOption = null, aliasValue = new UUID(), - aliasOption = null + aliasOption = null, }: { sameValue?: MyType | undefined; typeValue?: MyOtherType; @@ -254,5 +254,5 @@ export enum MyEnum { // TWO value Two = 1, // THREE value - Three = 2 + Three = 2, }