From 13666b8390184eeca0986f07b1f68976ba8148fc Mon Sep 17 00:00:00 2001 From: Mark Cowlishaw Date: Fri, 7 Apr 2023 16:19:05 -0700 Subject: [PATCH 1/2] Fixed #2664: Add migrate script for zonedDateTime --- packages/migrate/src/migration-config.ts | 4 +- .../v0.43/zoned-date-time-to-utc-date-time.ts | 45 +++++++++++++++++ .../zoned-date-time-to-utc-date-time.test.ts | 50 +++++++++++++++++++ 3 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 packages/migrate/src/migrations/v0.43/zoned-date-time-to-utc-date-time.ts create mode 100644 packages/migrate/test/zoned-date-time-to-utc-date-time.test.ts diff --git a/packages/migrate/src/migration-config.ts b/packages/migrate/src/migration-config.ts index c633b61a7ee..a5740d04448 100644 --- a/packages/migrate/src/migration-config.ts +++ b/packages/migrate/src/migration-config.ts @@ -7,7 +7,7 @@ import { updatePackageVersion, } from "./migrations/v0.41/typespec-rename.js"; import { migrateQueryHeaderRequiredFormat } from "./migrations/v0.43/query-header-required-format.js"; - +import { migrateZonedDateTimeToUtcDateTime } from "./migrations/v0.43/zoned-date-time-to-utc-date-time.js"; // Update here before release. export type TypeSpecCompilerCurrent = typeof import("@typespec/compiler"); export type TypeSpecCompilerV0_37 = typeof import("@typespec/compiler-v0.37"); @@ -37,5 +37,5 @@ export const migrationConfigurations: MigrationStepsDictionary = { updatePackageVersion, migrateTspConfigFile, ], - "0.43.0": [migrateQueryHeaderRequiredFormat], + "0.43.0": [migrateQueryHeaderRequiredFormat, migrateZonedDateTimeToUtcDateTime], }; diff --git a/packages/migrate/src/migrations/v0.43/zoned-date-time-to-utc-date-time.ts b/packages/migrate/src/migrations/v0.43/zoned-date-time-to-utc-date-time.ts new file mode 100644 index 00000000000..d555d05cedc --- /dev/null +++ b/packages/migrate/src/migrations/v0.43/zoned-date-time-to-utc-date-time.ts @@ -0,0 +1,45 @@ +import { Node, SyntaxKind, TypeSpecScriptNode } from "@typespec/compiler-v0.42"; +import { TypeSpecCompilerV0_42 } from "../../migration-config.js"; +import { + AstContentMigrateAction, + createContentMigration, + MigrationContext, + MigrationKind, +} from "../../migration-types.js"; + +export const migrateZonedDateTimeToUtcDateTime = createContentMigration({ + name: "Migrate zonedDateTime to utcDateTime", + kind: MigrationKind.AstContentMigration, + from: "0.42.0", + to: "0.43.0", + migrate: ( + { printNode, printNodes }: MigrationContext, + compilerV37: TypeSpecCompilerV0_42, + root: TypeSpecScriptNode + ) => { + const actions: AstContentMigrateAction[] = []; + visitRecursive(compilerV37, root, (node) => { + if ( + node.kind === SyntaxKind.TypeReference && + node.target.kind === SyntaxKind.Identifier && + node.target.sv === "zonedDateTime" + ) { + actions.push({ + kind: MigrationKind.AstContentMigration, + target: node.target, + content: "utcDateTime", + }); + } + }); + + return actions; + }, +}); + +function visitRecursive(compiler: any, root: Node, callback: (node: Node) => void) { + const visit = (node: Node) => { + callback(node); + compiler.visitChildren(node, visit); + }; + visit(root); +} diff --git a/packages/migrate/test/zoned-date-time-to-utc-date-time.test.ts b/packages/migrate/test/zoned-date-time-to-utc-date-time.test.ts new file mode 100644 index 00000000000..fe9bce927f5 --- /dev/null +++ b/packages/migrate/test/zoned-date-time-to-utc-date-time.test.ts @@ -0,0 +1,50 @@ +import { strictEqual } from "assert"; +import { migrateTypeSpecContent } from "../src/migration-impl.js"; +import { migrateZonedDateTimeToUtcDateTime } from "../src/migrations/v0.43/zoned-date-time-to-utc-date-time.js"; + +describe("migration: zonedDateTime to utcDateTime", () => { + it("migrates type references and not other identifiers", async () => { + const [result] = await migrateTypeSpecContent( + ` + scalar instant extends zonedDateTime; + + model Widget { + created: zonedDateTime; + \`zonedDateTime\`: zonedDateTime; + } + + @error + model Error { + code: int32; + message: string; + } + + op test(@path id: string, time: zonedDateTime) : zonedDateTime; + op test(@path id: string, time: zonedDateTime) : zonedDateTime | Error; + `, + migrateZonedDateTimeToUtcDateTime + ); + + strictEqual( + result.trim(), + // note that the `zonedDateTime` property name no longer needs to be escaped with backticks + ` +scalar instant extends utcDateTime; + +model Widget { + created: utcDateTime; + zonedDateTime: utcDateTime; +} + +@error +model Error { + code: int32; + message: string; +} + +op test(@path id: string, time: utcDateTime): utcDateTime; +op test(@path id: string, time: utcDateTime): utcDateTime | Error; +`.trim() + ); + }); +}); From c49e33594f762afb15c771bd06843a460f9589c9 Mon Sep 17 00:00:00 2001 From: Mark Cowlishaw Date: Fri, 7 Apr 2023 16:20:32 -0700 Subject: [PATCH 2/2] Update changelog --- .../migrate/date-time-migrate_2023-04-07-23-20.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 common/changes/@typespec/migrate/date-time-migrate_2023-04-07-23-20.json diff --git a/common/changes/@typespec/migrate/date-time-migrate_2023-04-07-23-20.json b/common/changes/@typespec/migrate/date-time-migrate_2023-04-07-23-20.json new file mode 100644 index 00000000000..54e119f5c77 --- /dev/null +++ b/common/changes/@typespec/migrate/date-time-migrate_2023-04-07-23-20.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@typespec/migrate", + "comment": "Add migrate script for zonedDateTime", + "type": "none" + } + ], + "packageName": "@typespec/migrate" +} \ No newline at end of file