From 7d3b17eeb779d62200783e0a6c58f0fd18d82324 Mon Sep 17 00:00:00 2001 From: OceanOak Date: Mon, 6 Oct 2025 06:27:34 +0000 Subject: [PATCH] Reference package items by hash instead of UUID --- ...replace_id_with_hash_in_package_tables.sql | 42 + .../serialization/toplevels-binary-latest.bin | Bin 105 -> 203 bytes ...AnalysisTypes-TraceData_testTraceData.json | 492 ++++++-- ...Roundtrippable-FormatV0-Dval_complete.json | 246 +++- ...ramTypes-PackageFn-PackageFn_function.json | 62 +- ...ramTypes-PackageType-PackageType_type.json | 18 +- ...Types-PackageValue-PackageValue_value.json | 6 +- ...bExecution-ProgramTypes-Toplevel-T_db.json | 12 +- ...n-ProgramTypes-Toplevel-T_httphandler.json | 32 +- ...ion-ProgramTypes-Toplevel-T-_complete.json | 140 ++- backend/src/BuiltinCli/Libs/Execution.fs | 10 +- backend/src/BuiltinCli/Libs/Stdin.fs | 12 +- backend/src/BuiltinCliHost/Libs/Cli.fs | 31 +- backend/src/BuiltinCliHost/Utils.fs | 12 +- .../src/BuiltinDarkInternal/Libs/Canvases.fs | 7 +- backend/src/BuiltinDarkInternal/Libs/Infra.fs | 6 +- .../src/BuiltinDarkInternal/Libs/Secrets.fs | 7 +- .../src/BuiltinDarkInternal/Libs/Workers.fs | 4 +- backend/src/BuiltinExecution/Libs/AltJson.fs | 6 +- backend/src/BuiltinExecution/Libs/Dict.fs | 2 +- backend/src/BuiltinExecution/Libs/Float.fs | 8 +- .../src/BuiltinExecution/Libs/HttpClient.fs | 17 +- backend/src/BuiltinExecution/Libs/Int128.fs | 9 +- backend/src/BuiltinExecution/Libs/Int16.fs | 9 +- backend/src/BuiltinExecution/Libs/Int32.fs | 9 +- backend/src/BuiltinExecution/Libs/Int64.fs | 9 +- backend/src/BuiltinExecution/Libs/Int8.fs | 8 +- backend/src/BuiltinExecution/Libs/Json.fs | 6 +- .../BuiltinExecution/Libs/LanguageTools.fs | 8 +- backend/src/BuiltinExecution/Libs/NoModule.fs | 10 +- backend/src/BuiltinExecution/Libs/Packages.fs | 49 +- backend/src/BuiltinExecution/Libs/Parser.fs | 2 +- .../src/BuiltinExecution/Libs/Reflection.fs | 2 +- backend/src/BuiltinExecution/Libs/UInt128.fs | 9 +- backend/src/BuiltinExecution/Libs/UInt16.fs | 10 +- backend/src/BuiltinExecution/Libs/UInt32.fs | 10 +- backend/src/BuiltinExecution/Libs/UInt64.fs | 9 +- backend/src/BuiltinExecution/Libs/UInt8.fs | 9 +- backend/src/BuiltinExecution/Libs/Uuid.fs | 8 +- backend/src/Cli/Cli.fs | 4 +- .../DvalReprDeveloper/DvalReprDeveloper.fs | 10 +- .../Serializers/Common.fs | 9 + .../Serializers/PT/Common.fs | 12 +- .../Serializers/PT/PackageFn.fs | 6 +- .../Serializers/PT/PackageType.fs | 6 +- .../Serializers/PT/PackageValue.fs | 6 +- .../Serializers/RT/Common.fs | 12 +- .../Serializers/RT/PackageFn.fs | 6 +- .../Serializers/RT/PackageType.fs | 6 +- .../Serializers/RT/PackageValue.fs | 6 +- .../DvalReprInternalRoundtrippable.fs | 6 +- .../src/LibCloudExecution/CloudExecution.fs | 4 +- backend/src/LibExecution/Dval.fs | 4 +- backend/src/LibExecution/Execution.fs | 21 +- backend/src/LibExecution/Hashing.fs | 407 +++++++ backend/src/LibExecution/Interpreter.fs | 8 +- backend/src/LibExecution/LibExecution.fsproj | 3 +- backend/src/LibExecution/PackageHashes.fs | 1020 +++++++++++++++++ backend/src/LibExecution/PackageIDs.fs | 478 -------- backend/src/LibExecution/ProgramTypes.fs | 54 +- .../LibExecution/ProgramTypesToDarkTypes.fs | 120 +- .../ProgramTypesToRuntimeTypes.fs | 19 +- backend/src/LibExecution/RuntimeTypes.fs | 51 +- .../LibExecution/RuntimeTypesToDarkTypes.fs | 90 +- backend/src/LibHttpMiddleware/Http.fs | 8 +- backend/src/LibPackageManager/Inserts.fs | 35 +- backend/src/LibPackageManager/ProgramTypes.fs | 69 +- backend/src/LibPackageManager/RuntimeTypes.fs | 48 +- backend/src/LibParser/Canvas.fs | 31 +- backend/src/LibParser/NameResolver.fs | 6 +- backend/src/LibParser/TestModule.fs | 20 +- .../LibParser/WrittenTypesToProgramTypes.fs | 12 +- backend/src/LocalExec/LoadPackagesFromDisk.fs | 18 +- backend/src/LocalExec/Utils.fs | 12 +- backend/src/Prelude/Prelude.fs | 2 + backend/tests/TestUtils/LibTest.fs | 10 +- backend/tests/TestUtils/PTShortcuts.fs | 5 +- backend/tests/TestUtils/TestUtils.fs | 61 +- backend/tests/Tests/Cron.Tests.fs | 4 +- backend/tests/Tests/DvalRepr.Tests.fs | 12 +- backend/tests/Tests/HttpClient.Tests.fs | 4 +- backend/tests/Tests/Interpreter.Tests.fs | 20 +- backend/tests/Tests/LibExecution.Tests.fs | 6 +- backend/tests/Tests/LibParser.Tests.fs | 6 +- backend/tests/Tests/NewParser.Tests.fs | 14 +- backend/tests/Tests/PT2RT.Tests.fs | 45 +- .../tests/Tests/Serialization.Binary.Tests.fs | 24 +- .../Tests/Serialization.DarkTypes.Tests.fs | 31 +- .../tests/Tests/Serialization.TestValues.fs | 54 +- backend/tests/Tests/SqlCompiler.Tests.fs | 4 +- backend/tests/Tests/TestValues.fs | 107 +- packages/darklang/languageTools/common.dark | 1 + .../languageTools/packageManager.dark | 18 +- .../darklang/languageTools/parser/canvas.dark | 18 +- .../languageTools/parser/cliScript.dark | 36 +- .../darklang/languageTools/programTypes.dark | 36 +- .../darklang/languageTools/runtimeTypes.dark | 10 +- .../writtenTypesToProgramTypes.dark | 21 +- .../darklang/prettyPrinter/programTypes.dark | 38 +- .../darklang/prettyPrinter/runtimeTypes.dark | 18 +- 100 files changed, 3154 insertions(+), 1426 deletions(-) create mode 100644 backend/migrations/20250929_000000_replace_id_with_hash_in_package_tables.sql create mode 100644 backend/src/LibExecution/Hashing.fs create mode 100644 backend/src/LibExecution/PackageHashes.fs delete mode 100644 backend/src/LibExecution/PackageIDs.fs diff --git a/backend/migrations/20250929_000000_replace_id_with_hash_in_package_tables.sql b/backend/migrations/20250929_000000_replace_id_with_hash_in_package_tables.sql new file mode 100644 index 0000000000..c674441a3c --- /dev/null +++ b/backend/migrations/20250929_000000_replace_id_with_hash_in_package_tables.sql @@ -0,0 +1,42 @@ +DROP TABLE package_types_v0; +CREATE TABLE package_types_v0 ( + owner TEXT NOT NULL, + modules TEXT NOT NULL, + name TEXT NOT NULL, + hash TEXT NOT NULL, + pt_def BLOB, + rt_def BLOB, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + PRIMARY KEY (owner, modules, name) +); + + +DROP TABLE package_values_v0; +CREATE TABLE package_values_v0 ( + owner TEXT NOT NULL, + modules TEXT NOT NULL, + name TEXT NOT NULL, + hash TEXT NOT NULL, + pt_def BLOB, + rt_dval BLOB, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + PRIMARY KEY (owner, modules, name) +); + + +DROP TABLE package_functions_v0; +CREATE TABLE package_functions_v0 ( + owner TEXT NOT NULL, + modules TEXT NOT NULL, + name TEXT NOT NULL, + hash TEXT NOT NULL, + pt_def BLOB, + rt_instrs BLOB, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + PRIMARY KEY (owner, modules, name) +); + + +CREATE INDEX IF NOT EXISTS idx_package_types_hash ON package_types_v0(hash); +CREATE INDEX IF NOT EXISTS idx_package_values_hash ON package_values_v0(hash); +CREATE INDEX IF NOT EXISTS idx_package_functions_hash ON package_functions_v0(hash); \ No newline at end of file diff --git a/backend/serialization/toplevels-binary-latest.bin b/backend/serialization/toplevels-binary-latest.bin index 2a1b654d3449dce74c7cf33e096360d2bc83453c..0e49871bee2edf8c6981bc285bbab3178a816cb0 100644 GIT binary patch literal 203 zcmb`9$q~XZ3;<;?r??)0wBain`9~8J5KDFeBpuQi@Sy^BW*_@m0|2j&KkQ?w&u{gx z@9AfhtF Ts3C|X@@)Qex!So-^9=#t+j}WR delta 62 zcmX@jn90h>z`&3=k=59+SpT}=O#azXQ|9apXI)q0%g8OlzeF diff --git a/backend/serialization/vanilla_LibExecution-AnalysisTypes-TraceData_testTraceData.json b/backend/serialization/vanilla_LibExecution-AnalysisTypes-TraceData_testTraceData.json index 964fe73542..e9cafaf051 100644 --- a/backend/serialization/vanilla_LibExecution-AnalysisTypes-TraceData_testTraceData.json +++ b/backend/serialization/vanilla_LibExecution-AnalysisTypes-TraceData_testTraceData.json @@ -6,12 +6,20 @@ "DRecord": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [], @@ -3637,12 +3645,20 @@ "DEnum": [ { "Package": [ - "d80a6028-92e8-4da2-89b3-1cfc5d275024" + { + "Hash": [ + "398e73cc62c5e5e83bd88bbc425ac0315674e7c4c3b997d7bfc7d3a99bc8057d" + ] + } ] }, { "Package": [ - "d80a6028-92e8-4da2-89b3-1cfc5d275024" + { + "Hash": [ + "398e73cc62c5e5e83bd88bbc425ac0315674e7c4c3b997d7bfc7d3a99bc8057d" + ] + } ] }, [], @@ -7123,12 +7139,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7148,12 +7172,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7179,12 +7211,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7210,12 +7250,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7241,12 +7289,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7272,12 +7328,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7303,12 +7367,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7334,12 +7406,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7365,12 +7445,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7396,12 +7484,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7427,12 +7523,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7458,12 +7562,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7499,12 +7611,20 @@ "DRecord": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [], @@ -7561,12 +7681,20 @@ "DRecord": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [ @@ -7597,12 +7725,20 @@ "DRecord": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [], @@ -7624,12 +7760,20 @@ "DRecord": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [ @@ -7653,7 +7797,11 @@ "KTCustomType": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [] @@ -7675,12 +7823,20 @@ "DRecord": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [], @@ -7765,12 +7921,20 @@ "DEnum": [ { "Package": [ - "c1cb018c-8264-4080-be7f-b06b8a0e1729" + { + "Hash": [ + "f2ca0aff55b71c247fd286f61786e51d0ebc89aaac025704404920fc85f52745" + ] + } ] }, { "Package": [ - "c1cb018c-8264-4080-be7f-b06b8a0e1729" + { + "Hash": [ + "f2ca0aff55b71c247fd286f61786e51d0ebc89aaac025704404920fc85f52745" + ] + } ] }, [ @@ -7895,12 +8059,20 @@ "DRecord": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [], @@ -11526,12 +11698,20 @@ "DEnum": [ { "Package": [ - "d80a6028-92e8-4da2-89b3-1cfc5d275024" + { + "Hash": [ + "398e73cc62c5e5e83bd88bbc425ac0315674e7c4c3b997d7bfc7d3a99bc8057d" + ] + } ] }, { "Package": [ - "d80a6028-92e8-4da2-89b3-1cfc5d275024" + { + "Hash": [ + "398e73cc62c5e5e83bd88bbc425ac0315674e7c4c3b997d7bfc7d3a99bc8057d" + ] + } ] }, [], @@ -15012,12 +15192,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -15037,12 +15225,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -15068,12 +15264,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -15099,12 +15303,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -15130,12 +15342,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -15161,12 +15381,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -15192,12 +15420,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -15223,12 +15459,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -15254,12 +15498,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -15285,12 +15537,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -15316,12 +15576,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -15347,12 +15615,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -15388,12 +15664,20 @@ "DRecord": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [], @@ -15450,12 +15734,20 @@ "DRecord": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [ @@ -15486,12 +15778,20 @@ "DRecord": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [], @@ -15513,12 +15813,20 @@ "DRecord": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [ @@ -15542,7 +15850,11 @@ "KTCustomType": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [] @@ -15564,12 +15876,20 @@ "DRecord": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [], @@ -15654,12 +15974,20 @@ "DEnum": [ { "Package": [ - "c1cb018c-8264-4080-be7f-b06b8a0e1729" + { + "Hash": [ + "f2ca0aff55b71c247fd286f61786e51d0ebc89aaac025704404920fc85f52745" + ] + } ] }, { "Package": [ - "c1cb018c-8264-4080-be7f-b06b8a0e1729" + { + "Hash": [ + "f2ca0aff55b71c247fd286f61786e51d0ebc89aaac025704404920fc85f52745" + ] + } ] }, [ diff --git a/backend/serialization/vanilla_LibExecution-DvalReprInternalRoundtrippable-FormatV0-Dval_complete.json b/backend/serialization/vanilla_LibExecution-DvalReprInternalRoundtrippable-FormatV0-Dval_complete.json index 5f7000e165..0b8bde12da 100644 --- a/backend/serialization/vanilla_LibExecution-DvalReprInternalRoundtrippable-FormatV0-Dval_complete.json +++ b/backend/serialization/vanilla_LibExecution-DvalReprInternalRoundtrippable-FormatV0-Dval_complete.json @@ -2,12 +2,20 @@ "DRecord": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [], @@ -3633,12 +3641,20 @@ "DEnum": [ { "Package": [ - "d80a6028-92e8-4da2-89b3-1cfc5d275024" + { + "Hash": [ + "398e73cc62c5e5e83bd88bbc425ac0315674e7c4c3b997d7bfc7d3a99bc8057d" + ] + } ] }, { "Package": [ - "d80a6028-92e8-4da2-89b3-1cfc5d275024" + { + "Hash": [ + "398e73cc62c5e5e83bd88bbc425ac0315674e7c4c3b997d7bfc7d3a99bc8057d" + ] + } ] }, [], @@ -7119,12 +7135,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7144,12 +7168,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7175,12 +7207,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7206,12 +7246,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7237,12 +7285,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7268,12 +7324,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7299,12 +7363,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7330,12 +7402,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7361,12 +7441,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7392,12 +7480,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7423,12 +7519,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7454,12 +7558,20 @@ "DEnum": [ { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, { "Package": [ - "9ce3b596-968f-44c9-bcd4-511007cd9225" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] }, [ @@ -7495,12 +7607,20 @@ "DRecord": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [], @@ -7557,12 +7677,20 @@ "DRecord": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [ @@ -7593,12 +7721,20 @@ "DRecord": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [], @@ -7620,12 +7756,20 @@ "DRecord": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [ @@ -7649,7 +7793,11 @@ "KTCustomType": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [] @@ -7671,12 +7819,20 @@ "DRecord": [ { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, { "Package": [ - "dca045b1-e2af-41d8-ad1b-35261b25a426" + { + "Hash": [ + "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" + ] + } ] }, [], @@ -7761,12 +7917,20 @@ "DEnum": [ { "Package": [ - "c1cb018c-8264-4080-be7f-b06b8a0e1729" + { + "Hash": [ + "f2ca0aff55b71c247fd286f61786e51d0ebc89aaac025704404920fc85f52745" + ] + } ] }, { "Package": [ - "c1cb018c-8264-4080-be7f-b06b8a0e1729" + { + "Hash": [ + "f2ca0aff55b71c247fd286f61786e51d0ebc89aaac025704404920fc85f52745" + ] + } ] }, [ diff --git a/backend/serialization/vanilla_LibExecution-ProgramTypes-PackageFn-PackageFn_function.json b/backend/serialization/vanilla_LibExecution-ProgramTypes-PackageFn-PackageFn_function.json index 4768bbf73b..d66acc7636 100644 --- a/backend/serialization/vanilla_LibExecution-ProgramTypes-PackageFn-PackageFn_function.json +++ b/backend/serialization/vanilla_LibExecution-ProgramTypes-PackageFn-PackageFn_function.json @@ -1,5 +1,9 @@ { - "id": "31d72f73-0f99-5a9b-949c-b95705ae7c4d", + "hash": { + "Hash": [ + "539d6ca2c6ea456db05e1549ada0d60ed7234b14e1e5eff9dccb93ce092eda7a" + ] + }, "name": { "owner": "dark", "modules": [ @@ -311,7 +315,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -329,7 +337,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -447,15 +459,15 @@ ] }, { - "EVariable": [ + "EInt64": [ 123, - "y" + 2 ] }, { - "EArg": [ + "EVariable": [ 123, - 0 + "y" ] } ] @@ -586,7 +598,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -723,7 +739,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -1628,7 +1648,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -1646,7 +1670,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -1768,7 +1796,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -1786,7 +1818,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] diff --git a/backend/serialization/vanilla_LibExecution-ProgramTypes-PackageType-PackageType_type.json b/backend/serialization/vanilla_LibExecution-ProgramTypes-PackageType-PackageType_type.json index f4838a9a1b..2d452b149b 100644 --- a/backend/serialization/vanilla_LibExecution-ProgramTypes-PackageType-PackageType_type.json +++ b/backend/serialization/vanilla_LibExecution-ProgramTypes-PackageType-PackageType_type.json @@ -1,5 +1,9 @@ { - "id": "31d72f73-0f99-5a9b-949c-b95705ae7c4d", + "hash": { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + }, "name": { "owner": "darklang", "modules": [ @@ -112,7 +116,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -130,7 +138,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] diff --git a/backend/serialization/vanilla_LibExecution-ProgramTypes-PackageValue-PackageValue_value.json b/backend/serialization/vanilla_LibExecution-ProgramTypes-PackageValue-PackageValue_value.json index 81a2ba38d5..77028d341d 100644 --- a/backend/serialization/vanilla_LibExecution-ProgramTypes-PackageValue-PackageValue_value.json +++ b/backend/serialization/vanilla_LibExecution-ProgramTypes-PackageValue-PackageValue_value.json @@ -1,5 +1,9 @@ { - "id": "31d72f73-0f99-5a9b-949c-b95705ae7c4d", + "hash": { + "Hash": [ + "75ffeb0cc9436a9af08e370b0dc25453385007c6c3aeee3483fe2ed65af3285a" + ] + }, "name": { "owner": "dark", "modules": [ diff --git a/backend/serialization/vanilla_LibExecution-ProgramTypes-Toplevel-T_db.json b/backend/serialization/vanilla_LibExecution-ProgramTypes-Toplevel-T_db.json index 37f920c424..59c820ea51 100644 --- a/backend/serialization/vanilla_LibExecution-ProgramTypes-Toplevel-T_db.json +++ b/backend/serialization/vanilla_LibExecution-ProgramTypes-Toplevel-T_db.json @@ -91,7 +91,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -109,7 +113,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] diff --git a/backend/serialization/vanilla_LibExecution-ProgramTypes-Toplevel-T_httphandler.json b/backend/serialization/vanilla_LibExecution-ProgramTypes-Toplevel-T_httphandler.json index 0c2f9a9eef..cf829772a8 100644 --- a/backend/serialization/vanilla_LibExecution-ProgramTypes-Toplevel-T_httphandler.json +++ b/backend/serialization/vanilla_LibExecution-ProgramTypes-Toplevel-T_httphandler.json @@ -304,7 +304,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -322,7 +326,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -440,15 +448,15 @@ ] }, { - "EVariable": [ + "EInt64": [ 123, - "y" + 2 ] }, { - "EArg": [ + "EVariable": [ 123, - 0 + "y" ] } ] @@ -579,7 +587,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -716,7 +728,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] diff --git a/backend/serialization/vanilla_Microsoft-FSharp-Collections-FSharpList-1-LibExecution-ProgramTypes-Toplevel-T-_complete.json b/backend/serialization/vanilla_Microsoft-FSharp-Collections-FSharpList-1-LibExecution-ProgramTypes-Toplevel-T-_complete.json index 0ed7e2ffe5..6939e8ec2d 100644 --- a/backend/serialization/vanilla_Microsoft-FSharp-Collections-FSharpList-1-LibExecution-ProgramTypes-Toplevel-T-_complete.json +++ b/backend/serialization/vanilla_Microsoft-FSharp-Collections-FSharpList-1-LibExecution-ProgramTypes-Toplevel-T-_complete.json @@ -305,7 +305,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -323,7 +327,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -441,15 +449,15 @@ ] }, { - "EVariable": [ + "EInt64": [ 123, - "y" + 2 ] }, { - "EArg": [ + "EVariable": [ 123, - 0 + "y" ] } ] @@ -580,7 +588,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -717,7 +729,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -1843,7 +1859,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -1861,7 +1881,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -1979,15 +2003,15 @@ ] }, { - "EVariable": [ + "EInt64": [ 123, - "y" + 2 ] }, { - "EArg": [ + "EVariable": [ 123, - 0 + "y" ] } ] @@ -2118,7 +2142,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -2255,7 +2283,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -3384,7 +3416,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -3402,7 +3438,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -3520,15 +3560,15 @@ ] }, { - "EVariable": [ + "EInt64": [ 123, - "y" + 2 ] }, { - "EArg": [ + "EVariable": [ 123, - 0 + "y" ] } ] @@ -3659,7 +3699,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -3796,7 +3840,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -4922,7 +4970,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -4940,7 +4992,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -5058,15 +5114,15 @@ ] }, { - "EVariable": [ + "EInt64": [ 123, - "y" + 2 ] }, { - "EArg": [ + "EVariable": [ 123, - 0 + "y" ] } ] @@ -5197,7 +5253,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -5334,7 +5394,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -6248,7 +6312,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] @@ -6266,7 +6334,11 @@ "Ok": [ { "Package": [ - "31d72f73-0f99-5a9b-949c-b95705ae7c4d" + { + "Hash": [ + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + ] + } ] } ] diff --git a/backend/src/BuiltinCli/Libs/Execution.fs b/backend/src/BuiltinCli/Libs/Execution.fs index 4c5e99ba62..7e0f823da7 100644 --- a/backend/src/BuiltinCli/Libs/Execution.fs +++ b/backend/src/BuiltinCli/Libs/Execution.fs @@ -13,13 +13,13 @@ open LibExecution.RuntimeTypes module VT = LibExecution.ValueType module Dval = LibExecution.Dval module Builtin = LibExecution.Builtin -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes open Builtin.Shortcuts open System.Runtime.InteropServices let executionOutcomeTypeName = - FQTypeName.fqPackage PackageIDs.Type.Stdlib.Cli.executionOutcome + FQTypeName.fqPackage PackageHashes.Type.Stdlib.Cli.executionOutcome // Process management for interactive processes type ProcessInfo = @@ -138,7 +138,7 @@ module OS = | OSX | Windows - let osTypeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.Cli.OS.os + let osTypeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.Cli.OS.os let toDT (os : OS) : Dval = let (caseName, fields) = @@ -267,7 +267,7 @@ let fns : List = Param.make "input" TString "The input to send (empty string to just read)" ] returnType = let typeName = - FQTypeName.fqPackage PackageIDs.Type.Stdlib.Cli.executionOutcome + FQTypeName.fqPackage PackageHashes.Type.Stdlib.Cli.executionOutcome TCustomType(Ok typeName, []) fn = function @@ -371,7 +371,7 @@ let fns : List = parameters = [ Param.make "processId" TInt64 "The process handle ID" ] returnType = let typeName = - FQTypeName.fqPackage PackageIDs.Type.Stdlib.Cli.executionOutcome + FQTypeName.fqPackage PackageHashes.Type.Stdlib.Cli.executionOutcome TCustomType(Ok typeName, []) fn = function diff --git a/backend/src/BuiltinCli/Libs/Stdin.fs b/backend/src/BuiltinCli/Libs/Stdin.fs index 27cc83cc25..77025e3f7b 100644 --- a/backend/src/BuiltinCli/Libs/Stdin.fs +++ b/backend/src/BuiltinCli/Libs/Stdin.fs @@ -7,7 +7,7 @@ open Prelude open LibExecution.RuntimeTypes module Builtin = LibExecution.Builtin -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes open Builtin.Shortcuts @@ -16,7 +16,8 @@ let fns : List = typeParams = [] parameters = [ Param.make "unit" TUnit "" ] returnType = - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.Cli.Stdin.keyRead + let typeName = + FQTypeName.fqPackage PackageHashes.Type.Stdlib.Cli.Stdin.keyRead TCustomType(Ok typeName, []) description = "Reads a single line from the standard input." fn = @@ -34,7 +35,7 @@ let fns : List = let modifiers = let typeName = - FQTypeName.fqPackage PackageIDs.Type.Stdlib.Cli.Stdin.modifiers + FQTypeName.fqPackage PackageHashes.Type.Stdlib.Cli.Stdin.modifiers let fields = [ "alt", DBool altHeld "shift", DBool shiftHeld @@ -192,7 +193,8 @@ let fns : List = | _ -> "None" let key = - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.Cli.Stdin.key + let typeName = + FQTypeName.fqPackage PackageHashes.Type.Stdlib.Cli.Stdin.key DEnum(typeName, typeName, [], keyCaseName, []) // Get character representation based on keyboard layout @@ -200,7 +202,7 @@ let fns : List = let keyRead = let typeName = - FQTypeName.fqPackage PackageIDs.Type.Stdlib.Cli.Stdin.keyRead + FQTypeName.fqPackage PackageHashes.Type.Stdlib.Cli.Stdin.keyRead DRecord( typeName, typeName, diff --git a/backend/src/BuiltinCliHost/Libs/Cli.fs b/backend/src/BuiltinCliHost/Libs/Cli.fs index 0667ff99e3..5b0a4ebae9 100644 --- a/backend/src/BuiltinCliHost/Libs/Cli.fs +++ b/backend/src/BuiltinCliHost/Libs/Cli.fs @@ -18,7 +18,7 @@ module PT2RT = LibExecution.ProgramTypesToRuntimeTypes module RT2DT = LibExecution.RuntimeTypesToDarkTypes module PT2DT = LibExecution.ProgramTypesToDarkTypes module Exe = LibExecution.Execution -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module Json = BuiltinExecution.Libs.Json module C2DT = LibExecution.CommonToDarkTypes module Scripts = LibPackageManager.Scripts @@ -28,7 +28,7 @@ module Utils = BuiltinCliHost.Utils module ExecutionError = - let fqTypeName = FQTypeName.fqPackage PackageIDs.Type.Cli.executionError + let fqTypeName = FQTypeName.fqPackage PackageHashes.Type.Cli.executionError let typeRef = TCustomType(Ok fqTypeName, []) // Script type definitions @@ -138,11 +138,11 @@ let fns : List = let onMissingType = FQTypeName.Package - PackageIDs.Type.LanguageTools.NameResolver.nameResolverOnMissing + PackageHashes.Type.LanguageTools.NameResolver.nameResolverOnMissing let onMissingAllow = DEnum(onMissingType, onMissingType, [], "Allow", []) let getPmFnName = - FQFnName.Package PackageIDs.Fn.LanguageTools.PackageManager.pm + FQFnName.Package PackageHashes.Fn.LanguageTools.PackageManager.pm let! execResult = Exe.executeFunction exeState getPmFnName [] (NEList.singleton DUnit) @@ -177,7 +177,7 @@ let fns : List = let parseCliScriptFnName = FQFnName.Package - PackageIDs.Fn.LanguageTools.Parser.CliScript.parseCliScript + PackageHashes.Fn.LanguageTools.Parser.CliScript.parseCliScript let! execResult = Exe.executeFunction exeState parseCliScriptFnName [] args @@ -284,18 +284,18 @@ let fns : List = try let resolveFn = FQFnName.Package - PackageIDs.Fn.LanguageTools.NameResolver.FnName.resolve + PackageHashes.Fn.LanguageTools.NameResolver.FnName.resolve let onMissingType = FQTypeName.Package - PackageIDs.Type.LanguageTools.NameResolver.nameResolverOnMissing + PackageHashes.Type.LanguageTools.NameResolver.nameResolverOnMissing let onMissingAllow = DEnum(onMissingType, onMissingType, [], "Allow", []) let parserRangeType = - FQTypeName.Package PackageIDs.Type.LanguageTools.Parser.range + FQTypeName.Package PackageHashes.Type.LanguageTools.Parser.range let pointType = - FQTypeName.Package PackageIDs.Type.LanguageTools.Parser.point + FQTypeName.Package PackageHashes.Type.LanguageTools.Parser.point let pointFields = [ ("row", DInt64 0); ("column", DInt64 0) ] let fields = [ ("start", DRecord(pointType, pointType, [], Map pointFields)) @@ -304,7 +304,7 @@ let fns : List = let rangeParser = DRecord(parserRangeType, parserRangeType, [], Map fields) let writtenTypesNameType = - FQTypeName.Package PackageIDs.Type.LanguageTools.WrittenTypes.name + FQTypeName.Package PackageHashes.Type.LanguageTools.WrittenTypes.name let parts = functionName.Split('.') |> List.ofArray let currentModule = DList(VT.string, []) @@ -317,7 +317,8 @@ let fns : List = [ rangeParser; DList(VT.string, parts |> List.map DString) ] ) - let pm = FQFnName.Package PackageIDs.Fn.LanguageTools.PackageManager.pm + let pm = + FQFnName.Package PackageHashes.Fn.LanguageTools.PackageManager.pm let! execResult = Exe.executeFunction exeState pm [] (NEList.singleton RT.Dval.DUnit) let! pm = @@ -392,7 +393,7 @@ let fns : List = let! result = Exe.executeFunction exeState - (FQFnName.Package f.id) + (FQFnName.Package f.hash) [] (NEList.ofList newArgs.Head newArgs.Tail) @@ -447,11 +448,11 @@ let fns : List = let onMissingType = FQTypeName.Package - PackageIDs.Type.LanguageTools.NameResolver.nameResolverOnMissing + PackageHashes.Type.LanguageTools.NameResolver.nameResolverOnMissing let onMissingAllow = DEnum(onMissingType, onMissingType, [], "Allow", []) let getPmFnName = - FQFnName.Package PackageIDs.Fn.LanguageTools.PackageManager.pm + FQFnName.Package PackageHashes.Fn.LanguageTools.PackageManager.pm let! execResult = Exe.executeFunction exeState getPmFnName [] (NEList.singleton DUnit) @@ -486,7 +487,7 @@ let fns : List = let parseCliScriptFnName = FQFnName.Package - PackageIDs.Fn.LanguageTools.Parser.CliScript.parseCliScript + PackageHashes.Fn.LanguageTools.Parser.CliScript.parseCliScript let! execResult = Exe.executeFunction exeState parseCliScriptFnName [] args diff --git a/backend/src/BuiltinCliHost/Utils.fs b/backend/src/BuiltinCliHost/Utils.fs index 85388a4ce8..62ac86bfc5 100644 --- a/backend/src/BuiltinCliHost/Utils.fs +++ b/backend/src/BuiltinCliHost/Utils.fs @@ -8,7 +8,7 @@ open Prelude module PT = LibExecution.ProgramTypes module VT = LibExecution.ValueType module PT2DT = LibExecution.ProgramTypesToDarkTypes -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module DvalDecoder = LibExecution.DvalDecoder open LibExecution.RuntimeTypes @@ -28,17 +28,17 @@ module CliScript = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.Parser.CliScript.pTCliScriptModule + PackageHashes.Type.LanguageTools.Parser.CliScript.pTCliScriptModule let packageType = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.PackageType.packageType + PackageHashes.Type.LanguageTools.ProgramTypes.PackageType.packageType let packageValue = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.PackageValue.packageValue + PackageHashes.Type.LanguageTools.ProgramTypes.PackageValue.packageValue let packageFn = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.PackageFn.packageFn + PackageHashes.Type.LanguageTools.ProgramTypes.PackageFn.packageFn let submoduleToDT (m : Definitions) : Dval = let fields = @@ -177,7 +177,7 @@ module CliScript = module ScriptsToDarkTypes = - let scriptTypeName = FQTypeName.fqPackage PackageIDs.Type.Cli.script + let scriptTypeName = FQTypeName.fqPackage PackageHashes.Type.Cli.script let toDT (script : LibPackageManager.Scripts.Script) : Dval = let fields = diff --git a/backend/src/BuiltinDarkInternal/Libs/Canvases.fs b/backend/src/BuiltinDarkInternal/Libs/Canvases.fs index 2f0c67342a..82c006a4a9 100644 --- a/backend/src/BuiltinDarkInternal/Libs/Canvases.fs +++ b/backend/src/BuiltinDarkInternal/Libs/Canvases.fs @@ -13,7 +13,7 @@ module Dval = LibExecution.Dval module PT = LibExecution.ProgramTypes module Canvas = LibCloud.Canvas module PT2DT = LibExecution.ProgramTypesToDarkTypes -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes let fns : List = @@ -112,7 +112,7 @@ let fns : List = returnType = TypeReference.result (TCustomType( - Ok(FQTypeName.Package PackageIDs.Type.Internal.Canvas.program), + Ok(FQTypeName.Package PackageHashes.Type.Internal.Canvas.program), [] )) TString @@ -148,7 +148,8 @@ let fns : List = // |> Some) // |> Dval.list VT.unknownTODO - let typeName = FQTypeName.Package PackageIDs.Type.Internal.Canvas.program + let typeName = + FQTypeName.Package PackageHashes.Type.Internal.Canvas.program return DRecord(typeName, typeName, [], Map []) |> Dval.resultOk (KTCustomType(typeName, [])) KTString diff --git a/backend/src/BuiltinDarkInternal/Libs/Infra.fs b/backend/src/BuiltinDarkInternal/Libs/Infra.fs index 3bac9d1c97..f3162da96b 100644 --- a/backend/src/BuiltinDarkInternal/Libs/Infra.fs +++ b/backend/src/BuiltinDarkInternal/Libs/Infra.fs @@ -8,7 +8,7 @@ open LibExecution.RuntimeTypes open LibExecution.Builtin.Shortcuts module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module Telemetry = LibService.Telemetry @@ -46,7 +46,7 @@ let fns : List = returnType = TDict( TCustomType( - Ok(FQTypeName.Package PackageIDs.Type.Internal.Infra.tableSize), + Ok(FQTypeName.Package PackageHashes.Type.Internal.Infra.tableSize), [] ) ) @@ -59,7 +59,7 @@ let fns : List = let! tableStats = LibDB.Db.tableStats () let typeName = - FQTypeName.Package PackageIDs.Type.Internal.Infra.tableSize + FQTypeName.Package PackageHashes.Type.Internal.Infra.tableSize return tableStats diff --git a/backend/src/BuiltinDarkInternal/Libs/Secrets.fs b/backend/src/BuiltinDarkInternal/Libs/Secrets.fs index 520cad37ba..1ce3c8a154 100644 --- a/backend/src/BuiltinDarkInternal/Libs/Secrets.fs +++ b/backend/src/BuiltinDarkInternal/Libs/Secrets.fs @@ -9,7 +9,7 @@ open LibExecution.Builtin.Shortcuts module VT = LibExecution.ValueType module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module Secret = LibCloud.Secret @@ -19,7 +19,7 @@ let fns : List = parameters = [ Param.make "canvasID" TUuid "" ] returnType = TCustomType( - Ok(FQTypeName.Package PackageIDs.Type.Internal.Canvas.secret), + Ok(FQTypeName.Package PackageHashes.Type.Internal.Canvas.secret), [] ) |> TList @@ -29,7 +29,8 @@ let fns : List = | _, _, _, [ DUuid canvasID ] -> uply { let! secrets = Secret.getCanvasSecrets canvasID - let typeName = FQTypeName.Package PackageIDs.Type.Internal.Canvas.secret + let typeName = + FQTypeName.Package PackageHashes.Type.Internal.Canvas.secret return secrets diff --git a/backend/src/BuiltinDarkInternal/Libs/Workers.fs b/backend/src/BuiltinDarkInternal/Libs/Workers.fs index 1122933f1c..8dee0cea1f 100644 --- a/backend/src/BuiltinDarkInternal/Libs/Workers.fs +++ b/backend/src/BuiltinDarkInternal/Libs/Workers.fs @@ -10,7 +10,7 @@ open LibExecution.Builtin.Shortcuts module Dval = LibExecution.Dval module DarkDateTime = LibExecution.DarkDateTime -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module SchedulingRules = LibCloud.QueueSchedulingRules module Pusher = LibCloud.Pusher module Queue = LibCloud.Queue @@ -35,7 +35,7 @@ let modifySchedule (fn : CanvasID -> string -> Task) = let schedulingRuleTypeName = - FQTypeName.Package PackageIDs.Type.Internal.Worker.scheduleRule + FQTypeName.Package PackageHashes.Type.Internal.Worker.scheduleRule let schedulingRuleTypeRef = TCustomType(Ok schedulingRuleTypeName, []) diff --git a/backend/src/BuiltinExecution/Libs/AltJson.fs b/backend/src/BuiltinExecution/Libs/AltJson.fs index 393bb4a10f..6a25643ada 100644 --- a/backend/src/BuiltinExecution/Libs/AltJson.fs +++ b/backend/src/BuiltinExecution/Libs/AltJson.fs @@ -8,7 +8,7 @@ open LibExecution.Builtin.Shortcuts module VT = LibExecution.ValueType module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module Json = @@ -20,7 +20,7 @@ module Json = | Array of List | Object of List - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.AltJson.json + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.AltJson.json let typeRef = TCustomType(Ok typeName, []) let knownType = KTCustomType(typeName, []) @@ -67,7 +67,7 @@ module Json = module ParseError = - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.AltJson.parseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.AltJson.parseError let typeRef = TCustomType(Ok typeName, []) let knownType = KTCustomType(typeName, []) diff --git a/backend/src/BuiltinExecution/Libs/Dict.fs b/backend/src/BuiltinExecution/Libs/Dict.fs index c152de8412..28087f6390 100644 --- a/backend/src/BuiltinExecution/Libs/Dict.fs +++ b/backend/src/BuiltinExecution/Libs/Dict.fs @@ -9,7 +9,7 @@ module VT = LibExecution.ValueType module RTE = RuntimeError module Dval = LibExecution.Dval module Interpreter = LibExecution.Interpreter -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes let varA = TVariable "a" let varB = TVariable "b" diff --git a/backend/src/BuiltinExecution/Libs/Float.fs b/backend/src/BuiltinExecution/Libs/Float.fs index f72b1b61d7..4332b7b11b 100644 --- a/backend/src/BuiltinExecution/Libs/Float.fs +++ b/backend/src/BuiltinExecution/Libs/Float.fs @@ -6,7 +6,7 @@ open LibExecution.Builtin.Shortcuts module VT = LibExecution.ValueType module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module ParseError = @@ -17,7 +17,7 @@ module ParseError = match e with | BadFormat -> "BadFormat", [] - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.floatParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.floatParseError DEnum(typeName, typeName, [], caseName, fields) @@ -282,13 +282,13 @@ let fns : List = TypeReference.result TFloat (TCustomType( - Ok(FQTypeName.fqPackage PackageIDs.Type.Stdlib.floatParseError), + Ok(FQTypeName.fqPackage PackageHashes.Type.Stdlib.floatParseError), [] )) description = "Returns the value wrapped in a {{Result}} of the " fn = - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.floatParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.floatParseError let resultOk = Dval.resultOk KTFloat (KTCustomType(typeName, [])) let resultError = Dval.resultError KTFloat (KTCustomType(typeName, [])) (function diff --git a/backend/src/BuiltinExecution/Libs/HttpClient.fs b/backend/src/BuiltinExecution/Libs/HttpClient.fs index 05135ce1fb..e375557182 100644 --- a/backend/src/BuiltinExecution/Libs/HttpClient.fs +++ b/backend/src/BuiltinExecution/Libs/HttpClient.fs @@ -14,9 +14,10 @@ module RTE = RuntimeError type Method = HttpMethod -let responseOKType = FQTypeName.fqPackage PackageIDs.Type.Stdlib.HttpClient.response +let responseOKType = + FQTypeName.fqPackage PackageHashes.Type.Stdlib.HttpClient.response let responseErrorType = - FQTypeName.fqPackage PackageIDs.Type.Stdlib.HttpClient.requestError + FQTypeName.fqPackage PackageHashes.Type.Stdlib.HttpClient.requestError module Headers = type Header = string * string @@ -39,7 +40,8 @@ module BadHeader = match err with | EmptyKey -> "EmptyKey", [] | InvalidContentType -> "InvalidContentType", [] - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.HttpClient.badHeader + let typeName = + FQTypeName.fqPackage PackageHashes.Type.Stdlib.HttpClient.badHeader DEnum(typeName, typeName, [], caseName, fields) module BadUrl = @@ -58,7 +60,7 @@ module BadUrl = | InvalidRequest -> "InvalidRequest", [] let typeName = - FQTypeName.fqPackage PackageIDs.Type.Stdlib.HttpClient.badUrlDetails + FQTypeName.fqPackage PackageHashes.Type.Stdlib.HttpClient.badUrlDetails DEnum(typeName, typeName, [], caseName, fields) module RequestError = @@ -81,7 +83,7 @@ module RequestError = | BadMethod -> "BadMethod", [] let typeName = - FQTypeName.fqPackage PackageIDs.Type.Stdlib.HttpClient.requestError + FQTypeName.fqPackage PackageHashes.Type.Stdlib.HttpClient.requestError DEnum(typeName, typeName, [], caseName, fields) @@ -425,7 +427,7 @@ let fns (config : Configuration) : List = | notAPair -> return RTE.Applications.FnParameterNotExpectedType( - FQFnName.Package PackageIDs.Fn.Stdlib.HttpClient.request, + FQFnName.Package PackageHashes.Fn.Stdlib.HttpClient.request, 2, "headers", VT.list (VT.tuple VT.string VT.string []), @@ -469,7 +471,8 @@ let fns (config : Configuration) : List = |> Dval.list (KTTuple(VT.string, VT.string, [])) let typ = - FQTypeName.fqPackage PackageIDs.Type.Stdlib.HttpClient.response + FQTypeName.fqPackage + PackageHashes.Type.Stdlib.HttpClient.response let fields = [ ("statusCode", DInt64(int64 response.statusCode)) diff --git a/backend/src/BuiltinExecution/Libs/Int128.fs b/backend/src/BuiltinExecution/Libs/Int128.fs index b5c99f08b6..d5c0945177 100644 --- a/backend/src/BuiltinExecution/Libs/Int128.fs +++ b/backend/src/BuiltinExecution/Libs/Int128.fs @@ -6,7 +6,7 @@ open LibExecution.Builtin.Shortcuts module VT = LibExecution.ValueType module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module RTE = RuntimeError @@ -21,7 +21,7 @@ module ParseError = | BadFormat -> "BadFormat", [] | OutOfRange -> "OutOfRange", [] - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.int128ParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.int128ParseError DEnum(typeName, typeName, [], caseName, fields) @@ -297,12 +297,13 @@ let fns : List = TypeReference.result TInt128 (TCustomType( - Ok(FQTypeName.fqPackage PackageIDs.Type.Stdlib.int128ParseError), + Ok(FQTypeName.fqPackage PackageHashes.Type.Stdlib.int128ParseError), [] )) description = "Returns the value of a " fn = - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.int128ParseError + let typeName = + FQTypeName.fqPackage PackageHashes.Type.Stdlib.int128ParseError let resultOk = Dval.resultOk KTInt128 (KTCustomType(typeName, [])) let resultError = Dval.resultError KTInt128 (KTCustomType(typeName, [])) (function diff --git a/backend/src/BuiltinExecution/Libs/Int16.fs b/backend/src/BuiltinExecution/Libs/Int16.fs index 35c514b4a3..aa2485f2e9 100644 --- a/backend/src/BuiltinExecution/Libs/Int16.fs +++ b/backend/src/BuiltinExecution/Libs/Int16.fs @@ -6,7 +6,7 @@ open LibExecution.Builtin.Shortcuts module VT = LibExecution.ValueType module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module RTE = RuntimeError module ParseError = @@ -20,7 +20,7 @@ module ParseError = | BadFormat -> "BadFormat", [] | OutOfRange -> "OutOfRange", [] - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.int16ParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.int16ParseError DEnum(typeName, typeName, [], caseName, fields) @@ -328,11 +328,12 @@ let fns : List = typeParams = [] parameters = [ Param.make "s" TString "" ] returnType = - let errorType = FQTypeName.fqPackage PackageIDs.Type.Stdlib.int16ParseError + let errorType = + FQTypeName.fqPackage PackageHashes.Type.Stdlib.int16ParseError TypeReference.result TInt16 (TCustomType(Ok errorType, [])) description = "Returns the value of a " fn = - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.int16ParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.int16ParseError let resultOk = Dval.resultOk KTInt16 (KTCustomType(typeName, [])) let resultError = Dval.resultError KTInt16 (KTCustomType(typeName, [])) (function diff --git a/backend/src/BuiltinExecution/Libs/Int32.fs b/backend/src/BuiltinExecution/Libs/Int32.fs index 3f9743c11b..00db02f935 100644 --- a/backend/src/BuiltinExecution/Libs/Int32.fs +++ b/backend/src/BuiltinExecution/Libs/Int32.fs @@ -6,7 +6,7 @@ open LibExecution.Builtin.Shortcuts module VT = LibExecution.ValueType module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module RTE = RuntimeError @@ -21,7 +21,7 @@ module ParseError = | BadFormat -> "BadFormat", [] | OutOfRange -> "OutOfRange", [] - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.int32ParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.int32ParseError DEnum(typeName, typeName, [], caseName, fields) @@ -296,12 +296,13 @@ let fns : List = typeParams = [] parameters = [ Param.make "s" TString "" ] returnType = - let errorType = FQTypeName.fqPackage PackageIDs.Type.Stdlib.int32ParseError + let errorType = + FQTypeName.fqPackage PackageHashes.Type.Stdlib.int32ParseError TypeReference.result TInt32 (TCustomType(Ok errorType, [])) description = "Returns the value of a " fn = - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.int32ParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.int32ParseError let resultOk = Dval.resultOk KTInt32 (KTCustomType(typeName, [])) let resultError = Dval.resultError KTInt32 (KTCustomType(typeName, [])) (function diff --git a/backend/src/BuiltinExecution/Libs/Int64.fs b/backend/src/BuiltinExecution/Libs/Int64.fs index 80326b1952..f01cb7dd9a 100644 --- a/backend/src/BuiltinExecution/Libs/Int64.fs +++ b/backend/src/BuiltinExecution/Libs/Int64.fs @@ -6,7 +6,7 @@ open LibExecution.Builtin.Shortcuts module VT = LibExecution.ValueType module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module RTE = RuntimeError @@ -21,7 +21,7 @@ module ParseError = | BadFormat -> "BadFormat", [] | OutOfRange -> "OutOfRange", [] - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.int64ParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.int64ParseError DEnum(typeName, typeName, [], caseName, fields) @@ -341,11 +341,12 @@ let fns : List = typeParams = [] parameters = [ Param.make "s" TString "" ] returnType = - let errorType = FQTypeName.fqPackage PackageIDs.Type.Stdlib.int64ParseError + let errorType = + FQTypeName.fqPackage PackageHashes.Type.Stdlib.int64ParseError TypeReference.result TInt64 (TCustomType(Ok errorType, [])) description = "Returns the value of a " fn = - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.int64ParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.int64ParseError let resultOk = Dval.resultOk KTInt64 (KTCustomType(typeName, [])) let resultError = Dval.resultError KTInt64 (KTCustomType(typeName, [])) (function diff --git a/backend/src/BuiltinExecution/Libs/Int8.fs b/backend/src/BuiltinExecution/Libs/Int8.fs index e2d6ac7291..6a2cc81d19 100644 --- a/backend/src/BuiltinExecution/Libs/Int8.fs +++ b/backend/src/BuiltinExecution/Libs/Int8.fs @@ -6,7 +6,7 @@ open LibExecution.Builtin.Shortcuts module VT = LibExecution.ValueType module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module RTE = RuntimeError @@ -21,7 +21,7 @@ module ParseError = | BadFormat -> "BadFormat", [] | OutOfRange -> "OutOfRange", [] - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.int8ParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.int8ParseError DEnum(typeName, typeName, [], caseName, fields) @@ -338,11 +338,11 @@ let fns : List = typeParams = [] parameters = [ Param.make "s" TString "" ] returnType = - let errorType = FQTypeName.fqPackage PackageIDs.Type.Stdlib.int8ParseError + let errorType = FQTypeName.fqPackage PackageHashes.Type.Stdlib.int8ParseError TypeReference.result TInt8 (TCustomType(Ok errorType, [])) description = "Returns the value of a " fn = - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.int8ParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.int8ParseError let resultOk = Dval.resultOk KTInt8 (KTCustomType(typeName, [])) let resultError = Dval.resultError KTInt8 (KTCustomType(typeName, [])) (function diff --git a/backend/src/BuiltinExecution/Libs/Json.fs b/backend/src/BuiltinExecution/Libs/Json.fs index f380e9155e..0f8ca9c2cb 100644 --- a/backend/src/BuiltinExecution/Libs/Json.fs +++ b/backend/src/BuiltinExecution/Libs/Json.fs @@ -10,7 +10,7 @@ module DarkDateTime = LibExecution.DarkDateTime module VT = LibExecution.ValueType module Dval = LibExecution.Dval module TypeChecker = LibExecution.TypeChecker -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module RTE = RuntimeError @@ -64,7 +64,7 @@ module JsonPath = | Field of string let typeName = - FQTypeName.fqPackage PackageIDs.Type.Stdlib.Json.ParseError.JsonPath.part + FQTypeName.fqPackage PackageHashes.Type.Stdlib.Json.ParseError.JsonPath.part let toDT (part : Part) : Dval = let (caseName, fields) = @@ -155,7 +155,7 @@ let rec serialize (threadID : ThreadID) (w : Utf8JsonWriter) (dv : Dval) : unit module ParseError = module RT2DT = LibExecution.RuntimeTypesToDarkTypes let typeName = - FQTypeName.fqPackage PackageIDs.Type.Stdlib.Json.ParseError.parseError + FQTypeName.fqPackage PackageHashes.Type.Stdlib.Json.ParseError.parseError type ParseError = /// The json string can't be parsed as the given type. diff --git a/backend/src/BuiltinExecution/Libs/LanguageTools.fs b/backend/src/BuiltinExecution/Libs/LanguageTools.fs index 2296e9c91b..0bca9de2df 100644 --- a/backend/src/BuiltinExecution/Libs/LanguageTools.fs +++ b/backend/src/BuiltinExecution/Libs/LanguageTools.fs @@ -6,15 +6,15 @@ open LibExecution.Builtin.Shortcuts module VT = LibExecution.ValueType module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module RT2DT = LibExecution.RuntimeTypesToDarkTypes -let builtinValue = FQTypeName.fqPackage PackageIDs.Type.LanguageTools.builtinValue +let builtinValue = FQTypeName.fqPackage PackageHashes.Type.LanguageTools.builtinValue let builtinFnParam = - FQTypeName.fqPackage PackageIDs.Type.LanguageTools.builtinFnParam -let builtinFn = FQTypeName.fqPackage PackageIDs.Type.LanguageTools.builtinFn + FQTypeName.fqPackage PackageHashes.Type.LanguageTools.builtinFnParam +let builtinFn = FQTypeName.fqPackage PackageHashes.Type.LanguageTools.builtinFn let fns : List = [ { name = fn "languageToolsAllBuiltinValues" 0 diff --git a/backend/src/BuiltinExecution/Libs/NoModule.fs b/backend/src/BuiltinExecution/Libs/NoModule.fs index 9ba84d1e87..9211db2969 100644 --- a/backend/src/BuiltinExecution/Libs/NoModule.fs +++ b/backend/src/BuiltinExecution/Libs/NoModule.fs @@ -4,7 +4,7 @@ open Prelude open LibExecution.RuntimeTypes open LibExecution.Builtin.Shortcuts -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module Dval = LibExecution.Dval module ValueType = LibExecution.ValueType module RTE = RuntimeError @@ -193,19 +193,19 @@ let fns : List = // Success: extract `Some` out of an Option | DEnum(FQTypeName.Package id, _, _, "Some", [ value ]) when - id = PackageIDs.Type.Stdlib.option + id = PackageHashes.Type.Stdlib.option -> Ply value // Success: extract `Ok` out of a Result | DEnum(FQTypeName.Package id, _, _, "Ok", [ value ]) when - id = PackageIDs.Type.Stdlib.result + id = PackageHashes.Type.Stdlib.result -> Ply value // Error: expected Some, got None | DEnum(FQTypeName.Package id, _, _, "None", []) when - id = PackageIDs.Type.Stdlib.option + id = PackageHashes.Type.Stdlib.option -> RuntimeError.Unwraps.GotNone |> RuntimeError.Unwrap @@ -213,7 +213,7 @@ let fns : List = // Error: expected Ok, got Error | DEnum(FQTypeName.Package id, _, _, "Error", [ value ]) when - id = PackageIDs.Type.Stdlib.result + id = PackageHashes.Type.Stdlib.result -> RuntimeError.Unwraps.GotError value |> RuntimeError.Unwrap diff --git a/backend/src/BuiltinExecution/Libs/Packages.fs b/backend/src/BuiltinExecution/Libs/Packages.fs index 3bbcf35855..6f7b025e5e 100644 --- a/backend/src/BuiltinExecution/Libs/Packages.fs +++ b/backend/src/BuiltinExecution/Libs/Packages.fs @@ -24,9 +24,9 @@ open LibExecution.Builtin.Shortcuts module Dval = LibExecution.Dval module PT = LibExecution.ProgramTypes module PT2DT = LibExecution.ProgramTypesToDarkTypes -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes -let statsTypeName = FQTypeName.fqPackage PackageIDs.Type.DarkPackages.stats +let statsTypeName = FQTypeName.fqPackage PackageHashes.Type.DarkPackages.stats // CLEANUP adjust the fns to take in proper PackageType.Name, etc, @@ -67,18 +67,18 @@ let fns (pm : PT.PackageManager) : List = { name = fn "packageManagerFindType" 0 typeParams = [] parameters = [ Param.make "name" TString "" ] - returnType = TypeReference.option TUuid + returnType = TypeReference.option TString description = "Tries to find a package type, by name, and returns the ID if it exists" fn = - let optType = KTUuid + let optType = KTString (function | _, _, _, [ DString name ] -> uply { let n = parseGenericName name let name = PT.PackageType.name n.owner n.modules n.name match! pm.findType name with - | Some id -> return DUuid id |> Dval.optionSome optType + | Some(Hash hashStr) -> return DString hashStr |> Dval.optionSome optType | None -> return Dval.optionNone optType } | _ -> incorrectArgs ()) @@ -86,18 +86,19 @@ let fns (pm : PT.PackageManager) : List = previewable = Impure deprecated = NotDeprecated } + { name = fn "packageManagerGetType" 0 typeParams = [] - parameters = [ Param.make "id" TUuid "" ] + parameters = [ Param.make "hash" TString "" ] returnType = TypeReference.option (TCustomType(Ok PT2DT.PackageType.typeName, [])) - description = "Returns a package type, by id, if it exists" + description = "Returns a package type by its content hash, if it exists" fn = let optType = KTCustomType(PT2DT.PackageType.typeName, []) (function - | _, _, _, [ DUuid id ] -> + | _, _, _, [ DString hash ] -> uply { - match! pm.getType id with + match! pm.getType (Hash hash) with | Some f -> return f |> PT2DT.PackageType.toDT |> Dval.optionSome optType | None -> return Dval.optionNone optType } @@ -111,18 +112,18 @@ let fns (pm : PT.PackageManager) : List = { name = fn "packageManagerFindValue" 0 typeParams = [] parameters = [ Param.make "name" TString "" ] - returnType = TypeReference.option TUuid + returnType = TypeReference.option TString description = "Tries to find a package value, by name, and returns the ID if it exists" fn = - let optType = KTUuid + let optType = KTString (function | _, _, _, [ DString name ] -> uply { let n = parseGenericName name let name = PT.PackageValue.name n.owner n.modules n.name match! pm.findValue name with - | Some id -> return DUuid id |> Dval.optionSome optType + | Some(Hash hashStr) -> return DString hashStr |> Dval.optionSome optType | None -> return Dval.optionNone optType } | _ -> incorrectArgs ()) @@ -130,18 +131,19 @@ let fns (pm : PT.PackageManager) : List = previewable = Impure deprecated = NotDeprecated } + { name = fn "packageManagerGetValue" 0 typeParams = [] - parameters = [ Param.make "id" TUuid "" ] + parameters = [ Param.make "hash" TString "" ] returnType = TypeReference.option (TCustomType(Ok PT2DT.PackageValue.typeName, [])) - description = "Returns a package value, by id, if it exists" + description = "Returns a package value by its content hash, if it exists" fn = let optType = KTCustomType(PT2DT.PackageValue.typeName, []) (function - | _, _, _, [ DUuid id ] -> + | _, _, _, [ DString hash ] -> uply { - match! pm.getValue id with + match! pm.getValue (Hash hash) with | Some f -> return f |> PT2DT.PackageValue.toDT |> Dval.optionSome optType | None -> return Dval.optionNone optType @@ -156,18 +158,18 @@ let fns (pm : PT.PackageManager) : List = { name = fn "packageManagerFindFn" 0 typeParams = [] parameters = [ Param.make "name" TString "" ] - returnType = TypeReference.option TUuid + returnType = TypeReference.option TString description = "Tries to find a package function, by name, and returns the ID if it exists" fn = - let optType = KTUuid + let optType = KTString (function | _, _, _, [ DString name ] -> uply { let n = parseGenericName name let name = PT.PackageFn.name n.owner n.modules n.name match! pm.findFn name with - | Some id -> return DUuid id |> Dval.optionSome optType + | Some(Hash hashStr) -> return DString hashStr |> Dval.optionSome optType | None -> return Dval.optionNone optType } | _ -> incorrectArgs ()) @@ -175,18 +177,19 @@ let fns (pm : PT.PackageManager) : List = previewable = Impure deprecated = NotDeprecated } + { name = fn "packageManagerGetFn" 0 typeParams = [] - parameters = [ Param.make "id" TUuid "" ] + parameters = [ Param.make "hash" TString "" ] returnType = TypeReference.option (TCustomType(Ok PT2DT.PackageFn.typeName, [])) - description = "Returns a package function, by id, if it exists" + description = "Returns a package function by its content hash, if it exists" fn = let optType = KTCustomType(PT2DT.PackageFn.typeName, []) (function - | _, _, _, [ DUuid id ] -> + | _, _, _, [ DString hash ] -> uply { - match! pm.getFn id with + match! pm.getFn (Hash hash) with | Some f -> return f |> PT2DT.PackageFn.toDT |> Dval.optionSome optType | None -> return Dval.optionNone optType } diff --git a/backend/src/BuiltinExecution/Libs/Parser.fs b/backend/src/BuiltinExecution/Libs/Parser.fs index d9eb8b7460..acd36f6584 100644 --- a/backend/src/BuiltinExecution/Libs/Parser.fs +++ b/backend/src/BuiltinExecution/Libs/Parser.fs @@ -10,7 +10,7 @@ open LibTreeSitter module VT = LibExecution.ValueType module Dval = LibExecution.Dval -module IDs = LibExecution.PackageIDs.Type.LanguageTools.Parser +module IDs = LibExecution.PackageHashes.Type.LanguageTools.Parser let pointTypeName = FQTypeName.fqPackage IDs.point diff --git a/backend/src/BuiltinExecution/Libs/Reflection.fs b/backend/src/BuiltinExecution/Libs/Reflection.fs index 957998ded1..8908abc1c6 100644 --- a/backend/src/BuiltinExecution/Libs/Reflection.fs +++ b/backend/src/BuiltinExecution/Libs/Reflection.fs @@ -16,7 +16,7 @@ let fns : List = TCustomType( Ok( FQTypeName.fqPackage - LibExecution.PackageIDs.Type.LanguageTools.RuntimeTypes.dval + LibExecution.PackageHashes.Type.LanguageTools.RuntimeTypes.dval ), [] ) diff --git a/backend/src/BuiltinExecution/Libs/UInt128.fs b/backend/src/BuiltinExecution/Libs/UInt128.fs index 1d320cb014..aa9f4e9cd7 100644 --- a/backend/src/BuiltinExecution/Libs/UInt128.fs +++ b/backend/src/BuiltinExecution/Libs/UInt128.fs @@ -6,7 +6,7 @@ open LibExecution.Builtin.Shortcuts module VT = LibExecution.ValueType module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module RTE = RuntimeError @@ -21,7 +21,7 @@ module ParseError = | BadFormat -> "BadFormat", [] | OutOfRange -> "OutOfRange", [] - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.uint128ParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.uint128ParseError DEnum(typeName, typeName, [], caseName, fields) @@ -242,12 +242,13 @@ let fns : List = TypeReference.result TUInt128 (TCustomType( - Ok(FQTypeName.fqPackage PackageIDs.Type.Stdlib.uint128ParseError), + Ok(FQTypeName.fqPackage PackageHashes.Type.Stdlib.uint128ParseError), [] )) description = "Returns the value of a " fn = - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.uint128ParseError + let typeName = + FQTypeName.fqPackage PackageHashes.Type.Stdlib.uint128ParseError let resultOk = Dval.resultOk KTUInt128 (KTCustomType(typeName, [])) let resultError = Dval.resultError KTUInt128 (KTCustomType(typeName, [])) (function diff --git a/backend/src/BuiltinExecution/Libs/UInt16.fs b/backend/src/BuiltinExecution/Libs/UInt16.fs index 9a8655331d..79625fc4d3 100644 --- a/backend/src/BuiltinExecution/Libs/UInt16.fs +++ b/backend/src/BuiltinExecution/Libs/UInt16.fs @@ -6,7 +6,7 @@ open LibExecution.Builtin.Shortcuts module VT = LibExecution.ValueType module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module RTE = RuntimeError @@ -21,7 +21,7 @@ module ParseError = | BadFormat -> "BadFormat", [] | OutOfRange -> "OutOfRange", [] - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.uint16ParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.uint16ParseError DEnum(typeName, typeName, [], caseName, fields) @@ -291,11 +291,13 @@ let fns : List = typeParams = [] parameters = [ Param.make "s" TString "" ] returnType = - let errorType = FQTypeName.fqPackage PackageIDs.Type.Stdlib.uint16ParseError + let errorType = + FQTypeName.fqPackage PackageHashes.Type.Stdlib.uint16ParseError TypeReference.result TUInt16 (TCustomType(Ok errorType, [])) description = "Returns the value of a " fn = - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.uint16ParseError + let typeName = + FQTypeName.fqPackage PackageHashes.Type.Stdlib.uint16ParseError let resultOk = Dval.resultOk KTUInt16 (KTCustomType(typeName, [])) let resultError = Dval.resultError KTUInt16 (KTCustomType(typeName, [])) (function diff --git a/backend/src/BuiltinExecution/Libs/UInt32.fs b/backend/src/BuiltinExecution/Libs/UInt32.fs index 20b69e540e..772ad44004 100644 --- a/backend/src/BuiltinExecution/Libs/UInt32.fs +++ b/backend/src/BuiltinExecution/Libs/UInt32.fs @@ -6,7 +6,7 @@ open LibExecution.Builtin.Shortcuts module VT = LibExecution.ValueType module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module RTE = RuntimeError @@ -21,7 +21,7 @@ module ParseError = | BadFormat -> "BadFormat", [] | OutOfRange -> "OutOfRange", [] - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.uint32ParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.uint32ParseError DEnum(typeName, typeName, [], caseName, fields) @@ -288,11 +288,13 @@ let fns : List = typeParams = [] parameters = [ Param.make "s" TString "" ] returnType = - let errorType = FQTypeName.fqPackage PackageIDs.Type.Stdlib.uint32ParseError + let errorType = + FQTypeName.fqPackage PackageHashes.Type.Stdlib.uint32ParseError TypeReference.result TUInt32 (TCustomType(Ok errorType, [])) description = "Returns the value of a " fn = - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.uint32ParseError + let typeName = + FQTypeName.fqPackage PackageHashes.Type.Stdlib.uint32ParseError let resultOk = Dval.resultOk KTUInt32 (KTCustomType(typeName, [])) let resultError = Dval.resultError KTUInt32 (KTCustomType(typeName, [])) (function diff --git a/backend/src/BuiltinExecution/Libs/UInt64.fs b/backend/src/BuiltinExecution/Libs/UInt64.fs index 6221e92551..ad922a313c 100644 --- a/backend/src/BuiltinExecution/Libs/UInt64.fs +++ b/backend/src/BuiltinExecution/Libs/UInt64.fs @@ -6,7 +6,7 @@ open LibExecution.Builtin.Shortcuts module VT = LibExecution.ValueType module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module RTE = RuntimeError @@ -21,7 +21,7 @@ module ParseError = | BadFormat -> "BadFormat", [] | OutOfRange -> "OutOfRange", [] - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.uint64ParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.uint64ParseError DEnum(typeName, typeName, [], caseName, fields) @@ -276,12 +276,13 @@ let fns : List = TypeReference.result TUInt64 (TCustomType( - Ok(FQTypeName.fqPackage PackageIDs.Type.Stdlib.uint64ParseError), + Ok(FQTypeName.fqPackage PackageHashes.Type.Stdlib.uint64ParseError), [] )) description = "Returns the value of a " fn = - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.uint64ParseError + let typeName = + FQTypeName.fqPackage PackageHashes.Type.Stdlib.uint64ParseError let resultOk = Dval.resultOk KTUInt64 (KTCustomType(typeName, [])) let resultError = Dval.resultError KTUInt64 (KTCustomType(typeName, [])) (function diff --git a/backend/src/BuiltinExecution/Libs/UInt8.fs b/backend/src/BuiltinExecution/Libs/UInt8.fs index cd62c65cf2..d33149066d 100644 --- a/backend/src/BuiltinExecution/Libs/UInt8.fs +++ b/backend/src/BuiltinExecution/Libs/UInt8.fs @@ -6,7 +6,7 @@ open LibExecution.Builtin.Shortcuts module VT = LibExecution.ValueType module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module RTE = RuntimeError @@ -21,7 +21,7 @@ module ParseError = | BadFormat -> "BadFormat", [] | OutOfRange -> "OutOfRange", [] - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.uint8ParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.uint8ParseError DEnum(typeName, typeName, [], caseName, fields) @@ -281,11 +281,12 @@ let fns : List = typeParams = [] parameters = [ Param.make "s" TString "" ] returnType = - let errorType = FQTypeName.fqPackage PackageIDs.Type.Stdlib.uint8ParseError + let errorType = + FQTypeName.fqPackage PackageHashes.Type.Stdlib.uint8ParseError TypeReference.result TUInt8 (TCustomType(Ok errorType, [])) description = "Returns the value of a " fn = - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.uint8ParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.uint8ParseError let resultOk = Dval.resultOk KTUInt8 (KTCustomType(typeName, [])) let resultError = Dval.resultError KTUInt8 (KTCustomType(typeName, [])) (function diff --git a/backend/src/BuiltinExecution/Libs/Uuid.fs b/backend/src/BuiltinExecution/Libs/Uuid.fs index 61aecf994a..b4d6d35a9e 100644 --- a/backend/src/BuiltinExecution/Libs/Uuid.fs +++ b/backend/src/BuiltinExecution/Libs/Uuid.fs @@ -5,7 +5,7 @@ open Prelude open LibExecution.Builtin.Shortcuts module VT = LibExecution.ValueType module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module ParseError = @@ -16,7 +16,7 @@ module ParseError = match e with | BadFormat -> "BadFormat", [] - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.uuidParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.uuidParseError DEnum(typeName, typeName, [], caseName, fields) @@ -45,13 +45,13 @@ let fns : List = TypeReference.result TUuid (TCustomType( - Ok(FQTypeName.fqPackage PackageIDs.Type.Stdlib.uuidParseError), + Ok(FQTypeName.fqPackage PackageHashes.Type.Stdlib.uuidParseError), [] )) description = "Parse a of form {{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}}" fn = - let typeName = FQTypeName.fqPackage PackageIDs.Type.Stdlib.uuidParseError + let typeName = FQTypeName.fqPackage PackageHashes.Type.Stdlib.uuidParseError let resultOk = Dval.resultOk KTUuid (KTCustomType(typeName, [])) let resultError = Dval.resultError KTUuid (KTCustomType(typeName, [])) (function diff --git a/backend/src/Cli/Cli.fs b/backend/src/Cli/Cli.fs index fb890a88cd..e45fb042e0 100644 --- a/backend/src/Cli/Cli.fs +++ b/backend/src/Cli/Cli.fs @@ -11,7 +11,7 @@ module Dval = LibExecution.Dval module PT = LibExecution.ProgramTypes module PT2RT = LibExecution.ProgramTypesToRuntimeTypes module Exe = LibExecution.Execution -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module BuiltinCli = BuiltinCli.Builtin module BuiltinCliHostConfig = BuiltinCliHost.Libs.Cli.Config @@ -106,7 +106,7 @@ let execute : Task = task { let state = state packageManager - let fnName = RT.FQFnName.fqPackage PackageIDs.Fn.Cli.executeCliCommand + let fnName = RT.FQFnName.fqPackage PackageHashes.Fn.Cli.executeCliCommand let args = args |> List.map RT.DString |> Dval.list RT.KTString |> NEList.singleton let! result = Exe.executeFunction state fnName [] args diff --git a/backend/src/DvalReprDeveloper/DvalReprDeveloper.fs b/backend/src/DvalReprDeveloper/DvalReprDeveloper.fs index e63f2af4a7..a18a6279f8 100644 --- a/backend/src/DvalReprDeveloper/DvalReprDeveloper.fs +++ b/backend/src/DvalReprDeveloper/DvalReprDeveloper.fs @@ -38,15 +38,15 @@ let private fqTypeNameToString (typeName : FQTypeName.FQTypeName) : string = let result = async { match typeName with - | FQTypeName.Package id -> - let! typeOption = PM.pt.getType id |> Ply.toTask |> Async.AwaitTask + | FQTypeName.Package hash -> + let! typeOption = PM.pt.getType hash |> Ply.toTask |> Async.AwaitTask match typeOption with | Some packageType -> match PT2DT.PackageType.toDT packageType with | DRecord(_, _, _, fields) -> return getFQName fields - | _ -> return $"Package {id}" - | None -> return $"Package {id}" + | _ -> return $"Package {hash}" + | None -> return $"Package {hash}" } Async.RunSynchronously result @@ -294,7 +294,7 @@ let toRepr (dv : Dval) : string = | AppNamedFn name -> match name.name with | FQFnName.Builtin builtin -> $"" - | FQFnName.Package id -> $"" + | FQFnName.Package hash -> $"" | DDB name -> wrap name diff --git a/backend/src/LibBinarySerialization/Serializers/Common.fs b/backend/src/LibBinarySerialization/Serializers/Common.fs index 7bc664562e..e98678692f 100644 --- a/backend/src/LibBinarySerialization/Serializers/Common.fs +++ b/backend/src/LibBinarySerialization/Serializers/Common.fs @@ -261,3 +261,12 @@ module DarkDateTime = let read (r : BinaryReader) : LibExecution.DarkDateTime.T = let instant = DateTime.read r instant.InUtc().LocalDateTime + +module Hash = + let write (w : BinaryWriter) (value : Hash) = + let (Hash hashStr) = value + String.write w hashStr + + let read (r : BinaryReader) : Hash = + let hashStr = String.read r + Hash hashStr diff --git a/backend/src/LibBinarySerialization/Serializers/PT/Common.fs b/backend/src/LibBinarySerialization/Serializers/PT/Common.fs index cecb2fe8a1..d9afb1ba43 100644 --- a/backend/src/LibBinarySerialization/Serializers/PT/Common.fs +++ b/backend/src/LibBinarySerialization/Serializers/PT/Common.fs @@ -67,9 +67,9 @@ module NameResolution = module FQTypeName = module Package = - let write (w : BinaryWriter) (p : FQTypeName.Package) = Guid.write w p + let write (w : BinaryWriter) (p : FQTypeName.Package) = Hash.write w p - let read (r : BinaryReader) : FQTypeName.Package = Guid.read r + let read (r : BinaryReader) : FQTypeName.Package = Hash.read r let write (w : BinaryWriter) (name : FQTypeName.FQTypeName) = @@ -97,9 +97,9 @@ module FQValueName = { name = name; version = version } module Package = - let write (w : BinaryWriter) (p : FQValueName.Package) = Guid.write w p + let write (w : BinaryWriter) (p : FQValueName.Package) = Hash.write w p - let read (r : BinaryReader) : FQValueName.Package = Guid.read r + let read (r : BinaryReader) : FQValueName.Package = Hash.read r let write (w : BinaryWriter) (n : FQValueName.FQValueName) = @@ -131,9 +131,9 @@ module FQFnName = { name = name; version = version } module Package = - let write (w : BinaryWriter) (p : FQFnName.Package) = Guid.write w p + let write (w : BinaryWriter) (p : FQFnName.Package) = Hash.write w p - let read (r : BinaryReader) : FQFnName.Package = Guid.read r + let read (r : BinaryReader) : FQFnName.Package = Hash.read r let write (w : BinaryWriter) (n : FQFnName.FQFnName) = diff --git a/backend/src/LibBinarySerialization/Serializers/PT/PackageFn.fs b/backend/src/LibBinarySerialization/Serializers/PT/PackageFn.fs index 7fb8bcd88f..91bc045044 100644 --- a/backend/src/LibBinarySerialization/Serializers/PT/PackageFn.fs +++ b/backend/src/LibBinarySerialization/Serializers/PT/PackageFn.fs @@ -38,7 +38,7 @@ module Parameter = let write (w : BinaryWriter) (p : PackageFn.PackageFn) : unit = - Guid.write w p.id + LibBinarySerialization.Serializers.Common.Hash.write w p.hash Name.write w p.name LibBinarySerialization.Serializers.PT.Expr.Expr.write w p.body LibBinarySerialization.Serializers.Common.List.write w String.write p.typeParams @@ -48,7 +48,7 @@ let write (w : BinaryWriter) (p : PackageFn.PackageFn) : unit = Deprecation.write w FQFnName.write p.deprecated let read (r : BinaryReader) : PackageFn.PackageFn = - let id = Guid.read r + let hash = LibBinarySerialization.Serializers.Common.Hash.read r let name = Name.read r let body = LibBinarySerialization.Serializers.PT.Expr.Expr.read r let typeParams = LibBinarySerialization.Serializers.Common.List.read r String.read @@ -56,7 +56,7 @@ let read (r : BinaryReader) : PackageFn.PackageFn = let returnType = TypeReference.read r let description = String.read r let deprecated = Deprecation.read r FQFnName.read - { id = id + { hash = hash name = name body = body typeParams = typeParams diff --git a/backend/src/LibBinarySerialization/Serializers/PT/PackageType.fs b/backend/src/LibBinarySerialization/Serializers/PT/PackageType.fs index 65fcb04bc5..6103e2cb8e 100644 --- a/backend/src/LibBinarySerialization/Serializers/PT/PackageType.fs +++ b/backend/src/LibBinarySerialization/Serializers/PT/PackageType.fs @@ -101,19 +101,19 @@ module TypeDeclaration = let write (w : BinaryWriter) (t : PackageType.PackageType) : unit = - Guid.write w t.id + LibBinarySerialization.Serializers.Common.Hash.write w t.hash Name.write w t.name TypeDeclaration.write w t.declaration String.write w t.description Deprecation.write w FQTypeName.write t.deprecated let read (r : BinaryReader) : PackageType.PackageType = - let id = Guid.read r + let hash = LibBinarySerialization.Serializers.Common.Hash.read r let name = Name.read r let declaration = TypeDeclaration.read r let description = String.read r let deprecated = Deprecation.read r FQTypeName.read - { id = id + { hash = hash name = name declaration = declaration description = description diff --git a/backend/src/LibBinarySerialization/Serializers/PT/PackageValue.fs b/backend/src/LibBinarySerialization/Serializers/PT/PackageValue.fs index a6f5005eb6..466eadf0a2 100644 --- a/backend/src/LibBinarySerialization/Serializers/PT/PackageValue.fs +++ b/backend/src/LibBinarySerialization/Serializers/PT/PackageValue.fs @@ -25,19 +25,19 @@ module Name = let write (w : BinaryWriter) (v : PackageValue.PackageValue) : unit = - Guid.write w v.id + LibBinarySerialization.Serializers.Common.Hash.write w v.hash Name.write w v.name LibBinarySerialization.Serializers.PT.Expr.Expr.write w v.body String.write w v.description Deprecation.write w FQValueName.write v.deprecated let read (r : BinaryReader) : PackageValue.PackageValue = - let id = Guid.read r + let hash = LibBinarySerialization.Serializers.Common.Hash.read r let name = Name.read r let body = LibBinarySerialization.Serializers.PT.Expr.Expr.read r let description = String.read r let deprecated = Deprecation.read r FQValueName.read - { id = id + { hash = hash name = name body = body description = description diff --git a/backend/src/LibBinarySerialization/Serializers/RT/Common.fs b/backend/src/LibBinarySerialization/Serializers/RT/Common.fs index fd7e5d1880..bc29c31112 100644 --- a/backend/src/LibBinarySerialization/Serializers/RT/Common.fs +++ b/backend/src/LibBinarySerialization/Serializers/RT/Common.fs @@ -63,10 +63,10 @@ module NameResolution = module FQTypeName = let write (w : BinaryWriter) (n : FQTypeName.FQTypeName) : unit = match n with - | FQTypeName.Package id -> Guid.write w id + | FQTypeName.Package id -> Hash.write w id let read (r : BinaryReader) : FQTypeName.FQTypeName = - let id = Guid.read r + let id = Hash.read r FQTypeName.Package id @@ -79,7 +79,7 @@ module FQFnName = w.Write b.version | FQFnName.Package id -> w.Write 1uy - Guid.write w id + Hash.write w id let read (r : BinaryReader) : FQFnName.FQFnName = match r.ReadByte() with @@ -88,7 +88,7 @@ module FQFnName = let version = r.ReadInt32() FQFnName.Builtin { name = name; version = version } | 1uy -> - let id = Guid.read r + let id = Hash.read r FQFnName.Package id | b -> raise (BinaryFormatException(CorruptedData $"Invalid FQFnName tag: {b}")) @@ -102,7 +102,7 @@ module FQValueName = w.Write builtin.version | FQValueName.Package id -> w.Write 1uy - Guid.write w id + Hash.write w id let read (r : BinaryReader) : FQValueName.FQValueName = match r.ReadByte() with @@ -111,7 +111,7 @@ module FQValueName = let version = r.ReadInt32() FQValueName.Builtin { name = name; version = version } | 1uy -> - let id = Guid.read r + let id = Hash.read r FQValueName.Package id | b -> raise (BinaryFormatException(CorruptedData $"Invalid FQValueName tag: {b}")) diff --git a/backend/src/LibBinarySerialization/Serializers/RT/PackageFn.fs b/backend/src/LibBinarySerialization/Serializers/RT/PackageFn.fs index dcfbc193a5..ca4014f222 100644 --- a/backend/src/LibBinarySerialization/Serializers/RT/PackageFn.fs +++ b/backend/src/LibBinarySerialization/Serializers/RT/PackageFn.fs @@ -23,19 +23,19 @@ module Parameter = let write (w : BinaryWriter) (fn : PackageFn.PackageFn) = - Guid.write w fn.id + LibBinarySerialization.Serializers.Common.Hash.write w fn.hash List.write w String.write fn.typeParams NEList.write Parameter.write w fn.parameters TypeReference.write w fn.returnType Instructions.write w fn.body let read (r : BinaryReader) : PackageFn.PackageFn = - let id = Guid.read r + let hash = LibBinarySerialization.Serializers.Common.Hash.read r let typeParams = List.read r String.read let parameters = NEList.read Parameter.read r let returnType = TypeReference.read r let body = Instructions.read r - { id = id + { hash = hash typeParams = typeParams parameters = parameters returnType = returnType diff --git a/backend/src/LibBinarySerialization/Serializers/RT/PackageType.fs b/backend/src/LibBinarySerialization/Serializers/RT/PackageType.fs index 65a8470a9c..69e013a5cc 100644 --- a/backend/src/LibBinarySerialization/Serializers/RT/PackageType.fs +++ b/backend/src/LibBinarySerialization/Serializers/RT/PackageType.fs @@ -71,10 +71,10 @@ module TypeDeclaration = let write (w : BinaryWriter) (t : PackageType.PackageType) = - Guid.write w t.id + LibBinarySerialization.Serializers.Common.Hash.write w t.hash TypeDeclaration.write w t.declaration let read (r : BinaryReader) : PackageType.PackageType = - let id = Guid.read r + let hash = LibBinarySerialization.Serializers.Common.Hash.read r let declaration = TypeDeclaration.read r - { id = id; declaration = declaration } + { hash = hash; declaration = declaration } diff --git a/backend/src/LibBinarySerialization/Serializers/RT/PackageValue.fs b/backend/src/LibBinarySerialization/Serializers/RT/PackageValue.fs index 6600f5b41e..b5d09c00b5 100644 --- a/backend/src/LibBinarySerialization/Serializers/RT/PackageValue.fs +++ b/backend/src/LibBinarySerialization/Serializers/RT/PackageValue.fs @@ -11,10 +11,10 @@ open LibBinarySerialization.Serializers.Common open LibBinarySerialization.Serializers.RT.Common let write (w : BinaryWriter) (c : PackageValue.PackageValue) : unit = - Guid.write w c.id + LibBinarySerialization.Serializers.Common.Hash.write w c.hash Dval.write w c.body let read (r : BinaryReader) : PackageValue.PackageValue = - let id = Guid.read r + let hash = LibBinarySerialization.Serializers.Common.Hash.read r let body = Dval.read r - { id = id; body = body } + { hash = hash; body = body } diff --git a/backend/src/LibCloud/DvalReprInternalRoundtrippable.fs b/backend/src/LibCloud/DvalReprInternalRoundtrippable.fs index f7bb3e7939..23d87d1d53 100644 --- a/backend/src/LibCloud/DvalReprInternalRoundtrippable.fs +++ b/backend/src/LibCloud/DvalReprInternalRoundtrippable.fs @@ -24,17 +24,17 @@ module FormatV0 = // change RT.Dval. module FQTypeName = - type Package = uuid + type Package = Hash type FQTypeName = Package of Package let toRT (t : FQTypeName) : RT.FQTypeName.FQTypeName = match t with - | Package id -> RT.FQTypeName.Package id + | Package hash -> RT.FQTypeName.Package hash let fromRT (t : RT.FQTypeName.FQTypeName) : FQTypeName = match t with - | RT.FQTypeName.Package id -> FQTypeName.Package id + | RT.FQTypeName.Package hash -> FQTypeName.Package hash diff --git a/backend/src/LibCloudExecution/CloudExecution.fs b/backend/src/LibCloudExecution/CloudExecution.fs index 61f59b25a0..c195767d11 100644 --- a/backend/src/LibCloudExecution/CloudExecution.fs +++ b/backend/src/LibCloudExecution/CloudExecution.fs @@ -15,7 +15,7 @@ module PT = LibExecution.ProgramTypes module PT2RT = LibExecution.ProgramTypesToRuntimeTypes module AT = LibExecution.AnalysisTypes module Exe = LibExecution.Execution -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes open LibCloud @@ -128,7 +128,7 @@ let executeHandler let callStackString = Exe.callStackString state let error (msg : string) : RT.Dval = - let typeName = RT.FQTypeName.fqPackage PackageIDs.Type.Stdlib.Http.response + let typeName = RT.FQTypeName.fqPackage PackageHashes.Type.Stdlib.Http.response let fields = [ ("statusCode", RT.DInt64 500) diff --git a/backend/src/LibExecution/Dval.fs b/backend/src/LibExecution/Dval.fs index b7bba1f407..4e4584690f 100644 --- a/backend/src/LibExecution/Dval.fs +++ b/backend/src/LibExecution/Dval.fs @@ -29,7 +29,7 @@ let dictFromMap (typ : KnownType) (entries : Map) : Dval = DDict(VT.known typ, entries) -let optionType = FQTypeName.fqPackage PackageIDs.Type.Stdlib.option +let optionType = FQTypeName.fqPackage PackageHashes.Type.Stdlib.option let optionSome (innerType : KnownType) (dv : Dval) : Dval = DEnum(optionType, optionType, [ VT.known innerType ], "Some", [ dv ]) @@ -44,7 +44,7 @@ let option (innerType : KnownType) (dv : Option) : Dval = -let resultType = FQTypeName.fqPackage PackageIDs.Type.Stdlib.result +let resultType = FQTypeName.fqPackage PackageHashes.Type.Stdlib.result let resultOk (okType : KnownType) (errorType : KnownType) (dvOk : Dval) : Dval = diff --git a/backend/src/LibExecution/Execution.fs b/backend/src/LibExecution/Execution.fs index a6dc95af17..1fbef05613 100644 --- a/backend/src/LibExecution/Execution.fs +++ b/backend/src/LibExecution/Execution.fs @@ -149,7 +149,7 @@ let runtimeErrorToString task { let fnName = RT.FQFnName.fqPackage - PackageIDs.Fn.PrettyPrinter.RuntimeTypes.RuntimeError.toString + PackageHashes.Fn.PrettyPrinter.RuntimeTypes.RuntimeError.toString let args = NEList.singleton (RT2DT.RuntimeError.toDT rte) return! executeFunction state fnName [] args } @@ -157,21 +157,22 @@ let runtimeErrorToString // CLEANUP not ideal, but useful let getPackageFnName (state : RT.ExecutionState) - (id : RT.FQFnName.Package) + (hash : RT.FQFnName.Package) : Ply = uply { let fnName = RT.FQFnName.fqPackage - PackageIDs.Fn.PrettyPrinter.ProgramTypes.FQFnName.fullForReference + PackageHashes.Fn.PrettyPrinter.ProgramTypes.FQFnName.fullForReference let typeName = RT.FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.FQFnName.fqFnName - let dval = RT.DEnum(typeName, typeName, [], "Package", [ RT.DUuid id ]) + PackageHashes.Type.LanguageTools.ProgramTypes.FQFnName.fqFnName + let (Hash hashStr) = hash + let dval = RT.DEnum(typeName, typeName, [], "Package", [ RT.DString hashStr ]) let args = NEList.singleton dval let! result = executeFunction state fnName [] args match result with | Ok(RT.DString s) -> return s - | _ -> return $"{id}" + | _ -> return $"{hash}" } @@ -202,7 +203,7 @@ let getPackageFnName // let prettyPrint (expr : RT.Expr) : Ply = // uply { // let fnName = -// RT.FQFnName.fqPackage PackageIDs.Fn.PrettyPrinter.RuntimeTypes.expr +// RT.FQFnName.fqPackage PackageHashes.Fn.PrettyPrinter.RuntimeTypes.expr // let args = NEList.singleton (RuntimeTypesToDarkTypes.Expr.toDT expr) // match! executeFunction state fnName [] args with @@ -237,8 +238,8 @@ let executionPointToString match ep with | RT.Source -> return "Source" - | RT.Function(RT.FQFnName.Package id) -> - let! name = getPackageFnName state id + | RT.Function(RT.FQFnName.Package hash) -> + let! name = getPackageFnName state hash return $"Package Function {name}" | RT.Function(RT.FQFnName.Builtin fnName) -> return $"Builtin Function {fnName.name}" // TODO actually fetch the fn, etc @@ -323,7 +324,7 @@ let rec rteToString uply { let errorMessageFn = RT.FQFnName.fqPackage - PackageIDs.Fn.PrettyPrinter.RuntimeTypes.RuntimeError.toErrorMessage + PackageHashes.Fn.PrettyPrinter.RuntimeTypes.RuntimeError.toErrorMessage let rteDval = rteToDval rte diff --git a/backend/src/LibExecution/Hashing.fs b/backend/src/LibExecution/Hashing.fs new file mode 100644 index 0000000000..4af339930d --- /dev/null +++ b/backend/src/LibExecution/Hashing.fs @@ -0,0 +1,407 @@ +/// Hashing functions for package items (types, functions, values) +/// +/// Hashes uniquely identify package items across the system. They are stable and +/// deterministic - the same input always produces the same hash. +/// +/// What's included in hashes: +/// - Types: type structure + qualified name (e.g., "MyModule.Person") +/// - Functions: parameter types + return type + body (NO parameter names) +/// - Values: body expression only +/// +/// Type names are included because structurally identical types with different +/// names are distinct types. Function/value names are excluded to allow renaming. +module LibExecution.Hashing + +open System.Security.Cryptography +open System.Text + +open Prelude +open ProgramTypes + + +/// Compute a SHA-256 hash of the given string and return it as a Hash +let private sha256 (input : string) : Hash = + let bytes = Encoding.UTF8.GetBytes(input) + let hashBytes = SHA256.HashData(System.ReadOnlySpan(bytes)) + let hashString = System.Convert.ToHexString(hashBytes).ToLowerInvariant() + Hash hashString + + +/// Serialize a package item to a stable string representation for hashing +module private Serialization = + let rec typeReference (t : TypeReference) : string = + match t with + | TUnit -> "Unit" + | TBool -> "Bool" + | TInt8 -> "Int8" + | TUInt8 -> "UInt8" + | TInt16 -> "Int16" + | TUInt16 -> "UInt16" + | TInt32 -> "Int32" + | TUInt32 -> "UInt32" + | TInt64 -> "Int64" + | TUInt64 -> "UInt64" + | TInt128 -> "Int128" + | TUInt128 -> "UInt128" + | TFloat -> "Float" + | TChar -> "Char" + | TString -> "String" + | TUuid -> "Uuid" + | TDateTime -> "DateTime" + | TList inner -> $"List<{typeReference inner}>" + | TTuple(first, second, rest) -> + let items = first :: second :: rest |> List.map typeReference + let joined = String.concat ", " items + $"({joined})" + | TDict inner -> $"Dict<{typeReference inner}>" + | TCustomType(Ok(FQTypeName.Package(Hash h)), typeArgs) -> + let args = + if List.isEmpty typeArgs then + "" + else + let argStrs = typeArgs |> List.map typeReference + let joined = String.concat ", " argStrs + $"<{joined}>" + $"CustomType({h}){args}" + | TCustomType(Error err, _) -> $"UnresolvedType({err})" + | TFn(args, ret) -> + let argStrs = args |> NEList.toList |> List.map typeReference + let joined = String.concat ", " argStrs + $"Fn({joined}) -> {typeReference ret}" + | TVariable name -> $"'{name}" + | TDB inner -> $"DB<{typeReference inner}>" + + let rec expr (e : Expr) : string = + match e with + | EUnit _ -> "Unit" + | EBool(_, b) -> $"Bool({b})" + | EInt8(_, i) -> $"Int8({i})" + | EUInt8(_, i) -> $"UInt8({i})" + | EInt16(_, i) -> $"Int16({i})" + | EUInt16(_, i) -> $"UInt16({i})" + | EInt32(_, i) -> $"Int32({i})" + | EUInt32(_, i) -> $"UInt32({i})" + | EInt64(_, i) -> $"Int64({i})" + | EUInt64(_, i) -> $"UInt64({i})" + | EInt128(_, i) -> $"Int128({i})" + | EUInt128(_, i) -> $"UInt128({i})" + | EFloat(_, sign, w, f) -> $"Float({sign},{w},{f})" + | EChar(_, c) -> $"Char({c})" + | EString(_, segments) -> + let segStr = + segments + |> List.map (function + | StringText s -> $"Text({s})" + | StringInterpolation e -> $"Interp({expr e})") + |> String.concat ";" + $"String[{segStr}]" + | EVariable(_, name) -> $"Var({name})" + | EArg(_, index) -> $"Arg({index})" + | ELet(_, pat, rhs, body) -> $"Let({letPattern pat}, {expr rhs}, {expr body})" + | EIf(_, cond, thenExpr, elseExpr) -> + let elseStr = + match elseExpr with + | Some e -> expr e + | None -> "None" + $"If({expr cond}, {expr thenExpr}, {elseStr})" + | EList(_, items) -> + let joined = items |> List.map expr |> String.concat "; " + $"List[{joined}]" + | EDict(_, pairs) -> + let pairStrs = pairs |> List.map (fun (k, v) -> k + ":" + expr v) + let joined = String.concat "; " pairStrs + $"Dict[{joined}]" + | ETuple(_, first, second, rest) -> + let items = first :: second :: rest |> List.map expr + let joined = String.concat ", " items + $"Tuple({joined})" + | ERecord(_, Ok(FQTypeName.Package(Hash h)), typeArgs, fields) -> + let typeArgsStr = + if List.isEmpty typeArgs then + "" + else + let joinedArgs = typeArgs |> List.map typeReference |> String.concat ", " + $"<{joinedArgs}>" + let fieldPairs = fields |> List.map (fun (k, v) -> k + "=" + expr v) + let fieldStrs = String.concat "; " fieldPairs + $"Record({h}{typeArgsStr}, [{fieldStrs}])" + | ERecord(_, Error err, typeArgs, fields) -> + let typeArgsStr = + if List.isEmpty typeArgs then + "" + else + let joinedArgs = typeArgs |> List.map typeReference |> String.concat ", " + $"<{joinedArgs}>" + let fieldPairs = fields |> List.map (fun (k, v) -> k + "=" + expr v) + let fieldStrs = String.concat "; " fieldPairs + $"UnresolvedRecord({err}{typeArgsStr}, [{fieldStrs}])" + | ERecordFieldAccess(_, record, fieldName) -> + $"FieldAccess({expr record}, {fieldName})" + | ERecordUpdate(_, record, updates) -> + let updateStrs = + updates + |> NEList.toList + |> List.map (fun (k, v) -> $"{k}={expr v}") + |> String.concat "; " + $"RecordUpdate({expr record}, [{updateStrs}])" + | EEnum(_, Ok(FQTypeName.Package(Hash h)), typeArgs, caseName, fields) -> + let typeArgsStr = + if List.isEmpty typeArgs then + "" + else + let joinedArgs = typeArgs |> List.map typeReference |> String.concat ", " + + $"<{joinedArgs}>" + let fieldStrs = fields |> List.map expr |> String.concat ", " + $"Enum({h}{typeArgsStr}, {caseName}, [{fieldStrs}])" + | EEnum(_, Error err, typeArgs, caseName, fields) -> + let typeArgsStr = + if List.isEmpty typeArgs then + "" + else + let joinedArgs = typeArgs |> List.map typeReference |> String.concat ", " + $"<{joinedArgs}>" + let fieldStrs = fields |> List.map expr |> String.concat ", " + $"UnresolvedEnum({err}{typeArgsStr}, {caseName}, [{fieldStrs}])" + | EMatch(_, arg, cases) -> + let caseStrs = + cases + |> List.map (fun case -> + let whenStr = + match case.whenCondition with + | Some e -> $" when {expr e}" + | None -> "" + $"{matchPattern case.pat}{whenStr} -> {expr case.rhs}") + |> String.concat "; " + $"Match({expr arg}, [{caseStrs}])" + | EApply(_, fnExpr, typeArgs, args) -> + let typeArgsStr = + if List.isEmpty typeArgs then + "" + else + let joinedArgs = typeArgs |> List.map typeReference |> String.concat ", " + + $"<{joinedArgs}>" + let argStrs = args |> NEList.toList |> List.map expr |> String.concat ", " + $"Apply({expr fnExpr}{typeArgsStr}, [{argStrs}])" + | EFnName(_, Ok(FQFnName.Builtin b)) -> $"Builtin({b.name}, {b.version})" + | EFnName(_, Ok(FQFnName.Package(Hash h))) -> $"PackageFn({h})" + | EFnName(_, Error err) -> $"UnresolvedFn({err})" + | ELambda(_, pats, body) -> + let patStrs = + pats |> NEList.toList |> List.map letPattern |> String.concat ", " + $"Lambda([{patStrs}], {expr body})" + | EInfix(_, infix, lhs, rhs) -> + $"Infix({infixName infix}, {expr lhs}, {expr rhs})" + | EPipe(_, lhs, parts) -> + let partStrs = parts |> List.map pipeExpr |> String.concat " |> " + $"Pipe({expr lhs} |> {partStrs})" + | EValue(_, Ok(FQValueName.Builtin b)) -> $"BuiltinValue({b.name}, {b.version})" + | EValue(_, Ok(FQValueName.Package(Hash h))) -> $"PackageValue({h})" + | EValue(_, Error err) -> $"UnresolvedValue({err})" + | EStatement(_, first, next) -> $"Statement({expr first}; {expr next})" + | ESelf _ -> "Self" + + and letPattern (p : LetPattern) : string = + match p with + | LPVariable(_, name) -> name + | LPTuple(_, first, second, rest) -> + let items = first :: second :: rest |> List.map letPattern + let joined = String.concat ", " items + $"({joined})" + | LPUnit _ -> "()" + + and matchPattern (p : MatchPattern) : string = + match p with + | MPUnit _ -> "()" + | MPBool(_, b) -> string b + | MPInt8(_, i) -> $"{i}y" + | MPUInt8(_, i) -> $"{i}uy" + | MPInt16(_, i) -> $"{i}s" + | MPUInt16(_, i) -> $"{i}us" + | MPInt32(_, i) -> $"{i}l" + | MPUInt32(_, i) -> $"{i}ul" + | MPInt64(_, i) -> $"{i}L" + | MPUInt64(_, i) -> $"{i}UL" + | MPInt128(_, i) -> $"{i}Q" + | MPUInt128(_, i) -> $"{i}Z" + | MPFloat(_, sign, w, f) -> $"{sign}{w}.{f}" + | MPChar(_, c) -> $"'{c}'" + | MPString(_, s) -> $"\"{s}\"" + | MPList(_, items) -> + let joined = items |> List.map matchPattern |> String.concat "; " + $"[{joined}]" + | MPListCons(_, head, tail) -> $"{matchPattern head} :: {matchPattern tail}" + | MPTuple(_, first, second, rest) -> + let items = first :: second :: rest |> List.map matchPattern + let joined = String.concat ", " items + $"({joined})" + | MPEnum(_, caseName, fields) -> + let fieldStrs = fields |> List.map matchPattern |> String.concat ", " + $"{caseName}({fieldStrs})" + | MPVariable(_, name) -> name + | MPOr(_, patterns) -> + patterns |> NEList.toList |> List.map matchPattern |> String.concat " | " + + and pipeExpr (pe : PipeExpr) : string = + match pe with + | EPipeLambda(_, pats, body) -> + let patStrs = + pats |> NEList.toList |> List.map letPattern |> String.concat ", " + $"fun ({patStrs}) -> {expr body}" + | EPipeInfix(_, infix, e) -> $"{infixName infix} {expr e}" + | EPipeFnCall(_, Ok(FQFnName.Builtin b), typeArgs, args) -> + let typeArgsStr = + if List.isEmpty typeArgs then + "" + else + let joinedArgs = typeArgs |> List.map typeReference |> String.concat ", " + + $"<{joinedArgs}>" + let argStrs = + if List.isEmpty args then + "" + else + let joinedArgs = args |> List.map expr |> String.concat " " + + $" {joinedArgs}" + $"Builtin({b.name}, {b.version}){typeArgsStr}{argStrs}" + | EPipeFnCall(_, Ok(FQFnName.Package(Hash h)), typeArgs, args) -> + let typeArgsStr = + if List.isEmpty typeArgs then + "" + else + let joinedArgs = typeArgs |> List.map typeReference |> String.concat ", " + + $"<{joinedArgs}>" + let argStrs = + if List.isEmpty args then + "" + else + let joinedArgs = args |> List.map expr |> String.concat " " + + $" {joinedArgs}" + $"PackageFn({h}){typeArgsStr}{argStrs}" + | EPipeFnCall(_, Error err, _, _) -> $"UnresolvedPipeFn({err})" + | EPipeEnum(_, Ok(FQTypeName.Package(Hash h)), caseName, fields) -> + let fieldStrs = fields |> List.map expr |> String.concat ", " + $"Enum({h}, {caseName}, [{fieldStrs}])" + | EPipeEnum(_, Error err, caseName, fields) -> + let fieldStrs = fields |> List.map expr |> String.concat ", " + $"UnresolvedPipeEnum({err}, {caseName}, [{fieldStrs}])" + | EPipeVariable(_, varName, args) -> + let argStrs = + if List.isEmpty args then + "" + else + let joinedArgs = args |> List.map expr |> String.concat " " + + $" {joinedArgs}" + $"{varName}{argStrs}" + + and infixName (i : Infix) : string = + match i with + | InfixFnCall ifn -> + match ifn with + | ArithmeticPlus -> "+" + | ArithmeticMinus -> "-" + | ArithmeticMultiply -> "*" + | ArithmeticDivide -> "/" + | ArithmeticModulo -> "%" + | ArithmeticPower -> "^" + | ComparisonGreaterThan -> ">" + | ComparisonGreaterThanOrEqual -> ">=" + | ComparisonLessThan -> "<" + | ComparisonLessThanOrEqual -> "<=" + | ComparisonEquals -> "==" + | ComparisonNotEquals -> "!=" + | StringConcat -> "++" + | BinOp op -> + match op with + | BinOpAnd -> "&&" + | BinOpOr -> "||" + + let typeDeclaration (decl : TypeDeclaration.T) : string = + let typeParamsStr = + if List.isEmpty decl.typeParams then + "" + else + let joinedParams = String.concat ", " decl.typeParams + + $"<{joinedParams}>" + + match decl.definition with + | TypeDeclaration.Alias typ -> $"Alias{typeParamsStr} = {typeReference typ}" + | TypeDeclaration.Record fields -> + let fieldStrs = + fields + |> NEList.toList + |> List.map (fun f -> $"{f.name}: {typeReference f.typ}") + |> String.concat "; " + $"Record{typeParamsStr} {{ {fieldStrs} }}" + | TypeDeclaration.Enum cases -> + let caseStrs = + cases + |> NEList.toList + |> List.map (fun c -> + if List.isEmpty c.fields then + c.name + else + let fieldStrs = + c.fields + |> List.map (fun f -> typeReference f.typ) + |> String.concat " * " + $"{c.name} of {fieldStrs}") + |> String.concat " | " + $"Enum{typeParamsStr} = {caseStrs}" + + +module TypeDeclaration = + /// Hash without the type name. Used only as a fallback; prefer hashWithName. + let hash (decl : TypeDeclaration.T) : Hash = + let serialized = Serialization.typeDeclaration decl + let content = $"PackageType|{serialized}" + sha256 content + + /// Hash a type declaration including its qualified name. + /// + /// The name is included because: + /// 1. Type includes the name - MyModule.Person and OtherModule.Employee + /// are different types even if structurally identical + /// 2. Prevents collisions when types have unresolved references during parsing + let hashWithName (name : PackageType.Name) (decl : TypeDeclaration.T) : Hash = + let serialized = Serialization.typeDeclaration decl + let fullName = $"""{name.owner}.{String.concat "." name.modules}.{name.name}""" + let content = $"PackageType|{fullName}|{serialized}" + sha256 content + + +module PackageValue = + /// Hash a value based on its body expression. + /// The value's name is not included, so renaming doesn't change the hash. + let hash (body : Expr) : Hash = + let content = $"PackageValue|{Serialization.expr body}" + sha256 content + + +module PackageFn = + /// Hash a function based on parameter types, return type, and body. + /// + /// Parameter names are excluded because the body uses position-based references + /// (EArg), not name-based (EVariable). This allows parameter renaming without + /// changing the hash. The function's own name is also excluded. + let hash + ( + parameters : NEList, + returnType : TypeReference, + body : Expr + ) : Hash = + let paramStrs = + parameters + |> NEList.toList + |> List.map (fun p -> Serialization.typeReference p.typ) + |> String.concat ", " + let retStr = Serialization.typeReference returnType + let bodyStr = Serialization.expr body + let content = $"PackageFn|({paramStrs}) -> {retStr}|{bodyStr}" + sha256 content diff --git a/backend/src/LibExecution/Interpreter.fs b/backend/src/LibExecution/Interpreter.fs index 471ed49ebd..ca66726e1a 100644 --- a/backend/src/LibExecution/Interpreter.fs +++ b/backend/src/LibExecution/Interpreter.fs @@ -184,7 +184,7 @@ let execute (exeState : ExecutionState) (vm : VMState) : Ply = { instructions = List.toArray fn.body.instructions resultReg = fn.body.resultIn } vm.packageFnInstrCache <- - Map.add fn.id instrData vm.packageFnInstrCache + Map.add fn.hash instrData vm.packageFnInstrCache return instrData | None -> return raiseRTE (RTE.FnNotFound(FQFnName.Package fn)) @@ -723,7 +723,7 @@ let execute (exeState : ExecutionState) (vm : VMState) : Ply = allArgs |> List.iteri (fun i arg -> r[i] <- arg) r typeSymbolTable = currentFrame.typeSymbolTable // copy. probably also need to _extend_ here. - executionPoint = Function(FQFnName.Package fn.id) } + executionPoint = Function(FQFnName.Package fn.hash) } |> Some | RaiseNRE nre -> raiseRTE (RTE.ParseTimeNameResolution nre) @@ -771,9 +771,9 @@ let execute (exeState : ExecutionState) (vm : VMState) : Ply = | Function fnName -> let! expectedReturnType = match fnName with - | FQFnName.Package id -> + | FQFnName.Package hash -> uply { - let! fn = exeState.fns.package id + let! fn = exeState.fns.package hash match fn with | None -> return RTE.FnNotFound fnName |> raiseRTE | Some fn -> return fn.returnType diff --git a/backend/src/LibExecution/LibExecution.fsproj b/backend/src/LibExecution/LibExecution.fsproj index 5e245c83f4..9ecb28f41b 100644 --- a/backend/src/LibExecution/LibExecution.fsproj +++ b/backend/src/LibExecution/LibExecution.fsproj @@ -17,7 +17,7 @@ - + @@ -28,6 +28,7 @@ + diff --git a/backend/src/LibExecution/PackageHashes.fs b/backend/src/LibExecution/PackageHashes.fs new file mode 100644 index 0000000000..b99048f3c6 --- /dev/null +++ b/backend/src/LibExecution/PackageHashes.fs @@ -0,0 +1,1020 @@ +/// All Darklang code exists in package space, referenced by ID. In many places +/// throughout our F# codebase, we reference these IDs. (i.e. in order to return an +/// `Option` from a function, we need to know the ID of the `Option` package type). +/// +/// So, we define their IDs here, and reference via those IDs. When parsing, we have +/// a lookup of name -> ID handy; if a parsed definition matches one of those names, +/// we ensure that we use the corresponding ID when saving it to the DB. +/// +/// Some tests exist to ensure each of these IDs is unique. +/// +/// These are SHA-256 hashes of the package definitions, computed and stored in the database. +/// +/// Note: all of these types are assumed to be owned by the Darklang user +module LibExecution.PackageHashes + +open Prelude + +// The way this is set up, we provide the name of the package item, with the hash. +// Doing this at once helps things to be legible, and makes sure you don't forget +// to add it to a separate lookup table. Maybe it's not ideal to use mutation so +// much, but it seems kinda reasonable. + + +module Type = + let mutable private _lookup = Map [] + let private p modules name (hash : string) : Hash = + let h = Hash hash + _lookup <- _lookup |> Map.add (modules, name) h + h + + module Stdlib = + let private p addl = p ("Stdlib" :: addl) + + let result = + p + [ "Result" ] + "Result" + "f2ca0aff55b71c247fd286f61786e51d0ebc89aaac025704404920fc85f52745" + let option = + p + [ "Option" ] + "Option" + "98cf8ebdbf66c26968134a3ddf1aca90dd0684cd94050b82666b533d22cc4618" + + let int8ParseError = + p + [ "Int8" ] + "ParseError" + "723d3b12d346bbc6318b22a167d6a25bc1a5224fd876a42ac47418f21e6d0d04" + let uint8ParseError = + p + [ "UInt8" ] + "ParseError" + "7865f4fadff990e9e5944abae8a609aeefdd6c56ef152c323b86a78d2815ecfb" + let int16ParseError = + p + [ "Int16" ] + "ParseError" + "add778da274300c79e68c0cc5ddaa95df679c46f0735aeac0bd51510f30b645c" + let uint16ParseError = + p + [ "UInt16" ] + "ParseError" + "69cbec68701c6f7ebeadbf7cfe4d7a96693166def207f1f46ac0ba2b5d5fc23b" + let int32ParseError = + p + [ "Int32" ] + "ParseError" + "3be67cdb4177a571ab07179d5e542ec36465a7c1b05d2ff111ac58eb06c13831" + let uint32ParseError = + p + [ "UInt32" ] + "ParseError" + "bdc05b4062460e953cb3e00a7ae7917e69ee068b2835f1291be6f8cb6a9f0c91" + let int64ParseError = + p + [ "Int64" ] + "ParseError" + "ccadf6866458212e7af3852b0406652bc9a8311b76dd963275e579021e5d8ad1" + let uint64ParseError = + p + [ "UInt64" ] + "ParseError" + "6f25d1208b6a9e8089958d21dbc5c0848ac985609786631b877f0c99940d1edb" + let int128ParseError = + p + [ "Int128" ] + "ParseError" + "d22af0a98784721ee661da7eaaa7e078fd74ebfc3f199f2b68006bf0b067a5dc" + let uint128ParseError = + p + [ "UInt128" ] + "ParseError" + "f8588dfcad3f7bdcc80c91b3f0c5469ca585213338ddcc1896081624510fac0c" + let floatParseError = + p + [ "Float" ] + "ParseError" + "18a0d38830f3c20ba2b0c0bd1d51b7c2f4cb18c5fc8a1956e90c97156164b08b" + let uuidParseError = + p + [ "Uuid" ] + "ParseError" + "b5c1dc828bd2df5052cc3bfac031342402ff6ca41837ac757bd76ffd695c2e80" + + module Http = + let request = + p + [ "Http" ] + "Request" + "24517efd8e7b0748026bc7037cc32c609684a7d8519d045ef25d8ca3339ebdb2" + let response = + p + [ "Http" ] + "Response" + "c681aec35d1284bee3399bf585dc5cf665dd782318e5ce14f9d44444d813e942" + + module HttpClient = + let private p addl = p ("HttpClient" :: addl) + let badHeader = + p + [] + "BadHeader" + "34556d311f03747434e7d4ec9abf7da79f41918abf2fbea710760240946512e8" + let badUrlDetails = + p + [] + "BadUrlDetails" + "d4a499f2cdf102fb77358ad1514b01c4fbbf5ca506ee56e9f0216c3ec1c7fb17" + let requestError = + p + [] + "RequestError" + "976ec33550bfefc0d1d7df3f1e4838ed686a4bf5c94ce7fa9b54a12917eb9ca5" + let response = + p + [] + "Response" + "25125d07e30e145a0bdc9dfd101721ec8c97ac7d9273fce148567264f434c059" + + module Json = + module ParseError = + let private p addl = p ("Json" :: "ParseError" :: addl) + + module JsonPath = + let part = + p + [ "JsonPath"; "Part" ] + "Part" + "54cd794088c75d4935814dcb1c8bc25de829cc543681df8b141725fdb4c37295" + let jsonPath = + p + [] + "JsonPath" + "1c0aa81ac92ff89628b40a83d6fa03f705815f2a40153469cb98a8f806271fae" + let parseError = + p + [] + "ParseError" + "9e270f0b38a396ab3db27e1b68475bff9f7fe95bda020b59312a39fb7ded46b9" + + module AltJson = + let private p addl = p ("AltJson" :: addl) + let parseError = + p + [ "ParseError" ] + "ParseError" + "f2ec4315189875aa1ad2f2fdc840723c06cf340585bb303853613ada1f56d73f" + let json = + p + [] + "Json" + "398e73cc62c5e5e83bd88bbc425ac0315674e7c4c3b997d7bfc7d3a99bc8057d" + + module Cli = + let private p addl = p ("Cli" :: addl) + let executionOutcome = + p + [] + "ExecutionOutcome" + "d0d7902c552c70983f9421a08d755c4718a15963fe626ef361e90a34146326b9" + + module OS = + let private p addl = p ("OS" :: addl) + let os = + p + [] + "OS" + "554cdb23faa85cc315312eaee8e5fa9cf809f7e19162b30c38618381869654b7" + + module Stdin = + let private p addl = p ("Stdin" :: addl) + let modifiers = + p + [ "Modifiers" ] + "Modifiers" + "2d96a56417ea47c08474b4c86a8d7e487ab334feb0239847d84f7c9f392c0e1e" + let key = + p + [ "Key" ] + "Key" + "1f8b254aba63d966e97335de86ea9bc170536f4ad97168d0eb934e1cf02492b3" + let keyRead = + p + [ "KeyRead" ] + "KeyRead" + "3063347055790766cd54c03d137fddfa3c1daf9f33fc74bc2bab4a51928e169d" + + module LanguageTools = + let private p addl = p ("LanguageTools" :: addl) + let sign = + p [] "Sign" "de4e0fc727cbd3971209447b661626f3721814267628a539b7203ca30380c4ef" + + // TODO: where do these actually belong? are they used, even? + let builtinValue = + p + [] + "BuiltinValue" + "9a1aa08b60f37e143e3d058422c8d0eb301bdd78fc51902c4f351ee51e80383f" + let builtinFnParam = + p + [] + "BuiltinFunctionParameter" + "2b014f76be8d5f0ccd0fcb213232f0bd73d12af93e5a70e203225b09061e29a7" + let builtinFn = + p + [] + "BuiltinFunction" + "60d8e5fae09c863b35e59fff1d6d0c208101807862e0a03ebc52977b4ce89b49" + + + module Parser = + let private p addl = p ("Parser" :: addl) + let point = + p + [] + "Point" + "5e3e43eac96bdc06b27d1f195af8f2f96b48a9e61d121614c702abdeab24fbb4" + let range = + p + [] + "Range" + "b6a2c2b1f3c9c55988f6e401f66a02de7784a88befe8d44c89fc7612865dfd85" + let parsedNode = + p + [] + "ParsedNode" + "6d3d752eb9ab3c8f0d07bbf5d0dee946874145c1356723ca392a48da19296c12" + + module CliScript = + let private p addl = p ("CliScript" :: addl) + let pTCliScriptModule = + p + [] + "PTCliScriptModule" + "490c41248baab9a970212eab9a06f8b7b132bbd9bcb225ecbe98d695948066e0" + + + module NameResolver = + let private p addl = p ("NameResolver" :: addl) + let nameResolverOnMissing = + p + [] + "OnMissing" + "0aa2ddc822db46014d15ccadbb5a4b490e8d023354790197faf868a134649c55" + + + module WrittenTypes = + let private p addl = p ("WrittenTypes" :: addl) + let name = + p + [] + "Name" + "eaa469b32f1f3986cb155bcaaab8d683f72c539fb2e9065e352c5ecf81c38536" + let range = + p + [] + "Range" + "bc9bbcdec8a500b0ce39d9cfdf702e64f8568f33a52adc29d97ce9b254aac3fe" + + + module RuntimeTypes = + let private p addl = p ("RuntimeTypes" :: addl) + module FQTypeName = + let private p addl = p ("FQTypeName" :: addl) + let package = + p + [] + "Package" + "974888e01b444e390d03e65d839bf7e6f574327643dcbc2c9802ef38509750f0" + let builtin = + p + [] + "Builtin" + "0317989ec75f36cc9730a2d639661f55a0eff917bc90846782d98fed64abdc91" //TODO this isn't available in the db + let fqTypeName = + p + [] + "FQTypeName" + "bf6d74749e2fc5b75e60903a8a6af0a466bcdcad8a2fb038978b8b026afb674e" + + module FQValueName = + let private p addl = p ("FQValueName" :: addl) + let package = + p + [] + "Package" + "d20b366b25d9ebe5675ca5af97e165f0b1058ed5e3f0d714378ca451d18a8256" + let builtin = + p + [] + "Builtin" + "532823b61dd2cb8971ff916758a278168fe15081c2193becb37f48f634d4ac91" + let fqValueName = + p + [] + "FQValueName" + "6234c6ef5c70f735e174d3155d30779bd086f3b8f96320da3776122ccfee0a12" + + module FQFnName = + let private p addl = p ("FQFnName" :: addl) + let package = + p + [] + "Package" + "c75180954ca5d21b51f0caf5e3a4800caa0a2209e1c1281db7e528c2f23bb88b" + let builtin = + p + [] + "Builtin" + "564e119a6f502fe3cec6c506eafa2f74e64423610c6914d40ac09dd866443ba8" + let fqFnName = + p + [] + "FQFnName" + "d3afa67b930b5c6b797f3c175729431642d83afb6e2efaf41af4f22b11acfbde" + + let nameResolutionError = + p + [] + "NameResolutionError" + "ae5996765368608f6ec590c18bbe6cb417caeed9d8fb7ddce3bf17de505bfde3" + let nameResolution = + p + [] + "NameResolution" + "e0c95e51c2360f5e23ea5dc0f86057728535ac8d6c3c979ebdf1ff73d539a835" + + let typeReference = + p + [] + "TypeReference" + "9305fb8bfec38293e610e4d04fefdf4531267847a7c8022121e498e0f18fc90c" + let param = + p + [] + "Param" + "33afa9180045d083fd9c20768952e0116099f76ef4a8ce545c3167bc2358e4e9" // todo not found in db + let letPattern = + p + [] + "LetPattern" + "a44b34d89291bcaf6459a5b2925f3a0afcd9f9587e04a53f3b8ad5ec502eadd4" + let matchPattern = + p + [] + "MatchPattern" + "83a8142d4c26a567f6e09a4de0caf87c5f1ffdafd8de226eba7ad18af24b08f7" + let matchCase = p [] "MatchCase" "5fb0f282-5f7c-4fb8-b107-b63429080e69" // todo not found in db + let stringSegment = + p + [] + "StringSegment" + "7ae4abd635868a80d0093957599ed4ee8b603f6df85f88663f3d6559e9e81cb8" + + let dval = + p + [] + "Dval" + "4122288ce71c06d3c0d34026ddb50887ba2dc183718c082989f9571f67146227" + let knownType = + p + [] + "KnownType" + "69d35e01d4c8c7ad1d642a260c4ca19c45eadc6f1d3e862bd997b9f544415f1d" + let valueType = + p + [] + "ValueType" + "ad6deb4b5afbe711fb063d0830d06c66f5004cd79766eaeab248c060d80e664b" + + let applicableNamedFn = + p + [] + "ApplicableNamedFn" + "e9bfbd4652642a474edd3ee4e516aadf585b0655f9aa4b343a100b881a84bf3e" + let applicableLambda = + p + [] + "ApplicableLambda" + "bf833aeafdbaf804945f025b7b74b3b4c68884f1e8482a3a7293b634c3b78f14" + let applicable = + p + [] + "Applicable" + "d559753f6e852a353298c05efb648ed4439ff1de01938a58e13d7d352a691544" + + + module RuntimeError = + let private p addl = p ("RuntimeError" :: addl) + + module TypeChecking = + let private p addl = p ("TypeChecking" :: addl) + let reverseTypeCheckPath = + p + [] + "ReverseTypeCheckPath" + "f26bd8b03d911e1744e7466a540ae1eb0cda16911ce7a52f69ab5361a562c593" + let typeCheckPathPart = + p + [] + "TypeCheckPathPart" + "4ed370c84d4b4ecd22ab9e4fa0499fd13bd8a0ced834078e8e2c71e61327a2f1" + + module Bools = + let error = + p + [ "Bools" ] + "Error" + "f162134852628decb707533d43976b7d32c9e2db26f6977cd5c45ed492f5145c" + + module Ints = + let error = + p + [ "Ints" ] + "Error" + "f3bcbfbb7b681fc585749d24db8be4ed261fd227aa2a7d244f9ef1a7a4f9f295" + + module Strings = + let error = + p + [ "Strings" ] + "Error" + "29f6c0b72b8eb1ab4fb3ead7a85f5f520991ab7fba0b87f4b13b92fb0dbb1414" + + module Lists = + let private p addl = p ("Lists" :: addl) + let error = + p + [] + "Error" + "60a0c7bd1c83fb5f090ca12da7fc741b7a8145c1332d8ff38cd98393dfd7062f" + + module Dicts = + let error = + p + [ "Dicts" ] + "Error" + "e2d84a46882d5268a2024235d11f58845be4f2f76db45d406653bef745aed3c0" + + module Lets = + let error = + p + [ "Lets" ] + "Error" + "675e811a9f0cdc7c2db5fee58ff9f1957a8657bac0ff1c15a1412920166f0ae0" + + module Matches = + let error = + p + [ "Matches" ] + "Error" + "9a4ee8c55c050238a73e339a6e77f24c1f6ebd64ade899363088450284f9da01" + + module Enums = + let error = + p + [ "Enums" ] + "Error" + "a196688066cc9b580b1310497359871f298540afc0bd9e0d5da402cdd1768f66" + + module Records = + let error = + p + [ "Records" ] + "Error" + "88646fa860a3a1b8c5500eb1c918fcfa5a7ab1b77068cbd54c48821a14fbc0d9" + + module Applications = + let error = + p + [ "Applications" ] + "Error" + "45066a4b6ed2b05ed788cf4223d0c307be6f83e7143a9a81f29843619823aaf3" + + module Statements = + let error = + p + [ "Statements" ] + "Error" + "ab2f1004694571e99a35ec0fea76b28f8806c73da70336a8f1fafcfa7aa5d4dd" + + module Unwraps = + let error = + p + [ "Unwraps" ] + "Error" + "9e7efe45181c1de0e340968f11bfef542dd02f4c5e73d764b81d3555a4627da5" + + module Jsons = + let error = + p + [ "Jsons" ] + "Error" + "425311d8cf1c5a303a5822ecc94029021906de4ac3ad5c5a7f2f9aeb8b569896" + + module CLIs = + let error = + p + [ "CLIs" ] + "Error" + "74174b00a0157a7705d7f17203f6b8fbf76c5abeae1a0079b6c9b030ad30ac8d" + + let error = + p + [] + "Error" + "0721149a6b713fb9eb081ed344e49ae1fc250fe7fc18afac0e1efda809d52689" + + module ProgramTypes = + let private p addl = p ("ProgramTypes" :: addl) + + let nameResolutionError = + p + [] + "NameResolutionError" + "2139de7ac2863b884b270703c86fb8282b2cea5a2c5c6718b8cf83042a50bb54" + + module FQTypeName = + let private p addl = p ("FQTypeName" :: addl) + let package = + p + [] + "Package" + "1cdc669e41a999fd20658135ac133273244f6076db9d90412edfe3bde1978e30" + let fqTypeName = + p + [] + "FQTypeName" + "47c06c5916a3e71ea26fa171d49b820445079de62f5c74b4a3d92fdc1f2961fa" + + module FQValueName = + let private p addl = p ("FQValueName" :: addl) + let builtin = + p + [] + "Builtin" + "7ca58cd5b97d7eb00d027794b1d469e8f29e45d05ff0e6888b2c6d8f308468de" + let package = + p + [] + "Package" + "427891785530de89a1306ea54d2a8a0b2def57c00beb92e277c86164cbfa923f" + let fqValueName = + p + [] + "FQValueName" + "25eb8dff9ae11131cca61ec0f19aa445d1cafa1f2975856f55bb43846b9cadf4" + + module FQFnName = + let private p addl = p ("FQFnName" :: addl) + let builtin = + p + [] + "Builtin" + "caa5404431402161a6b63b1de55ecc9b6fa42be5eeb7ea004ca0fbb13473ff01" + let package = + p + [] + "Package" + "cf94968c6feee8634da577deed36df388d9d4f10f3ddcf7495638548822ed857" + let fqFnName = + p + [] + "FQFnName" + "5e2d23d461a644fbfc0f9110a98f46c52a108b9c17c479ac4fa00f4d87310c7c" + + let typeReference = + p + [] + "TypeReference" + "6e7788e682f3f545802f4e712c5e9b154a324a472b4b92dc7589892e7c2808ee" + + let letPattern = + p + [] + "LetPattern" + "c1b3a896a8a342329857f79ecbf904b59738b7be822e5664d20a97b5c799b052" + let matchPattern = + p + [] + "MatchPattern" + "7f9fd1b3c3014fad212989e50242d7a05a88943f6597285bf3263a2f44810c43" + let matchCase = + p + [] + "MatchCase" + "2d1dee96ec534c466e849f03f6a76870a3eeb7ee560891a90e6620f4953eabeb" + let stringSegment = + p + [] + "StringSegment" + "db694cec98b7550089f83f5a3d5f8b8289d74bbdeef6f100c5cbcc49188842e1" + let binaryOperation = + p + [] + "BinaryOperation" + "088ebf13936a02b162c9a293e0fbacd3157f9fad6527ebec538d51d87f7a5600" + let infixFnName = + p + [] + "InfixFnName" + "2c0c00e62370eddd68feb1b3f3fc301588cf85ef5c6fcb66d1934e3fbb927e3a" + let infix = + p + [] + "Infix" + "ef63da034364982ca83f8f536c239c954666a8d6b6ac68031051c292854284c2" + let pipeExpr = + p + [] + "PipeExpr" + "741f0ebd3ae98e71ffb459f8916c93a92bf12e98e12f8c970a259e46bc239875" + let expr = + p + [] + "Expr" + "d2baf32f80b609ffa52913703feacff82b88b867dd6505ec776a7b73961a7368" + + let deprecation = + p + [] + "Deprecation" + "37c9103fa3c2c36f168721651edf92b313357e484fe91b26713cea274e651f0f" + + module TypeDeclaration = + let private p addl = p ("TypeDeclaration" :: addl) + let recordField = + p + [] + "RecordField" + "a06c4d2abd4dac06c528d4afa7cc7abbe3fa808b064f4c852a2144e57eb7086d" + let enumField = + p + [] + "EnumField" + "d0df16f02ee120936df402645549b7c3db7a0ec93c897c1242d23c022bfc5725" + let enumCase = + p + [] + "EnumCase" + "7a6bec7d073e3a0749d2d01a6cbe7ef460688784b052fbd030e1a4ae2cc97a1d" + let definition = + p + [] + "Definition" + "89e592313c3af61a687b2f798176ccca52251b49a375ea405dfef993b9d7097b" + let typeDeclaration = + p + [] + "TypeDeclaration" + "cde67a91c47fd49bcb7c9d658e24f40dc0d893b35e2ecc9670f8450337c836e1" + + module PackageType = + let private p addl = p ("PackageType" :: addl) + let name = + p + [] + "Name" + "fde1b6b064a3fd9e7c0429f669e505108ebfdf90d4037b61fd7362c17641cc96" + let packageType = + p + [] + "PackageType" + "a3a2829233b934ca70859289dfa96709ab5591df379f688f328162f7f239b960" + + module PackageValue = + let private p addl = p ("PackageValue" :: addl) + let name = + p + [] + "Name" + "5ce2157edeabcf462a14e6deb622479b27c6c88eb720d35c14980fdd836facc2" + let packageValue = + p + [] + "PackageValue" + "043a2c2aa0fc267726aed6c3a7e162a2ade75d12a78ab4c5e6684ad7a6f75ea1" + + module PackageFn = + let private p addl = p ("PackageFn" :: addl) + let name = + p + [] + "Name" + "804e27c34e6951e3a102cfe8d1184a0f431a98974569820e6e80f9a72269d62f" + let parameter = + p + [] + "Parameter" + "5832ff971549a97f918a412c13d27f05295bc71b7449939448f2110b89945c2e" + let packageFn = + p + [] + "PackageFn" + "fc28143135cbddb46bc0e69d20bfe523af7661664ae3b0c743e729739bbd23f9" + + module Search = + let private p addl = p ("Search" :: addl) + let entityType = + p + [] + "EntityType" + "4c786d25c9f8c987e50b9f64958c529d18d433e6edd9564d3304922a37cd929c" + let searchDepth = + p + [] + "SearchDepth" + "a775bd255cb2aa8395ce92914b4703423cd5513d71182c3a0cdfb6bc90f83089" + let searchQuery = + p + [] + "SearchQuery" + "8a21e04bf4b6493298e9a07649fbead39ca40be3a3c30721e508ea12d32916e4" + let searchResults = + p + [] + "SearchResults" + "a23ef08ad5af1e7ce0523541505232b1c57076982443096e4c84d6e47dc6f01e" + + let secret = + p + [] + "Secret" + "07d8c33e2444f1a209f6119e4eb2a3bebb6658f31e7dfd7f2ee7e078c4ed15a4" + let db = + p [] "DB" "ab6864b7ddbbc7d330b0958544817e0926a551937454afcce1b6f00acf50de8c" + + module Handler = + let private p addl = p ("Handler" :: addl) + let cronInterval = + p + [] + "CronInterval" + "66edaed8c0e10841b71a29d352430899e3066168ae62185df918222ae3f355bc" + let spec = + p + [] + "Spec" + "3549e40c965145ca1b6bf87438f8210347a5537372b337ba8bdd724893da6701" + let handler = + p + [] + "Handler" + "99a37f8db14750e4ea910a442e63be70f097520148f4c9ef121d24813a515e4c" + + module PrettyPrinter = + let private p addl = p ("PrettyPrinter" :: addl) + module RuntimeTypes = + let private p addl = p ("RuntimeTypes" :: addl) + module RuntimeError = + let private p addl = p ("RuntimeError" :: addl) + let errorMessage = + p + [] + "ErrorMessage" + "edace5ed6b5f982f033949cd4a7e37f15079840d223e9b0cb73d89e33e7e5d82" + + module Cli = + let executionError = + p + [ "Cli"; "ExecutionError" ] + "ExecutionError" + "09e0e4d05d0c69471e4dfa129d7fdbcea9299dad12c88d5969903ba072ac81e2" + + let script = + p + [ "Cli"; "Scripts" ] + "Script" + "b85b96f94e6d5583a3414510f8d20a23ce84deb77c5d45faaf758bf5593b888a" + + + module DarkPackages = + let stats = + p + [ "DarkPackages" ] + "Stats" + "a4d6aa38f26c5714367c611ee52ecdf75699e9454d96da7d60a4a3744e435d43" + + + + module Internal = + let private p addl = p ("Internal" :: addl) + module Canvas = + let private p addl = p ("Canvas" :: addl) + let program = + p + [] + "Program" + "4ec3372b5dfd32c9b376503a68ac50cbc91d7651bab92622a008fd712f4a4e2f" + let secret = + p + [] + "Secret" + "31a275f1f46e0cd804030e8c1a1aeffb7d5601b610765271762205715343eb10" + + module Infra = + let tableSize = + p + [ "Infra" ] + "TableSize" + "780fc788a8c33f5edf9674756d6be6f406606491e4f1bb0e81a292b7cb36e65c" + + module Worker = + let scheduleRule = + p + [ "Worker" ] + "SchedulingRule" + "a117f1d9577e6508b25118bf2818045901aa383ddb7ed7cd3ad2cbe301272fc5" + + module Test = + let private p addl = p ("Test" :: addl) + let ptTest = + p + [] + "PTTest" + "b80899f88804b950574bc71e1205fd0dd04551372db992c87378ad271755ffc6" + + // what we expose to the outside world + let idForName (owner : string) (modules : List) (name : string) : Hash = + match owner with + | "Darklang" -> + match Map.get (modules, name) _lookup with + | Some hash -> hash + | None -> + // Generate placeholder hash for unknown types + let placeholderString = + $"""{owner}.{String.concat "." modules}.{name}""".ToLowerInvariant() + let hashStr = + System.Convert + .ToHexString(System.Text.Encoding.UTF8.GetBytes(placeholderString)) + .ToLowerInvariant() + Hash hashStr + | _ -> + // Generate placeholder hash for non-Darklang types + let placeholderString = + $"""{owner}.{String.concat "." modules}.{name}""".ToLowerInvariant() + let hashStr = + System.Convert + .ToHexString(System.Text.Encoding.UTF8.GetBytes(placeholderString)) + .ToLowerInvariant() + Hash hashStr + + +module Value = + // There are no referenced Values at this point, + // but we may be thankful later for hooking this up in the meantime. + let idForName (owner : string) (modules : List) (name : string) : Hash = + // Generate placeholder hash + let placeholderString = + $"""{owner}.{String.concat "." modules}.{name}""".ToLowerInvariant() + let hashStr = + System.Convert + .ToHexString(System.Text.Encoding.UTF8.GetBytes(placeholderString)) + .ToLowerInvariant() + Hash hashStr + + + +module Fn = + let mutable private _lookup = Map [] + + let private p modules name (hash : string) : Hash = + let h = Hash hash + _lookup <- _lookup |> Map.add (modules, name) h + h + + module Stdlib = + let private p addl = p ("Stdlib" :: addl) + + module List = + let map = + p + [ "List" ] + "map" + "539d6ca2c6ea456db05e1549ada0d60ed7234b14e1e5eff9dccb93ce092eda7a" + + module HttpClient = + let request = + p + [ "HttpClient" ] + "request" + "9a432806825b15e7f7455c8db5efdd48154171f525ada6879fb8991886576246" + + + module LanguageTools = + let private p addl = p ("LanguageTools" :: addl) + module NameResolver = + let private p addl = p ("NameResolver" :: addl) + module FnName = + let private p addl = p ("FnName" :: addl) + let resolve = + p + [] + "resolve" + "cdfc3fa85082d2edf067cae2dd6a66fedc263ad3332d936610b47b18772b62d6" + + + + module Parser = + let private p addl = p ("Parser" :: addl) + let parsePTExpr = + p + [ "TestParsing" ] + "parsePTExpr" + "e06604ffff616ac182a35af11060daec1a2f3a5ec209c7def5291ac1cdd49400" + + let parseAndPrettyPrint = + p + [ "TestParsing" ] + "parseAndPrettyPrint" + "69b1f0067d874180e6a9171ec78aa4dda043af6fb22752850d8366c220910c68" + + module CliScript = + let private p addl = p ("CliScript" :: addl) + let parseCliScript = + p + [] + "parse" + "747201c477f57c719891592c9e8cd3bf537d054f7fdd56acc1a27a528d845c61" + + module PackageManager = + let private p addl = p ("PackageManager" :: addl) + let pm = + p [] "pm" "654f8aa0036dfd610413a489278da6471676be35ea2dd0896d5f11d63215c8e0" + + module PrettyPrinter = + let private p addl = p ("PrettyPrinter" :: addl) + module RuntimeTypes = + let private p addl = p ("RuntimeTypes" :: addl) + let expr = + p + [] + "expr" + "d301153776b66cfb840a6d1bf1f42e5c30a35f8fdc61b3baf58c9c46bdafa0b1" // not found in db + + module RuntimeError = + let private p addl = p ("RuntimeError" :: addl) + let toString = + p + [] + "toString" + "73d855f72275e9c04bf7790359530555f09a9b4f25dfda52e64f628e1feacdda" + let toErrorMessage = + p + [] + "toErrorMessage" + "440939962bf0590aa0b3e78f4e3d4518ba7891eba55894eecbed30dfc1834a66" + + module ProgramTypes = + let private p addl = p ("ProgramTypes" :: addl) + module FQFnName = + let private p addl = p ("FQFnName" :: addl) + let fullForReference = + p + [] + "fullForReference" + "df1e90d6c4ad49ec172faee9bd956cd3461e753d44e37a2cfe35904d505fb354" + + module Cli = + let executeCliCommand = + p + [ "Cli" ] + "executeCliCommand" + "99a9d6d9d9aae074746940098b2070a4b5421d389b183150d0a10f86ba9093d3" + + module Internal = + let private p addl = p ("Internal" :: addl) + module Test = + let private p addl = p ("Test" :: addl) + let parseSingleTestFromFile = + p + [] + "parseSingleTestFromFile" + "16a3337f39ad70a59fc62b577fe4c1ccb81e40c6d6115d8bab2c27c87acaaad5" + + // what we expose to the outside world + let idForName (owner : string) (modules : List) (name : string) : Hash = + match owner with + | "Darklang" -> + match Map.get (modules, name) _lookup with + | Some hash -> hash + | None -> + // Generate placeholder hash for unknown functions + let placeholderString = + $"""{owner}.{String.concat "." modules}.{name}""".ToLowerInvariant() + let hashStr = + System.Convert + .ToHexString(System.Text.Encoding.UTF8.GetBytes(placeholderString)) + .ToLowerInvariant() + Hash hashStr + | _ -> + // Generate placeholder hash for non-Darklang functions + let placeholderString = + $"""{owner}.{String.concat "." modules}.{name}""".ToLowerInvariant() + let hashStr = + System.Convert + .ToHexString(System.Text.Encoding.UTF8.GetBytes(placeholderString)) + .ToLowerInvariant() + Hash hashStr diff --git a/backend/src/LibExecution/PackageIDs.fs b/backend/src/LibExecution/PackageIDs.fs deleted file mode 100644 index 9faf2a84c8..0000000000 --- a/backend/src/LibExecution/PackageIDs.fs +++ /dev/null @@ -1,478 +0,0 @@ -/// All Darklang code exists in package space, referenced by ID. In many places -/// throughout our F# codebase, we reference these IDs. (i.e. in order to return an -/// `Option` from a function, we need to know the ID of the `Option` package type). -/// -/// So, we define their IDs here, and reference via those IDs. When parsing, we have -/// a lookup of name -> ID handy; if a parsed definition matches one of those names, -/// we ensure that we use the corresponding ID when saving it to the DB. -/// -/// Some tests exist to ensure each of these IDs is unique. -/// -/// If you need to generate some UUIDs, https://www.uuidgenerator.net is useful. -/// -/// Note: all of these types are assumed to be owned by the Darklang user -module LibExecution.PackageIDs - -open Prelude - -// The way this is set up, we provide the name of the package item, with the ID. -// Doing this at once helps things to be legible, and makes sure you don't forget -// to add it to a separate lookup table. Maybe it's not ideal to use mutation so -// much, but it seems kinda reasonable. - - -module Type = - let mutable private _lookup = Map [] - let private p modules name (id : string) : System.Guid = - let id = System.Guid.Parse id - _lookup <- _lookup |> Map.add (modules, name) id - id - - module Stdlib = - let private p addl = p ("Stdlib" :: addl) - - let result = p [ "Result" ] "Result" "c1cb018c-8264-4080-be7f-b06b8a0e1729" - let option = p [ "Option" ] "Option" "9ce3b596-968f-44c9-bcd4-511007cd9225" - - let int8ParseError = - p [ "Int8" ] "ParseError" "0a8a9ce5-3a3a-4146-8297-c7076dd37c53" - let uint8ParseError = - p [ "UInt8" ] "ParseError" "f836299f-d97c-4b27-ae8f-924a442bd3ce" - let int16ParseError = - p [ "Int16" ] "ParseError" "1c4e3ff7-bc2b-48c7-adf3-5131aefa2fad" - let uint16ParseError = - p [ "UInt16" ] "ParseError" "c894f8be-09ed-4268-b2f9-5837c45c5dca" - let int32ParseError = - p [ "Int32" ] "ParseError" "9650cfbc-9433-45c2-9c3d-1b8daf6724e2" - let uint32ParseError = - p [ "UInt32" ] "ParseError" "29cd7b48-9627-4f0f-a7dc-58d6c441b498" - let int64ParseError = - p [ "Int64" ] "ParseError" "ce40066f-b791-4912-96fb-d52d733c3d9b" - let uint64ParseError = - p [ "UInt64" ] "ParseError" "ef7e9d82-e575-48e4-b8e1-b8f3be6f4760" - let int128ParseError = - p [ "Int128" ] "ParseError" "42e1e0ba-67e2-46b0-8baf-06f86266d3ad" - let uint128ParseError = - p [ "UInt128" ] "ParseError" "688d57a6-0182-4c32-a3dc-24b5b5140055" - let floatParseError = - p [ "Float" ] "ParseError" "a537b642-d02b-48b8-8ce3-46a99fbfe6fd" - let uuidParseError = - p [ "Uuid" ] "ParseError" "3d3dd7bd-0a4e-4816-95e6-70bfafa3fb75" - - module Http = - let request = p [ "Http" ] "Request" "926dcb16-4708-451a-9fff-d0f19166c3c8" - let response = p [ "Http" ] "Response" "875ece77-ff5d-46c4-b68e-7d88685ead6f" - - module HttpClient = - let private p addl = p ("HttpClient" :: addl) - let badHeader = p [] "BadHeader" "8d92aa0f-cce8-4556-846f-3183abfaa631" - let badUrlDetails = p [] "BadUrlDetails" "31c0dd4a-6461-425b-84db-21064eb62235" - let requestError = p [] "RequestError" "1f765ab5-7b59-45e6-a970-ee9f9d28c379" - let response = p [] "Response" "973d78f8-6591-4cc3-8c81-19d58dc2fca7" - - module Json = - module ParseError = - let private p addl = p ("Json" :: "ParseError" :: addl) - - module JsonPath = - let part = - p [ "JsonPath"; "Part" ] "Part" "705ae7c9-e726-4072-b154-7c1a33dcb386" - let jsonPath = p [] "JsonPath" "e6d38cec-6d64-4fd9-8d20-b793a35831fb" - let parseError = p [] "ParseError" "7b0a5338-a64a-446c-913c-6aaf15617053" - - module AltJson = - let private p addl = p ("AltJson" :: addl) - let parseError = - p [ "ParseError" ] "ParseError" "c990825c-ef78-49a6-b5dd-f69a430722e1" - let json = p [] "Json" "d80a6028-92e8-4da2-89b3-1cfc5d275024" - - module Cli = - let private p addl = p ("Cli" :: addl) - let executionOutcome = - p [] "ExecutionOutcome" "754e11ce-8842-4961-8b40-cdce2cd0d7c8" - - module OS = - let private p addl = p ("OS" :: addl) - let os = p [] "OS" "88f1ded5-e860-4f8e-8848-da7abac5824c" - - module Stdin = - let private p addl = p ("Stdin" :: addl) - let modifiers = - p [ "Modifiers" ] "Modifiers" "75e354e3-28a8-4086-bad8-8cea633d3358" - let key = p [ "Key" ] "Key" "c871205d-d08d-4bfe-afa5-4b207f07182b" - let keyRead = - p [ "KeyRead" ] "KeyRead" "14ae96ae-a1cf-4275-aa7e-01437bf5e822" - - module LanguageTools = - let private p addl = p ("LanguageTools" :: addl) - let sign = p [] "Sign" "7f0c6dba-6439-4a6c-b689-838cbbd66692" - - // TODO: where do these actually belong? are they used, even? - let builtinValue = p [] "BuiltinValue" "b68d3b0a-d139-4933-9127-1d06712e1514" - let builtinFnParam = - p [] "BuiltinFunctionParameter" "8dec56ad-3b32-4f53-83d6-c86200a1d39f" - let builtinFn = p [] "BuiltinFunction" "fd899262-dc09-46cf-a025-95f31841718c" - - - module Parser = - let private p addl = p ("Parser" :: addl) - let point = p [] "Point" "f4d649a4-740b-4a0a-863f-4c74c4503fad" - let range = p [] "Range" "e194e06f-a765-483d-b6a5-16856ed547f0" - let parsedNode = p [] "ParsedNode" "3612c001-663c-4695-9b1c-d3a1582a8057" - - module CliScript = - let private p addl = p ("CliScript" :: addl) - let pTCliScriptModule = - p [] "PTCliScriptModule" "4b7dcac5-03ee-4a15-8e97-7ce0ccc110fe" - - - module NameResolver = - let private p addl = p ("NameResolver" :: addl) - let nameResolverOnMissing = - p [] "OnMissing" "3c6057e7-143b-4af8-96c4-c193c1ccfeb3" - - - module WrittenTypes = - let private p addl = p ("WrittenTypes" :: addl) - let name = p [] "Name" "8381f3b9-2311-4eb3-b040-b4c144afa6f1" - let range = p [] "Range" "1f00b6b2-e29a-4eca-a14f-cc7a56d6ec89" - - - module RuntimeTypes = - let private p addl = p ("RuntimeTypes" :: addl) - module FQTypeName = - let private p addl = p ("FQTypeName" :: addl) - let package = p [] "Package" "ac7f7a1e-f81b-4940-9a21-323078751059" - let builtin = p [] "Builtin" "67c7c385-91e9-4f37-91c8-117a0d6a1ace" - let fqTypeName = p [] "FQTypeName" "690be187-31be-4cef-914a-397d6bd27ac3" - - module FQValueName = - let private p addl = p ("FQValueName" :: addl) - let package = p [] "Package" "594f972b-1461-459a-9b27-04fbd8332ce8" - let builtin = p [] "Builtin" "e32ad5e3-156d-4c36-ab58-04528cbd9885" - let fqValueName = p [] "FQValueName" "9998a7ea-c1c5-4246-89a4-9167bfbbd7f6" - - module FQFnName = - let private p addl = p ("FQFnName" :: addl) - let package = p [] "Package" "bf2a5c81-0d4d-4ee8-b50f-5491bc5724c4" - let builtin = p [] "Builtin" "ad2bbc2a-aee5-42bf-86ef-2c9b626bb699" - let fqFnName = p [] "FQFnName" "7defa320-7dd9-4eaa-8e55-152cb6ef9f5d" - - let nameResolutionError = - p [] "NameResolutionError" "ada30799-1227-4902-b580-76bca80c9e92" - let nameResolution = - p [] "NameResolution" "aafe54e1-d970-4ce0-81a1-1569af86671f" - - let typeReference = p [] "TypeReference" "691c34cb-16c0-4013-9aed-f431ec34d36e" - let param = p [] "Param" "dcfb5f50-2de5-4b13-aa7a-579c8338c360" - let letPattern = p [] "LetPattern" "5ca5d251-0703-49ce-a40d-28c2e4575431" - let matchPattern = p [] "MatchPattern" "003c6684-4f9d-4085-bdba-a7f3bea7f587" - let matchCase = p [] "MatchCase" "5fb0f282-5f7c-4fb8-b107-b63429080e69" - let stringSegment = p [] "StringSegment" "ccadbf5b-1802-4db7-a30b-7b9073db78cd" - - let dval = p [] "Dval" "528b682c-a249-4a50-bd93-85e1e8cb529e" - let knownType = p [] "KnownType" "50940368-5c6b-4f0b-9966-48b9e9443f5d" - let valueType = p [] "ValueType" "eeb27326-120b-4a71-bd13-a6dc545e5ade" - - let applicableNamedFn = - p [] "ApplicableNamedFn" "5cbd8499-14f8-4eab-8e40-f88776e64cd3" - let applicableLambda = - p [] "ApplicableLambda" "ee577e2c-3e66-42f4-8600-fbe1075adba7" - let applicable = p [] "Applicable" "b152337b-e794-4a02-9c53-e0c4b19cb479" - - - module RuntimeError = - let private p addl = p ("RuntimeError" :: addl) - - module TypeCheckers = - let private p addl = p ("TypeCheckers" :: addl) - let pathPart = p [] "PathPart" "96cebb20-4dcf-4848-80c7-55b31d91d572" - let path = p [] "Path" "d8dd84df-c0cb-4128-a858-d2e342ca89f6" - let error = p [] "Error" "c5dbd3b4-38d4-40e7-8147-48e3ec64b028" - - module Bools = - let error = p [ "Bools" ] "Error" "1afb20b6-4d3f-4566-b5aa-6b2898eaa2ae" - - module Ints = - let error = p [ "Ints" ] "Error" "8f753bfe-9e35-4a9e-a47e-c1dbb5f83037" - - module Strings = - let error = p [ "Strings" ] "Error" "3883b503-4f5b-437b-96b3-72029ed7dc81" - - module Lists = - let private p addl = p ("Lists" :: addl) - let error = p [] "Error" "f327ad98-ec15-4cfe-bcfe-6f0f5a444349" - - module Dicts = - let error = p [ "Dicts" ] "Error" "0c4bfb7f-14d3-4d25-a9c0-f8638fd52acf" - - module Lets = - let error = p [ "Lets" ] "Error" "a0fb3f52-2acd-4f07-9f10-2dfad642387d" - - module Matches = - let error = p [ "Matches" ] "Error" "59f0d63a-c9a1-424e-9da2-a16a88a1f518" - - module Enums = - let error = p [ "Enums" ] "Error" "9f6119bb-4423-4ba7-98e6-87fafa37a584" - - module Records = - let error = p [ "Records" ] "Error" "5b53bb20-7a3e-4f96-bd1c-5a090b491d8d" - - module Applications = - let error = - p [ "Applications" ] "Error" "8eda2125-db3e-4ef8-b185-80c202f3e1e3" - - module Statements = - let error = - p [ "Statements" ] "Error" "b945ee85-01ca-4d82-b4a8-041cc74c389b" - - module Unwraps = - let error = p [ "Unwraps" ] "Error" "a69d2c00-2839-449e-9d19-c4d3b5b27550" - - module Jsons = - let error = p [ "Jsons" ] "Error" "595907db-ab8d-4fe5-b9cf-d1bd8041e9bb" - - module CLIs = - let error = p [ "CLIs" ] "Error" "6756f735-2a6a-41ac-a6a8-6e0b7354ca1b" - - let error = p [] "Error" "722cd3b3-d6af-4d28-96f2-87afd44c3898" - - module ProgramTypes = - let private p addl = p ("ProgramTypes" :: addl) - - let nameResolutionError = - p [] "NameResolutionError" "de779c1d-bebc-43d9-bb3d-4c160cca62eb" - - module FQTypeName = - let private p addl = p ("FQTypeName" :: addl) - let package = p [] "Package" "ad2b1288-5005-4943-a03b-caa8056a2aee" - let fqTypeName = p [] "FQTypeName" "fa606ff4-1daf-4194-b684-62a0b1215953" - - module FQValueName = - let private p addl = p ("FQValueName" :: addl) - let builtin = p [] "Builtin" "2d751fa5-042d-4c63-8c81-8c97ab0f630c" - let package = p [] "Package" "26810c53-0af7-400d-8755-f6c1c9a61ca7" - let fqValueName = p [] "FQValueName" "e72942a3-48dd-4f00-b451-aff4903114ba" - - module FQFnName = - let private p addl = p ("FQFnName" :: addl) - let builtin = p [] "Builtin" "b6f429d0-da28-4612-b4b1-06ff1cfc19d8" - let package = p [] "Package" "e86c8979-6412-4051-9eff-1e868c170f33" - let fqFnName = p [] "FQFnName" "13bb2d41-3a99-4a5e-8f25-1e3bcb010263" - - let typeReference = p [] "TypeReference" "eae9e2f3-6b17-40b1-8f9d-ef6a9aa70473" - - let letPattern = p [] "LetPattern" "ae02dd2f-c10b-4b26-9c83-de1715254eef" - let matchPattern = p [] "MatchPattern" "a8acadfe-8a57-4206-adc6-47e04590e6f5" - let matchCase = p [] "MatchCase" "1383f092-844d-433d-aa9d-cb89e5dae0ab" - let stringSegment = p [] "StringSegment" "0fb605e0-a278-4711-82f7-9bd8eb42d605" - let binaryOperation = - p [] "BinaryOperation" "dde84462-2cc6-48e1-8a08-2db584167219" - let infixFnName = p [] "InfixFnName" "0e3b1195-74ed-43f5-9103-e10e79001c34" - let infix = p [] "Infix" "a6045143-ecfc-4f9b-95c7-62565b86a1c5" - let pipeExpr = p [] "PipeExpr" "580bc173-e5ef-4f3e-8d12-e88e99fc980a" - let expr = p [] "Expr" "138c055e-34c3-47f2-a067-7d78d84fe638" - - let deprecation = p [] "Deprecation" "e6ac931d-eac0-42df-a197-a9bcf1094b09" - - module TypeDeclaration = - let private p addl = p ("TypeDeclaration" :: addl) - let recordField = p [] "RecordField" "148003cf-828c-4645-8a7a-f0fbc3fc5c81" - let enumField = p [] "EnumField" "7f309b94-16e0-4f88-947c-a3c3254c639e" - let enumCase = p [] "EnumCase" "1e3331c7-9d24-412d-a8cc-cd07bcd1381a" - let definition = p [] "Definition" "7cdaa047-6395-41a3-b97a-01776c3fb476" - let typeDeclaration = - p [] "TypeDeclaration" "13e258cf-12ac-4a2d-ab7b-16897941812c" - - module PackageType = - let private p addl = p ("PackageType" :: addl) - let name = p [] "Name" "5207810f-879c-4e2a-84b5-73b0401213cb" - let packageType = p [] "PackageType" "27e3390c-137a-4df2-97db-7403442835d1" - - module PackageValue = - let private p addl = p ("PackageValue" :: addl) - let name = p [] "Name" "f48ac737-360c-4c85-a5fb-8916c0ba4b3f" - let packageValue = p [] "PackageValue" "e5190f19-b9de-406c-ba3e-b2f9d83998dd" - - module PackageFn = - let private p addl = p ("PackageFn" :: addl) - let name = p [] "Name" "2503f569-76cc-4e47-afb3-c47058654b48" - let parameter = p [] "Parameter" "208d5c13-071e-4e83-994e-d71c5f40aa2e" - let packageFn = p [] "PackageFn" "2b363281-c5e8-4223-abf3-5e5d6db27f8c" - - module Search = - let private p addl = p ("Search" :: addl) - let entityType = p [] "EntityType" "6c481427-3909-4417-b3f2-4df40b64bfcc" - let searchDepth = p [] "SearchDepth" "138313e7-a9de-481d-a717-f8e11d730694" - let searchQuery = p [] "SearchQuery" "3937be09-aa05-40d6-b42d-3146e9774c82" - let searchResults = - p [] "SearchResults" "0660f9dc-a816-4185-9e5c-f936325f83d5" - - let secret = p [] "Secret" "37427120-d71d-41f2-b094-68757570bc41" - let db = p [] "DB" "7f219668-f8ac-4b17-a404-1171985dadf9" - - module Handler = - let private p addl = p ("Handler" :: addl) - let cronInterval = p [] "CronInterval" "54c7e81e-d0c0-46c3-b74c-f0205dc3febd" - let spec = p [] "Spec" "21f6bc66-5118-433d-a654-ce81f130a45f" - let handler = p [] "Handler" "7fb42e37-cd74-439f-8870-d6d21133f69e" - - module PrettyPrinter = - let private p addl = p ("PrettyPrinter" :: addl) - module RuntimeTypes = - let private p addl = p ("RuntimeTypes" :: addl) - module RuntimeError = - let private p addl = p ("RuntimeError" :: addl) - let errorMessage = p [] "ErrorMessage" "9f7f9a1f-8240-4562-9023-8699f5f3aa2c" - - module Cli = - let executionError = - p - [ "Cli"; "ExecutionError" ] - "ExecutionError" - "1ca71c83-7a12-43ae-a973-b4fb09c3e4bc" - - let script = - p [ "Cli"; "Scripts" ] "Script" "de1629b6-cdfa-46b1-84c0-e0c60048d93b" - - - module DarkPackages = - let stats = p [ "DarkPackages" ] "Stats" "0fcd5847-701c-4da7-9f24-adbe8b5eb397" - - - - module Internal = - let private p addl = p ("Internal" :: addl) - module Canvas = - let private p addl = p ("Canvas" :: addl) - let program = p [] "Program" "9494c8ca-457c-4cb3-8b10-0f29009f16c7" - let secret = p [] "Secret" "704688f7-092d-4786-a054-233dfa630f1b" - - module Infra = - let tableSize = - p [ "Infra" ] "TableSize" "041736ae-9aa1-40b8-b9ea-7d593c5d0368" - - module Worker = - let scheduleRule = - p [ "Worker" ] "ScheduleRule" "0669d155-6352-4851-8968-ef676b18d8ad" - - module Test = - let private p addl = p ("Test" :: addl) - let ptTest = p [] "PTTest" "e6fc7686-68f9-4fbe-a6cb-b615dd41ee7e" - - // what we expose to the outside world - let idForName - (owner : string) - (modules : List) - (name : string) - : System.Guid = - match owner with - | "Darklang" -> - match Map.get (modules, name) _lookup with - | Some id -> id - | None -> System.Guid.NewGuid() - | _ -> System.Guid.NewGuid() - - -module Value = - // There are no referenced Values at this point, - // but we may be thankful later for hooking this up in the meantime. - let idForName - (_owner : string) - (_modules : List) - (_name : string) - : System.Guid = - System.Guid.NewGuid() - - - -module Fn = - let mutable private _lookup = Map [] - - let private p modules name (id : string) : System.Guid = - let id = System.Guid.Parse id - _lookup <- _lookup |> Map.add (modules, name) id - id - - module Stdlib = - let private p addl = p ("Stdlib" :: addl) - - module List = - let map = p [ "List" ] "map" "3da8ef47-9817-4d1e-be1b-b9921ccf797f" - - module HttpClient = - let request = - p [ "HttpClient" ] "request" "fa4a4756-cb6b-4575-b192-ec8f02f13f40" - - - module LanguageTools = - let private p addl = p ("LanguageTools" :: addl) - module NameResolver = - let private p addl = p ("NameResolver" :: addl) - module FnName = - let private p addl = p ("FnName" :: addl) - let resolve = p [] "resolve" "7532eda4-f3cf-44e5-a4d6-52fed5aa63f0" - - - - module Parser = - let private p addl = p ("Parser" :: addl) - let parsePTExpr = - p [ "TestParsing" ] "parsePTExpr" "d96d3e6b-6c0d-4559-ae36-353eaf738fa9" - - let parseAndPrettyPrint = - p - [ "TestParsing" ] - "parseAndPrettyPrint" - "361fb7f2-523b-4b50-8f29-cc99d5f03e3a" - - module CliScript = - let private p addl = p ("CliScript" :: addl) - let parseCliScript = p [] "parse" "e7574db7-f7e6-4263-adc2-a05b14309cbc" - - module PackageManager = - let private p addl = p ("PackageManager" :: addl) - let pm = p [] "pm" "591fa719-7986-40b8-a57f-6b78a1d0cd66" - - module PrettyPrinter = - let private p addl = p ("PrettyPrinter" :: addl) - module RuntimeTypes = - let private p addl = p ("RuntimeTypes" :: addl) - let expr = p [] "expr" "be111b49-95f6-4022-ad68-a64de172f3ee" - - module RuntimeError = - let private p addl = p ("RuntimeError" :: addl) - let toString = p [] "toString" "75debdd5-1e4f-4437-8124-38d7afaea931" - let toErrorMessage = - p [] "toErrorMessage" "d861d9c4-45da-4789-8f41-b0e481422190" - - module ProgramTypes = - let private p addl = p ("ProgramTypes" :: addl) - module FQFnName = - let private p addl = p ("FQFnName" :: addl) - let fullForReference = - p [] "fullForReference" "ed6bacaa-4fa6-444b-9f6b-0e323e233a5d" - - module Cli = - let executeCliCommand = - p [ "Cli" ] "executeCliCommand" "9b4aa7ca-82f4-4fc5-be9c-bdfb97ad4ac2" - - module Internal = - let private p addl = p ("Internal" :: addl) - module Test = - let private p addl = p ("Test" :: addl) - let parseSingleTestFromFile = - p [] "parseSingleTestFromFile" "53f3fbc6-25fd-427a-ab0d-ba0559543c99" - - // what we expose to the outside world - let idForName - (owner : string) - (modules : List) - (name : string) - : System.Guid = - match owner with - | "Darklang" -> - match Map.get (modules, name) _lookup with - | Some id -> id - | None -> System.Guid.NewGuid() - | _ -> System.Guid.NewGuid() diff --git a/backend/src/LibExecution/ProgramTypes.fs b/backend/src/LibExecution/ProgramTypes.fs index d97710ea4d..036cd47f27 100644 --- a/backend/src/LibExecution/ProgramTypes.fs +++ b/backend/src/LibExecution/ProgramTypes.fs @@ -27,14 +27,14 @@ let assertBuiltin /// /// Used to reference a type defined in a Package or by a User module FQTypeName = - /// The id of a type in the package manager - type Package = uuid + /// The hash of a type in the package manager + type Package = Hash type FQTypeName = Package of Package - let package (id : uuid) : Package = id + let package (hash : Hash) : Package = hash - let fqPackage (id : uuid) : FQTypeName = Package id + let fqPackage (hash : Hash) : FQTypeName = Package hash @@ -45,8 +45,8 @@ module FQValueName = /// A value built into the runtime type Builtin = { name : string; version : int } - /// The id of a value in the package manager - type Package = uuid + /// The hash of a value in the package manager + type Package = Hash type FQValueName = | Builtin of Builtin @@ -63,9 +63,9 @@ module FQValueName = let fqBuiltIn (name : string) (version : int) : FQValueName = Builtin(builtIn name version) - let package (id : uuid) : Package = id + let package (hash : Hash) : Package = hash - let fqPackage (id : uuid) : FQValueName = Package id + let fqPackage (hash : Hash) : FQValueName = Package hash @@ -77,8 +77,8 @@ module FQFnName = /// A function built into the runtime type Builtin = { name : string; version : int } - /// The id of a function in the package manager - type Package = uuid + /// The hash of a function in the package manager + type Package = Hash type FQFnName = | Builtin of Builtin @@ -94,9 +94,9 @@ module FQFnName = let fqBuiltIn (name : string) (version : int) : FQFnName = Builtin(builtIn name version) - let package (id : uuid) : Package = id + let package (hash : Hash) : Package = hash - let fqPackage (id : uuid) : FQFnName = Package id + let fqPackage (hash : Hash) : FQFnName = Package hash // In ProgramTypes, names (FnNames, TypeNames, ValueNames) have already been @@ -550,7 +550,7 @@ module PackageType = { owner = owner; modules = modules; name = name } type PackageType = - { id : uuid + { hash : Hash name : Name declaration : TypeDeclaration.T description : string @@ -564,7 +564,7 @@ module PackageValue = { owner = owner; modules = modules; name = name } type PackageValue = - { id : uuid + { hash : Hash name : Name description : string deprecated : Deprecation @@ -580,7 +580,7 @@ module PackageFn = type Parameter = { name : string; typ : TypeReference; description : string } type PackageFn = - { id : uuid + { hash : Hash name : Name body : Expr typeParams : List @@ -681,34 +681,34 @@ type PackageManager = { findType = fun name -> match types |> List.tryFind (fun t -> t.name = name) with - | Some t -> Some t.id |> Ply + | Some t -> Some t.hash |> Ply | None -> pm.findType name findValue = fun name -> match values |> List.tryFind (fun v -> v.name = name) with - | Some v -> Some v.id |> Ply + | Some v -> Some v.hash |> Ply | None -> pm.findValue name findFn = fun name -> match fns |> List.tryFind (fun f -> f.name = name) with - | Some f -> Some f.id |> Ply + | Some f -> Some f.hash |> Ply | None -> pm.findFn name getType = - fun id -> - match types |> List.tryFind (fun t -> t.id = id) with + fun hash -> + match types |> List.tryFind (fun t -> t.hash = hash) with | Some t -> Ply(Some t) - | None -> pm.getType id + | None -> pm.getType hash getValue = - fun id -> - match values |> List.tryFind (fun v -> v.id = id) with + fun hash -> + match values |> List.tryFind (fun v -> v.hash = hash) with | Some v -> Ply(Some v) - | None -> pm.getValue id + | None -> pm.getValue hash getFn = - fun id -> - match fns |> List.tryFind (fun f -> f.id = id) with + fun hash -> + match fns |> List.tryFind (fun f -> f.hash = hash) with | Some f -> Ply(Some f) - | None -> pm.getFn id + | None -> pm.getFn hash search = fun query -> pm.search query diff --git a/backend/src/LibExecution/ProgramTypesToDarkTypes.fs b/backend/src/LibExecution/ProgramTypesToDarkTypes.fs index 721cee62af..cac1909d19 100644 --- a/backend/src/LibExecution/ProgramTypesToDarkTypes.fs +++ b/backend/src/LibExecution/ProgramTypesToDarkTypes.fs @@ -13,7 +13,7 @@ module C2DT = LibExecution.CommonToDarkTypes // This isn't in PT but I'm not sure where else to put it... // maybe rename this file to InternalTypesToDarkTypes? module Sign = - let typeName = FQTypeName.fqPackage PackageIDs.Type.LanguageTools.sign + let typeName = FQTypeName.fqPackage PackageHashes.Type.LanguageTools.sign let toDT (s : Sign) : Dval = let (caseName, fields) = @@ -40,19 +40,21 @@ let versionField m = m |> D.field "version" |> D.int32 module FQTypeName = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.FQTypeName.fqTypeName + PackageHashes.Type.LanguageTools.ProgramTypes.FQTypeName.fqTypeName let knownType = KTCustomType(typeName, []) module Package = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.FQTypeName.package + PackageHashes.Type.LanguageTools.ProgramTypes.FQTypeName.package - let toDT (u : PT.FQTypeName.Package) : Dval = DUuid u + let toDT (h : PT.FQTypeName.Package) : Dval = + let (Hash hashStr) = h + DString hashStr let fromDT (d : Dval) : PT.FQTypeName.Package = match d with - | DUuid u -> u + | DString hashStr -> Hash hashStr | _ -> Exception.raiseInternal "Invalid FQTypeName.Package" [] @@ -70,13 +72,14 @@ module FQTypeName = module FQFnName = let typeName = - FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.FQFnName.fqFnName + FQTypeName.fqPackage + PackageHashes.Type.LanguageTools.ProgramTypes.FQFnName.fqFnName let knownType = KTCustomType(typeName, []) module Builtin = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.FQFnName.builtin + PackageHashes.Type.LanguageTools.ProgramTypes.FQFnName.builtin let toDT (u : PT.FQFnName.Builtin) : Dval = let fields = [ "name", DString u.name; "version", DInt32 u.version ] @@ -89,11 +92,13 @@ module FQFnName = | _ -> Exception.raiseInternal "Invalid FQFnName.Builtin" [] module Package = - let toDT (u : PT.FQFnName.Package) : Dval = DUuid u + let toDT (h : PT.FQFnName.Package) : Dval = + let (Hash hashStr) = h + DString hashStr let fromDT (d : Dval) : PT.FQFnName.Package = match d with - | DUuid u -> u + | DString hashStr -> Hash hashStr | _ -> Exception.raiseInternal "Invalid FQFnName.Package" [] @@ -114,13 +119,13 @@ module FQFnName = module FQValueName = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.FQValueName.fqValueName + PackageHashes.Type.LanguageTools.ProgramTypes.FQValueName.fqValueName let knownType = KTCustomType(typeName, []) module Builtin = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.FQValueName.builtin + PackageHashes.Type.LanguageTools.ProgramTypes.FQValueName.builtin let toDT (u : PT.FQValueName.Builtin) : Dval = let fields = [ "name", DString u.name; "version", DInt32 u.version ] DRecord(typeName, typeName, [], Map fields) @@ -132,11 +137,13 @@ module FQValueName = | _ -> Exception.raiseInternal "Invalid FQValueName.Builtin" [] module Package = - let toDT (u : PT.FQValueName.Package) : Dval = DUuid u + let toDT (h : PT.FQValueName.Package) : Dval = + let (Hash hashStr) = h + DString hashStr let fromDT (d : Dval) : PT.FQValueName.Package = match d with - | DUuid u -> u + | DString hashStr -> Hash hashStr | _ -> Exception.raiseInternal "Invalid FQValueName.Package" [] let toDT (u : PT.FQValueName.FQValueName) : Dval = @@ -158,7 +165,7 @@ module FQValueName = module NameResolutionError = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.nameResolutionError + PackageHashes.Type.LanguageTools.ProgramTypes.nameResolutionError let knownType = KTCustomType(typeName, []) @@ -202,7 +209,7 @@ module NameResolution = module TypeReference = let typeName = - FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.typeReference + FQTypeName.fqPackage PackageHashes.Type.LanguageTools.ProgramTypes.typeReference let knownType = KTCustomType(typeName, []) let rec toDT (t : PT.TypeReference) : Dval = @@ -293,7 +300,7 @@ module TypeReference = module LetPattern = let typeName = - FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.letPattern + FQTypeName.fqPackage PackageHashes.Type.LanguageTools.ProgramTypes.letPattern let knownType = KTCustomType(typeName, []) let rec toDT (p : PT.LetPattern) : Dval = @@ -327,7 +334,7 @@ module LetPattern = module MatchPattern = let typeName = - FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.matchPattern + FQTypeName.fqPackage PackageHashes.Type.LanguageTools.ProgramTypes.matchPattern let knownType = KTCustomType(typeName, []) let rec toDT (p : PT.MatchPattern) : Dval = @@ -440,7 +447,8 @@ module MatchPattern = module BinaryOperation = let typeName = - FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.binaryOperation + FQTypeName.fqPackage + PackageHashes.Type.LanguageTools.ProgramTypes.binaryOperation let toDT (b : PT.BinaryOperation) : Dval = let (caseName, fields) = @@ -458,7 +466,7 @@ module BinaryOperation = module InfixFnName = let typeName = - FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.infixFnName + FQTypeName.fqPackage PackageHashes.Type.LanguageTools.ProgramTypes.infixFnName let toDT (i : PT.InfixFnName) : Dval = let (caseName, fields) = @@ -501,7 +509,7 @@ module InfixFnName = module Infix = let typeName = - FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.infix + FQTypeName.fqPackage PackageHashes.Type.LanguageTools.ProgramTypes.infix let toDT (i : PT.Infix) : Dval = let (caseName, fields) = @@ -520,7 +528,7 @@ module Infix = module StringSegment = let typeName = - FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.stringSegment + FQTypeName.fqPackage PackageHashes.Type.LanguageTools.ProgramTypes.stringSegment let knownType = KTCustomType(typeName, []) let toDT (exprToDT : PT.Expr -> Dval) (s : PT.StringSegment) : Dval = @@ -540,7 +548,7 @@ module StringSegment = module PipeExpr = let typeName = - FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.pipeExpr + FQTypeName.fqPackage PackageHashes.Type.LanguageTools.ProgramTypes.pipeExpr let knownType = KTCustomType(typeName, []) let toDT @@ -640,7 +648,8 @@ module PipeExpr = module Expr = - let typeName = FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.expr + let typeName = + FQTypeName.fqPackage PackageHashes.Type.LanguageTools.ProgramTypes.expr let knownType = KTCustomType(typeName, []) let rec toDT (e : PT.Expr) : Dval = @@ -742,7 +751,8 @@ module Expr = | PT.EMatch(id, arg, cases) -> let matchCaseTypeName = - FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.matchCase + FQTypeName.fqPackage + PackageHashes.Type.LanguageTools.ProgramTypes.matchCase let cases = cases |> List.map (fun case -> @@ -1014,7 +1024,7 @@ module Expr = module Deprecation = let typeName = - FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.deprecation + FQTypeName.fqPackage PackageHashes.Type.LanguageTools.ProgramTypes.deprecation let knownType = KTCustomType(typeName, []) let toDT @@ -1047,12 +1057,12 @@ module Deprecation = module TypeDeclaration = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.TypeDeclaration.typeDeclaration + PackageHashes.Type.LanguageTools.ProgramTypes.TypeDeclaration.typeDeclaration module RecordField = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.TypeDeclaration.recordField + PackageHashes.Type.LanguageTools.ProgramTypes.TypeDeclaration.recordField let knownType = KTCustomType(typeName, []) let toDT (rf : PT.TypeDeclaration.RecordField) : Dval = @@ -1073,7 +1083,7 @@ module TypeDeclaration = module EnumField = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.TypeDeclaration.enumField + PackageHashes.Type.LanguageTools.ProgramTypes.TypeDeclaration.enumField let knownType = KTCustomType(typeName, []) let toDT (ef : PT.TypeDeclaration.EnumField) : Dval = @@ -1101,7 +1111,7 @@ module TypeDeclaration = module EnumCase = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.TypeDeclaration.enumCase + PackageHashes.Type.LanguageTools.ProgramTypes.TypeDeclaration.enumCase let knownType = KTCustomType(typeName, []) let toDT (ec : PT.TypeDeclaration.EnumCase) : Dval = @@ -1125,7 +1135,7 @@ module TypeDeclaration = module Definition = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.TypeDeclaration.definition + PackageHashes.Type.LanguageTools.ProgramTypes.TypeDeclaration.definition let toDT (d : PT.TypeDeclaration.Definition) : Dval = let (caseName, fields) = @@ -1185,7 +1195,7 @@ module PackageType = module Name = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.PackageType.name + PackageHashes.Type.LanguageTools.ProgramTypes.PackageType.name let toDT (n : PT.PackageType.Name) : Dval = let fields = @@ -1205,11 +1215,12 @@ module PackageType = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.PackageType.packageType + PackageHashes.Type.LanguageTools.ProgramTypes.PackageType.packageType let toDT (p : PT.PackageType.PackageType) : Dval = + let (Hash hashStr) = p.hash let fields = - [ "id", DUuid p.id + [ "hash", DString hashStr "name", Name.toDT p.name "declaration", TypeDeclaration.toDT p.declaration "description", DString p.description @@ -1221,7 +1232,7 @@ module PackageType = let fromDT (d : Dval) : PT.PackageType.PackageType = match d with | DRecord(_, _, _, fields) -> - { id = fields |> D.field "id" |> D.uuid + { hash = Hash(fields |> D.field "hash" |> D.string) name = fields |> D.field "name" |> Name.fromDT declaration = fields |> D.field "declaration" |> TypeDeclaration.fromDT description = fields |> D.field "description" |> D.string @@ -1234,7 +1245,7 @@ module PackageValue = module Name = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.PackageValue.name + PackageHashes.Type.LanguageTools.ProgramTypes.PackageValue.name let toDT (n : PT.PackageValue.Name) : Dval = let fields = @@ -1254,11 +1265,12 @@ module PackageValue = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.PackageValue.packageValue + PackageHashes.Type.LanguageTools.ProgramTypes.PackageValue.packageValue let toDT (p : PT.PackageValue.PackageValue) : Dval = + let (Hash hashStr) = p.hash let fields = - [ "id", DUuid p.id + [ "hash", DString hashStr "name", Name.toDT p.name "body", Expr.toDT p.body "description", DString p.description @@ -1269,7 +1281,7 @@ module PackageValue = let fromDT (d : Dval) : PT.PackageValue.PackageValue = match d with | DRecord(_, _, _, fields) -> - { id = fields |> D.field "id" |> D.uuid + { hash = Hash(fields |> D.field "hash" |> D.string) name = fields |> D.field "name" |> Name.fromDT body = fields |> D.field "body" |> Expr.fromDT description = fields |> D.field "description" |> D.string @@ -1281,7 +1293,8 @@ module PackageValue = module PackageFn = module Name = let typeName = - FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.PackageFn.name + FQTypeName.fqPackage + PackageHashes.Type.LanguageTools.ProgramTypes.PackageFn.name let toDT (n : PT.PackageFn.Name) : Dval = let fields = @@ -1302,7 +1315,7 @@ module PackageFn = module Parameter = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.PackageFn.parameter + PackageHashes.Type.LanguageTools.ProgramTypes.PackageFn.parameter let knownType = KTCustomType(typeName, []) @@ -1325,11 +1338,12 @@ module PackageFn = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.PackageFn.packageFn + PackageHashes.Type.LanguageTools.ProgramTypes.PackageFn.packageFn let toDT (p : PT.PackageFn.PackageFn) : Dval = + let (Hash hashStr) = p.hash let fields = - [ ("id", DUuid p.id) + [ ("hash", DString hashStr) ("name", Name.toDT p.name) ("body", Expr.toDT p.body) ("typeParams", DList(VT.string, List.map DString p.typeParams)) @@ -1348,7 +1362,7 @@ module PackageFn = let fromDT (d : Dval) : PT.PackageFn.PackageFn = match d with | DRecord(_, _, _, fields) -> - { id = fields |> D.field "id" |> D.uuid + { hash = Hash(fields |> D.field "hash" |> D.string) name = fields |> D.field "name" |> Name.fromDT body = fields |> D.field "body" |> Expr.fromDT typeParams = fields |> D.field "typeParams" |> D.list D.string @@ -1369,7 +1383,7 @@ module Search = module EntityType = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.Search.entityType + PackageHashes.Type.LanguageTools.ProgramTypes.Search.entityType let toDT (et : PT.Search.EntityType) : Dval = let (caseName, fields) = @@ -1392,7 +1406,7 @@ module Search = module SearchDepth = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.Search.searchDepth + PackageHashes.Type.LanguageTools.ProgramTypes.Search.searchDepth let toDT (sd : PT.Search.SearchDepth) : Dval = let (caseName, fields) = @@ -1409,7 +1423,7 @@ module Search = module SearchQuery = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.Search.searchQuery + PackageHashes.Type.LanguageTools.ProgramTypes.Search.searchQuery let toDT (sq : PT.Search.SearchQuery) : Dval = let fields = @@ -1440,7 +1454,7 @@ module Search = module SearchResults = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.Search.searchResults + PackageHashes.Type.LanguageTools.ProgramTypes.Search.searchResults let toDT (sr : PT.Search.SearchResults) : Dval = let fields = @@ -1480,7 +1494,7 @@ module Handler = module CronInterval = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.ProgramTypes.Handler.cronInterval + PackageHashes.Type.LanguageTools.ProgramTypes.Handler.cronInterval let toDT (ci : PT.Handler.CronInterval) : Dval = let (caseName, fields) = @@ -1508,7 +1522,7 @@ module Handler = module Spec = let typeName = - FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.Handler.spec + FQTypeName.fqPackage PackageHashes.Type.LanguageTools.ProgramTypes.Handler.spec let toDT (s : PT.Handler.Spec) : Dval = let (caseName, fields) = @@ -1533,7 +1547,8 @@ module Handler = | _ -> Exception.raiseInternal "Invalid Spec" [] let typeName = - FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.Handler.handler + FQTypeName.fqPackage + PackageHashes.Type.LanguageTools.ProgramTypes.Handler.handler let toDT (h : PT.Handler.T) : Dval = let fields = @@ -1553,7 +1568,8 @@ module Handler = module DB = - let typeName = FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.db + let typeName = + FQTypeName.fqPackage PackageHashes.Type.LanguageTools.ProgramTypes.db let toDT (db : PT.DB.T) : Dval = let fields = @@ -1575,7 +1591,7 @@ module DB = module Secret = let typeName = - FQTypeName.fqPackage PackageIDs.Type.LanguageTools.ProgramTypes.secret + FQTypeName.fqPackage PackageHashes.Type.LanguageTools.ProgramTypes.secret let toDT (s : PT.Secret.T) : Dval = let fields = diff --git a/backend/src/LibExecution/ProgramTypesToRuntimeTypes.fs b/backend/src/LibExecution/ProgramTypesToRuntimeTypes.fs index d7badba060..8b0331c394 100644 --- a/backend/src/LibExecution/ProgramTypesToRuntimeTypes.fs +++ b/backend/src/LibExecution/ProgramTypesToRuntimeTypes.fs @@ -1074,7 +1074,7 @@ module TypeDeclaration = // -- module PackageType = let toRT (t : PT.PackageType.PackageType) : RT.PackageType.PackageType = - { id = t.id; declaration = TypeDeclaration.toRT t.declaration } + { hash = t.hash; declaration = TypeDeclaration.toRT t.declaration } module PackageValue = // TODO: do a proper eval (Execution.execute) @@ -1138,12 +1138,12 @@ module PackageValue = | [] -> // Only infer for well-known generic types when no type args provided match resolvedTypeName with - | RT.FQTypeName.Package id when id = PackageIDs.Type.Stdlib.option -> + | RT.FQTypeName.Package hash when hash = PackageHashes.Type.Stdlib.option -> match caseName, fieldValues with | "Some", [ fieldValue ] -> [ RT.Dval.toValueType fieldValue ] | "None", [] -> [ RT.ValueType.Unknown ] | _ -> [] - | RT.FQTypeName.Package id when id = PackageIDs.Type.Stdlib.result -> + | RT.FQTypeName.Package hash when hash = PackageHashes.Type.Stdlib.result -> match caseName, fieldValues with | "Ok", [ okValue ] -> [ RT.Dval.toValueType okValue; RT.ValueType.Unknown ] @@ -1181,7 +1181,7 @@ module PackageValue = let toRT (c : PT.PackageValue.PackageValue) : RT.PackageValue.PackageValue = let body = evalConstantExpr c.body - { id = c.id; body = body } + { hash = c.hash; body = body } module PackageFn = module Parameter = @@ -1189,7 +1189,7 @@ module PackageFn = { name = p.name; typ = TypeReference.toRT p.typ } let toRT (f : PT.PackageFn.PackageFn) : RT.PackageFn.PackageFn = - { id = f.id + { hash = f.hash body = let (rcAfterParams, symbols) : (int * Map) = f.parameters @@ -1198,7 +1198,7 @@ module PackageFn = (fun (rc, symbols) p -> (rc + 1, Map.add p.name rc symbols)) (0, Map.empty) - let fnName = PT.FQFnName.Package f.id + let fnName = PT.FQFnName.Package f.hash Expr.toRT symbols rcAfterParams (Some fnName) f.body typeParams = f.typeParams parameters = f.parameters |> NEList.map Parameter.toRT @@ -1207,9 +1207,10 @@ module PackageFn = module PackageManager = let toRT (pm : PT.PackageManager) : RT.PackageManager = - { getType = fun id -> pm.getType id |> Ply.map (Option.map PackageType.toRT) - getValue = fun id -> pm.getValue id |> Ply.map (Option.map PackageValue.toRT) - getFn = fun id -> pm.getFn id |> Ply.map (Option.map PackageFn.toRT) + { getType = fun hash -> pm.getType hash |> Ply.map (Option.map PackageType.toRT) + getValue = + fun hash -> pm.getValue hash |> Ply.map (Option.map PackageValue.toRT) + getFn = fun hash -> pm.getFn hash |> Ply.map (Option.map PackageFn.toRT) init = pm.init } diff --git a/backend/src/LibExecution/RuntimeTypes.fs b/backend/src/LibExecution/RuntimeTypes.fs index c386f6bbac..0a1ad5ac52 100644 --- a/backend/src/LibExecution/RuntimeTypes.fs +++ b/backend/src/LibExecution/RuntimeTypes.fs @@ -27,13 +27,13 @@ let assertBuiltin /// Used to reference a type defined in a Package module FQTypeName = /// The id of a type in the package manager - type Package = uuid + type Package = Hash type FQTypeName = Package of Package - let package (id : uuid) : Package = id + let package (hash : Hash) : Package = hash - let fqPackage (id : uuid) : FQTypeName = Package id + let fqPackage (hash : Hash) : FQTypeName = Package hash /// A Fully-Qualified Value Name @@ -43,8 +43,8 @@ module FQValueName = /// A value built into the runtime type Builtin = { name : string; version : int } - /// The id of a value in the package manager - type Package = uuid + /// The hash of a value in the package manager + type Package = Hash type FQValueName = | Builtin of Builtin @@ -57,9 +57,9 @@ module FQValueName = assertBuiltin name version assertValueName { name = name; version = version } - let package (id : uuid) : Package = id + let package (hash : Hash) : Package = hash - let fqPackage (id : uuid) : FQValueName = Package id + let fqPackage (hash : Hash) : FQValueName = Package hash /// A Fully-Qualified Function Name @@ -69,7 +69,7 @@ module FQFnName = /// A function built into the runtime type Builtin = { name : string; version : int } - type Package = uuid + type Package = Hash type FQFnName = | Builtin of Builtin @@ -82,12 +82,12 @@ module FQFnName = assertBuiltin name version assertBuiltinFnName { name = name; version = version } - let package (id : uuid) = id + let package (hash : Hash) = hash let fqBuiltin (name : string) (version : int) : FQFnName = Builtin { name = name; version = version } - let fqPackage (id : uuid) : FQFnName = Package id + let fqPackage (hash : Hash) : FQFnName = Package hash let isInternalFn (fnName : Builtin) : bool = fnName.name.Contains "darkInternal" @@ -1049,16 +1049,16 @@ module Dval = // ------------ // TODO reference things by hash, not ID module PackageType = - type PackageType = { id : uuid; declaration : TypeDeclaration.T } + type PackageType = { hash : Hash; declaration : TypeDeclaration.T } module PackageValue = - type PackageValue = { id : uuid; body : Dval } + type PackageValue = { hash : Hash; body : Dval } module PackageFn = type Parameter = { name : string; typ : TypeReference } type PackageFn = - { id : uuid + { hash : Hash typeParams : List parameters : NEList returnType : TypeReference @@ -1097,20 +1097,20 @@ type PackageManager = (pm : PackageManager) : PackageManager = { getType = - fun id -> - match types |> List.tryFind (fun t -> t.id = id) with + fun hash -> + match types |> List.tryFind (fun t -> t.hash = hash) with | Some t -> Some t |> Ply - | None -> pm.getType id + | None -> pm.getType hash getValue = - fun id -> - match values |> List.tryFind (fun v -> v.id = id) with + fun hash -> + match values |> List.tryFind (fun v -> v.hash = hash) with | Some v -> Some v |> Ply - | None -> pm.getValue id + | None -> pm.getValue hash getFn = - fun id -> - match fns |> List.tryFind (fun f -> f.id = id) with + fun hash -> + match fns |> List.tryFind (fun f -> f.hash = hash) with | Some f -> Some f |> Ply - | None -> pm.getFn id + | None -> pm.getFn hash init = pm.init } @@ -1464,10 +1464,13 @@ module Types = module TypeReference = let result (t1 : TypeReference) (t2 : TypeReference) : TypeReference = - TCustomType(Ok(FQTypeName.fqPackage PackageIDs.Type.Stdlib.result), [ t1; t2 ]) + TCustomType( + Ok(FQTypeName.fqPackage PackageHashes.Type.Stdlib.result), + [ t1; t2 ] + ) let option (t : TypeReference) : TypeReference = - TCustomType(Ok(FQTypeName.fqPackage PackageIDs.Type.Stdlib.option), [ t ]) + TCustomType(Ok(FQTypeName.fqPackage PackageHashes.Type.Stdlib.option), [ t ]) let rec unwrapAlias (types : Types) (typ : TypeReference) : Ply = match typ with diff --git a/backend/src/LibExecution/RuntimeTypesToDarkTypes.fs b/backend/src/LibExecution/RuntimeTypesToDarkTypes.fs index b4baba7817..cad0120f91 100644 --- a/backend/src/LibExecution/RuntimeTypesToDarkTypes.fs +++ b/backend/src/LibExecution/RuntimeTypesToDarkTypes.fs @@ -18,19 +18,21 @@ let versionField m = m |> D.field "version" |> D.int32 module FQTypeName = let typeName = FQTypeName.Package - PackageIDs.Type.LanguageTools.RuntimeTypes.FQTypeName.fqTypeName + PackageHashes.Type.LanguageTools.RuntimeTypes.FQTypeName.fqTypeName let knownType = KTCustomType(typeName, []) module Package = let typeName = FQTypeName.Package - PackageIDs.Type.LanguageTools.RuntimeTypes.FQTypeName.package + PackageHashes.Type.LanguageTools.RuntimeTypes.FQTypeName.package - let toDT (u : FQTypeName.Package) : Dval = DUuid u + let toDT (h : FQTypeName.Package) : Dval = + let (Hash hashStr) = h + DString hashStr let fromDT (d : Dval) : FQTypeName.Package = match d with - | DUuid u -> u + | DString hashStr -> Hash hashStr | _ -> Exception.raiseInternal "Invalid FQTypeName.Package" [] @@ -49,7 +51,7 @@ module FQTypeName = module FQValueName = let typeName = FQTypeName.Package - PackageIDs.Type.LanguageTools.RuntimeTypes.FQValueName.fqValueName + PackageHashes.Type.LanguageTools.RuntimeTypes.FQValueName.fqValueName let knownType = KTCustomType(typeName, []) module Builtin = @@ -57,7 +59,7 @@ module FQValueName = let fields = [ "name", DString u.name; "version", DInt32 u.version ] let typeName = FQTypeName.Package - PackageIDs.Type.LanguageTools.RuntimeTypes.FQValueName.builtin + PackageHashes.Type.LanguageTools.RuntimeTypes.FQValueName.builtin DRecord(typeName, typeName, [], Map fields) let fromDT (d : Dval) : FQValueName.Builtin = @@ -67,11 +69,13 @@ module FQValueName = | _ -> Exception.raiseInternal "Invalid FQValueName.Builtin" [] module Package = - let toDT (u : FQValueName.Package) : Dval = DUuid u + let toDT (h : FQValueName.Package) : Dval = + let (Hash hashStr) = h + DString hashStr let fromDT (d : Dval) : FQValueName.Package = match d with - | DUuid id -> id + | DString hashStr -> Hash hashStr | _ -> Exception.raiseInternal "Invalid FQValueName.Package" [] let toDT (u : FQValueName.FQValueName) : Dval = @@ -90,12 +94,14 @@ module FQValueName = module FQFnName = let typeName = - FQTypeName.Package PackageIDs.Type.LanguageTools.RuntimeTypes.FQFnName.fqFnName + FQTypeName.Package + PackageHashes.Type.LanguageTools.RuntimeTypes.FQFnName.fqFnName let knownType = KTCustomType(typeName, []) module Builtin = let typeName = - FQTypeName.Package PackageIDs.Type.LanguageTools.RuntimeTypes.FQFnName.builtin + FQTypeName.Package + PackageHashes.Type.LanguageTools.RuntimeTypes.FQFnName.builtin let toDT (u : FQFnName.Builtin) : Dval = let fields = [ "name", DString u.name; "version", DInt32 u.version ] @@ -108,11 +114,13 @@ module FQFnName = | _ -> Exception.raiseInternal "Invalid FQFnName.Builtin" [] module Package = - let toDT (u : FQFnName.Package) : Dval = DUuid u + let toDT (h : FQFnName.Package) : Dval = + let (Hash hashStr) = h + DString hashStr let fromDT (d : Dval) : FQFnName.Package = match d with - | DUuid u -> u + | DString hashStr -> Hash hashStr | _ -> Exception.raiseInternal "Invalid FQFnName.Package" [] @@ -133,7 +141,8 @@ module FQFnName = module NameResolutionError = let typeName = - FQTypeName.Package PackageIDs.Type.LanguageTools.RuntimeTypes.nameResolutionError + FQTypeName.Package + PackageHashes.Type.LanguageTools.RuntimeTypes.nameResolutionError let toDT (nre : NameResolutionError) : Dval = let (caseName, fields) = @@ -154,7 +163,7 @@ module NameResolutionError = module NameResolution = let typeName = - FQTypeName.Package PackageIDs.Type.LanguageTools.RuntimeTypes.nameResolution + FQTypeName.Package PackageHashes.Type.LanguageTools.RuntimeTypes.nameResolution let toDT (nameValueType : KnownType) @@ -170,7 +179,7 @@ module NameResolution = module TypeReference = let typeName = - FQTypeName.Package PackageIDs.Type.LanguageTools.RuntimeTypes.typeReference + FQTypeName.Package PackageHashes.Type.LanguageTools.RuntimeTypes.typeReference let knownType = KTCustomType(typeName, []) let rec toDT (t : TypeReference) : Dval = @@ -264,7 +273,7 @@ module TypeReference = module LetPattern = let typeName = - FQTypeName.Package PackageIDs.Type.LanguageTools.RuntimeTypes.letPattern + FQTypeName.Package PackageHashes.Type.LanguageTools.RuntimeTypes.letPattern let knownType = KTCustomType(typeName, []) let rec toDT (p : LetPattern) : Dval = @@ -289,7 +298,7 @@ module LetPattern = module MatchPattern = let typeName = - FQTypeName.Package PackageIDs.Type.LanguageTools.RuntimeTypes.matchPattern + FQTypeName.Package PackageHashes.Type.LanguageTools.RuntimeTypes.matchPattern let knownType = KTCustomType(typeName, []) let rec toDT (p : MatchPattern) : Dval = @@ -370,7 +379,7 @@ module MatchPattern = module StringSegment = let typeName = - FQTypeName.Package PackageIDs.Type.LanguageTools.RuntimeTypes.stringSegment + FQTypeName.Package PackageHashes.Type.LanguageTools.RuntimeTypes.stringSegment let knownType = KTCustomType(typeName, []) let toDT (regToDT : Register -> Dval) (s : StringSegment) : Dval = @@ -389,7 +398,7 @@ module StringSegment = module KnownType = let typeName = - FQTypeName.Package PackageIDs.Type.LanguageTools.RuntimeTypes.knownType + FQTypeName.Package PackageHashes.Type.LanguageTools.RuntimeTypes.knownType let toDT (kt : KnownType) : Dval = let (caseName, fields) = @@ -484,7 +493,7 @@ module KnownType = module ValueType = let typeName = - FQTypeName.Package PackageIDs.Type.LanguageTools.RuntimeTypes.valueType + FQTypeName.Package PackageHashes.Type.LanguageTools.RuntimeTypes.valueType let knownType = KTCustomType(typeName, []) let toDT (vt : ValueType) : Dval = @@ -506,7 +515,8 @@ module ValueType = module ApplicableNamedFn = let toDT (namedFn : ApplicableNamedFn) : Dval = let typeName = - FQTypeName.Package PackageIDs.Type.LanguageTools.RuntimeTypes.applicableNamedFn + FQTypeName.Package + PackageHashes.Type.LanguageTools.RuntimeTypes.applicableNamedFn let fields = [ "name", FQFnName.toDT namedFn.name @@ -533,7 +543,8 @@ module ApplicableNamedFn = module ApplicableLambda = let toDT (lambda : ApplicableLambda) : Dval = let typeName = - FQTypeName.Package PackageIDs.Type.LanguageTools.RuntimeTypes.applicableLambda + FQTypeName.Package + PackageHashes.Type.LanguageTools.RuntimeTypes.applicableLambda let fields = [ ("exprId", DUInt64 lambda.exprId) @@ -571,7 +582,7 @@ module ApplicableLambda = module Applicable = let toDT (applicable : Applicable) : Dval = let typeName = - FQTypeName.Package PackageIDs.Type.LanguageTools.RuntimeTypes.applicable + FQTypeName.Package PackageHashes.Type.LanguageTools.RuntimeTypes.applicable let (caseName, fields) = match applicable with @@ -592,7 +603,8 @@ module Applicable = module Dval = - let typeName = FQTypeName.Package PackageIDs.Type.LanguageTools.RuntimeTypes.dval + let typeName = + FQTypeName.Package PackageHashes.Type.LanguageTools.RuntimeTypes.dval let knownType = KTCustomType(typeName, []) let rec toDT (dv : Dval) : Dval = @@ -720,7 +732,7 @@ module RuntimeError = let toDT (e : RuntimeError.Bools.Error) : Dval = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.RuntimeTypes.RuntimeError.Bools.error + PackageHashes.Type.LanguageTools.RuntimeTypes.RuntimeError.Bools.error let (caseName, fields) = match e with @@ -759,7 +771,7 @@ module RuntimeError = let toDT (e : RuntimeError.Ints.Error) : Dval = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.RuntimeTypes.RuntimeError.Ints.error + PackageHashes.Type.LanguageTools.RuntimeTypes.RuntimeError.Ints.error let (caseName, fields) = match e with @@ -785,7 +797,7 @@ module RuntimeError = let toDT (e : RuntimeError.Strings.Error) : Dval = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.RuntimeTypes.RuntimeError.Strings.error + PackageHashes.Type.LanguageTools.RuntimeTypes.RuntimeError.Strings.error let (caseName, fields) = match e with @@ -807,7 +819,7 @@ module RuntimeError = let toDT (e : RuntimeError.Lists.Error) : Dval = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.RuntimeTypes.RuntimeError.Lists.error + PackageHashes.Type.LanguageTools.RuntimeTypes.RuntimeError.Lists.error let (caseName, fields) = match e with @@ -842,7 +854,7 @@ module RuntimeError = let toDT (e : RuntimeError.Dicts.Error) : Dval = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.RuntimeTypes.RuntimeError.Dicts.error + PackageHashes.Type.LanguageTools.RuntimeTypes.RuntimeError.Dicts.error let (caseName, fields) = match e with @@ -881,7 +893,7 @@ module RuntimeError = let toDT (e : RuntimeError.Lets.Error) : Dval = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.RuntimeTypes.RuntimeError.Lets.error + PackageHashes.Type.LanguageTools.RuntimeTypes.RuntimeError.Lets.error let (caseName, fields) = match e with @@ -903,7 +915,7 @@ module RuntimeError = let toDT (e : RuntimeError.Matches.Error) : Dval = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.RuntimeTypes.RuntimeError.Matches.error + PackageHashes.Type.LanguageTools.RuntimeTypes.RuntimeError.Matches.error let (caseName, fields) = match e with @@ -922,7 +934,7 @@ module RuntimeError = let toDT (e : RuntimeError.Records.Error) : Dval = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.RuntimeTypes.RuntimeError.Records.error + PackageHashes.Type.LanguageTools.RuntimeTypes.RuntimeError.Records.error let (caseName, fields) = match e with @@ -1026,7 +1038,7 @@ module RuntimeError = let toDT (e : RuntimeError.Enums.Error) : Dval = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.RuntimeTypes.RuntimeError.Enums.error + PackageHashes.Type.LanguageTools.RuntimeTypes.RuntimeError.Enums.error let (caseName, fields) = match e with @@ -1091,7 +1103,7 @@ module RuntimeError = let toDT (e : RuntimeError.Applications.Error) : Dval = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.RuntimeTypes.RuntimeError.Applications.error + PackageHashes.Type.LanguageTools.RuntimeTypes.RuntimeError.Applications.error let (caseName, fields) = match e with @@ -1205,7 +1217,7 @@ module RuntimeError = let toDT (e : RuntimeError.Statements.Error) : Dval = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.RuntimeTypes.RuntimeError.Statements.error + PackageHashes.Type.LanguageTools.RuntimeTypes.RuntimeError.Statements.error let (caseName, fields) = match e with @@ -1238,7 +1250,7 @@ module RuntimeError = let toDT (e : RuntimeError.Unwraps.Error) : Dval = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.RuntimeTypes.RuntimeError.Unwraps.error + PackageHashes.Type.LanguageTools.RuntimeTypes.RuntimeError.Unwraps.error let (caseName, fields) = match e with @@ -1266,7 +1278,7 @@ module RuntimeError = let toDT (e : RuntimeError.Jsons.Error) : Dval = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.RuntimeTypes.RuntimeError.Jsons.error + PackageHashes.Type.LanguageTools.RuntimeTypes.RuntimeError.Jsons.error let (caseName, fields) = match e with @@ -1289,7 +1301,7 @@ module RuntimeError = let toDT (e : RuntimeError.CLIs.Error) : Dval = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.RuntimeTypes.RuntimeError.CLIs.error + PackageHashes.Type.LanguageTools.RuntimeTypes.RuntimeError.CLIs.error let (caseName, fields) = match e with @@ -1311,7 +1323,7 @@ module RuntimeError = let toDT (e : RuntimeError.Error) : Dval = let typeName = FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.RuntimeTypes.RuntimeError.error + PackageHashes.Type.LanguageTools.RuntimeTypes.RuntimeError.error let (caseName, fields) = match e with diff --git a/backend/src/LibHttpMiddleware/Http.fs b/backend/src/LibHttpMiddleware/Http.fs index 7762f8a31b..c8755efb3f 100644 --- a/backend/src/LibHttpMiddleware/Http.fs +++ b/backend/src/LibHttpMiddleware/Http.fs @@ -11,14 +11,14 @@ module Dval = LibExecution.Dval module RT = LibExecution.RuntimeTypes module VT = LibExecution.ValueType module Telemetry = LibService.Telemetry -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes let lowercaseHeaderKeys (headers : List) : List = headers |> List.map (fun (k, v) -> (String.toLowercase k, v)) module Request = - let typ = RT.FQTypeName.fqPackage PackageIDs.Type.Stdlib.Http.request + let typ = RT.FQTypeName.fqPackage PackageHashes.Type.Stdlib.Http.request let fromRequest (uri : string) @@ -47,8 +47,8 @@ module Response = let toHttpResponse (result : RT.Dval) : HttpResponse = match result with // Expected user response - | RT.DRecord(RT.FQTypeName.Package id, _, [], fields) when - id = PackageIDs.Type.Stdlib.Http.response + | RT.DRecord(RT.FQTypeName.Package hash, _, [], fields) when + hash = PackageHashes.Type.Stdlib.Http.response -> Telemetry.addTags [ "response-type", "httpResponse response" ] diff --git a/backend/src/LibPackageManager/Inserts.fs b/backend/src/LibPackageManager/Inserts.fs index a6fa719641..d150e42d5c 100644 --- a/backend/src/LibPackageManager/Inserts.fs +++ b/backend/src/LibPackageManager/Inserts.fs @@ -14,6 +14,7 @@ module RT = LibExecution.RuntimeTypes module PT = LibExecution.ProgramTypes module PT2RT = LibExecution.ProgramTypesToRuntimeTypes module BinarySerialization = LibBinarySerialization.BinarySerialization +module Hashing = LibExecution.Hashing let insertTypes (types : List) : Task = @@ -24,18 +25,19 @@ let insertTypes (types : List) : Task = |> List.map (fun typ -> let sql = @"INSERT INTO package_types_v0 - (id, owner, modules, name, pt_def, rt_def) + (hash, owner, modules, name, pt_def, rt_def) VALUES - (@id, @owner, @modules, @name, @pt_def, @rt_def)" + (@hash, @owner, @modules, @name, @pt_def, @rt_def)" - let ptDef = BinarySerialization.PT.PackageType.serialize typ.id typ + let (Hash hashStr) = typ.hash // Use the hash already in the type, don't recompute + let ptDef = BinarySerialization.PT.PackageType.serialize hashStr typ let rtDef = typ |> PT2RT.PackageType.toRT - |> BinarySerialization.RT.PackageType.serialize typ.id + |> BinarySerialization.RT.PackageType.serialize hashStr let parameters = - [ "id", Sql.uuid typ.id + [ "hash", Sql.string hashStr "owner", Sql.string typ.name.owner "modules", Sql.string (String.concat "." typ.name.modules) "name", Sql.string typ.name.name @@ -56,18 +58,18 @@ let insertValues (values : List) : Task = |> List.map (fun v -> let sql = @"INSERT INTO package_values_v0 - (id, owner, modules, name, pt_def, rt_dval) + (hash, owner, modules, name, pt_def, rt_dval) VALUES - (@id, @owner, @modules, @name, @pt_def, @rt_dval)" + (@hash, @owner, @modules, @name, @pt_def, @rt_dval)" + let (Hash hashStr) = v.hash // Use the hash already in the value let dval = PT2RT.PackageValue.toRT v - let ptBits = BinarySerialization.PT.PackageValue.serialize v.id v - let rtBits = dval |> BinarySerialization.RT.PackageValue.serialize v.id - + let ptBits = BinarySerialization.PT.PackageValue.serialize hashStr v + let rtBits = dval |> BinarySerialization.RT.PackageValue.serialize hashStr let parameters = - [ "id", Sql.uuid v.id + [ "hash", Sql.string hashStr "owner", Sql.string v.name.owner "modules", Sql.string (String.concat "." v.name.modules) "name", Sql.string v.name.name @@ -87,18 +89,19 @@ let insertFns (fns : List) : Task = |> List.map (fun fn -> let sql = @"INSERT INTO package_functions_v0 - (id, owner, modules, name, pt_def, rt_instrs) + (hash, owner, modules, name, pt_def, rt_instrs) VALUES - (@id, @owner, @modules, @name, @pt_def, @rt_instrs)" + (@hash, @owner, @modules, @name, @pt_def, @rt_instrs)" - let ptDef = BinarySerialization.PT.PackageFn.serialize fn.id fn + let (Hash hashStr) = fn.hash // Use the hash already in the function + let ptDef = BinarySerialization.PT.PackageFn.serialize hashStr fn let rtInstrs = fn |> PT2RT.PackageFn.toRT - |> BinarySerialization.RT.PackageFn.serialize fn.id + |> BinarySerialization.RT.PackageFn.serialize hashStr let parameters = - [ "id", Sql.uuid fn.id + [ "hash", Sql.string hashStr "owner", Sql.string fn.name.owner "modules", Sql.string (String.concat "." fn.name.modules) "name", Sql.string fn.name.name diff --git a/backend/src/LibPackageManager/ProgramTypes.fs b/backend/src/LibPackageManager/ProgramTypes.fs index 87f30d38b8..ba46b85db0 100644 --- a/backend/src/LibPackageManager/ProgramTypes.fs +++ b/backend/src/LibPackageManager/ProgramTypes.fs @@ -20,7 +20,7 @@ module Type = return! Sql.query """ - SELECT id + SELECT hash FROM package_types_v0 WHERE owner = @owner AND modules = @modules @@ -30,21 +30,26 @@ module Type = [ "owner", Sql.string name.owner "modules", Sql.string (String.concat "." name.modules) "name", Sql.string name.name ] - |> Sql.executeRowOptionAsync (fun read -> read.uuid "id") + |> Sql.executeRowOptionAsync (fun read -> Hash(read.string "hash")) } - let get (id : uuid) : Ply> = + let get (hash : Hash) : Ply> = uply { + let (Hash hashStr) = hash return! Sql.query """ - SELECT pt_def + SELECT hash, pt_def FROM package_types_v0 - WHERE id = @id + WHERE hash = @hash + LIMIT 1 """ - |> Sql.parameters [ "id", Sql.uuid id ] - |> Sql.executeRowOptionAsync (fun read -> read.bytes "pt_def") - |> Task.map (Option.map (BinarySerialization.PT.PackageType.deserialize id)) + |> Sql.parameters [ "hash", Sql.string hashStr ] + |> Sql.executeRowOptionAsync (fun read -> + let hash = read.string "hash" + let ptDef = read.bytes "pt_def" + let typ = BinarySerialization.PT.PackageType.deserialize hash ptDef + { typ with hash = Hash hash }) } @@ -54,7 +59,7 @@ module Value = return! Sql.query """ - SELECT id + SELECT hash FROM package_values_v0 WHERE owner = @owner AND modules = @modules @@ -64,21 +69,26 @@ module Value = [ "owner", Sql.string name.owner "modules", Sql.string (String.concat "." name.modules) "name", Sql.string name.name ] - |> Sql.executeRowOptionAsync (fun read -> read.uuid "id") + |> Sql.executeRowOptionAsync (fun read -> Hash(read.string "hash")) } - let get (id : uuid) : Ply> = + let get (hash : Hash) : Ply> = uply { + let (Hash hashStr) = hash return! Sql.query """ - SELECT pt_def + SELECT hash, pt_def FROM package_values_v0 - WHERE id = @id + WHERE hash = @hash + LIMIT 1 """ - |> Sql.parameters [ "id", Sql.uuid id ] - |> Sql.executeRowOptionAsync (fun read -> read.bytes "pt_def") - |> Task.map (Option.map (BinarySerialization.PT.PackageValue.deserialize id)) + |> Sql.parameters [ "hash", Sql.string hashStr ] + |> Sql.executeRowOptionAsync (fun read -> + let hash = read.string "hash" + let ptDef = read.bytes "pt_def" + let value = BinarySerialization.PT.PackageValue.deserialize hash ptDef + { value with hash = Hash hash }) } @@ -88,7 +98,7 @@ module Fn = return! Sql.query """ - SELECT id + SELECT hash FROM package_functions_v0 WHERE owner = @owner AND modules = @modules @@ -98,21 +108,26 @@ module Fn = [ "owner", Sql.string name.owner "modules", Sql.string (String.concat "." name.modules) "name", Sql.string name.name ] - |> Sql.executeRowOptionAsync (fun read -> read.uuid "id") + |> Sql.executeRowOptionAsync (fun read -> Hash(read.string "hash")) } - let get (id : uuid) : Ply> = + let get (hash : Hash) : Ply> = uply { + let (Hash hashStr) = hash return! Sql.query """ - SELECT pt_def + SELECT hash, pt_def FROM package_functions_v0 - WHERE id = @id + WHERE hash = @hash + LIMIT 1 """ - |> Sql.parameters [ "id", Sql.uuid id ] - |> Sql.executeRowOptionAsync (fun read -> read.bytes "pt_def") - |> Task.map (Option.map (BinarySerialization.PT.PackageFn.deserialize id)) + |> Sql.parameters [ "hash", Sql.string hashStr ] + |> Sql.executeRowOptionAsync (fun read -> + let hash = read.string "hash" + let ptDef = read.bytes "pt_def" + let fn = BinarySerialization.PT.PackageFn.deserialize hash ptDef + { fn with hash = Hash hash }) } @@ -196,7 +211,7 @@ let search (query : PT.Search.SearchQuery) : Ply = else "name LIKE '%' || @searchText || '%'" - "SELECT id, owner, modules, name, pt_def\n" + "SELECT hash, owner, modules, name, pt_def\n" + $"FROM {table}\n" + "WHERE ((modules = @modules) OR (owner || '.' || modules = @fqname))\n" + $" AND {nameCondition}" @@ -206,9 +221,9 @@ let search (query : PT.Search.SearchQuery) : Ply = "fqname", Sql.string currentModule "searchText", Sql.string query.text ] |> Sql.executeAsync (fun read -> - let id = read.uuid "id" + let hash = read.string "hash" let definition = read.bytes "pt_def" - deserializeFn id definition) + deserializeFn hash definition) let isEntityRequested entity = query.entityTypes.IsEmpty || List.contains entity query.entityTypes diff --git a/backend/src/LibPackageManager/RuntimeTypes.fs b/backend/src/LibPackageManager/RuntimeTypes.fs index 4eee500174..5f08fd977e 100644 --- a/backend/src/LibPackageManager/RuntimeTypes.fs +++ b/backend/src/LibPackageManager/RuntimeTypes.fs @@ -11,48 +11,60 @@ module BinarySerialization = LibBinarySerialization.BinarySerialization module Type = - let get (id : uuid) : Ply> = + let get (hash : Hash) : Ply> = uply { + let (Hash hashStr) = hash return! Sql.query """ - SELECT rt_def + SELECT hash, rt_def FROM package_types_v0 - WHERE id = @id + WHERE hash = @hash + LIMIT 1 """ - |> Sql.parameters [ "id", Sql.uuid id ] - |> Sql.executeRowOptionAsync (fun read -> read.bytes "rt_def") - |> Task.map (Option.map (BinarySerialization.RT.PackageType.deserialize id)) + |> Sql.parameters [ "hash", Sql.string hashStr ] + |> Sql.executeRowOptionAsync (fun read -> + let hash = read.string "hash" + let rtDef = read.bytes "rt_def" + BinarySerialization.RT.PackageType.deserialize hash rtDef) } module Value = - let get (id : uuid) : Ply> = + let get (hash : Hash) : Ply> = uply { + let (Hash hashStr) = hash return! Sql.query """ - SELECT rt_dval + SELECT hash, rt_dval FROM package_values_v0 - WHERE id = @id + WHERE hash = @hash + LIMIT 1 """ - |> Sql.parameters [ "id", Sql.uuid id ] - |> Sql.executeRowOptionAsync (fun read -> read.bytes "rt_dval") - |> Task.map (Option.map (BinarySerialization.RT.PackageValue.deserialize id)) + |> Sql.parameters [ "hash", Sql.string hashStr ] + |> Sql.executeRowOptionAsync (fun read -> + let hash = read.string "hash" + let rtDval = read.bytes "rt_dval" + BinarySerialization.RT.PackageValue.deserialize hash rtDval) } module Fn = - let get (id : uuid) : Ply> = + let get (hash : Hash) : Ply> = uply { + let (Hash hashStr) = hash return! Sql.query """ - SELECT rt_instrs + SELECT hash, rt_instrs FROM package_functions_v0 - WHERE id = @id + WHERE hash = @hash + LIMIT 1 """ - |> Sql.parameters [ "id", Sql.uuid id ] - |> Sql.executeRowOptionAsync (fun read -> read.bytes "rt_instrs") - |> Task.map (Option.map (BinarySerialization.RT.PackageFn.deserialize id)) + |> Sql.parameters [ "hash", Sql.string hashStr ] + |> Sql.executeRowOptionAsync (fun read -> + let hash = read.string "hash" + let rtInstrs = read.bytes "rt_instrs" + BinarySerialization.RT.PackageFn.deserialize hash rtInstrs) } diff --git a/backend/src/LibParser/Canvas.fs b/backend/src/LibParser/Canvas.fs index 61bcd86cc0..1d3214e59c 100644 --- a/backend/src/LibParser/Canvas.fs +++ b/backend/src/LibParser/Canvas.fs @@ -338,34 +338,9 @@ let parse let! result = toPT builtins pm onMissing moduleWT let adjusted = - { types = - result.types - |> List.map (fun typ -> - { typ with - id = - initialResult.types - |> List.find (fun original -> original.name = typ.name) - |> Option.map _.id - |> Option.defaultValue typ.id }) - values = - result.values - |> List.map (fun c -> - { c with - id = - initialResult.values - |> List.find (fun original -> original.name = c.name) - |> Option.map _.id - |> Option.defaultValue c.id }) - fns = - result.fns - |> List.map (fun fn -> - { fn with - id = - initialResult.fns - |> List.find (fun original -> original.name = fn.name) - |> Option.map _.id - |> Option.defaultValue fn.id }) - + { types = result.types |> List.map (fun typ -> { typ with hash = typ.hash }) + values = result.values |> List.map (fun c -> { c with hash = c.hash }) + fns = result.fns |> List.map (fun fn -> { fn with hash = fn.hash }) dbs = result.dbs handlers = result.handlers exprs = result.exprs } diff --git a/backend/src/LibParser/NameResolver.fs b/backend/src/LibParser/NameResolver.fs index 76494e59a2..d51a8b57cb 100644 --- a/backend/src/LibParser/NameResolver.fs +++ b/backend/src/LibParser/NameResolver.fs @@ -97,7 +97,7 @@ let resolveTypeName // TODO: also do this in the Dark equivalent uply { match! packageManager.findType name with - | Some id -> return Ok(PT.FQTypeName.FQTypeName.Package id) + | Some hash -> return Ok(PT.FQTypeName.FQTypeName.Package hash) | None -> return notFoundError } @@ -160,7 +160,7 @@ let resolveValueName : Ply> = uply { match! packageManager.findValue name with - | Some id -> return Ok(PT.FQValueName.FQValueName.Package id) + | Some hash -> return Ok(PT.FQValueName.FQValueName.Package hash) | None -> return notFoundError } @@ -230,7 +230,7 @@ let resolveFnName : Ply> = uply { match! packageManager.findFn name with - | Some id -> return Ok(PT.FQFnName.FQFnName.Package id) + | Some hash -> return Ok(PT.FQFnName.FQFnName.Package hash) | None -> return notFoundError } diff --git a/backend/src/LibParser/TestModule.fs b/backend/src/LibParser/TestModule.fs index 000184a059..ba7f763bda 100644 --- a/backend/src/LibParser/TestModule.fs +++ b/backend/src/LibParser/TestModule.fs @@ -273,7 +273,7 @@ let parseTestFile let! (afterSecondPass : List) = modulesWT |> Ply.List.mapSequentially (toPT owner builtins pm onMissing) - // The IDs that weren't locked-in have changed - let's fix that now. + let adjusted : List = afterSecondPass |> List.map (fun m -> @@ -287,29 +287,29 @@ let parseTestFile m.types |> List.map (fun typ -> { typ with - id = + hash = originalModule.types |> List.find (fun original -> original.name = typ.name) - |> Option.map _.id - |> Option.defaultValue typ.id }) + |> Option.map _.hash + |> Option.defaultValue typ.hash }) values = m.values |> List.map (fun c -> { c with - id = + hash = originalModule.values |> List.find (fun original -> original.name = c.name) - |> Option.map _.id - |> Option.defaultValue c.id }) + |> Option.map _.hash + |> Option.defaultValue c.hash }) fns = m.fns |> List.map (fun fn -> { fn with - id = + hash = originalModule.fns |> List.find (fun original -> original.name = fn.name) - |> Option.map _.id - |> Option.defaultValue fn.id }) }) + |> Option.map _.hash + |> Option.defaultValue fn.hash }) }) return adjusted } diff --git a/backend/src/LibParser/WrittenTypesToProgramTypes.fs b/backend/src/LibParser/WrittenTypesToProgramTypes.fs index ea7cc95900..1f3f77289f 100644 --- a/backend/src/LibParser/WrittenTypesToProgramTypes.fs +++ b/backend/src/LibParser/WrittenTypesToProgramTypes.fs @@ -6,6 +6,7 @@ open Prelude module WT = WrittenTypes module PT = LibExecution.ProgramTypes module RT = LibExecution.RuntimeTypes +module Hashing = LibExecution.Hashing module FS2WT = FSharpToWrittenTypes type NRE = PT.NameResolutionError module NR = NameResolver @@ -731,7 +732,7 @@ module TypeDeclaration = // // CLEANUP: expose the equivalent of this via some Builtin for the Darklang WT2PT stuff? // I suppose that's only really needed when we do the switch-over. -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module PackageType = module Name = @@ -747,9 +748,10 @@ module PackageType = uply { let! declaration = TypeDeclaration.toPT pm onMissing currentModule pt.declaration + let ptName = Name.toPT pt.name return - { id = PackageIDs.Type.idForName pt.name.owner pt.name.modules pt.name.name - name = Name.toPT pt.name + { hash = Hashing.TypeDeclaration.hashWithName ptName declaration + name = ptName description = pt.description declaration = declaration deprecated = PT.NotDeprecated } @@ -772,7 +774,7 @@ module PackageValue = { currentFnName = None; isInFunction = false; argMap = Map.empty } let! body = Expr.toPT builtins pm onMissing currentModule context c.body return - { id = PackageIDs.Value.idForName c.name.owner c.name.modules c.name.name + { hash = Hashing.PackageValue.hash body name = Name.toPT c.name description = c.description deprecated = PT.NotDeprecated @@ -822,7 +824,7 @@ module PackageFn = let! body = Expr.toPT builtins pm onMissing currentModule context fn.body return - { id = PackageIDs.Fn.idForName fn.name.owner fn.name.modules fn.name.name + { hash = Hashing.PackageFn.hash (parameters, returnType, body) name = Name.toPT fn.name parameters = parameters returnType = returnType diff --git a/backend/src/LocalExec/LoadPackagesFromDisk.fs b/backend/src/LocalExec/LoadPackagesFromDisk.fs index 951de97777..87a758d18d 100644 --- a/backend/src/LocalExec/LoadPackagesFromDisk.fs +++ b/backend/src/LocalExec/LoadPackagesFromDisk.fs @@ -62,29 +62,29 @@ let load (builtins : RT.Builtins) : Ply = reParsed.types |> List.map (fun typ -> { typ with - id = + hash = packages.types |> List.find (fun original -> original.name = typ.name) - |> Option.map _.id - |> Option.defaultValue typ.id }) + |> Option.map _.hash + |> Option.defaultValue typ.hash }) values = reParsed.values |> List.map (fun c -> { c with - id = + hash = packages.values |> List.find (fun original -> original.name = c.name) - |> Option.map _.id - |> Option.defaultValue c.id }) + |> Option.map _.hash + |> Option.defaultValue c.hash }) fns = reParsed.fns |> List.map (fun fn -> { fn with - id = + hash = packages.fns |> List.find (fun original -> original.name = fn.name) - |> Option.map _.id - |> Option.defaultValue fn.id }) } + |> Option.map _.hash + |> Option.defaultValue fn.hash }) } return adjusted } diff --git a/backend/src/LocalExec/Utils.fs b/backend/src/LocalExec/Utils.fs index a5f50882e8..00df6d9160 100644 --- a/backend/src/LocalExec/Utils.fs +++ b/backend/src/LocalExec/Utils.fs @@ -11,17 +11,17 @@ module PT2RT = LibExecution.ProgramTypesToRuntimeTypes let inMemPackageManagerFromPackages (p : PT.Packages) : PT.PackageManager = { findType = fun name -> - p.types |> List.find (fun t -> t.name = name) |> Option.map _.id |> Ply + p.types |> List.find (fun t -> t.name = name) |> Option.map _.hash |> Ply findFn = fun name -> - p.fns |> List.find (fun f -> f.name = name) |> Option.map _.id |> Ply + p.fns |> List.find (fun f -> f.name = name) |> Option.map _.hash |> Ply findValue = fun name -> - p.values |> List.find (fun c -> c.name = name) |> Option.map _.id |> Ply + p.values |> List.find (fun c -> c.name = name) |> Option.map _.hash |> Ply - getType = fun id -> p.types |> List.find (fun t -> t.id = id) |> Ply - getFn = fun id -> p.fns |> List.find (fun f -> f.id = id) |> Ply - getValue = fun id -> p.values |> List.find (fun c -> c.id = id) |> Ply + getType = fun hash -> p.types |> List.find (fun t -> t.hash = hash) |> Ply + getFn = fun hash -> p.fns |> List.find (fun f -> f.hash = hash) |> Ply + getValue = fun hash -> p.values |> List.find (fun c -> c.hash = hash) |> Ply search = fun _ -> diff --git a/backend/src/Prelude/Prelude.fs b/backend/src/Prelude/Prelude.fs index d79c9c04f9..ee2b9d895c 100644 --- a/backend/src/Prelude/Prelude.fs +++ b/backend/src/Prelude/Prelude.fs @@ -393,6 +393,8 @@ let gid () : uint64 = let guuid () : uuid = System.Guid.NewGuid() +type Hash = Hash of string + let randomString (length : int) : string = let result = Array.init length (fun _ -> char (RNG.GetInt32(int32 'A', int32 'Z'))) diff --git a/backend/tests/TestUtils/LibTest.fs b/backend/tests/TestUtils/LibTest.fs index d38439b4e4..decc84f7b2 100644 --- a/backend/tests/TestUtils/LibTest.fs +++ b/backend/tests/TestUtils/LibTest.fs @@ -14,7 +14,7 @@ module VT = LibExecution.ValueType module PT = LibExecution.ProgramTypes module Dval = LibExecution.Dval module PT2RT = LibExecution.ProgramTypesToRuntimeTypes -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes open Fumble open LibDB.Db @@ -51,7 +51,7 @@ let fns : List = TCustomType( Ok( FQTypeName.Package - PackageIDs.Type.PrettyPrinter.RuntimeTypes.RuntimeError.errorMessage + PackageHashes.Type.PrettyPrinter.RuntimeTypes.RuntimeError.errorMessage ), [] ) @@ -61,7 +61,7 @@ let fns : List = | _, _, _, [ DString error ] -> let typeName = FQTypeName.Package - PackageIDs.Type.PrettyPrinter.RuntimeTypes.RuntimeError.errorMessage + PackageHashes.Type.PrettyPrinter.RuntimeTypes.RuntimeError.errorMessage DEnum(typeName, typeName, [], "ErrorString", [ DString error ]) |> Ply | _ -> incorrectArgs ()) sqlSpec = NotQueryable @@ -90,7 +90,7 @@ let fns : List = // TCustomType( // Ok( // FQTypeName.Package - // PackageIDs.Type.LanguageTools.RuntimeError.Error.errorMessage + // PackageHashes.Type.LanguageTools.RuntimeError.Error.errorMessage // ), // [] // ) @@ -101,7 +101,7 @@ let fns : List = // let msg = LibCloud.SqlCompiler.errorTemplate + errorString // let typeName = // FQTypeName.Package - // PackageIDs.Type.LanguageTools.RuntimeError.Error.errorMessage + // PackageHashes.Type.LanguageTools.RuntimeError.Error.errorMessage // DEnum(typeName, typeName, [], "ErrorString", [ DString msg ]) |> Ply // | _ -> incorrectArgs ()) // sqlSpec = NotQueryable diff --git a/backend/tests/TestUtils/PTShortcuts.fs b/backend/tests/TestUtils/PTShortcuts.fs index d223feddce..594d3fc9bc 100644 --- a/backend/tests/TestUtils/PTShortcuts.fs +++ b/backend/tests/TestUtils/PTShortcuts.fs @@ -85,12 +85,13 @@ let eInfix (op : Infix) (left : Expr) (right : Expr) : Expr = let eBuiltinValue (name : string) (version : int) : Expr = EValue(gid (), Ok(FQValueName.fqBuiltIn name version)) -let ePackageValue (id : uuid) : Expr = EValue(gid (), Ok(FQValueName.fqPackage id)) +let ePackageValue (hash : Hash) : Expr = + EValue(gid (), Ok(FQValueName.fqPackage hash)) let eBuiltinFn (name : string) (version : int) : Expr = EFnName(gid (), Ok(FQFnName.fqBuiltIn name version)) -let ePackageFn (id : uuid) : Expr = EFnName(gid (), Ok(FQFnName.fqPackage id)) +let ePackageFn (hash : Hash) : Expr = EFnName(gid (), Ok(FQFnName.fqPackage hash)) let eLambda id (pats : List) (body : Expr) : Expr = let pats = NEList.ofListUnsafe "eLambda" [] pats diff --git a/backend/tests/TestUtils/TestUtils.fs b/backend/tests/TestUtils/TestUtils.fs index 4f05f4b42a..35761351ad 100644 --- a/backend/tests/TestUtils/TestUtils.fs +++ b/backend/tests/TestUtils/TestUtils.fs @@ -19,13 +19,13 @@ module AT = LibExecution.AnalysisTypes module PT2RT = LibExecution.ProgramTypesToRuntimeTypes module RT2DT = LibExecution.RuntimeTypesToDarkTypes module D = LibExecution.DvalDecoder -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module Exe = LibExecution.Execution +module Hashing = LibExecution.Hashing module Account = LibCloud.Account module Canvas = LibCloud.Canvas -module PackageIDs = LibExecution.PackageIDs module C2DT = LibExecution.CommonToDarkTypes module PT2DT = LibExecution.ProgramTypesToDarkTypes @@ -95,16 +95,19 @@ let testPackageFn (returnType : PT.TypeReference) (body : PT.Expr) : PT.PackageFn.PackageFn = - { id = System.Guid.NewGuid() + let paramList : NEList = + NEList.map + (fun p -> + { name = p; typ = PT.TVariable "b"; description = "test" } + : PT.PackageFn.Parameter) + parameters + { hash = Hashing.PackageFn.hash (paramList, returnType, body) body = body description = "" name = PT.PackageFn.name owner [] name typeParams = typeParams deprecated = PT.NotDeprecated - parameters = - NEList.map - (fun p -> { name = p; typ = PT.TVariable "b"; description = "test" }) - parameters + parameters = paramList returnType = returnType } @@ -1168,7 +1171,7 @@ let naughtyStrings : List = let interestingDvals : List = - let uuid = System.Guid.Parse "dca045b1-e2af-41d8-ad1b-35261b25a426" + let hash = Hash "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" // TODO [ ("float", DFloat 7.2, TFloat) ("float2", DFloat -7.2, TFloat) @@ -1199,60 +1202,60 @@ let interestingDvals : List = ("record", DRecord( - FQTypeName.Package uuid, - FQTypeName.Package uuid, + FQTypeName.Package hash, + FQTypeName.Package hash, [], Map.ofList [ "url", DString "https://darklang.com" "headers", Dval.list (KTTuple(VT.string, VT.string, [])) [] "body", Dval.list KTUInt8 [] ] ), - TCustomType(Ok(FQTypeName.Package uuid), [])) + TCustomType(Ok(FQTypeName.Package hash), [])) ("enum", DEnum( - FQTypeName.Package PackageIDs.Type.Stdlib.AltJson.json, - FQTypeName.Package PackageIDs.Type.Stdlib.AltJson.json, + FQTypeName.Package PackageHashes.Type.Stdlib.AltJson.json, + FQTypeName.Package PackageHashes.Type.Stdlib.AltJson.json, [], "String", [ DString "test" ] ), - TCustomType(Ok(FQTypeName.Package PackageIDs.Type.Stdlib.AltJson.json), [])) + TCustomType(Ok(FQTypeName.Package PackageHashes.Type.Stdlib.AltJson.json), [])) // TODO: extract what's useful in here, and create smaller tests for each ("record2", DRecord( - FQTypeName.Package uuid, - FQTypeName.Package uuid, + FQTypeName.Package hash, + FQTypeName.Package hash, [ VT.unknown; VT.bool ], Map.ofList [ ("type", DString "weird"); ("value", DUnit) ] ), - TCustomType(Ok(FQTypeName.Package uuid), [])) + TCustomType(Ok(FQTypeName.Package hash), [])) ("record3", DRecord( - FQTypeName.Package uuid, - FQTypeName.Package uuid, + FQTypeName.Package hash, + FQTypeName.Package hash, [], Map.ofList [ ("type", DString "weird"); ("value", DString "x") ] ), - TCustomType(Ok(FQTypeName.Package uuid), [])) + TCustomType(Ok(FQTypeName.Package hash), [])) // More Json.NET tests ("record4", DRecord( - FQTypeName.Package uuid, - FQTypeName.Package uuid, - [ VT.bool; VT.char; (VT.customType (FQTypeName.Package uuid)) [] ], + FQTypeName.Package hash, + FQTypeName.Package hash, + [ VT.bool; VT.char; (VT.customType (FQTypeName.Package hash)) [] ], Map.ofList [ "foo\\\\bar", Dval.int64 5 ] ), - TCustomType(Ok(FQTypeName.Package uuid), [])) + TCustomType(Ok(FQTypeName.Package hash), [])) ("record5", DRecord( - FQTypeName.Package uuid, - FQTypeName.Package uuid, + FQTypeName.Package hash, + FQTypeName.Package hash, [], Map.ofList [ "$type", Dval.int64 5 ] ), - TCustomType(Ok(FQTypeName.Package uuid), [])) + TCustomType(Ok(FQTypeName.Package hash), [])) ("dict", DDict(VT.unknown, Map [ "foo", Dval.int64 5 ]), TDict TInt64) ("dict3", DDict(VT.unknown, Map [ ("type", DString "weird"); ("value", DString "x") ]), @@ -1552,7 +1555,7 @@ let unwrapExecutionResult | Error(rte, callStack) -> let errorMessageFn = RT.FQFnName.fqPackage - PackageIDs.Fn.PrettyPrinter.RuntimeTypes.RuntimeError.toString + PackageHashes.Fn.PrettyPrinter.RuntimeTypes.RuntimeError.toString let rte = RT2DT.RuntimeError.toDT rte @@ -1577,7 +1580,7 @@ let parsePTExpr (code : string) : Task = executionStateFor pmPT canvasID false false Map.empty let name = - RT.FQFnName.FQFnName.Package PackageIDs.Fn.LanguageTools.Parser.parsePTExpr + RT.FQFnName.FQFnName.Package PackageHashes.Fn.LanguageTools.Parser.parsePTExpr let args = NEList.singleton (RT.DString code) let! execResult = LibExecution.Execution.executeFunction state name [] args diff --git a/backend/tests/Tests/Cron.Tests.fs b/backend/tests/Tests/Cron.Tests.fs index fc56268ac3..c81469fb52 100644 --- a/backend/tests/Tests/Cron.Tests.fs +++ b/backend/tests/Tests/Cron.Tests.fs @@ -13,7 +13,7 @@ module RT = LibExecution.RuntimeTypes module Cron = LibCloud.Cron module Canvas = LibCloud.Canvas module Serialize = LibCloud.Serialize -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module PT2DT = LibExecution.ProgramTypesToDarkTypes module C2DT = LibExecution.CommonToDarkTypes @@ -24,7 +24,7 @@ let p (code : string) : Task = executionStateFor pmPT canvasID false false Map.empty let name = - RT.FQFnName.FQFnName.Package PackageIDs.Fn.LanguageTools.Parser.parsePTExpr + RT.FQFnName.FQFnName.Package PackageHashes.Fn.LanguageTools.Parser.parsePTExpr let args = NEList.singleton (RT.DString code) let! execResult = LibExecution.Execution.executeFunction state name [] args diff --git a/backend/tests/Tests/DvalRepr.Tests.fs b/backend/tests/Tests/DvalRepr.Tests.fs index cda3058522..b67ae31eda 100644 --- a/backend/tests/Tests/DvalRepr.Tests.fs +++ b/backend/tests/Tests/DvalRepr.Tests.fs @@ -33,17 +33,17 @@ let queryableRoundtripsSuccessfullyInRecord ) : Task = task { - let typeID = System.Guid.Parse "82ac8d1c-86ef-45d4-be66-052050739a38" - let typeName = RT.FQTypeName.Package typeID + let typeHash = Hash "test-type-hash" // TODO + let typeName = RT.FQTypeName.Package typeHash let record = RT.DRecord(typeName, typeName, [], Map.ofList [ "field", dv ]) let typeRef = RT.TCustomType(Ok typeName, []) let types : RT.Types = { package = - fun id -> - if id = typeID then + fun hash -> + if hash = typeHash then let packageType : RT.PackageType.PackageType = - { id = typeID + { hash = typeHash declaration = { typeParams = [] definition = @@ -52,7 +52,7 @@ let queryableRoundtripsSuccessfullyInRecord ) } } packageType |> Some |> Ply else - pmRT.getType id } + pmRT.getType hash } let! roundtripped = record diff --git a/backend/tests/Tests/HttpClient.Tests.fs b/backend/tests/Tests/HttpClient.Tests.fs index e02190a77c..6fcfa003c1 100644 --- a/backend/tests/Tests/HttpClient.Tests.fs +++ b/backend/tests/Tests/HttpClient.Tests.fs @@ -30,7 +30,7 @@ module PT = LibExecution.ProgramTypes module PT2RT = LibExecution.ProgramTypesToRuntimeTypes module RT2DT = LibExecution.RuntimeTypesToDarkTypes module Exe = LibExecution.Execution -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module C2DT = LibExecution.CommonToDarkTypes open TestUtils.TestUtils @@ -117,7 +117,7 @@ let parseSingleTestFromFile let name = RT.FQFnName.FQFnName.Package - PackageIDs.Fn.Internal.Test.parseSingleTestFromFile + PackageHashes.Fn.Internal.Test.parseSingleTestFromFile let args = NEList.ofList (RT.DString filename) [ RT.DString test ] let! execResult = LibExecution.Execution.executeFunction state name [] args diff --git a/backend/tests/Tests/Interpreter.Tests.fs b/backend/tests/Tests/Interpreter.Tests.fs index de55ae264d..da553ce051 100644 --- a/backend/tests/Tests/Interpreter.Tests.fs +++ b/backend/tests/Tests/Interpreter.Tests.fs @@ -286,15 +286,15 @@ module Pipes = module Records = let simple = - let typeName = RT.FQTypeName.fqPackage PM.Types.Records.singleField + let typeName = RT.FQTypeName.fqPackage PM.Types.Records.singleFieldHash t "Test.Test { key = true }" E.Records.simple (RT.DRecord(typeName, typeName, [], Map [ "key", RT.DBool true ])) let nested = - let outerTypeName = RT.FQTypeName.fqPackage PM.Types.Records.nested - let innerTypeName = RT.FQTypeName.fqPackage PM.Types.Records.singleField + let outerTypeName = RT.FQTypeName.fqPackage PM.Types.Records.nestedHash + let innerTypeName = RT.FQTypeName.fqPackage PM.Types.Records.singleFieldHash t "Test.Test2 { outer = (Test.Test { key = true }) }" E.Records.nested @@ -346,8 +346,8 @@ module RecordUpdate = "let r = Test.Test { key = true }\nlet r2 = { r | key = false }" E.RecordUpdate.simple (RT.DRecord( - RT.FQTypeName.fqPackage PM.Types.Records.singleField, - RT.FQTypeName.fqPackage PM.Types.Records.singleField, + RT.FQTypeName.fqPackage PM.Types.Records.singleFieldHash, + RT.FQTypeName.fqPackage PM.Types.Records.singleFieldHash, [], Map [ "key", RT.DBool false ] )) @@ -380,14 +380,14 @@ module RecordUpdate = // TODO: add more tests module Enum = let simple = - let typeName = RT.FQTypeName.fqPackage PM.Types.Enums.withoutFields + let typeName = RT.FQTypeName.fqPackage PM.Types.Enums.withoutFieldsHash t "Test.ColorEnum.Blue" E.Enums.simple (RT.DEnum(typeName, typeName, [], "Blue", [])) let withFields = - let typeName = RT.FQTypeName.fqPackage PM.Types.Enums.withFields + let typeName = RT.FQTypeName.fqPackage PM.Types.Enums.withFieldsHash t "Test.MyOption.Some 1" E.Enums.withFields @@ -581,7 +581,7 @@ module Fns = E.Fns.Package.MyAdd.unapplied (RT.DApplicable( RT.AppNamedFn - { name = RT.FQFnName.fqPackage E.Fns.Package.MyAdd.id + { name = RT.FQFnName.fqPackage E.Fns.Package.MyAdd.hash typeSymbolTable = Map.empty typeArgs = [] argsSoFar = [] } @@ -593,7 +593,7 @@ module Fns = E.Fns.Package.MyAdd.partiallyApplied (RT.DApplicable( RT.AppNamedFn - { name = RT.FQFnName.fqPackage E.Fns.Package.MyAdd.id + { name = RT.FQFnName.fqPackage E.Fns.Package.MyAdd.hash typeSymbolTable = Map.empty typeArgs = [] argsSoFar = [ RT.DInt64 1 ] } @@ -613,7 +613,7 @@ module Fns = E.Fns.Package.Fact.unapplied (RT.DApplicable( RT.AppNamedFn - { name = RT.FQFnName.fqPackage E.Fns.Package.Fact.id + { name = RT.FQFnName.fqPackage E.Fns.Package.Fact.hash typeSymbolTable = Map.empty typeArgs = [] argsSoFar = [] } diff --git a/backend/tests/Tests/LibExecution.Tests.fs b/backend/tests/Tests/LibExecution.Tests.fs index 598be05d1b..43ae083b40 100644 --- a/backend/tests/Tests/LibExecution.Tests.fs +++ b/backend/tests/Tests/LibExecution.Tests.fs @@ -20,7 +20,7 @@ module PT = LibExecution.ProgramTypes module PT2RT = LibExecution.ProgramTypesToRuntimeTypes module RT2DT = LibExecution.RuntimeTypesToDarkTypes module Exe = LibExecution.Execution -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module NR = LibParser.NameResolver module Canvas = LibCloud.Canvas module Serialize = LibCloud.Serialize @@ -145,7 +145,7 @@ let t let actual = RT2DT.RuntimeError.toDT allegedRTE let errorMessageFn = RT.FQFnName.fqPackage - PackageIDs.Fn.PrettyPrinter.RuntimeTypes.RuntimeError.toErrorMessage + PackageHashes.Fn.PrettyPrinter.RuntimeTypes.RuntimeError.toErrorMessage let! _csString = Exe.callStackString state callStack @@ -154,7 +154,7 @@ let t RT.TCustomType( Ok( RT.FQTypeName.fqPackage - PackageIDs.Type.LanguageTools.RuntimeTypes.RuntimeError.error + PackageHashes.Type.LanguageTools.RuntimeTypes.RuntimeError.error ), [] ) diff --git a/backend/tests/Tests/LibParser.Tests.fs b/backend/tests/Tests/LibParser.Tests.fs index 18ad444422..573d72463e 100644 --- a/backend/tests/Tests/LibParser.Tests.fs +++ b/backend/tests/Tests/LibParser.Tests.fs @@ -10,7 +10,7 @@ module PT = LibExecution.ProgramTypes module PTParser = LibExecution.ProgramTypesParser module RT = LibExecution.RuntimeTypes module PT2RT = LibExecution.ProgramTypesToRuntimeTypes -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module NR = LibParser.NameResolver let id = 0UL // since we're ignoring IDs, just use the same one everywhere @@ -102,7 +102,7 @@ let exprRTs = // // Now let's test some more complex expressions // // CLEANUP the reference to Stdlib.List.map only exists - // // in PackageIDs to support this test. Fix that. + // // in PackageHashes to support this test. Fix that. // t // "pipe without expr" // "(let x = 5L\nx |> Darklang.Stdlib.List.map 5L)" @@ -115,7 +115,7 @@ let exprRTs = // PT.EVariable(id, "x"), // [ PT.EPipeFnCall( // id, - // Ok(PT.FQFnName.fqPackage PackageIDs.Fn.Stdlib.List.map), + // Ok(PT.FQFnName.fqPackage PackageHashes.Fn.Stdlib.List.map), // [], // [ PT.EInt64(id, 5L) ] // ) ] diff --git a/backend/tests/Tests/NewParser.Tests.fs b/backend/tests/Tests/NewParser.Tests.fs index d85dd021e7..41c63639e4 100644 --- a/backend/tests/Tests/NewParser.Tests.fs +++ b/backend/tests/Tests/NewParser.Tests.fs @@ -20,7 +20,7 @@ open TestUtils.TestUtils module PT = LibExecution.ProgramTypes module RT = LibExecution.RuntimeTypes module Dval = LibExecution.Dval -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes let t @@ -34,7 +34,7 @@ let t = let fnname = RT.FQFnName.FQFnName.Package - PackageIDs.Fn.LanguageTools.Parser.parseAndPrettyPrint + PackageHashes.Fn.LanguageTools.Parser.parseAndPrettyPrint testTask name { let pm = @@ -64,9 +64,9 @@ let t } -let tID = System.Guid.NewGuid() +let hash = Hash "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11" // TODO let person : PT.PackageType.PackageType = - { id = tID + { hash = hash name = { owner = "Tests"; modules = []; name = "Person" } description = "" deprecated = PT.NotDeprecated @@ -82,7 +82,7 @@ let person : PT.PackageType.PackageType = ) } } let myString : PT.PackageType.PackageType = - { id = tID + { hash = hash name = { owner = "Tests"; modules = []; name = "MyString" } description = "" deprecated = PT.NotDeprecated @@ -91,7 +91,7 @@ let myString : PT.PackageType.PackageType = definition = PT.TypeDeclaration.Alias PT.TypeReference.TString } } let pet : PT.PackageType.PackageType = - { id = tID + { hash = hash name = { owner = "Tests"; modules = []; name = "Pet" } description = "" deprecated = PT.NotDeprecated @@ -100,7 +100,7 @@ let pet : PT.PackageType.PackageType = definition = PT.TypeDeclaration.Alias PT.TypeReference.TString } } let myEnum : PT.PackageType.PackageType = - { id = tID + { hash = hash name = { owner = "Tests"; modules = []; name = "MyEnum" } description = "" deprecated = PT.NotDeprecated diff --git a/backend/tests/Tests/PT2RT.Tests.fs b/backend/tests/Tests/PT2RT.Tests.fs index 8aa1fae369..40a66241f7 100644 --- a/backend/tests/Tests/PT2RT.Tests.fs +++ b/backend/tests/Tests/PT2RT.Tests.fs @@ -8,7 +8,7 @@ module PT = LibExecution.ProgramTypes module RT = LibExecution.RuntimeTypes module VT = LibExecution.ValueType module PT2RT = LibExecution.ProgramTypesToRuntimeTypes -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module E = TestValues.Expressions module PM = TestValues.PM @@ -544,7 +544,7 @@ module Expr = [ RT.LoadVal(2, RT.DInt64 1L) RT.CreateEnum( 1, - RT.FQTypeName.fqPackage PM.Types.Enums.resultId, + RT.FQTypeName.fqPackage PM.Types.Enums.resultIdHash, [], "Ok", [ 2 ] @@ -552,7 +552,7 @@ module Expr = RT.LoadVal(4, RT.DString "error") RT.CreateEnum( 3, - RT.FQTypeName.fqPackage PM.Types.Enums.resultId, + RT.FQTypeName.fqPackage PM.Types.Enums.resultIdHash, [], "Error", [ 4 ] @@ -779,7 +779,7 @@ module Expr = (1, [ RT.CreateEnum( 0, - RT.FQTypeName.fqPackage PM.Types.Enums.withoutFields, + RT.FQTypeName.fqPackage PM.Types.Enums.withoutFieldsHash, [], "Blue", [] @@ -794,7 +794,7 @@ module Expr = [ RT.LoadVal(1, RT.DInt64 1L) RT.CreateEnum( 0, - RT.FQTypeName.fqPackage PM.Types.Enums.withFields, + RT.FQTypeName.fqPackage PM.Types.Enums.withFieldsHash, [], "Some", [ 1 ] @@ -813,7 +813,7 @@ module Expr = [ RT.LoadVal(1, RT.DBool true) RT.CreateRecord( 0, - RT.FQTypeName.fqPackage PM.Types.Records.singleField, + RT.FQTypeName.fqPackage PM.Types.Records.singleFieldHash, [], [ ("key", 1) ] ) ], @@ -829,7 +829,7 @@ module Expr = // inner record RT.CreateRecord( 1, - RT.FQTypeName.fqPackage PM.Types.Records.singleField, + RT.FQTypeName.fqPackage PM.Types.Records.singleFieldHash, [], [ ("key", 2) ] ) @@ -837,7 +837,7 @@ module Expr = // outer record RT.CreateRecord( 0, - RT.FQTypeName.fqPackage PM.Types.Records.nested, + RT.FQTypeName.fqPackage PM.Types.Records.nestedHash, [], [ ("outer", 1) ] ) ], @@ -855,7 +855,7 @@ module Expr = [ RT.LoadVal(1, RT.DBool true) RT.CreateRecord( 0, - RT.FQTypeName.fqPackage PM.Types.Records.singleField, + RT.FQTypeName.fqPackage PM.Types.Records.singleFieldHash, [], [ ("key", 1) ] ) @@ -876,7 +876,7 @@ module Expr = [ RT.LoadVal(1, RT.DBool true) RT.CreateRecord( 0, - RT.FQTypeName.fqPackage PM.Types.Records.singleField, + RT.FQTypeName.fqPackage PM.Types.Records.singleFieldHash, [], [ ("key", 1) ] ) @@ -891,14 +891,14 @@ module Expr = [ RT.LoadVal(2, RT.DBool true) RT.CreateRecord( 1, - RT.FQTypeName.fqPackage PM.Types.Records.singleField, + RT.FQTypeName.fqPackage PM.Types.Records.singleFieldHash, [], [ ("key", 2) ] ) RT.CreateRecord( 0, - RT.FQTypeName.fqPackage PM.Types.Records.nested, + RT.FQTypeName.fqPackage PM.Types.Records.nestedHash, [], [ ("outer", 1) ] ) @@ -921,7 +921,7 @@ module Expr = [ RT.LoadVal(1, RT.DBool true) RT.CreateRecord( 0, - RT.FQTypeName.fqPackage PM.Types.Records.singleField, + RT.FQTypeName.fqPackage PM.Types.Records.singleFieldHash, [], [ ("key", 1) ] ) @@ -945,7 +945,7 @@ module Expr = [ RT.LoadVal(1, RT.DBool true) RT.CreateRecord( 0, - RT.FQTypeName.fqPackage PM.Types.Records.singleField, + RT.FQTypeName.fqPackage PM.Types.Records.singleFieldHash, [], [ ("key", 1) ] ) @@ -960,7 +960,7 @@ module Expr = [ RT.LoadVal(1, RT.DBool true) RT.CreateRecord( 0, - RT.FQTypeName.fqPackage PM.Types.Records.singleField, + RT.FQTypeName.fqPackage PM.Types.Records.singleFieldHash, [], [ ("key", 1) ] ) @@ -1022,7 +1022,7 @@ module Expr = (1, [ RT.LoadValue( 0, - RT.FQValueName.Package E.Values.Package.MySpecialNumber.id + RT.FQValueName.Package E.Values.Package.MySpecialNumber.hash ) ], 0) let tests = testList "Package" [ mySpecialNumber ] @@ -1439,7 +1439,7 @@ module Expr = 0, RT.DApplicable( RT.AppNamedFn - { name = RT.FQFnName.fqPackage E.Fns.Package.MyAdd.id + { name = RT.FQFnName.fqPackage E.Fns.Package.MyAdd.hash typeSymbolTable = Map.empty typeArgs = [] argsSoFar = [] } @@ -1457,7 +1457,7 @@ module Expr = 1, RT.DApplicable( RT.AppNamedFn - { name = RT.FQFnName.fqPackage E.Fns.Package.MyAdd.id + { name = RT.FQFnName.fqPackage E.Fns.Package.MyAdd.hash typeSymbolTable = Map.empty typeArgs = [] argsSoFar = [] } @@ -1477,7 +1477,7 @@ module Expr = 2, RT.DApplicable( RT.AppNamedFn - { name = RT.FQFnName.fqPackage E.Fns.Package.MyAdd.id + { name = RT.FQFnName.fqPackage E.Fns.Package.MyAdd.hash typeSymbolTable = Map.empty typeArgs = [] argsSoFar = [] } @@ -1524,7 +1524,8 @@ module Expr = RT.DApplicable( RT.AppNamedFn { name = - RT.FQFnName.fqPackage E.Fns.Package.MyFnThatTakesALambda.id + RT.FQFnName.fqPackage + E.Fns.Package.MyFnThatTakesALambda.hash typeSymbolTable = Map.empty typeArgs = [] argsSoFar = [] } @@ -1547,7 +1548,7 @@ module Expr = 2, RT.DApplicable( RT.AppNamedFn - { name = RT.FQFnName.fqPackage E.Fns.Package.Outer.id + { name = RT.FQFnName.fqPackage E.Fns.Package.Outer.hash typeSymbolTable = Map.empty typeArgs = [] argsSoFar = [] } @@ -1625,7 +1626,7 @@ module PackageFn = let t name fnName typeParams params' returnType expr expected = testTask name { let fn : PT.PackageFn.PackageFn = - { id = guuid () + { hash = Hash "TODO" name = { owner = "Test"; modules = []; name = fnName } body = expr typeParams = typeParams diff --git a/backend/tests/Tests/Serialization.Binary.Tests.fs b/backend/tests/Tests/Serialization.Binary.Tests.fs index 1c60086de7..28774f4a73 100644 --- a/backend/tests/Tests/Serialization.Binary.Tests.fs +++ b/backend/tests/Tests/Serialization.Binary.Tests.fs @@ -29,8 +29,8 @@ module PT = "packageTypes" (fun typ -> typ - |> BinarySerialization.PT.PackageType.serialize typ.id - |> BinarySerialization.PT.PackageType.deserialize typ.id) + |> BinarySerialization.PT.PackageType.serialize typ.hash + |> BinarySerialization.PT.PackageType.deserialize typ.hash) Values.ProgramTypes.packageTypes let packageFnTests = @@ -38,8 +38,8 @@ module PT = "packageFns" (fun fn -> fn - |> BinarySerialization.PT.PackageFn.serialize fn.id - |> BinarySerialization.PT.PackageFn.deserialize fn.id) + |> BinarySerialization.PT.PackageFn.serialize fn.hash + |> BinarySerialization.PT.PackageFn.deserialize fn.hash) Values.ProgramTypes.packageFns let packageValTests = @@ -47,8 +47,8 @@ module PT = "packageVals" (fun c -> c - |> BinarySerialization.PT.PackageValue.serialize c.id - |> BinarySerialization.PT.PackageValue.deserialize c.id) + |> BinarySerialization.PT.PackageValue.serialize c.hash + |> BinarySerialization.PT.PackageValue.deserialize c.hash) Values.ProgramTypes.packageValues let toplevelTests = @@ -68,8 +68,8 @@ module RT = "packageTypes" (fun t -> t - |> BinarySerialization.RT.PackageType.serialize t.id - |> BinarySerialization.RT.PackageType.deserialize t.id) + |> BinarySerialization.RT.PackageType.serialize t.hash + |> BinarySerialization.RT.PackageType.deserialize t.hash) Values.RuntimeTypes.packageTypes let packageValueTests = @@ -77,8 +77,8 @@ module RT = "packageValues" (fun c -> c - |> BinarySerialization.RT.PackageValue.serialize c.id - |> BinarySerialization.RT.PackageValue.deserialize c.id) + |> BinarySerialization.RT.PackageValue.serialize c.hash + |> BinarySerialization.RT.PackageValue.deserialize c.hash) Values.RuntimeTypes.packageValues let packageFnTests = @@ -86,8 +86,8 @@ module RT = "packageFns" (fun fn -> fn - |> BinarySerialization.RT.PackageFn.serialize fn.id - |> BinarySerialization.RT.PackageFn.deserialize fn.id) + |> BinarySerialization.RT.PackageFn.serialize fn.hash + |> BinarySerialization.RT.PackageFn.deserialize fn.hash) Values.RuntimeTypes.packageFns let dvalTests = diff --git a/backend/tests/Tests/Serialization.DarkTypes.Tests.fs b/backend/tests/Tests/Serialization.DarkTypes.Tests.fs index 19a74ec19b..200232a5bd 100644 --- a/backend/tests/Tests/Serialization.DarkTypes.Tests.fs +++ b/backend/tests/Tests/Serialization.DarkTypes.Tests.fs @@ -14,7 +14,7 @@ module RT = LibExecution.RuntimeTypes module PT2DT = LibExecution.ProgramTypesToDarkTypes module RT2DT = LibExecution.RuntimeTypesToDarkTypes -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module V = SerializationTestValues @@ -84,12 +84,12 @@ module RoundtripTests = module ProgramTypes = - let pkg (id : uuid) = RT.FQTypeName.fqPackage id + let pkg (hash : Hash) = RT.FQTypeName.fqPackage hash let tests = [ testRoundtripList "PT.PackageType" - (pkg PackageIDs.Type.LanguageTools.ProgramTypes.PackageType.packageType) + (pkg PackageHashes.Type.LanguageTools.ProgramTypes.PackageType.packageType) V.ProgramTypes.packageTypes PT2DT.PackageType.toDT PT2DT.PackageType.fromDT @@ -97,7 +97,8 @@ module RoundtripTests = testRoundtripList "PT.PackageValue" - (pkg PackageIDs.Type.LanguageTools.ProgramTypes.PackageValue.packageValue) + (pkg + PackageHashes.Type.LanguageTools.ProgramTypes.PackageValue.packageValue) V.ProgramTypes.packageValues PT2DT.PackageValue.toDT PT2DT.PackageValue.fromDT @@ -105,7 +106,7 @@ module RoundtripTests = testRoundtripList "PT.PackageFn" - (pkg PackageIDs.Type.LanguageTools.ProgramTypes.PackageFn.packageFn) + (pkg PackageHashes.Type.LanguageTools.ProgramTypes.PackageFn.packageFn) V.ProgramTypes.packageFns PT2DT.PackageFn.toDT PT2DT.PackageFn.fromDT @@ -113,7 +114,7 @@ module RoundtripTests = testRoundtripList "PT.Secret" - (pkg PackageIDs.Type.LanguageTools.ProgramTypes.secret) + (pkg PackageHashes.Type.LanguageTools.ProgramTypes.secret) V.ProgramTypes.userSecrets PT2DT.Secret.toDT PT2DT.Secret.fromDT @@ -121,7 +122,7 @@ module RoundtripTests = testRoundtripList "PT.DB" - (pkg PackageIDs.Type.LanguageTools.ProgramTypes.db) + (pkg PackageHashes.Type.LanguageTools.ProgramTypes.db) V.ProgramTypes.userDBs PT2DT.DB.toDT PT2DT.DB.fromDT @@ -129,20 +130,20 @@ module RoundtripTests = testRoundtripList "PT.Handler" - (pkg PackageIDs.Type.LanguageTools.ProgramTypes.Handler.handler) + (pkg PackageHashes.Type.LanguageTools.ProgramTypes.Handler.handler) V.ProgramTypes.Handler.handlers PT2DT.Handler.toDT PT2DT.Handler.fromDT None ] module RuntimeTypes = - let pkg (id : uuid) = RT.FQTypeName.fqPackage id + let pkg (hash : Hash) = RT.FQTypeName.fqPackage hash let tests = // CLEANUP backfill with more things from RT [ testRoundtripList "RT.FQTypeName" - (pkg PackageIDs.Type.LanguageTools.RuntimeTypes.FQTypeName.fqTypeName) + (pkg PackageHashes.Type.LanguageTools.RuntimeTypes.FQTypeName.fqTypeName) V.RuntimeTypes.fqTypeNames RT2DT.FQTypeName.toDT RT2DT.FQTypeName.fromDT @@ -150,7 +151,7 @@ module RoundtripTests = testRoundtripList "RT.FQValueName" - (pkg PackageIDs.Type.LanguageTools.RuntimeTypes.FQValueName.fqValueName) + (pkg PackageHashes.Type.LanguageTools.RuntimeTypes.FQValueName.fqValueName) V.RuntimeTypes.fqValueNames RT2DT.FQValueName.toDT RT2DT.FQValueName.fromDT @@ -158,7 +159,7 @@ module RoundtripTests = testRoundtripList "RT.FQFnName" - (pkg PackageIDs.Type.LanguageTools.RuntimeTypes.FQFnName.fqFnName) + (pkg PackageHashes.Type.LanguageTools.RuntimeTypes.FQFnName.fqFnName) V.RuntimeTypes.fqFnNames RT2DT.FQFnName.toDT RT2DT.FQFnName.fromDT @@ -166,7 +167,7 @@ module RoundtripTests = testRoundtripList "RT.TypeReference" - (pkg PackageIDs.Type.LanguageTools.RuntimeTypes.typeReference) + (pkg PackageHashes.Type.LanguageTools.RuntimeTypes.typeReference) V.RuntimeTypes.typeReferences RT2DT.TypeReference.toDT RT2DT.TypeReference.fromDT @@ -174,7 +175,7 @@ module RoundtripTests = testRoundtripList "RT.ValueType" - (pkg PackageIDs.Type.LanguageTools.RuntimeTypes.valueType) + (pkg PackageHashes.Type.LanguageTools.RuntimeTypes.valueType) V.RuntimeTypes.valueTypes RT2DT.ValueType.toDT RT2DT.ValueType.fromDT @@ -182,7 +183,7 @@ module RoundtripTests = testRoundtripList "RT.Dval" - (pkg PackageIDs.Type.LanguageTools.RuntimeTypes.dval) + (pkg PackageHashes.Type.LanguageTools.RuntimeTypes.dval) V.RuntimeTypes.dvals RT2DT.Dval.toDT RT2DT.Dval.fromDT diff --git a/backend/tests/Tests/Serialization.TestValues.fs b/backend/tests/Tests/Serialization.TestValues.fs index c3cf826358..2a6fd2e6d8 100644 --- a/backend/tests/Tests/Serialization.TestValues.fs +++ b/backend/tests/Tests/Serialization.TestValues.fs @@ -11,26 +11,33 @@ open TestUtils.TestUtils module PT = LibExecution.ProgramTypes module Dval = LibExecution.Dval module RT = LibExecution.RuntimeTypes +module PackageHashes = LibExecution.PackageHashes module BinarySerialization = LibBinarySerialization.BinarySerialization let instant = NodaTime.Instant.parse "2022-07-04T17:46:57Z" let uuid = System.Guid.Parse "31d72f73-0f99-5a9b-949c-b95705ae7c4d" +// Use real package hashes that exist in the test DB +let typeHash = PackageHashes.Type.Stdlib.option +let fnHash = PackageHashes.Fn.Stdlib.List.map +let valueHash = + Hash "75ffeb0cc9436a9af08e370b0dc25453385007c6c3aeee3483fe2ed65af3285a" // Cli.Colors.accent let id : id = 123UL let tlid : tlid = 777777928475UL let tlids : List = [ 1UL; 0UL; uint64 -1L ] module RuntimeTypes = - let fqTypeNames : List = [ RT.FQTypeName.Package uuid ] + let fqTypeNames : List = + [ RT.FQTypeName.Package typeHash ] let fqFnNames : List = - [ RT.FQFnName.Builtin { name = "aB"; version = 1 }; RT.FQFnName.Package uuid ] + [ RT.FQFnName.Builtin { name = "aB"; version = 1 }; RT.FQFnName.Package fnHash ] let fqValueNames : List = [ RT.FQValueName.Builtin { name = "aB"; version = 1 } - RT.FQValueName.Package uuid ] + RT.FQValueName.Package valueHash ] let typeReferences : List = [ RT.TUnit @@ -57,7 +64,7 @@ module RuntimeTypes = RT.TFn(NEList.singleton RT.TBool, RT.TBool) - RT.TCustomType(Ok(RT.FQTypeName.Package uuid), [ RT.TBool ]) + RT.TCustomType(Ok(RT.FQTypeName.Package typeHash), [ RT.TBool ]) RT.TDB RT.TBool @@ -103,7 +110,7 @@ module RuntimeTypes = sampleDvals |> List.map (fun (_, (dv, _)) -> dv) let dval : RT.Dval = - let typeName = RT.FQTypeName.Package uuid + let typeName = RT.FQTypeName.Package typeHash sampleDvals |> List.map (fun (name, (dv, _)) -> name, dv) |> fun fields -> RT.DRecord(typeName, typeName, [], Map fields) @@ -134,16 +141,13 @@ module RuntimeTypes = // RT test values for binary serialization let packageTypes : List = - [ { id = uuid; declaration = typeDeclarations[0] } - { id = System.Guid.Parse "42d72f73-0f99-5a9b-949c-b95705ae7c4d" - declaration = typeDeclarations[1] } ] + [ { hash = typeHash; declaration = typeDeclarations[0] } + { hash = Hash "another-test-type-hash"; declaration = typeDeclarations[1] } ] let packageValues : List = - [ { id = uuid; body = RT.DString "Hello RT PackageValue" } - { id = System.Guid.Parse "52d72f73-0f99-5a9b-949c-b95705ae7c4d" - body = RT.DInt64 42L } - { id = System.Guid.Parse "62d72f73-0f99-5a9b-949c-b95705ae7c4d" - body = RT.DBool true } ] + [ { hash = valueHash; body = RT.DString "Hello RT PackageValue" } + { hash = Hash "another-test-value-hash"; body = RT.DInt64 42L } + { hash = Hash "yet-another-test-value-hash"; body = RT.DBool true } ] let instructions : List = [ { registerCount = 1; instructions = [ RT.CopyVal(0, 1) ]; resultIn = 0 } @@ -155,12 +159,12 @@ module RuntimeTypes = resultIn = 1 } ] let packageFns : List = - [ { id = uuid + [ { hash = fnHash typeParams = [] parameters = NEList.singleton { name = "x"; typ = RT.TInt64 } returnType = RT.TInt64 body = instructions[0] } - { id = System.Guid.Parse "72d72f73-0f99-5a9b-949c-b95705ae7c4d" + { hash = Hash "another-test-fn-hash" typeParams = [ "T" ] parameters = NEList.ofList @@ -199,7 +203,7 @@ module ProgramTypes = let fqFnNames : List = [ FQFnName.Builtin { name = "int64Increment"; version = 1 } - FQFnName.Package uuid ] + FQFnName.Package fnHash ] let letPatterns : List = @@ -261,8 +265,8 @@ module ProgramTypes = TTuple(TBool, TBool, [ TBool ]) TDict TBool TDB TBool - TCustomType(Ok(FQTypeName.Package uuid), [ TBool ]) - TCustomType(Ok(FQTypeName.Package uuid), [ TBool ]) + TCustomType(Ok(FQTypeName.Package typeHash), [ TBool ]) + TCustomType(Ok(FQTypeName.Package typeHash), [ TBool ]) TVariable "test" TFn(NEList.singleton TBool, TBool) ] ) @@ -350,8 +354,8 @@ module ProgramTypes = EInfix( id, InfixFnCall(ArithmeticPlus), - EVariable(id, "y"), - EArg(id, 0) + EInt64(id, 2L), + EVariable(id, "y") ) ) ) @@ -389,7 +393,7 @@ module ProgramTypes = LPVariable(id, "r"), ERecord( id, - Ok(FQTypeName.Package uuid), + Ok(FQTypeName.Package typeHash), [ TUnit ], [ ("field", EPipe( @@ -424,7 +428,7 @@ module ProgramTypes = ("enum", EEnum( id, - Ok(FQTypeName.Package uuid), + Ok(FQTypeName.Package typeHash), [ TUnit ], "Error", [] @@ -708,7 +712,7 @@ module ProgramTypes = // (also make sure we roundtrip test them) let packageFn : PackageFn.PackageFn = - { id = uuid + { hash = fnHash name = { owner = "dark"; modules = [ "stdlib"; "Int64"; "Int64" ]; name = "mod" } body = expr @@ -723,7 +727,7 @@ module ProgramTypes = let packageFns = [ packageFn ] let packageType : PackageType.PackageType = - { id = uuid + { hash = typeHash name = { owner = "darklang" modules = [ "stdlib"; "Int64"; "Int64" ] @@ -746,7 +750,7 @@ module ProgramTypes = let packageTypes = [ packageType ] let packageValue : PT.PackageValue.PackageValue = - { id = uuid + { hash = valueHash name = PT.PackageValue.name "dark" [ "stdlib"; "Int64"; "Int64" ] "testValue" body = constValue description = "test" diff --git a/backend/tests/Tests/SqlCompiler.Tests.fs b/backend/tests/Tests/SqlCompiler.Tests.fs index 8376d11996..ea296d2b46 100644 --- a/backend/tests/Tests/SqlCompiler.Tests.fs +++ b/backend/tests/Tests/SqlCompiler.Tests.fs @@ -15,7 +15,7 @@ open TestUtils.TestUtils // module PT2RT = LibExecution.ProgramTypesToRuntimeTypes // module PT2DT = LibExecution.ProgramTypesToDarkTypes // module C2DT = LibExecution.CommonToDarkTypes -// module PackageIDs = LibExecution.PackageIDs +// module PackageHashes = LibExecution.PackageHashes // let pmPT = LibCloud.PackageManager.pt @@ -27,7 +27,7 @@ open TestUtils.TestUtils // executionStateFor pm canvasID false false Map.empty // let name = -// FQFnName.FQFnName.Package PackageIDs.Fn.LanguageTools.Parser.parsePTExpr +// FQFnName.FQFnName.Package PackageHashes.Fn.LanguageTools.Parser.parsePTExpr // let args = NEList.singleton (DString code) // let! execResult = LibExecution.Execution.executeFunction state name [] args diff --git a/backend/tests/Tests/TestValues.fs b/backend/tests/Tests/TestValues.fs index d5463a52b0..e54f37f961 100644 --- a/backend/tests/Tests/TestValues.fs +++ b/backend/tests/Tests/TestValues.fs @@ -4,7 +4,7 @@ open Prelude open TestUtils.TestUtils module PT = LibExecution.ProgramTypes -module PackageIDs = LibExecution.PackageIDs +module PackageHashes = LibExecution.PackageHashes module RT = LibExecution.RuntimeTypes open TestUtils.PTShortcuts @@ -14,43 +14,44 @@ open TestUtils.PTShortcuts module PM = module Types = - let make id name definition : PT.PackageType.PackageType = - { id = id + let make hash name definition : PT.PackageType.PackageType = + { hash = hash name = name declaration = { typeParams = []; definition = definition } description = "TODO" deprecated = PT.NotDeprecated } module Records = - let make id name fields = - make id name (PT.TypeDeclaration.Record(NEList.ofListUnsafe "" [] fields)) + let make (hash : Hash) name fields = + make hash name (PT.TypeDeclaration.Record(NEList.ofListUnsafe "" [] fields)) - let singleField = System.Guid.NewGuid() - let nested = System.Guid.NewGuid() + let singleFieldId = System.Guid.NewGuid() + let singleFieldHash = Hash "single-field" + let nestedHash = Hash "nested" let all : List = [ make - singleField + singleFieldHash (PT.PackageType.name "Test" [] "Test") [ { name = "key"; typ = PT.TBool; description = "TODO" } ] make - nested + nestedHash (PT.PackageType.name "Test" [] "Test2") [ { name = "outer" - typ = PT.TCustomType(Ok(PT.FQTypeName.fqPackage singleField), []) + typ = PT.TCustomType(Ok(PT.FQTypeName.fqPackage singleFieldHash), []) description = "TODO" } ] ] module Enums = - let withoutFields = guuid () - let withFields = guuid () - let resultId = guuid () - let make id name cases = - make id name (PT.TypeDeclaration.Enum(NEList.ofListUnsafe "" [] cases)) + let withoutFieldsHash = Hash "without-fields" + let withFieldsHash = Hash "with-fields" + let resultIdHash = Hash "result-id" + let make hash name cases = + make hash name (PT.TypeDeclaration.Enum(NEList.ofListUnsafe "" [] cases)) let colorEnum = make - withoutFields + withoutFieldsHash (PT.PackageType.name "Test" [] "ColorEnum") [ { name = "Red"; fields = []; description = "TODO" } { name = "Green"; fields = []; description = "TODO" } @@ -58,7 +59,7 @@ module PM = let MyOption = make - withFields + withFieldsHash (PT.PackageType.name "Test" [] "MyOption") [ { name = "None"; fields = []; description = "TODO" } { name = "Some" @@ -67,7 +68,7 @@ module PM = let MyResult = make - resultId + resultIdHash (PT.PackageType.name "Test" [] "MyResult") [ { name = "Ok" fields = [ { typ = PT.TInt64; label = None; description = "TODO" } ] @@ -380,9 +381,9 @@ module Expressions = let combinedPatSameVarDifferentPos = eMatch (eTuple - (eEnum (typeNamePkg PM.Types.Enums.resultId) [] "Ok" [ eInt64 1 ]) + (eEnum (typeNamePkg PM.Types.Enums.resultIdHash) [] "Ok" [ eInt64 1 ]) (eEnum - (typeNamePkg PM.Types.Enums.resultId) + (typeNamePkg PM.Types.Enums.resultIdHash) [] "Error" [ eStr [ strText "error" ] ]) @@ -466,9 +467,10 @@ module Expressions = module Records = let simple = - eRecord (typeNamePkg PM.Types.Records.singleField) [] [ "key", eBool true ] + eRecord (typeNamePkg PM.Types.Records.singleFieldHash) [] [ "key", eBool true ] - let nested = eRecord (typeNamePkg PM.Types.Records.nested) [] [ "outer", simple ] + let nested = + eRecord (typeNamePkg PM.Types.Records.nestedHash) [] [ "outer", simple ] module RecordFieldAccess = let simple = eFieldAccess Records.simple "key" @@ -486,9 +488,9 @@ module Expressions = module Enums = - let simple = eEnum (typeNamePkg PM.Types.Enums.withoutFields) [] "Blue" [] + let simple = eEnum (typeNamePkg PM.Types.Enums.withoutFieldsHash) [] "Blue" [] let withFields = - eEnum (typeNamePkg PM.Types.Enums.withFields) [] "Some" [ eInt64 1 ] + eEnum (typeNamePkg PM.Types.Enums.withFieldsHash) [] "Some" [ eInt64 1 ] module Values = // CLEANUP we don't really have builtin values, so not bothering to test for now @@ -499,7 +501,8 @@ module Expressions = module MySpecialNumber = // 17 let id = System.Guid.Parse "1823ae7e-cc59-4843-a884-18591398abb0" - let usage = ePackageValue id + let hash = Hash "test-hash" // TODO: generate real hash + let usage = ePackageValue hash module Infix = @@ -593,21 +596,21 @@ module Expressions = module Package = module MyAdd = - let id = System.Guid.Parse "a180ed3b-e8ee-42e5-b3c6-9e7ca32ee273" + let hash = Hash "myadd-hash" // TODO: generate real hash - let unapplied = ePackageFn id + let unapplied = ePackageFn hash let partiallyApplied = eApply unapplied [] [ eInt64 1 ] let fullyApplied = eApply unapplied [] [ eInt64 1; eInt64 2 ] module Inner = - let id = System.Guid.Parse "f38c8f89-7472-436f-8d38-2093e2e83fb7" + let hash = Hash "inner-hash" // TODO: generate real hash - let unapplied = ePackageFn id + let unapplied = ePackageFn hash //let applied = eApply unapplied [] [ eInt64 1 ] module Outer = - let id = System.Guid.Parse "6732ba1d-fae1-4a7e-91ea-d9f0eab6f3c7" - let unapplied = ePackageFn id + let hash = Hash "outer-hash" // TODO: generate real hash + let unapplied = ePackageFn hash let applied = eApply unapplied @@ -616,21 +619,21 @@ module Expressions = module Fact = - let id = System.Guid.Parse "34c0c7bb-2bfa-4dc3-85f9-b965ba3c7880" - let unapplied = ePackageFn id + let hash = Hash "fact-hash" // TODO: generate real hash + let unapplied = ePackageFn hash let appliedWith2 = eApply unapplied [] [ eInt64 2 ] let appliedWith20 = eApply unapplied [] [ eInt64 20 ] module Recursion = - let id = System.Guid.Parse "02036aff-7ae5-4e7c-8f95-f42936044542" - let unapplied = ePackageFn id + let hash = Hash "recursion-hash" // TODO: generate real hash + let unapplied = ePackageFn hash let applied = eApply unapplied [] [ eInt64 30000 ] module MyFnThatTakesALambda = let lambdaID = gid () - let id = System.Guid.Parse "25179761-0259-4d52-a505-d75f0738e45c" - let unapplied = ePackageFn id + let hash = Hash "myfn-hash" // TODO: generate real hash + let unapplied = ePackageFn hash let fullyApplied = let list = eList [ eInt64 1L; eInt64 2L ] @@ -652,8 +655,8 @@ module Expressions = eApply unapplied [] [ eInt64 4L; lambda ] module MyFnThatReturnsUnit = - let id = System.Guid.Parse "6a47744f-7390-48f6-9822-7a76b9ee174b" - let applied = eApply (ePackageFn id) [] [ (eUnit ()) ] + let hash = Hash "myfnthatreturnsunit-hash" // TODO: generate real hash + let applied = eApply (ePackageFn hash) [] [ (eUnit ()) ] module Statements = let simple = eStatement (eUnit ()) (eInt64 1) @@ -680,14 +683,14 @@ let pm : PT.PackageManager = PM.Types.all // values - [ { id = Expressions.Values.Package.MySpecialNumber.id + [ { hash = Expressions.Values.Package.MySpecialNumber.hash name = PT.PackageValue.name "Test" [] "seventeen" description = "TODO" deprecated = PT.NotDeprecated body = PT.EInt64(gid (), 17L) } ] // fns - [ { id = Expressions.Fns.Package.Inner.id + [ { hash = Expressions.Fns.Package.Inner.hash name = PT.PackageFn.name "Test" [] "inner" typeParams = [ "x"; "y" ] parameters = @@ -699,7 +702,7 @@ let pm : PT.PackageManager = description = "TODO" deprecated = PT.NotDeprecated } - { id = Expressions.Fns.Package.Outer.id + { hash = Expressions.Fns.Package.Outer.hash name = PT.PackageFn.name "Test" [] "outer" typeParams = [ "x"; "y" ] parameters = @@ -711,14 +714,14 @@ let pm : PT.PackageManager = eLet (lpVar "ignored") (eApply - (ePackageFn Expressions.Fns.Package.Inner.id) + (ePackageFn Expressions.Fns.Package.Inner.hash) [ PT.TString; PT.TBool ] [ eStr [ strText "hi" ]; eBool true ]) (eVar "x") description = "TODO" deprecated = PT.NotDeprecated } - { id = Expressions.Fns.Package.MyAdd.id + { hash = Expressions.Fns.Package.MyAdd.hash name = PT.PackageFn.name "Test" [] "add" typeParams = [] parameters = @@ -730,7 +733,7 @@ let pm : PT.PackageManager = description = "TODO" deprecated = PT.NotDeprecated } - { id = Expressions.Fns.Package.Fact.id + { hash = Expressions.Fns.Package.Fact.hash name = PT.PackageFn.name "Test" [] "fact" typeParams = [] parameters = @@ -746,7 +749,7 @@ let pm : PT.PackageManager = [] [ eVar "a" (eApply - (ePackageFn Expressions.Fns.Package.Fact.id) + (ePackageFn Expressions.Fns.Package.Fact.hash) [] [ eApply (eBuiltinFn "int64Subtract" 0) [] [ eVar "a"; eInt64 1 ] ]) ] )) @@ -757,7 +760,7 @@ let pm : PT.PackageManager = // let addUpTO (n : Int64) : Int64 = // if n <= 0 then 0 // else 1 + addUpTo (n - 1) - { id = Expressions.Fns.Package.Recursion.id + { hash = Expressions.Fns.Package.Recursion.hash name = PT.PackageFn.name "Test" [] "addUpTo" typeParams = [] parameters = @@ -776,7 +779,7 @@ let pm : PT.PackageManager = [] [ eInt64 1L (eApply - (ePackageFn Expressions.Fns.Package.Recursion.id) + (ePackageFn Expressions.Fns.Package.Recursion.hash) [] [ eApply (eBuiltinFn "int64Subtract" 0) @@ -786,7 +789,7 @@ let pm : PT.PackageManager = description = "TODO" deprecated = PT.NotDeprecated } - { id = Expressions.Fns.Package.MyFnThatTakesALambda.id + { hash = Expressions.Fns.Package.MyFnThatTakesALambda.hash name = PT.PackageFn.name "Test" [] "myFnThatTakesALambda" typeParams = [] parameters = @@ -801,7 +804,7 @@ let pm : PT.PackageManager = description = "TODO" deprecated = PT.NotDeprecated } - { id = Expressions.Fns.Package.Fact.id + { hash = Expressions.Fns.Package.Fact.hash name = PT.PackageFn.name "Test" [] "fact" typeParams = [] parameters = @@ -817,7 +820,7 @@ let pm : PT.PackageManager = [] [ eVar "a" (eApply - (ePackageFn Expressions.Fns.Package.Fact.id) + (ePackageFn Expressions.Fns.Package.Fact.hash) [] [ eApply (eBuiltinFn "int64Subtract" 0) [] [ eVar "a"; eInt64 1 ] ]) ] )) @@ -825,7 +828,7 @@ let pm : PT.PackageManager = description = "TODO" deprecated = PT.NotDeprecated } - { id = Expressions.Fns.Package.MyFnThatReturnsUnit.id + { hash = Expressions.Fns.Package.MyFnThatReturnsUnit.hash name = PT.PackageFn.name "Test" [] "myFnThatReturnsUnit" typeParams = [] parameters = diff --git a/packages/darklang/languageTools/common.dark b/packages/darklang/languageTools/common.dark index 2e0f60d09e..19de4b9d7a 100644 --- a/packages/darklang/languageTools/common.dark +++ b/packages/darklang/languageTools/common.dark @@ -3,6 +3,7 @@ module Darklang.LanguageTools // TODO: should this be UInt64? type ID = Int64 +type Hash = String type TLID = UInt64 diff --git a/packages/darklang/languageTools/packageManager.dark b/packages/darklang/languageTools/packageManager.dark index 779fcb9da6..8cacc2a2d1 100644 --- a/packages/darklang/languageTools/packageManager.dark +++ b/packages/darklang/languageTools/packageManager.dark @@ -7,31 +7,31 @@ module Darklang.LanguageTools.PackageManager module Type = - let find (typeName: String) : Stdlib.Option.Option = + let find (typeName: String) : Stdlib.Option.Option = Builtin.packageManagerFindType typeName let get - (id: Uuid) + (hash: Hash) : Stdlib.Option.Option = - Builtin.packageManagerGetType id + Builtin.packageManagerGetType hash module Value = - let find (name: String) : Stdlib.Option.Option = + let find (name: String) : Stdlib.Option.Option = Builtin.packageManagerFindValue name let get - (id: Uuid) + (hash: Hash) : Stdlib.Option.Option = - Builtin.packageManagerGetValue id + Builtin.packageManagerGetValue hash module Function = - let find (name: String) : Stdlib.Option.Option = + let find (name: String) : Stdlib.Option.Option = Builtin.packageManagerFindFn name - let get (id: Uuid) : Stdlib.Option.Option = - Builtin.packageManagerGetFn id + let get (hash: Hash) : Stdlib.Option.Option = + Builtin.packageManagerGetFn hash module Search = diff --git a/packages/darklang/languageTools/parser/canvas.dark b/packages/darklang/languageTools/parser/canvas.dark index 4951aeca67..a124f52935 100644 --- a/packages/darklang/languageTools/parser/canvas.dark +++ b/packages/darklang/languageTools/parser/canvas.dark @@ -150,34 +150,34 @@ let parse result.types |> Stdlib.List.map (fun t -> { t with - id = + hash = initialParse.types |> Stdlib.List.findFirst (fun original -> original.name == t.name) - |> Stdlib.Option.mapWithDefault t.id (fun original -> - original.id) }) + |> Stdlib.Option.mapWithDefault t.hash (fun original -> + original.hash) }) values = result.values |> Stdlib.List.map (fun v -> { v with - id = + hash = initialParse.values |> Stdlib.List.findFirst (fun original -> original.name == v.name) - |> Stdlib.Option.mapWithDefault v.id (fun original -> - original.id) }) + |> Stdlib.Option.mapWithDefault v.hash (fun original -> + original.hash) }) fns = result.fns |> Stdlib.List.map (fun f -> { f with - id = + hash = initialParse.fns |> Stdlib.List.findFirst (fun original -> original.name == f.name) - |> Stdlib.Option.mapWithDefault f.id (fun original -> - original.id) }) + |> Stdlib.Option.mapWithDefault f.hash (fun original -> + original.hash) }) exprs = result.exprs } diff --git a/packages/darklang/languageTools/parser/cliScript.dark b/packages/darklang/languageTools/parser/cliScript.dark index 10a5effd1f..4f264cf3b2 100644 --- a/packages/darklang/languageTools/parser/cliScript.dark +++ b/packages/darklang/languageTools/parser/cliScript.dark @@ -203,34 +203,34 @@ let parse result.types |> Stdlib.List.map (fun t -> { t with - id = + hash = initialParse.types |> Stdlib.List.findFirst (fun original -> original.name == t.name) - |> Stdlib.Option.mapWithDefault t.id (fun original -> - original.id) }) + |> Stdlib.Option.mapWithDefault t.hash (fun original -> + original.hash) }) values = result.values |> Stdlib.List.map (fun v -> { v with - id = + hash = initialParse.values |> Stdlib.List.findFirst (fun original -> original.name == v.name) - |> Stdlib.Option.mapWithDefault v.id (fun original -> - original.id) }) + |> Stdlib.Option.mapWithDefault v.hash (fun original -> + original.hash) }) fns = result.fns |> Stdlib.List.map (fun f -> { f with - id = + hash = initialParse.fns |> Stdlib.List.findFirst (fun original -> original.name == f.name) - |> Stdlib.Option.mapWithDefault f.id (fun original -> - original.id) }) + |> Stdlib.Option.mapWithDefault f.hash (fun original -> + original.hash) }) submodules = result.submodules @@ -240,43 +240,43 @@ let parse submodule.types |> Stdlib.List.map (fun t -> { t with - id = + hash = initialParse.submodules |> Stdlib.List.map (fun m -> m.types) |> Stdlib.List.flatten |> Stdlib.List.findFirst (fun original -> original.name == t.name) |> Stdlib.Option.mapWithDefault - t.id - (fun original -> original.id) }) + t.hash + (fun original -> original.hash) }) values = submodule.values |> Stdlib.List.map (fun v -> { v with - id = + hash = initialParse.submodules |> Stdlib.List.map (fun m -> m.values) |> Stdlib.List.flatten |> Stdlib.List.findFirst (fun original -> original.name == v.name) |> Stdlib.Option.mapWithDefault - v.id - (fun original -> original.id) }) + v.hash + (fun original -> original.hash) }) fns = submodule.fns |> Stdlib.List.map (fun f -> { f with - id = + hash = initialParse.submodules |> Stdlib.List.map (fun m -> m.fns) |> Stdlib.List.flatten |> Stdlib.List.findFirst (fun original -> original.name == f.name) |> Stdlib.Option.mapWithDefault - f.id - (fun original -> original.id) }) }) + f.hash + (fun original -> original.hash) }) }) exprs = result.exprs } diff --git a/packages/darklang/languageTools/programTypes.dark b/packages/darklang/languageTools/programTypes.dark index 3fbb961fbd..42c6ad7751 100644 --- a/packages/darklang/languageTools/programTypes.dark +++ b/packages/darklang/languageTools/programTypes.dark @@ -3,12 +3,12 @@ module Darklang.LanguageTools.ProgramTypes /// Used to name where type/function/etc lives, eg a User module, or a Package module. module FQTypeName = - type Package = Uuid + type Package = Hash type FQTypeName = Package of Package module FQValueName = type Builtin = { name: String; version: Int32 } - type Package = Uuid + type Package = Hash type FQValueName = | Builtin of Builtin @@ -16,7 +16,7 @@ module FQValueName = module FQFnName = type Builtin = { name: String; version: Int32 } - type Package = Uuid + type Package = Hash type FQFnName = | Builtin of Builtin @@ -340,7 +340,7 @@ module PackageType = name: String } type PackageType = - { id: Uuid + { hash: Hash name: Name declaration: TypeDeclaration.TypeDeclaration description: String @@ -364,7 +364,7 @@ module PackageValue = name: String } type PackageValue = - { id: Uuid + { hash: Hash name: Name body: Expr description: String @@ -393,7 +393,7 @@ module PackageFn = description: String } type PackageFn = - { id: Uuid + { hash: Hash name: Name body: Expr typeParams: List @@ -498,7 +498,7 @@ module PackageManager = let typeName = PackageType.nameToString t.name typeName == name) with - | Some t -> Stdlib.Option.Option.Some t.id + | Some t -> Stdlib.Option.Option.Some t.hash | None -> // CLEANUP: use `pm.findType name` directly once the parser/interpreter is fixed let findType = pm.findType @@ -511,7 +511,7 @@ module PackageManager = let valueName = PackageValue.nameToString v.name valueName == name) with - | Some v -> Stdlib.Option.Option.Some v.id + | Some v -> Stdlib.Option.Option.Some v.hash | None -> let findValue = pm.findValue findValue name @@ -523,32 +523,32 @@ module PackageManager = let fnName = PackageFn.nameToString f.name fnName == name) with - | Some f -> Stdlib.Option.Option.Some f.id + | Some f -> Stdlib.Option.Option.Some f.hash | None -> let findFn = pm.findFn findFn name getType = - fun id -> - match types |> Stdlib.List.findFirst (fun t -> t.id == id) with + fun hash -> + match types |> Stdlib.List.findFirst (fun t -> t.hash == hash) with | Some t -> Stdlib.Option.Option.Some t | None -> let getType = pm.getType - getType id + getType hash getValue = - fun id -> - match values |> Stdlib.List.findFirst (fun v -> v.id == id) with + fun hash -> + match values |> Stdlib.List.findFirst (fun v -> v.hash == hash) with | Some v -> Stdlib.Option.Option.Some v | None -> let getValue = pm.getValue - getValue id + getValue hash getFn = - fun id -> - match fns |> Stdlib.List.findFirst (fun f -> f.id == id) with + fun hash -> + match fns |> Stdlib.List.findFirst (fun f -> f.hash == hash) with | Some f -> Stdlib.Option.Option.Some f | None -> let getFn = pm.getFn - getFn id + getFn hash search = pm.search } diff --git a/packages/darklang/languageTools/runtimeTypes.dark b/packages/darklang/languageTools/runtimeTypes.dark index 38f26339ae..04edb1f9d9 100644 --- a/packages/darklang/languageTools/runtimeTypes.dark +++ b/packages/darklang/languageTools/runtimeTypes.dark @@ -6,12 +6,12 @@ type Option = Stdlib.Option.Option // module FQTypeName = - type Package = Uuid + type Package = Hash type FQTypeName = Package of Package module FQValueName = type Builtin = { name: String; version: Int32 } - type Package = Uuid + type Package = Hash type FQValueName = | Builtin of Builtin @@ -19,7 +19,7 @@ module FQValueName = module FQFnName = type Builtin = { name: String; version: Int32 } - type Package = Uuid + type Package = Hash type FQFnName = | Builtin of Builtin @@ -127,6 +127,10 @@ type MatchPattern = | MPVariable of String | MPOr of List +type StringSegment = + | StringText of String + | StringInterpolation of reg: Register + type Register = Int32 type DvalMap = Dict diff --git a/packages/darklang/languageTools/writtenTypesToProgramTypes.dark b/packages/darklang/languageTools/writtenTypesToProgramTypes.dark index ac605a3980..b093b12b00 100644 --- a/packages/darklang/languageTools/writtenTypesToProgramTypes.dark +++ b/packages/darklang/languageTools/writtenTypesToProgramTypes.dark @@ -12,6 +12,11 @@ let gid () : Int64 = let gtlid () : UInt64 = Stdlib.UInt64.random 0UL 9223372036854775807UL +let ghash () : Hash = + // Generate a random hash for testing + let randomInt = Stdlib.Int64.random 0L 922337203685477580L + Stdlib.Int64.toString randomInt + module Identifiers = module Type = @@ -712,10 +717,10 @@ module Expr = | Ok(Value v) -> (ProgramTypes.Expr.EValue(gid (), v), unresolvedNames) | Ok(Fn f) -> (ProgramTypes.Expr.EFnName(gid (), f), unresolvedNames) - | Error _ -> - // CLEANUP: Rethink this solution. It was added to allow failure during the first pass of parsing, where names aren't yet resolved - (ProgramTypes.Expr.EVariable (gid ()) id.valueOrFn.name, - unresolvedNames) + | Error valueResolution -> + // When both value and function resolution fail, keep it as EValue with Error + // to preserve the full qualified name for pretty-printing + (ProgramTypes.Expr.EValue(gid (), valueResolution), unresolvedNames) | ERecordFieldAccess(_, expr, (_, fieldName), _) -> let (expr, unresolvedNames) = toPT onMissing pm owner currentModule context expr @@ -1470,8 +1475,8 @@ module TypeDeclaration = let (declaration, unresolvedNames) = toPT onMissing pm owner modules d (ProgramTypes.PackageType.PackageType - // TODO: when relevant, use PackageIDs defined in F# land - { id = Stdlib.Uuid.generate () + // TODO: when relevant, use PackageHashes defined in F# land + { hash = ghash () name = ProgramTypes.PackageType.Name { owner = owner @@ -1496,7 +1501,7 @@ module ValueDeclaration = let (body, unresolvedNames) = Expr.toPT onMissing pm owner modules (Context { currentFnName = Stdlib.Option.Option.None; argMap = Stdlib.Dict.empty }) d.body (ProgramTypes.PackageValue.PackageValue - { id = Stdlib.Uuid.generate () + { hash = ghash () name = ProgramTypes.PackageValue.Name { owner = owner @@ -1576,7 +1581,7 @@ module FunctionDeclaration = (ProgramTypes.PackageFn.PackageFn // TODO: when relevant, use PacakgeIDs defined in F# land - { id = Stdlib.Uuid.generate () + { hash = ghash () name = ProgramTypes.PackageFn.Name { owner = owner diff --git a/packages/darklang/prettyPrinter/programTypes.dark b/packages/darklang/prettyPrinter/programTypes.dark index f5cb303a22..4702b2d623 100644 --- a/packages/darklang/prettyPrinter/programTypes.dark +++ b/packages/darklang/prettyPrinter/programTypes.dark @@ -79,18 +79,18 @@ let packageName module FQTypeName = module Package = let atDefinition - (id: LanguageTools.ProgramTypes.FQTypeName.Package) + (hash: LanguageTools.ProgramTypes.FQTypeName.Package) : String = - match LanguageTools.PackageManager.Type.get id with + match LanguageTools.PackageManager.Type.get hash with | Some p -> p.name.name - | None -> Stdlib.Uuid.toString id + | None -> hash let fullForReference - (id: LanguageTools.ProgramTypes.FQTypeName.Package) + (hash: LanguageTools.ProgramTypes.FQTypeName.Package) : String = - match LanguageTools.PackageManager.Type.get id with + match LanguageTools.PackageManager.Type.get hash with | Some p -> packageName p.name.owner p.name.modules p.name.name - | None -> Stdlib.Uuid.toString id + | None -> hash let atDefinition @@ -125,18 +125,18 @@ module FQValueName = module Package = let atDefinition - (id: LanguageTools.ProgramTypes.FQValueName.Package) + (hash: LanguageTools.ProgramTypes.FQValueName.Package) : String = - match LanguageTools.PackageManager.Value.get id with + match LanguageTools.PackageManager.Value.get hash with | Some p -> p.name.name - | None -> Stdlib.Uuid.toString id + | None -> hash let fullForReference - (id: LanguageTools.ProgramTypes.FQValueName.Package) + (hash: LanguageTools.ProgramTypes.FQValueName.Package) : String = - match LanguageTools.PackageManager.Value.get id with + match LanguageTools.PackageManager.Value.get hash with | Some p -> packageName p.name.owner p.name.modules p.name.name - | None -> Stdlib.Uuid.toString id + | None -> hash @@ -147,7 +147,7 @@ module FQValueName = | Builtin b -> PrettyPrinter.ProgramTypes.FQValueName.Builtin.fullForReference b | Package p -> - PrettyPrinter.ProgramTypes.FQValueName.Package.atDefinition p + PrettyPrinter.ProgramTypes.FQValueName.Package.fullForReference p let fullForReference (t: LanguageTools.ProgramTypes.FQValueName.FQValueName) @@ -177,18 +177,18 @@ module FQFnName = module Package = let atDefinition - (id: LanguageTools.ProgramTypes.FQFnName.Package) + (hash: LanguageTools.ProgramTypes.FQFnName.Package) : String = - match LanguageTools.PackageManager.Function.get id with + match LanguageTools.PackageManager.Function.get hash with | Some p -> p.name.name - | None -> Stdlib.Uuid.toString id + | None -> hash let fullForReference - (id: LanguageTools.ProgramTypes.FQFnName.Package) + (hash: LanguageTools.ProgramTypes.FQFnName.Package) : String = - match LanguageTools.PackageManager.Function.get id with + match LanguageTools.PackageManager.Function.get hash with | Some p -> packageName p.name.owner p.name.modules p.name.name - | None -> Stdlib.Uuid.toString id + | None -> hash let atDefinition (t: LanguageTools.ProgramTypes.FQFnName.FQFnName) : String = diff --git a/packages/darklang/prettyPrinter/runtimeTypes.dark b/packages/darklang/prettyPrinter/runtimeTypes.dark index f6c40e2e39..68573cfa28 100644 --- a/packages/darklang/prettyPrinter/runtimeTypes.dark +++ b/packages/darklang/prettyPrinter/runtimeTypes.dark @@ -34,10 +34,10 @@ let packageName module FQTypeName = - let package (id: LanguageTools.RuntimeTypes.FQTypeName.Package) : String = - match LanguageTools.PackageManager.Type.get id with + let package (hash: LanguageTools.RuntimeTypes.FQTypeName.Package) : String = + match LanguageTools.PackageManager.Type.get hash with | Some p -> packageName p.name.owner p.name.modules p.name.name - | None -> Stdlib.Uuid.toString id + | None -> hash // TODO rename to fqtypeName? let typeName (t: LanguageTools.RuntimeTypes.FQTypeName.FQTypeName) : String = @@ -58,11 +58,11 @@ module FQValueName = $"{namePart}{versionPart}" let package - (id: LanguageTools.RuntimeTypes.FQValueName.Package) + (hash: LanguageTools.RuntimeTypes.FQValueName.Package) : String = - match LanguageTools.PackageManager.Value.get id with + match LanguageTools.PackageManager.Value.get hash with | Some p -> packageName p.name.owner p.name.modules p.name.name - | None -> Stdlib.Uuid.toString id + | None -> hash // TODO rename to fqvalueName? let valueName @@ -85,10 +85,10 @@ module FQFnName = $"Builtin.{namePart}{versionPart}" - let package (id: LanguageTools.RuntimeTypes.FQFnName.Package) : String = - match LanguageTools.PackageManager.Function.get id with + let package (hash: LanguageTools.RuntimeTypes.FQFnName.Package) : String = + match LanguageTools.PackageManager.Function.get hash with | Some p -> packageName p.name.owner p.name.modules p.name.name - | None -> Stdlib.Uuid.toString id + | None -> hash // TODO rename to fqfnName?